Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Problem z UPDATE
Forum PHP.pl > Forum > Przedszkole
BuncolPL
Cześć !

Piszę sobie prosty skrypt tabeli piłkarskiej i mam problem z aktualizowaniem wyników do bazy. Skrypt składa się z dwóch plików

Pierwszy odpowiada za wyświetlanie informacji z bazy w polach formularzy.

  1. <form action="anglia.php" method="post">
  2. <table>
  3.  
  4. <?php
  5.  
  6. include('config.php');
  7.  
  8.  
  9.   try
  10.   {
  11.      $pdo = new PDO('mysql:host='.$host.';dbname='.$dbname.'', "$user", "$pass", array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
  12.      $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  13.  
  14. //Drużyna ID=1      
  15.      $stmt = $pdo -> query('SELECT * FROM anglia WHERE ID=1');
  16.      foreach($stmt as $row)    
  17.      echo '<tr><td><input type="text" name="miejsce1" value="'.$row['miejsce'].'" style="width: 40px;" /> <td><input type="text" name="druzyna1" value="'.$row['druzyna'].'" /></td> <td><input type="text" name="mecze1" value="'.$row['mecze'].'" style="width: 40px;" /></td> <td><input type="text" name="punkty1" value="'.$row['punkty'].'" style="width: 40px;" /></td> <td><input type="text" name="bramki1" value="'.$row['bramki'].'" style="width: 40px;" /></td></tr><br />';                  
  18.  
  19.  
  20.      
  21.   }
  22.   catch(PDOException $e)
  23.   {
  24.      echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
  25.   }  
  26.  
  27. ?>
  28.  
  29. </table><br />
  30. <input type="submit" value="Edytuj" />
  31. </form>


Drugi z plików odpowiada za dopisywanie nowych wyników do bazy. Z nim mam właśnie problem, ponieważ nie dopisuje tylko wywala następujący błąd:

Połączenie nie mogło zostać utworzone: SQLSTATE[42000]: Syntax error or access violation: 1064 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 'INTO `anglia` (`miejsce`, `druzyna`, `mecze`, `punkty`, `bramki`)VALUES( ''' at line 1

Kod tego pliku wygląda następująco:

  1. <?php
  2.  
  3. //Zapisywanie do bazy
  4. include('config.php');
  5.  
  6.  
  7.   try
  8.   {
  9.      $pdo = new PDO('mysql:host='.$host.';dbname='.$dbname.'', "$user", "$pass", array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
  10.      $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  11.  
  12. {
  13. $_POST['miejsce1'] = $row['miejsce1'];
  14. $_POST['druzyna1'] = $row['druzyna1'];
  15. $_POST['mecze1'] = $row['mecze1'];
  16. $_POST['punkty1'] = $row['punkty1'];
  17. $_POST['bramki1'] = $row['bramki1'];
  18.  
  19.  
  20. $pdo -> exec('UPDATE INTO `anglia` (`miejsce`, `druzyna`, `mecze`, `punkty`, `bramki`)VALUES(
  21.                ''.$_POST['miejsce1'].'',
  22.                ''.$_POST['druzyna1'].'',
  23.                ''.$_POST['mecze1'].'',
  24.                ''.$_POST['punkty1'].'',
  25.                ''.$_POST['bramki1'].'')');
  26.    
  27. }
  28.      
  29.   }
  30.   catch(PDOException $e)
  31.   {
  32.      echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
  33.   }  
  34. ?>


Z góry dzięki za pomoc

Pozdrawiam
Marcin
Maciekbjw
Witaj,
Cytat
Połączenie nie mogło zostać utworzone: SQLSTATE[42000]: Syntax error or access violation: 1064 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 'INTO `anglia` (`miejsce`, `druzyna`, `mecze`, `punkty`, `bramki`)VALUES( ''' at line 1

Masz błąd w składni SQL winksmiley.jpg

Tak przy okazji, to powiedz mi, czemu służy zapis:


  1. <?php
  2. $_POST['miejsce1'] = $row['miejsce1'];
  3. $_POST['druzyna1'] = $row['druzyna1'];
  4. $_POST['mecze1'] = $row['mecze1'];
  5. $_POST['punkty1'] = $row['punkty1'];
  6. $_POST['bramki1'] = $row['bramki1'];
  7. ?>


Bo trochę nie rozumiem tongue.gif

Pozdrawiam
BuncolPL
Masz racje to jest źle, chciałem żeby wartości z value, dodawane były do bazy.

Wtedy powinno wyglądać to tak:

  1. <?php
  2. $_POST['miejsce1'] = $row['miejsce'];
  3. $_POST['druzyna1'] = $row['druzyna'];
  4. $_POST['mecze1'] = $row['mecze'];
  5. $_POST['punkty1'] = $row['punkty'];
  6. $_POST['bramki1'] = $row['bramki'];
  7. ?>


Ale niestety w tym przypadku również pojawiają się błędy. Poza tym nie wiem jak rozwiązać dodawanie wielu różnych drużyn, ponieważ przy wyświetlaniu nie ma problemu bo można dać WHERE ID=liczba to właśnie przy aktualizowaniu pojawią mi się schody.

Możecie coś poradzić, aby wykonać to jak najprościej
DREEMus
sprawdź kod formularza, którym dodajesz dane ... czy gdzieś nie ma " i ' ...
BuncolPL
DREEMus możesz napisać jaśniej o co chodzi ? Mam tylko te dwa pliki i bazę danych, nic poza tym.
DREEMus
a spróbuj tak ...
  1. <?php
  2. $pdo -> exec('UPDATE INTO `anglia` (`miejsce`, `druzyna`, `mecze`, `punkty`, `bramki`) VALUES ("'.$_POST['miejsce1'].'", "'.$_POST['druzyna1'].'", "'.$_POST['mecze1'].'", "'.$_POST['punkty1'].'", "'.$_POST['bramki1'].'")');
  3. ?>
BuncolPL
Dalej mam błąd:

Połączenie nie mogło zostać utworzone: SQLSTATE[42000]: Syntax error or access violation: 1064 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 'INTO `anglia` (`miejsce`, `druzyna`, `mecze`, `punkty`, `bramki`) VALUES ("", ""' at line 1

Może ktoś coś poradzić ?
nospor
moze zadam glupie pytanie, ale co to jest "update into" ?
Maxik
Daj może print_r($_POST); bo wygląda jakby nie odbierał danych z formularza.
BuncolPL
Cytat
moze zadam glupie pytanie, ale co to jest "update into" ?


Dlatego, że już kombinowałem na wszystkie sposoby dopisując cokolwiek smile.gif

Cytat
Daj może print_r($_POST)


Dałem to na początku pliku, który ma dodawać, ale teraz pojawia mi się błąd:

Array ( [miejsce1] => 4 [druzyna1] => Manchester City [mecze1] => 10 [punkty1] => 3 [bramki1] => 28-1 ) Połączenie nie mogło zostać utworzone: SQLSTATE[42000]: Syntax error or access violation: 1064 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 '(`miejsce`, `druzyna`, `mecze`, `punkty`, `bramki`)VALUES( '', ' at line 1
nospor
Cytat
Dlatego, że już kombinowałem na wszystkie sposoby dopisując cokolwiek
mistrzu..... no ale nie ma czegos takiego jak update into...
jest insert into i tak ma byc.

A jak ci nie dzialalo insert into to robisz echo mysql_error(); i wiesz gdzie masz blad
BuncolPL
Cytat
mistrzu..... no ale nie ma czegos takiego jak update into...
jest insert into i tak ma byc.


Już wiem, że nie ma smile.gif INSERT INTO działa, tylko problem w tym, że dodaje mi nowe rekordy a nie aktualizuje tego, który chce zmienić. Ja chce tylko je zaktualizować.
nospor
kurcze....to zajrzyj do manuala i zobacz jak wyglada skladnia UPDATE bo teraz jestes daleki od poprawnosci....
BuncolPL
Cytat
kurcze....to zajrzyj do manuala i zobacz jak wyglada skladnia UPDATE bo teraz jestes daleki od poprawnosci....


No ok, ale dlaczego przy INSERT INTO wstawia mi puste komórki a nie pobiera tych z formularza ?
nospor
no bo jesli robisz to tak:
  1. <?php
  2. $_POST['miejsce1'] = $row['miejsce1'];
  3. $_POST['druzyna1'] = $row['druzyna1'];
  4. $_POST['mecze1'] = $row['mecze1'];
  5. $_POST['punkty1'] = $row['punkty1'];
  6. $_POST['bramki1'] = $row['bramki1'];
  7. ?>

To nic dziwnego ze ci z forma nie pobiera.....

A jesli robisz inaczej to pokaz jak robisz
BuncolPL
Tamto zmieniłem, bo błąd ten zauważyłem zaraz po tym jak napisałem wątek:

Teraz zmieniłem składnie UPDATE, ale wyskakuje mi błąd:

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/buncol/ftpl/tabele/anglia.php on line 20

Plik dodawania wygląda następująco:

  1. <?php
  2.  
  3. //Zapisywanie do bazy
  4. include('config.php');
  5.  
  6.  
  7.   try
  8.   {
  9.      $pdo = new PDO('mysql:host='.$host.';dbname='.$dbname.'', "$user", "$pass", array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
  10.      $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  11.  
  12. {
  13. $_POST['miejsce1'] = $row['miejsce'];
  14. $_POST['druzyna1'] = $row['druzyna'];
  15. $_POST['mecze1'] = $row['mecze'];
  16. $_POST['punkty1'] = $row['punkty'];
  17. $_POST['bramki1'] = $row['bramki'];
  18.  
  19.  
  20. $pdo -> exec("UPDATE `anglia` SET `miejsce` = '.$_POST['miejsce1'].',`druzyna` = '.$_POST['miejsce1'].',`mecze` = '.$_POST['mecze'].',`punkty` = '.$_POST['punkty1'].',`bramki` = 'bramki1' WHERE `id`='1'");
  21.  
  22. }
  23.      
  24.   }
  25.   catch(PDOException $e)
  26.   {
  27.      echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
  28.   }  
  29. ?>
nospor
o zgrozo.... tongue.gif
no nie widzisz ze mieszasz juz kody?

  1. <?php
  2. $pdo -> exec("UPDATE `anglia` SET `miejsce` = '$_POST[miejsce1]',`druzyna` = '$_POST[miejsce1]',`mecze` = '$_POST[mecze]',`punkty` = '$_POST[punkty1]',`bramki` = 'bramki1' WHERE `id`='1'");
  3. ?>


no i znowu masz:
$_POST['miejsce1'] = $row['miejsce'];
$_POST['druzyna1'] = $row['druzyna'];
$_POST['mecze1'] = $row['mecze'];
$_POST['punkty1'] = $row['punkty'];
$_POST['bramki1'] = $row['bramki'];

przeciez dane masz miec z forma a nie z jakiego $row.... no mysl troche chlopie
BuncolPL
nospor ale ja to powinno wyglądać ? Ja dopiero się uczę tongue.gif a teraz to już mam zupełny mętlik w głowie.
nospor
no skoro dane idą ci z forma (z posta) to na grzyba dajesz to:
$_POST['miejsce1'] = $row['miejsce'];
$_POST['druzyna1'] = $row['druzyna'];
$_POST['mecze1'] = $row['mecze'];
$_POST['punkty1'] = $row['punkty'];
$_POST['bramki1'] = $row['bramki'];
?

$_POST jest automatycznie wypelnianiane danym z formularza, jesli takowy byl wyslany
BuncolPL
Usunąłem to, ale nadal mam tutaj problem:

  1. <?php
  2.  
  3. $pdo -> exec("UPDATE `anglia` SET `miejsce` = '.$_POST['miejsce'].',`druzyna` = '.$_POST['druzyna'].',`mecze` = '.$_POST['mecze'].',`punkty` = '.$_POST['punkty'].',`bramki` = '.$_POST['bramki'].' WHERE `id`='1'");
  4. ?>


Pojawia się błąd: Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
nospor
kurde.... zaraz zamkne ci temat!
Przeciez dwa moje posty wyzej podalem ci poprawną wersje na ten kod php. nie marnuj naszego czasu!

  1. <?php
  2. $pdo -> exec("UPDATE `anglia` SET `miejsce` = '$_POST[miejsce1]',`druzyna` = '$_POST[miejsce1]',`mecze` = '$_POST[mecze]',`punkty` = '$_POST[punkty1]',`bramki` = '$_POST[bramki1]' WHERE `id`='1'");
  3. ?>


ps: ja juz na dzisiaj mam dosc tego tematu. bye, bye smile.gif
BuncolPL
nospor nie rozumie dlaczego się tak denerwujesz smile.gif Coś co dla Ciebie jest oczywiste dla początkującego wcale nie musi. Zwróć uwagę, że to dział Przedszkole smile.gif


Poza tym i tak mam błąd składni: Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING

W tej linijce:

  1. <?php
  2.  
  3. $pdo -> exec("UPDATE `anglia` SET `miejsce` = '.$_POST['miejsce'].',`druzyna` = '.$_POST['druzyna'].',`mecze` = '.$_POST['mecze'].',`punkty` = '.$_POST['punkty'].',`bramki` = '.$_POST['bramki'].' WHERE `id`='1'");
  4.  
  5. ?>
nospor
jestes niesamowity. znowu uzyles swojego starego kodu zamiast mojego, ktory juz poraz drugi ci podalem

temat zamykam bo ewidentnie lejesz na nas i nasz czas mając w 4 literach to co ci podajemy smile.gif
w razie pytan i watpliwosci zapraszam na PW, bo moze nadal nie rozumiesz oco mi chodzi

edit: po rozmowie na PW i zrozumieniu bledu - otwieram
BuncolPL
Dzięki nospor smile.gif

Uwagi sobie wezmę do serca smile.gif

A jeszcze mam jedno pytanie.

W jaki sposób zabezpieczyć ten 2 plik odpowiedzialny za dodawanie, ponieważ jeśli go uruchomię z przeglądarki to zeruje mi wszystkie wyniki :/

Czy nie trzeba będzie połączyć ich w jeden ?
DREEMus
A gdzie Ty widzisz problem questionmark.gif
PHP daje Ci wiele możliwości wykonania Twojego pytania smile.gif

Ja bym zrobił formularz jako index.php
dodawania nowych jako dodaj.php
i pobieranie oraz pokazanie jako pokaz.php

wtedy się nie pogubisz z tym wszystkim smile.gif
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.