Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]UPDATE - nie aktualizuje a zastępuje
Forum PHP.pl > Forum > Przedszkole
nieznajomy
Witam
Mam problem dotyczący UPDATE. Mianowicie, chodzi o to, że przy wysyłaniu danych przez formularz nie są one dodawane do istniejących już w bazie, tylko zastępują wcześniej istniejące.

Od razu mówię, że kod odkopałem z najciemniejszych czeluści swojego dysku twardego i nie do końca wiem, dlaczego wygląda jak wygląda. Kiedyś coś tam próbowałem z PHP, ale odpuściłem i nadal jestem na tym samym etapie co wtedy smile.gif A tak wygląda kod:
  1. $sql = "SELECT imie, nazwisko, min, c2, w2, c3, w3, c1, w1, zba, zbo, zbs, ast, prz, blk, str, fl, pkt, eval
  2. FROM kartofelki WHERE id='$id'";
  3.  
  4. mysql_select_db('nazwa_bazy');
  5. $retval = mysql_query( $sql, $conn );
  6. if(! $retval )
  7. {
  8. die('Nie mozna pobrac danych: ' . mysql_error());
  9. }
  10.  
  11.  
  12. $id=$_POST['id'];
  13. $min=$_POST['min'];
  14. $c2=$_POST['c2'];
  15. $w2=$_POST['w2'];
  16. $c3=$_POST['c3'];
  17. $w3=$_POST['w3'];
  18. $c1=$_POST['c1'];
  19. $w1=$_POST['w1'];
  20. $zba=$_POST['zba'];
  21. $zbo=$_POST['zbo'];
  22. $zbs=$_POST['zbs'];
  23. $ast=$_POST['ast'];
  24. $prz=$_POST['prz'];
  25. $blk=$_POST['blk'];
  26. $str=$_POST['str'];
  27. $fl=$_POST['fl'];
  28. $pkt=$_POST['pkt'];
  29. $eval=$_POST['eval'];
  30.  
  31. $stat="SELECT * FROM kartofelki WHERE id=$id LIMIT 1";
  32.  
  33. $_SESSION['kartofelki']=mysql_result(mysql_query($stat),0);
  34.  
  35. $stat="UPDATE kartofelki SET id='$id' , min='$min' , c2='$c2' , w2='$w2' , c3='$c3' , w3='$w3' , c1='$c1' , w1='$w1' , zba='$zba' , zbo='$zbo' , zbs='$zbs' , ast='$ast' , prz='$prz' , blk='$blk' , str='$str' , fl='$fl' , pkt='$pkt' , eval='$eval' WHERE id=$id";
  36. mysql_query($stat);
  37.  
  38. $query = "UPDATE `kartofelki` (min,c2,w2,c3,w3,c1,w1,zba,zbo,zbs,ast,prz,blk,str,fl,pkt,eval) VALUES ('$min','$c2','$w2','$c3','$w3','$c1','$w1','$zba','$zbo','$zbs','$ast','$prz','$blk','$str','$fl','$pkt','$eval') WHERE id=$id";
  39. $result = @mysql_query($query);
  40. if ($result){
  41. $message .= 'Twoje dane zostały dodane do bazy';
  42. }else{
  43. $message .= 'Wystąpił błąd. Przepraszamy za utrudnienia<br />';
  44. }
tehaha
Cytat(nieznajomy @ 16.01.2011, 15:10:07 ) *
Mianowicie, chodzi o to, że przy wysyłaniu danych przez formularz nie są one dodawane do istniejących już w bazie, tylko zastępują wcześniej istniejące.

to zajrzyj do manuala mysql i zobacz co robi UPDATE, albo nawet prościej zobacz w słowniku pol-ang słowo update
kill15
UPDATE jest do aktualizacji

Natomiast Insert into jest do dodawania
nieznajomy
Ok, próbowałem z INSERT INTO, ale teraz już nic się nie dzieje. Ani się nie zamieniają dane ani nie aktualizują.
kill15
Rób to tak:

  1. $stat="INSERT INTO kartofelki (id,min,c2 itd) VALUES('$id','$min','$c2' itd)";
  2.  
  3. mysql_query($stat);


Ale co do id to raczej AUTO_INCREMENT


PS: tylko nie zapomnij wyrzucić z nawiasów itd smile.gif
nieznajomy
OK, teraz mam coś takiego, jak poniżej, ale niestety dalej to nie działa. Wydaje mi się, że mam tak jak napisałeś, ale może gdzieś indziej mam błąd.

  1. <?php
  2. $sql = "SELECT imie, nazwisko, min, c2, w2, c3, w3, c1, w1, zba, zbo, zbs, ast, prz, blk, str, fl, pkt, eval
  3. FROM kartofelki WHERE id='$id'";
  4.  
  5.  
  6. mysql_select_db('baza_danych');
  7. $retval = mysql_query( $sql, $conn );
  8. if(! $retval )
  9. {
  10. die('Nie mozna pobrac danych: ' . mysql_error());
  11. }
  12.  
  13.  
  14. $id=$_POST['id'];
  15. $min=$_POST['min'];
  16. $c2=$_POST['c2'];
  17. $w2=$_POST['w2'];
  18. $c3=$_POST['c3'];
  19. $w3=$_POST['w3'];
  20. $c1=$_POST['c1'];
  21. $w1=$_POST['w1'];
  22. $zba=$_POST['zba'];
  23. $zbo=$_POST['zbo'];
  24. $zbs=$_POST['zbs'];
  25. $ast=$_POST['ast'];
  26. $prz=$_POST['prz'];
  27. $blk=$_POST['blk'];
  28. $str=$_POST['str'];
  29. $fl=$_POST['fl'];
  30. $pkt=$_POST['pkt'];
  31. $eval=$_POST['eval'];
  32.  
  33. $stat="SELECT * FROM kartofelki WHERE id=$id LIMIT 1";
  34.  
  35. $stat="INSERT INTO kartofelki (min, c2, w2, c3, w3, c1, w1, zba, zbo, zbs, ast, prz, blk, str, fl, pkt, eval) VALUES ('$min', '$c2', '$w2', '$c3', '$w3', '$c1', '$w1', '$zba', '$zbo', '$zbs', '$ast', '$prz', '$blk', '$str', '$fl', '$pkt', '$eval') WHERE id=$id";
  36. mysql_query($stat);
  37.  
  38.  
  39. ?>
kill15
  1. $stat="INSERT INTO kartofelki (min, c2, w2, c3, w3, c1, w1, zba, zbo, zbs, ast, prz, blk, str, fl, pkt, eval) VALUES ('$min', '$c2', '$w2', '$c3', '$w3', '$c1', '$w1', '$zba', '$zbo', '$zbs', '$ast', '$prz', '$blk', '$str', '$fl', '$pkt', '$eval') WHERE id=$id";



WHERE id=$id - na jakiej zasadzie ma to działać questionmark.gif Tak możesz zrobić jak chcesz aktualizować

Takie coś zrób:
  1. $stat="INSERT INTO kartofelki (id,min, c2, w2, c3, w3, c1, w1, zba, zbo, zbs, ast, prz, blk, str, fl, pkt, eval) VALUES ('$id','$min', '$c2', '$w2', '$c3', '$w3', '$c1', '$w1', '$zba', '$zbo', '$zbs', '$ast', '$prz', '$blk', '$str', '$fl', '$pkt', '$eval')";



Jeżeli tego id nie ma w bazie to jak cokolwiek ma zrobić.

A jeżeli ustawisz AUTO_INCREMENT dla id to zrób tak:

  1. $stat="INSERT INTO kartofelki (min, c2, w2, c3, w3, c1, w1, zba, zbo, zbs, ast, prz, blk, str, fl, pkt, eval) VALUES ('$min', '$c2', '$w2', '$c3', '$w3', '$c1', '$w1', '$zba', '$zbo', '$zbs', '$ast', '$prz', '$blk', '$str', '$fl', '$pkt', '$eval')";


wtedy id wypełni Ci automatycznie
nieznajomy
Cytat(kill15 @ 16.01.2011, 22:00:08 ) *
WHERE id=$id - na jakiej zasadzie ma to działać questionmark.gif Tak możesz zrobić jak chcesz aktualizować


Chodzi mi o to, że w formularzu podaję ID zawodnika (w bazie są już zawodnicy i mają przypisany ID, a teraz chcę co mecz dodawać kolejne punkty, itp.), ID zapisuje się do zmiennej $id i dane zostają zapisane zawodnikowi z ID, który jest w tej zmiennej.
kill15
Czyli jest budowa np taka:

zawodnik|id|punkt|punkt2|punkt3|itp

I to wszystko jest przy zawodniku tak questionmark.gif to nie rozumiem tego:


  1.  
  2. $stat = "UPDATE kartofelki SET id='$id' , min='$min' , c2='$c2' , w2='$w2' , c3='$c3' , w3='$w3' , c1='$c1' , w1='$w1' , zba='$zba' , zbo='$zbo' , zbs='$zbs' , ast='$ast' , prz='$prz' , blk='$blk' , str='$str' , fl='$fl' , pkt='$pkt' , eval='$eval' WHERE id=$id";
  3.  
  4. $result = mysql_query($stat);
  5.  
  6. $query = "UPDATE `kartofelki` (min,c2,w2,c3,w3,c1,w1,zba,zbo,zbs,ast,prz,blk,str,fl,pkt,eval) VALUES ('$min','$c2','$w2','$c3','$w3','$c1','$w1','$zba','$zbo','$zbs','$ast','$prz','$blk','$str','$fl','$pkt','$eval') WHERE id=$id";
  7.  
  8. $result = @mysql_query($query);


W zapytaniu $stat wydaje się być dobrze ale skoro WHERE id=$id to dlaczego jest id='$id' , questionmark.gif czyli kasujesz id='$id' ,

A zapytanie $query jeżeli ma AKTUALIZOWAĆ rekordy to powinno wyglądać tak jak to $stat a jeżeli dodawać nowy rekord z nowym zawodnikiem i z jego danymi to czytaj to co wcześniej pisałem tzn ok 2 posty wyżej .


Z tego co widzę obydwa zapytania mają robić to samo po co questionmark.gif zrób jedno dobre:

  1.  
  2. $stat="UPDATE kartofelki SET min='$min' , c2='$c2' , w2='$w2' , c3='$c3' , w3='$w3' , c1='$c1' , w1='$w1' , zba='$zba' , zbo='$zbo' , zbs='$zbs' , ast='$ast' , prz='$prz' , blk='$blk' , str='$str' , fl='$fl' , pkt='$pkt' , eval='$eval' WHERE id='$id' ";
  3.  
  4. mysql_query($stat);




Jężeli nie zadziała to daj zamiast:
$result = mysql_query($stat)
kod:

$result = mysql_query($stat) or die(mysql_error());

Wtedy jeżeli będzie źle wypluje Ci błąd. Oczywiście to usuwasz jeżeli stronke maja przeglądać ludzie ;d
nieznajomy
Napisałeś o UPDATE, a mi chodzi o to, żeby np. punkty, które wpisuję w formularzu były dodawane do istniejących już punktów w bazie. A do tego jest chyba potrzebne INSERT INTO, tak?
ciekawskiii
Ehh... kilka godzin siedzisz w tym temacie a nadal nie wiesz co i jak, trudno nauczyc sie dwoch slow?
INSERT - dodaje nowy rekord
UPDATE - aktualizuje istniejacy rekord
kill15
No to w tym wypadku UPDATE
np jeżeli masz

id|imie|nazwisko|punkty|punkty2|punkty3 itd
1 |Arek|Nowak |20 | 17 | 18 itd

i wpisujesz w formularzu dane sciągasz je z formularza np tak:

$pkt = $_POST['pkt']; // załóżmy że tu dałes w fromularzu 1pkt

$pkt2 = $_POST['pkt'2]; // załóżmy że tu dałes w fromularzu 2pkt

$pkt3 = $_POST['pkt'3]; // załóżmy że tu dałes w fromularzu 3pkt
i chcesz je podmienić żeby tabel wyglądała tak:


id|imie|nazwisko|punkty|punkty2|punkty3 itd
1 |Arek|Nowak |1 | 2 | 3 itd

To wysyłasz dane UPDATE
jeżeli masz:


id|imie|nazwisko|punkty|punkty2|punkty3 itd
1 |Arek|Nowak |20 | 17 | 18 itd

i chcesz je podliczyć np:


$pkt = $_POST['pkt']; // załóżmy że tu dałes w fromularzu 1pkt

$pkt2 = $_POST['pkt'2]; // załóżmy że tu dałes w fromularzu 2pkt

$pkt3 = $_POST['pkt'3]; // załóżmy że tu dałes w fromularzu 3pkt

Ściągasz dane z bazy

Dodajesz je do tych co są w formularzu i aktualizujesz je wtedy UPDATE

I wtedy będzie wyglądało tak:

id|imie|nazwisko|punkty|punkty2|punkty3 itd
1 |Arek|Nowak |21 | 19 | 21 itd
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.