Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]UPDATE - nie aktualizuje a zastępuje
nieznajomy
post 16.01.2011, 15:10:07
Post #1





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 11.02.2009

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


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. }
Go to the top of the page
+Quote Post
tehaha
post 16.01.2011, 15:23:04
Post #2





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


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
Go to the top of the page
+Quote Post
kill15
post 16.01.2011, 15:34:32
Post #3





Grupa: Zarejestrowani
Postów: 184
Pomógł: 14
Dołączył: 21.12.2010

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


UPDATE jest do aktualizacji

Natomiast Insert into jest do dodawania
Go to the top of the page
+Quote Post
nieznajomy
post 16.01.2011, 17:03:07
Post #4





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 11.02.2009

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


Ok, próbowałem z INSERT INTO, ale teraz już nic się nie dzieje. Ani się nie zamieniają dane ani nie aktualizują.
Go to the top of the page
+Quote Post
kill15
post 16.01.2011, 20:22:15
Post #5





Grupa: Zarejestrowani
Postów: 184
Pomógł: 14
Dołączył: 21.12.2010

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


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

Ten post edytował kill15 16.01.2011, 20:23:29
Go to the top of the page
+Quote Post
nieznajomy
post 16.01.2011, 21:54:42
Post #6





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 11.02.2009

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


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. ?>
Go to the top of the page
+Quote Post
kill15
post 16.01.2011, 22:00:08
Post #7





Grupa: Zarejestrowani
Postów: 184
Pomógł: 14
Dołączył: 21.12.2010

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


  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

Ten post edytował kill15 16.01.2011, 22:06:36
Go to the top of the page
+Quote Post
nieznajomy
post 16.01.2011, 22:35:06
Post #8





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 11.02.2009

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


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.

Ten post edytował nieznajomy 16.01.2011, 22:35:34
Go to the top of the page
+Quote Post
kill15
post 16.01.2011, 22:49:56
Post #9





Grupa: Zarejestrowani
Postów: 184
Pomógł: 14
Dołączył: 21.12.2010

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


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

Ten post edytował kill15 16.01.2011, 22:58:14
Go to the top of the page
+Quote Post
nieznajomy
post 16.01.2011, 23:09:30
Post #10





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 11.02.2009

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


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?
Go to the top of the page
+Quote Post
ciekawskiii
post 16.01.2011, 23:19:43
Post #11





Grupa: Zarejestrowani
Postów: 467
Pomógł: 39
Dołączył: 7.11.2010
Skąd: Raz tu, raz tam

Ostrzeżenie: (30%)
XX---


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


--------------------
Go to the top of the page
+Quote Post
kill15
post 16.01.2011, 23:21:36
Post #12





Grupa: Zarejestrowani
Postów: 184
Pomógł: 14
Dołączył: 21.12.2010

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


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

Ten post edytował kill15 16.01.2011, 23:31:57
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 5.07.2025 - 02:59