Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Edycja rekordów...
Forum PHP.pl > Forum > Przedszkole
mk89
Witajcie guitar.gif
Chciałbym edytować rekordy z bazy danych w ten sposób:

Rekord (w input type="text") | Aktualizuj (Submit)

Czyli:

  1. <?php
  2. echo '<form method="post" action="edycjaa.php">';
  3. //...
  4. echo '<input type="text" name="nazwa" value="'.$myrow["nazwa"].'">';
  5. echo '&nbsp;&nbsp;<input type="Submit" name="aktualizuj" value="Aktualizuj">';
  6. //...
  7. echo '</form>';
  8. ?>

w edycjaa.php mam:
  1. <?php
  2. $team=$_POST['nazwa'];
  3. $punkty=$_POST['pkt'];
  4. if(empty($team) || empty($punkty))
  5. {
  6. echo 'Rekord zaktualizowany';
  7. }
  8. else
  9. {
  10. $db = mysql_connect("localhost", "root","");
  11. mysql_select_db("team",$db);
  12. $sql = "UPDATE tabela SET nazwa='$nazwa', pkt='$pkt'";
  13. $result = mysql_query($sql);
  14. }
  15. ?>


I teraz nie mam pojęcia dlaczego jak nacisnę Aktualizuj, to skrypt zwraca to co w echo czyli 'Rekord zaktualizowany'.

//W edycjaa.php jest jeszcze coś takiego jak "pkt", tez mam zamiar zrobić edycje do tego, ale najpierw musze skombinować żeby jedno działało.

Pozdrawiam thumbsupsmileyanim.gif
strife
Jeśli wysyłasz formularz w takiej postaci to $_POST['pkt'] zawsze będzie miała wartość NULL, bo nie jest wogóle wysyłana. A twoj warunek mówi jeśli zmienna 'nazwa' albo 'pkt' będzie pusta, zmień to na i czyli && bądź AND bo w takim przypadku zawsze gdy jedno pole zostanie puste wywali to.

Pozdrawiam!
mk89
Cytat(scarface @ 2005-08-17 20:46:02)
Jeśli wysyłasz formularz w takiej postaci to $_POST['pkt'] zawsze będzie miała wartość NULL, bo nie jest wogóle wysyłana. A twoj warunek mówi jeśli zmienna 'nazwa' albo 'pkt' będzie pusta, zmień to na i czyli && bądź AND bo w takim przypadku zawsze gdy jedno pole zostanie puste wywali to.

Pozdrawiam!

lol haha.gif

Więc usunolem funkcje sprawdzania czy coś zostało wpisane i mam w kodzie:

  1. <?php
  2. $team=$_POST['nazwa'];
  3. $punkty=$_POST['pkt'];
  4. $db = mysql_connect("localhost", "root","");
  5. mysql_select_db("team",$db);
  6. $sql = "UPDATE tabela SET nazwa='$nazwa', pkt='$pkt'";
  7. $result = mysql_query($sql);
  8. ?>


i po daniu na Aktualizuj, rekord zmieniły sie na jeden z 4 co były [każdy był inny] i zawartość pkt zostały wyzerowana.

Wiec co tu nie tak?
strife
lol ?

Zmieniły Ci się dla wszystkich bo nie widze w Twoim zapytaniu WHERE.. Czyli nie zdefiniowałeś który rekord ma być UPDATE'owany.
mk89
Cytat(scarface @ 2005-08-17 21:00:49)
lol ?

Zmieniły Ci się dla wszystkich bo nie widze w Twoim zapytaniu WHERE.. Czyli nie zdefiniowałeś który rekord ma być UPDATE'owany.

ohmy.gif Ja już się pogubiłem, mam:

  1. <?php
  2. UPDATE tabela SET nazwa='$nazwa', pkt='$pkt' WHERE nazwa='$nazwa', pkt='$pkt'
  3. ?>


I dalej nie działa.


Dodam że z bazami danych mam styczność od wczoraj rolleyes.gif.


Pozdrawiam
nospor
musisz mieć coś, co jednoznaczie identyfikuje rekord. Zazwyczaj jest to pole ID. CZyli zapytanie tak powinno wyglądać:
  1. <?php
  2.  
  3. $sql="UPDATE tabela SET nazwa='$nazwa', pkt='$pkt' WHERE ID=$id";
  4.  
  5. ?>
Tylko aby to zadziało musialbyś miec podane to ID, czyli wysylać je razem z nazwa porzez formualrz. Pytanie brzmi czy masz takie pole.

Moze u ciebie tym polem jest 'nazwa', ale widzę w formularzu, że może być ono zmieniane, więc odpada
mk89
Cytat(nospor @ 2005-08-18 07:45:40)
musisz mieć coś, co jednoznaczie identyfikuje rekord. Zazwyczaj jest to pole ID. CZyli zapytanie tak powinno wyglądać:
  1. <?php
  2.  
  3. $sql="UPDATE tabela SET nazwa='$nazwa', pkt='$pkt' WHERE ID=$id";
  4.  
  5. ?>
Tylko aby to zadziało musialbyś miec podane to ID, czyli wysylać je razem z nazwa porzez formualrz. Pytanie brzmi czy masz takie pole.

Moze u ciebie tym polem jest 'nazwa', ale widzę w formularzu, że może być ono zmieniane, więc odpada

Hmmm właśnie nie mam pola ID, mam tylko "Nazwa" i "Pkt".

Więc musze do tego stworzyć tabele ID i przypisać kazdej z wartosci wlasny ID? snitch.gif
nospor
robisz pole id typu int auto_increment jako primary key i samo się ponadaje.
Ale pytanie czy potrzeba. Te pole nazwa to ono może się zmieniać (z forma wynika że tak), czy jednak będie stałe (bez zmian). Jesli to pole bedzie bez zmian to ono może identyfikować rekord (musisz wtedy w formie zmienic input z text na hidden, aby gostek nie mogł modyfikować).

Aczkolwiek bardziej przyjaznym dla otoczenia jest id. (spór się na ten temat kiedyś toczył - wygrało id biggrin.gif )
mk89
Dobra, to z ID działa jak należy ale edycja nie działa.

Więc to
  1. <?php
  2. $sql="UPDATE tabela SET nazwa='$nazwa', pkt='$pkt' WHERE ID=$id";
  3.  
  4. ?>

niezabardzo działa...

Pozdrawiam
nospor
OK. A pytanie za 100 pkt. A dodaleś to id do formualrza?
POkaz jeszcze raz cały nowy kod, strukture tabeli (dla pewności) i pogadamy.
Albo najlepiej odezwij się na gg i dopracuejmy szczegoly

edit: (dla potomnych)
po ciezkich i mozolnych konweracjach (przez te konwersacje z pracy mnie wyrzucą biggrin.gif ), doszliśmy do porozumienia.
Oto efekt:
edycja1.php
  1. <?php
  2.  
  3. $db = mysql_connect("localhost", "root", "");
  4. mysql_select_db("team",$db);
  5. $result = mysql_query("SELECT * FROM tabela ORDER BY pkt DESC",$db);
  6. echo '<form method="post" action="edycjaa.php">';
  7. while ($myrow = mysql_fetch_array($result))
  8. {
  9. echo '<input type="text" name="nazwa[]" value="'.$myrow["nazwa"].'">&nbsp;&nbsp;';
  10. echo '<input type="text" name="pkt[]" SIZE="1" value="'.$myrow["pkt"].'">';
  11. echo '<input type="hidden" name="id[]" value="'.$myrow["id"].'">';
  12. echo '&nbsp;&nbsp;<input type="Submit" name="aktualizuj" value="Edit">';
  13. echo '<br /> <br />';
  14. }
  15. echo '</form>';
  16.  
  17. ?>


edycjaa.php:
  1. <?php
  2. $db = mysql_connect("localhost", "root","");
  3. mysql_select_db("team",$db);
  4. foreach ($_POST['id'] as $ind => $id)
  5. {
  6. $nazwa=$_POST['nazwa'][$ind];
  7. $pkt=$_POST['pkt'][$ind];
  8. $sql = "UPDATE tabela SET nazwa='$nazwa', pkt='$pkt' where id=$id ";
  9. $result = mysql_query($sql);
  10. }
  11. ?>


dodano pole id.
mk89
nospor: Dzięki za pomoc!


Pozdrawiam wszystkich :]
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.