Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Edycja rekordów...
mk89
post
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 22.07.2005

Ostrzeżenie: (0%)
-----


Witajcie (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/thumbsupsmileyanim.gif)
Go to the top of the page
+Quote Post
strife
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

Ostrzeżenie: (0%)
-----


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!
Go to the top of the page
+Quote Post
mk89
post
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 22.07.2005

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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?
Go to the top of the page
+Quote Post
strife
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
mk89
post
Post #5





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 22.07.2005

Ostrzeżenie: (0%)
-----


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.

(IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/rolleyes.gif) .


Pozdrawiam
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
mk89
post
Post #7





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 22.07.2005

Ostrzeżenie: (0%)
-----


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? (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) )
Go to the top of the page
+Quote Post
mk89
post
Post #9





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 22.07.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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ą (IMG:http://forum.php.pl/style_emoticons/default/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.
Go to the top of the page
+Quote Post
mk89
post
Post #11





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 22.07.2005

Ostrzeżenie: (0%)
-----


nospor: Dzięki za pomoc!


Pozdrawiam wszystkich :]
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 01:23