Edycja rekordów w MySQL

Języki, których efekty są wykonywane po stronie serwera. PHP, ASP czy CGI w połączeniu z bazami danych SQL dają niezwykłe możliwości budowy i zarządzania stron WWW. Tu zadajemy pytania oraz demonstrujemy kod, z którym mamy problem.
Manfred
Posty: 7
Rejestracja: śr sie 20, 2008 11:39 am

Edycja rekordów w MySQL

Post autor: Manfred »

Od tygodnia zacząłem bawić się z PHP. Robię swoją stronę, mam już panel do rejestracji, logowania itp. a chciałbym jeszcze zrobić stronę na której mógłbym edytować wcześniej zapisane rekordy podczas rejestracji w bazie danych np. mój nick, imię lub nazwisko.
Zrobiłem coś takiego sam jednak gdy zmieniałem nazwę swojego nick'u zmieniały się również wszystkie nazwy nicków innych użytkowników : /
Chciałbym żeby zmieniało nazwę nicku tylko tej osoby która jest właśnie zalogowana a nie również innych userów znajdujących się w bazie danych.
Nie wiem w ogóle jak coś takiego ma wyglądać. Dlatego czekam na jakieś wskazówki bądź przykłady takich skryptów : )

Pozdrawiam
SzamanGN
Nowy
Nowy
Posty: 92
Rejestracja: pn lis 27, 2006 3:28 pm
Kontakt:

Re: Edycja rekordów w MySQL

Post autor: SzamanGN »

Pokaż fragment kodu SQL za pomocą którego zmieniłeś nick, bo prawdopodobnie nie dodałeś warunku, dla którego nicka ma być zmieniona wartość.
Manfred
Posty: 7
Rejestracja: śr sie 20, 2008 11:39 am

Re: Edycja rekordów w MySQL

Post autor: Manfred »

Dokładnie miałeś racje na tym polegał błąd miałem złe zapytanie do bazy. Poradziłem sobie z nim sam co częściowo rozwiązało mój problem:

Tak wygląda poprawiony skrypt:

edit_user.html

Kod: Zaznacz cały

<form action="edit_user.php" method="post">

Zmień swój nick na: <input type="text" name="edit_nick"><br>
Stary nick: <input type="text" name="old_nick"><br>
<input type="submit" value="Zmień Nick">
</form>
edit_user.php
[php]
<?
if (!$edit_nick || !$old_nick)

{
print "Musisz wypełnić wszystkie pola";
exit;
}


@$db = mysql_pconnect("localhost", "root", "krasnal");
if (!$db)
{
print "Nie można nawiązać połączenia z bazą danych";
exit;
}

mysql_select_db("baza");

$query = "update uzytkownicy set user='$edit_nick' where user='$old_nick'";
$result = @mysql_query($query);

print "Twój nick $old_nick został zmieniony na $edit_nick !";


?>
[/php]

Jednak jak widzisz muszę podać w formularzu swój stary nick, a chciałbym zrobić tak żeby tę zmienną $old_nick wyciagało mi jakoś z tej sesji czyli z tego jako kto jestem zalogowany ;/

Wpadłem na pomysł aby zrobić to tak:
Do formularza w którym wpisuje dane do logowania dodałem kolejny plik który ma przetwarzać te dane czyli edit_user.php tak aby zdobyć zmienną $login którą potem wykorzystam w edit_user.php. Jednak to nie działa ;/

logowanie.html

Kod: Zaznacz cały

<form method="post" action="sprawdz.php">
<form method="post" action="edit_user.php">

Login: <input type="text" name="login" />
Hasło: <input type="password" name="password" />
<input type="submit" value="zaloguj sie" />
</form>
Zmodyfikowany edit_user.php
[php]<?
if (!$edit_nick)

{
print "Musisz wypełnić wszystkie pola";
exit;
}


@$db = mysql_pconnect("localhost", "root", "krasnal");
if (!$db)
{
print "Nie można nawiązać połączenia z bazą danych";
exit;
}

mysql_select_db("baza");


$query = "update uzytkownicy set user='$edit_nick' where user='$login'";
$result = @mysql_query($query);

print "Twój nick $login został zmieniony na $edit_nick !";


?>
[/php]

Czy błąd jest w kodzie czy po prostu tak się nie da tego zrobić ?
gorylek
Zaczyna działać
Zaczyna działać
Posty: 427
Rejestracja: śr gru 19, 2007 7:29 pm

Re: Edycja rekordów w MySQL

Post autor: gorylek »

Kod: Zaznacz cały

$query = "update uzytkownicy set user='".$edit_nick."' where user='".$login."'";
Manfred
Posty: 7
Rejestracja: śr sie 20, 2008 11:39 am

Re: Edycja rekordów w MySQL

Post autor: Manfred »

Niestety cięgle nie rozwiązuje to problemu : /
Problem tkwi w tym ze ta wartość "login" z formularza logowania nie dociera do pliku "edit_user.php" Błędu dopatrywał bym się właśnie w pliku logowanie.html

Kod: Zaznacz cały

<form method="post" action="sprawdz.php">
<form method="post" action="edit_user.php">
Czy aby na pewno można to tak zapisać ?
gorylek
Zaczyna działać
Zaczyna działać
Posty: 427
Rejestracja: śr gru 19, 2007 7:29 pm

Re: Edycja rekordów w MySQL

Post autor: gorylek »

Ty tu w ogóle cuda potworzyłeś muszę Ci powiedzieć.

Kod: Zaznacz cały

<?
if (!$edit_nick || !$old_nick)

 {
    print "Musisz wypełnić wszystkie pola";
    exit;
 }

 
@$db = mysql_pconnect("localhost", "root", "krasnal");
if (!$db)  
    {  
    print "Nie można nawiązać połączenia z bazą danych";
    exit;
    }

mysql_select_db("baza");

$query = "update uzytkownicy set user='$edit_nick' where user='$old_nick'";
$result = @mysql_query($query);
   
print "Twój nick $old_nick został zmieniony na $edit_nick !"; 


?>
Skąd Ci się wzięły zmienne $edit_nick, $old_nick. Gdzie jest odczytanie wartości pól z formularza poprzez tabelę $_POST ? Sugerował bym również zainteresować się biblioteką mySQLi dla PHP ale to w ramach pracy dodatkowej w wolnej chwili. No i kto pozwala na zmianę nicka na portalu/forum ? Aktualnie połowa skryptu jest do przepisania. Wartości formularza masz dostępne w tabeli $_POST['index'] gdzie index to nazwa pola formularza.
Manfred
Posty: 7
Rejestracja: śr sie 20, 2008 11:39 am

Re: Edycja rekordów w MySQL

Post autor: Manfred »

To nie są żadne cuda : P

Zmienna $edit_nick i $old_nick nie wzięła się z kosmosu tylko z pierwszej wersji formularza w której musiałem wpisać nowy nick i stary (żeby wiedziało co na co zamienić)

Kod: Zaznacz cały

<form action="edit_user.php" method="post">

Zmień swój nick na: <input type="text" name="edit_nick"><br>
Stary nick: <input type="text" name="old_nick"><br>
<input type="submit" value="Zmień Nick">
</form>
Potem dopiero wpadłem na pomysł że te $old_nick można wyciągnąć z formularza do logowania : /

Jeśli chodzi o odczyt pól z formularza poprzez $_POST chodzi Ci np. o coś takiego
[php]<?php
$login = $_POST['login'];
$edit_nick = $_POST['edit_nick'];
?>[/php]

Kto pozwala na zmiane nicka ? Niektórzy pozwalają ja podałem tylko taki przykład żeby poznać zasade jak to się robi, aby móc to wykorzystać w innych sytuacjach.

Sorry że tak męcze, może i zadaję głupie pytania, ale każdy chyba miał takie początki : )
gorylek
Zaczyna działać
Zaczyna działać
Posty: 427
Rejestracja: śr gru 19, 2007 7:29 pm

Re: Edycja rekordów w MySQL

Post autor: gorylek »

To są cuda bo chyba register_globals masz na serwerze włączone i dlatego Ci to w ogóle mogło gdzieś chodzić. A przypisanie z $_POST wygląda tak jak napisałeś. Pamiętaj żeby jako index umieścić nazwę pół formularza w których jest treść. Zawsze jak czegoś nie wiesz to za pomocą echo czy tam print wyświetl sobie zapytanie całe które kierujesz do bazy i zobacz czy byków nie ma.
Manfred
Posty: 7
Rejestracja: śr sie 20, 2008 11:39 am

Re: Edycja rekordów w MySQL

Post autor: Manfred »

OK dzięki za wszystkie porady i wskazówki.
Poradziłem sobie z tym wszystko działa tak jak powinno : )
ODPOWIEDZ