Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> UPDATE pola +1, [SQL]
eremen
post
Post #1





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 15.02.2012
Skąd: Głogów - Opole

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


Witam,

Tabela ma wzór:
co ile

auto1 0
auto2 0
auto3 0
...
auto10 0

Chciałbym aby po oddaniu głosu(kod php, sonda typu 'radio') na odpowiednie auto dodawał się w Tabeli SQL głos(+1) w kolumnie 'ile'.
Dosyć dużo zrobiłem w kodzie jednak coś robię nadal nie tak;/
  1. // tworzenie tabeli
  2. mysql_query ('
  3. CREATE TABLE ankieta(
  4. co char(6),
  5. ile int NULL,
  6. PRIMARY KEY(co)
  7. )
  8. ');
  9.  
  10. mysql_query ('
  11. INSERT INTO ankieta(co, ile) VALUES
  12. (\'auto1\' , \'\'),
  13. (\'auto2\' , \'\'),
  14. (\'auto3\' , \'\'),
  15. (\'auto4\' , \'\'),
  16. (\'auto5\' , \'\'),
  17. (\'auto6\' , \'\'),
  18. (\'auto7\' , \'\'),
  19. (\'auto8\' , \'\'),
  20. (\'auto9\' , \'\'),
  21. (\'auto10\' , \'\')
  22. ');
  23. //------------------------------------------------------------------
  24. IF (isset($_POST['haslo']) && $_POST['glosuj']) {
  25.  
  26. IF (in_array($_POST['haslo'], $kody)){
  27.  
  28. //ZAPISYWANIE WYNIKOW DO PLIKOW
  29. $filename=$_POST['auto'].'.txt';
  30. $votes = 1;
  31.  
  32. IF(file_exists($filename)){
  33. $votes = file_get_contents($filename);
  34. $votes++;
  35.  
  36.  
  37.  
  38. //zapisanie do bazy
  39. mysql_query('
  40. UPDATE ankieta SET ile = ile+1 WHERE \'co\' = $_POST[\'auto\'];
  41. ');
  42. //-------------------------------------------
  43.  
  44.  
  45.  
  46.  
  47. }
  48.  
  49. file_put_contents($filename, $votes);
  50. $message = "dziękujemy za oddanie głosu";
  51.  
  52. //USUWANIE WPISANEGO HASŁA Z PLIKU I ZASTAPIENIE GO INNYM
  53.  
  54. srand((double)microtime()*1000000);
  55. $kod2=md5(uniqid(rand()));
  56. $nowehaslo = substr($kod2,0,5);
  57.  
  58. $kody; // tablica haseł pobrana z pliku z hasłami
  59.  
  60. $kody[array_search($_POST['haslo'], $kody)] = $nowehaslo;
  61.  
  62. file_put_contents("kody.txt", serialize($kody));
  63. }
  64. else {
  65. $message = "wpisałeś niepoprawne hasło";
  66. }
  67. }
  68. //------------------------------------------------------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


co w tym zapytaniu:
  1. UPDATE ankieta SET ile = ile+1 WHERE \'co\' = $_POST[\'auto\'];

to nazwa kolumny w tabeli w bazie danych, a nazwy kolumn obejmujemy gravisami (`, znaczek z tyldą na klawiaturze), a nie apostrofami '. Rozumiem, że tworzenie tabeli i dodawanie nowych rekordów odbywa się tylko raz. Pozostaje jeszcze kwestia wyglądu formularza, czy jesteś pewien, że w $_POST['auto'] znajduje się odpowiednia wartość?

Debuguj zapytania SQL:
  1. mysql_query('zapytanie') or die(mysql_error());


Ten post edytował mortus 25.03.2012, 12:12:42
Go to the top of the page
+Quote Post
eremen
post
Post #3





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 15.02.2012
Skąd: Głogów - Opole

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


Cytat(mortus @ 25.03.2012, 13:12:11 ) *
co w tym zapytaniu:
  1. UPDATE ankieta SET ile = ile+1 WHERE \'co\' = $_POST[\'auto\'];

to nazwa kolumny w tabeli

nazwa kolumny to 'ile' i 'co'

Cytat
w bazie danych, a nazwy kolumn obejmujemy gravisami (`, znaczek z tyldą na klawiaturze), a nie apostrofami '.

Czyli
  1. UPDATE ankieta SET (`ile`) = (`ile`) + 1 WHERE (`co`) = $_POST[`auto`]
?

Cytat
Rozumiem, że tworzenie tabeli i dodawanie nowych rekordów odbywa się tylko raz.

Nad tym muszę jeszcze popracować. Na razie wykluczam ten fragment poprzez komentarz.

Cytat
Pozostaje jeszcze kwestia wyglądu formularza, czy jesteś pewien, że w $_POST['auto'] znajduje się odpowiednia wartość?

Wydaje mi się, że tak. skoro wcześniej przy zapisywaniu do pliku korzysta z tego samego elementu(dodając .txt) to czy nie zadziała to dla bazy?

Cytat
Debuguj zapytania SQL:
  1. mysql_query('zapytanie') or die(mysql_error());

poprawię

Go to the top of the page
+Quote Post
mortus
post
Post #4





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Ciągle nieprawidłowo budujesz zapytanie, tylko nazwy kolumn w tabeli w bazie danych obejmujemy gravisami, natomiast wartości obejmujemy apostrofami. Dodatkowo zmienna $_POST['auto'] jest nadal zmienną PHP i powyższa reguła nie ma do niej zastosowania. Powinno być:
  1. mysql_query("UPDATE ankieta SET (`ile`) = (`ile`) + 1 WHERE (`co`) = '{$_POST['auto']}");
  2. // lub
  3. mysql_query('UPDATE ankieta SET (`ile`) = (`ile`) + 1 WHERE (`co`) = \''.$_POST['auto'].'\'');

No i jeśli wszystko inne działa dobrze, to i to zapytanie powinno zadziałać.

Ten post edytował mortus 25.03.2012, 12:38:55
Go to the top of the page
+Quote Post
eremen
post
Post #5





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 15.02.2012
Skąd: Głogów - Opole

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


Dziękuję za pomoc. Na razie nie działa mi serwer, więc nie mogę sprawdzić czy działa. Dam znać przy najbliższej okazji (IMG:style_emoticons/default/wink.gif)

hej, udało mi się w końcu dostać do serwera.

Otrzymałem taki komunikat o błędzie:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(`ile`) = (`ile`) + 1 WHERE (`co`) = 'auto10' at line 1

widzę już że czyta poprawnie $_POST['auto'] ponieważ jest w treści 'auto10' na które akurat chciałem głosować.
To nie zmienia faktu że jest gdzieś błąd ;/

podam kod:
  1. <?php
  2. //SPRAWDZANIE CZY PLIK ISTNIEJE
  3. $plik = "kody.txt";
  4.  
  5. if (!file_exists($plik)) {
  6.  
  7. for ($s = 0; $s < 11; $s++){
  8. srand((double)microtime()*1000000);
  9. $kod=md5(uniqid(rand()));
  10.  
  11. $txt = substr($kod,0,5); //okrajamy kod do 5 znakĂłw
  12.  
  13. $kody[] = $txt; // tutaj zapisujemy okrojony kod do tablicy
  14. }
  15.  
  16. file_put_contents("kody.txt", serialize($kody));
  17. }
  18. else{
  19. $kody = unserialize(file_get_contents('kody.txt'));
  20. }
  21. //---------------------------------------------------------------------
  22.  
  23.  
  24. //BAZA SQL
  25. // Ĺ_Ä_czymy siÄ_ z serwerem
  26. mysql_connect('localhost', 'p1sffs2', 'dsdl') or die(mysql_error());
  27.  
  28. // Wybieramy bazÄ_, ktĂłrej bÄ_dziemy uĹźywaÄ_
  29.  
  30.  
  31. /*// tworzenie tabeli
  32. mysql_query ('
  33. CREATE TABLE ankieta(
  34. co char(6),
  35. ile int NULL,
  36. PRIMARY KEY(co)
  37. )
  38. ') OR DIE(mysql_error());
  39.  
  40. mysql_query ('
  41. INSERT INTO ankieta(co, ile) VALUES
  42. (\'auto1\' , \'\'),
  43. (\'auto2\' , \'\'),
  44. (\'auto3\' , \'\'),
  45. (\'auto4\' , \'\'),
  46. (\'auto5\' , \'\'),
  47. (\'auto6\' , \'\'),
  48. (\'auto7\' , \'\'),
  49. (\'auto8\' , \'\'),
  50. (\'auto9\' , \'\'),
  51. (\'auto10\' , \'\')
  52. ') OR DIE(mysql_error());
  53. //------------------------------------------------------------------*/
  54.  
  55. if (isset($_POST['haslo']) && $_POST['glosuj']) {
  56.  
  57. if (in_array($_POST['haslo'], $kody)){
  58.  
  59. //ZAPISYWANIE WYNIKOW DO PLIKOW
  60. $filename=$_POST['auto'].'.txt';
  61. $votes = 1;
  62.  
  63. if(file_exists($filename)){
  64. $votes = file_get_contents($filename);
  65. $votes++;
  66.  
  67. //zapisanie do bazy
  68. mysql_query("UPDATE ankieta SET (`ile`) = (`ile`) + 1 WHERE (`co`) = '{$_POST['auto']}") OR DIE(mysql_error());
  69. //-------------------------------------------
  70. }
  71.  
  72. file_put_contents($filename, $votes);
  73. $message = "dziÄ_kujemy za oddanie gĹ_osu";
  74.  
  75. //USUWANIE WPISANEGO HASĹ_A Z PLIKU I ZASTAPIENIE GO INNYM
  76.  
  77. srand((double)microtime()*1000000);
  78. $kod2=md5(uniqid(rand()));
  79. $nowehaslo = substr($kod2,0,5);
  80.  
  81. $kody; // tablica haseĹ_ pobrana z pliku z hasĹ_ami
  82.  
  83. $kody[array_search($_POST['haslo'], $kody)] = $nowehaslo;
  84.  
  85. file_put_contents("kody.txt", serialize($kody));
  86. }
  87. else {
  88. $message = "wpisaĹ_eĹ_ niepoprawne hasĹ_o";
  89. }
  90. }
  91. //------------------------------------------------------------------
  92.  
  93. //POKAZUJE SONDE
  94. echo '<p><map glosuj="glosuj">
  95. <form action="" method="post">
  96. <table align="center" style="text-align:center;">
  97. <tr>
  98. <td>1.<label for="guzik1" style="cursor:pointer"><img src="./zdjecia/auto1.jpg" alt="" /></label></td>
  99. <td>3.<label for="guzik3" style="cursor:pointer"><img src="./zdjecia/auto3.jpg" alt="" /></label></td>
  100. <td>5.<label for="guzik5" style="cursor:pointer"><img src="./zdjecia/auto5.jpg" alt="" /></td>
  101. <td>7.<label for="guzik7" style="cursor:pointer"><img src="./zdjecia/auto7.jpg" alt="" /></td>
  102. <td>9.<label for="guzik9" style="cursor:pointer"><img src="./zdjecia/auto9.jpg" alt="" /></td>
  103. </tr>
  104. <tr>
  105. <td>2.<label for="guzik2" style="cursor:pointer"><img src="./zdjecia/auto2.jpg" alt="" /></label></td>
  106. <td>4.<label for="guzik4" style="cursor:pointer"><img src="./zdjecia/auto4.jpg" alt="" /></label></td>
  107. <td>6.<label for="guzik6" style="cursor:pointer"><img src="./zdjecia/auto6.jpg" alt="" /></label></td>
  108. <td>8.<label for="guzik8" style="cursor:pointer"><img src="./zdjecia/auto8.jpg" alt="" /></label></td>
  109. <td>10.<label for="guzik10" style="cursor:pointer"><img src="./zdjecia/auto10.jpg" alt="" /></label></td>
  110. </tr>
  111. </table>
  112.  
  113. <div style="margin:20px 0 0 0">
  114. <input type="radio" name="auto" value="auto1" id="guzik1" checked="checked"/> nr 1.
  115. <input type="radio" name="auto" value="auto2" id="guzik2"/> nr 2.
  116. <input type="radio" name="auto" value="auto3" id="guzik3"/> nr 3.
  117. <input type="radio" name="auto" value="auto4" id="guzik4"/> nr 4.
  118. <input type="radio" name="auto" value="auto5" id="guzik5"/> nr 5.
  119. <input type="radio" name="auto" value="auto6" id="guzik6"/> nr 6.
  120. <input type="radio" name="auto" value="auto7" id="guzik7"/> nr 7.
  121. <input type="radio" name="auto" value="auto8" id="guzik8"/> nr 8.
  122. <input type="radio" name="auto" value="auto9" id="guzik9"/> nr 9.
  123. <input type="radio" name="auto" value="auto10" id="guzik10"/> nr 10.
  124. </div>
  125.  
  126. <div><br/> <input type="text" name="haslo"/><input type="submit" name="glosuj" value="gĹ_osuj" /><br/><br/>';echo $message;'</form></map></p>';
  127. //---------------------------------------------------------------------------------------------------------
  128. ?>

Proszę o pomoc. Pozdrawiam (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
mortus
post
Post #6





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Mój błąd, skopiowałem Twoje zapytania z nawiasami i to one powodują błąd. Powinno być:
  1. mysql_query("UPDATE ankieta SET `ile` = `ile` + 1 WHERE `co` = '{$_POST['auto']}'") OR DIE(mysql_error());


@down: Jeszcze apostrofa brakowało. Poprawiłem.

Ten post edytował mortus 27.03.2012, 13:40:58
Go to the top of the page
+Quote Post
eremen
post
Post #7





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 15.02.2012
Skąd: Głogów - Opole

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


You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''auto10' at line 1

teraz coś takiego (IMG:style_emoticons/default/tongue.gif) a może jednak źle czyta tę $_POST['auto']...
Go to the top of the page
+Quote Post
viking
post
Post #8





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

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


  1. mysql_query("UPDATE ankieta SET ile = ile + 1 WHERE co = ". mysql_real_escape_string($_POST['auto'])) OR DIE(mysql_error());


mysql_error to nie jest żadne debugowanie.
Go to the top of the page
+Quote Post
eremen
post
Post #9





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 15.02.2012
Skąd: Głogów - Opole

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


dałem tak jak radził viking i wyszedł błąd: Unknown column 'auto10' in 'where clause'
Go to the top of the page
+Quote Post
mortus
post
Post #10





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Bo kolega viking poprawił źle. Do tego gdzie jest błąd doszedłbyś sam, gdybyś zastosował nieco inny zapis:
  1. $sql = "UPDATE `ankieta` SET `ile` = `ile` + 1 WHERE `co` = '". mysql_real_escape_string($_POST['auto']) ."'";
  2. echo $sql; // dla testów

@viking: z komunikatów błędów mysql_error() można bardzo wiele wyczytać, jeśli tylko ktoś potrafi je właściwie zinterpretować i zawsze jest to jakiś sposób na "debugowanie" błędów (tym razem napisałem słówko debugowanie w cudzysłowie, żebyś nie zrozumiał zbyt dosłownie).

EDIT: Powyżej też poprawiłem.

Ten post edytował mortus 27.03.2012, 13:52:43
Go to the top of the page
+Quote Post
eremen
post
Post #11





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 15.02.2012
Skąd: Głogów - Opole

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


trochę mi mieszacie, teraz mam błąd : syntax error, unexpected '=' in /home/p13/domains/p13.nsf.pl/public_html/sonda/ankieta.php on line 69
ale nadal nie wiem jak to naprawić. Z błędu wyczytuję że jest niepoprawnie (wstawiony?) znak '=' ale co z tym zrobić.. to ni wiem...

EDIT: ten błąd wyskakuje po użyciu powyższego kodu mortusa...

Ten post edytował eremen 27.03.2012, 14:07:39
Go to the top of the page
+Quote Post
viking
post
Post #12





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

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


Zjadłem apostrofy wokół mysql_real_escape_string. Ale powinieneś z tego wyciągnąć kilka wniosków.
1) Czytać dokumentację bo masz tam bardzo czytelny przykład ze sprintf
2) wartość stringowa wstawiana do bazy bez quotów jest traktowana jak kolumna
3) zabezpieczaj zawsze skrypty
4) poczytać o PDO

@mortus
Dawno nie pisałem nic w "gołym" mysql i nawet nie mam jak sprawdzić ale po co `` wokół wszystkiego co się da?
Go to the top of the page
+Quote Post
mortus
post
Post #13





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Cytat(viking @ 27.03.2012, 14:59:39 ) *
@mortus
Dawno nie pisałem nic w "gołym" mysql i nawet nie mam jak sprawdzić ale po co `` wokół wszystkiego co się da?

To z przyzwyczajenia (IMG:style_emoticons/default/smile.gif) Tak mi się jakoś utrwaliło ostatnimi czasy obejmowanie nazw kolumn gravisami. Być może to przez użytkowników tego forum, którzy czasami nazywają kolumny w swoich tabelach np. time, date, a to powoduje błędy w zapytaniach, jeśli się takiej nazwy kolumny gravisami nie obejmie.

@eremen: Dobry edytor z kolorowaniem składni powinien wszystko pokazać. Dodatkowo polecam poczytać lekturę obowiązkową.

Ten post edytował mortus 27.03.2012, 14:05:38
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: 20.09.2025 - 14:10