Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php][mysql] błąd zapytania
robert-0627
post
Post #1





Grupa: Zarejestrowani
Postów: 89
Pomógł: 1
Dołączył: 14.02.2007
Skąd: SZCZECINEK

Ostrzeżenie: (20%)
X----


  1. <form method="GET" action="inde.php">
  2. <table border=0>
  3. <tr>
  4. <td colspan="2" align="left">Nowy autor:</td>
  5. </tr>
  6. <tr>
  7. <td>Imię i nazwisko:</td>
  8. <td><input type="text" name="nazwa"></td>
  9. </tr>
  10. <tr>
  11. <td>Id:</td>
  12. <td><input type="text" name="id"></td>
  13. </tr>
  14. <tr>
  15. <td colspan="2"><input type="submit" value="Dodaj"></td>
  16. </tr>
  17. <?php


  1. <?php
  2. function dodaj($id, $nazwa){
  3.  
  4. /*sprawdzenie poprawości przekazanych danych*/
  5.  
  6. if($nazwa == ''){
  7. echo("Brak danych. Proszę wypełnić pole: Imię i nazwisko.");
  8. return;
  9. }
  10. if($id == '') $id = 'NULL';
  11.  
  12. /*Nawiązanie połączenia z bazą*/
  13.  
  14. if (!$db_lnk = @mysql_connect("localhost", "robert", "xxxxx")){
  15. echo('Wystąpił błąd podczas próby połączenia z serwerem MySQL...<BR>');
  16. return;
  17. }
  18.  
  19. if(!@mysql_select_db('oczko')){
  20. echo('Wystąpił błąd podczas wyboru bazy danych: biblioteka<BR>');
  21. return;
  22. }
  23.  
  24. /*Utworzenie i wykonanie zapytania*/
  25.  
  26. $query = "INSERT INTO shoutbox VALUES(";
  27. $query .= "$id, '$nazwa'";
  28. $query .= ")";
  29.  
  30. if(!mysql_query($query, $db_lnk)){
  31. echo('Wystąpił błąd: zapytanie zostało odrzucone...<BR>');
  32. return;
  33. }
  34.  
  35. /*Pobranie informacji o liczbie wstawionych wierszy*/
  36.  
  37. $rowsNo = mysql_affected_rows($db_lnk);
  38.  
  39. echo("Zapytanie zostało wykonane.<br>");
  40. echo("Liczba dodanych rekordów: $rowsNo<br>");
  41.  
  42. /*Zamknięcie połączenia z bazą*/
  43.  
  44. if(!@mysql_close()){
  45. echo('Wystąpił błąd podczas zamykania połączenia z serwerem MySQL...<br>');
  46. }
  47. }
  48.  
  49. if(isSet($_GET['nazwa']) && isSet($_GET['id'])){
  50. dodaj($_GET['id'], $_GET['nazwa']);
  51. }
  52. else{
  53. echo("Niepoprawne dane!");
  54. }
  55.  
  56. ?>


Wyskakuje mi Wystąpił błąd: zapytanie zostało odrzucone.Ktoś wie o co chodzi ?Nazwa bazy danych "oczko" nazwa tabeli shoutbox pola w tabeli nazywają sie nick i tresc ale wydaje mi się że to nie ma wpływu ?.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
Darti
post
Post #2





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

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


Cytat
Jeśli nie została zwrócona wartość FALSE to znaczy, że zapytanie było prawidłowe i może być wykonane przez serwer.

Wynika z tego, że zapytanie jest nieprawidłowe.

Zrób sobie w 30 linijce echo $query; , skopiuj wyświetlone zapytanie i sprawdź np w phpmyadmin co jest nie tak. (Mój ulubiony sposób debugowania BTW)

Ten post edytował Darti 18.05.2007, 16:04:36


--------------------
The answer is out there, Neo. It's looking for you. And it will find you, if you want it to.
SERVER_SOFTWARE : Apache/2.2.4 (Win32) PHP/5.2.1
MySQL Client API version : 5.0.27
Go to the top of the page
+Quote Post
JaRoPHP
post
Post #3





Grupa: Zarejestrowani
Postów: 675
Pomógł: 15
Dołączył: 7.11.2004
Skąd: Katowice

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


Spróbuj tak
  1. <?php
  2. //...
  3. $query = "INSERT INTO shoutbox VALUES($id, '$nazwa')";
  4. echo $query . "<br />n";
  5. mysql_query($query) or die('BLAD: ' . mysql_error());
  6. //...
  7. ?>

I pokaż nam, jaki rezultat (zapytanie + komunikat błędu) otrzymałeś.


--------------------
Kto pyta, nie błądzi...
Kto zbłądził, ten pyta...
Go to the top of the page
+Quote Post
robert-0627
post
Post #4





Grupa: Zarejestrowani
Postów: 89
Pomógł: 1
Dołączył: 14.02.2007
Skąd: SZCZECINEK

Ostrzeżenie: (20%)
X----


INSERT INTO shoutbox VALUES(adsfasd, 'dsfsad')
BLAD: Column count doesn't match value count at row 1

Taki błąd .
Go to the top of the page
+Quote Post
Darti
post
Post #5





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

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


Czyli MySQL powiedział Ci że podałeś za mało/za dużo wartości.
A dokładnie, że ilość kolumn w tabeli nie pasuje ilości wprowadzanych wartości.

Teraz zrób tak - dodaj ręcznie (przez phpmyadmin) jeden wpis do tabeli shoutbox a na górze zobaczysz jak powinien wyglądać prawidłowy schemat zapytania do bazy, który dodaje taki wpis.


--------------------
The answer is out there, Neo. It's looking for you. And it will find you, if you want it to.
SERVER_SOFTWARE : Apache/2.2.4 (Win32) PHP/5.2.1
MySQL Client API version : 5.0.27
Go to the top of the page
+Quote Post
robert-0627
post
Post #6





Grupa: Zarejestrowani
Postów: 89
Pomógł: 1
Dołączył: 14.02.2007
Skąd: SZCZECINEK

Ostrzeżenie: (20%)
X----


Rozwiązałem problem zupełnie przypadkowo otóż wpisałem liczby i zapytanie nie zostało odrzucone .W polu id musze liczbe a w polu tym drugim obojętnie co .Ktoś wie co w tym kodzie jest odpowiedzialne za to ,że muszę wpisywać liczbe ?
Go to the top of the page
+Quote Post
Darti
post
Post #7





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

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


Za to odpowiada typ pola w bazie, jak masz pole typu int to musisz używać liczb, date - określonego formatu daty itd. Zajrzyj do manuala MySQL Data types


--------------------
The answer is out there, Neo. It's looking for you. And it will find you, if you want it to.
SERVER_SOFTWARE : Apache/2.2.4 (Win32) PHP/5.2.1
MySQL Client API version : 5.0.27
Go to the top of the page
+Quote Post
szmerak
post
Post #8





Grupa: Zarejestrowani
Postów: 286
Pomógł: 12
Dołączył: 23.11.2006
Skąd: WL

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


Wrzuć ten kod do www.phpfi.com
Go to the top of the page
+Quote Post
robert-0627
post
Post #9





Grupa: Zarejestrowani
Postów: 89
Pomógł: 1
Dołączył: 14.02.2007
Skąd: SZCZECINEK

Ostrzeżenie: (20%)
X----


  1. CREATE TABLE shoutbox(
  2. id INT NOT NULL AUTO_INCREMENT,
  3. nick VARCHAR (50),
  4. tresc VARcHAR (50),
  5. PRIMARY KEY(id));




INT o ile się nie myle mam tylko id??Tak wygląda jaktworze tabele .
Go to the top of the page
+Quote Post
barat
post
Post #10





Grupa: Zarejestrowani
Postów: 183
Pomógł: 0
Dołączył: 19.05.2007

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


Ja tylko dodam, żebyś przepisał zmienne $_GET bo w obecnym stanie Twoj kod nie zadziała na wielu serwerach z register globals ustawionym na OFF smile.gif

czyli dla przykładu:

$id = $_GET['id']; i tak dla każdej przekazywanej zmiennej.

A w ogóle chyba lepiej byłoby przekazywać formularze przez $_POST ? czyli method post ?

Ten post edytował barat 21.05.2007, 15:00:56
Go to the top of the page
+Quote Post
robert-0627
post
Post #11





Grupa: Zarejestrowani
Postów: 89
Pomógł: 1
Dołączył: 14.02.2007
Skąd: SZCZECINEK

Ostrzeżenie: (20%)
X----


Poźniej się w to pobawie .Narazie chcę sie dowiedzieć jak zrobić to żeby dało sie nie tylko liczby ?!?
Go to the top of the page
+Quote Post
barat
post
Post #12





Grupa: Zarejestrowani
Postów: 183
Pomógł: 0
Dołączył: 19.05.2007

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


id INT NOT NULL AUTO_INCREMENT,

zmień na ...

id VARCHAR (50),

Zamiast 50 może być liczba od 1 do 255 znaków

Ale wtedy nie mozesz używać opcji auto increment ...

zadeklarowałeś, że kolumna id będzie liczbą więc musisz wpisywać liczby, jak chcesz teksty to ustawiasz na pole typu tekst...
Napisali Ci to wyżej

Ten post edytował barat 21.05.2007, 20:01:27
Go to the top of the page
+Quote Post
robert-0627
post
Post #13





Grupa: Zarejestrowani
Postów: 89
Pomógł: 1
Dołączył: 14.02.2007
Skąd: SZCZECINEK

Ostrzeżenie: (20%)
X----


  1. <?php
  2.  
  3. function dodaj($nick, $tresc){
  4.  
  5. /*sprawdzenie poprawości przekazanych danych*/
  6.  
  7. if($tresc == ''){
  8. echo("Brak danych. Proszę wypełnić pole: Imię i nazwisko.");
  9. return;
  10. }
  11. if($nick == '') $nick = 'NULL';
  12.  
  13. /*Nawiązanie połączenia z bazą*/
  14.  
  15. if (!$db_lnk = @mysql_connect("localhost", "robert", "xxxxxxx")){
  16. echo('Wystąpił błąd podczas próby połączenia z serwerem MySQL...<BR>');
  17. return;
  18. }
  19.  
  20. if(!@mysql_select_db('oczko')){
  21. echo('Wystąpił błąd podczas wyboru bazy danych: biblioteka<BR>');
  22. return;
  23. }
  24.  
  25. /*Utworzenie i wykonanie zapytania*/
  26.  
  27.  
  28. $query = "INSERT INTO shoutbox VALUES(";
  29.  $query .= "'NULL','$tresc',$nick ";
  30.  $query .= ")";
  31.  
  32. if(!mysql_query($query, $db_lnk)){
  33. echo('Wystąpił błąd: zapytanie zostało odrzucone...<BR>');
  34. return;
  35. }
  36.  
  37. /*Pobranie informacji o liczbie wstawionych wierszy*/
  38.  
  39. $rowsNo = mysql_affected_rows($db_lnk);
  40.  
  41. echo("Dziękuje za wypowiedzenie się .<br>");
  42. echo("Liczba dodanych rekordów: $rowsNo<br>");
  43.  
  44. /*Zamknięcie połączenia z bazą*/
  45.  
  46. if(!@mysql_close()){
  47. echo('Wystąpił błąd podczas zamykania połączenia z serwerem MySQL...<br>');
  48. }
  49. }
  50.  
  51. if(isSet($_GET['tresc']) && isSet($_GET['nick'])){
  52. dodaj($_GET['nick'], $_GET['tresc']);
  53. }
  54. else{
  55. echo("Niepoprawne dane!");
  56. }
  57.  
  58. ?>
  59.  
  60.  
  61. <form method="GET" action="inde.php">
  62. <input type="text" name="nick" Value="nick">
  63. <input type="text" name="tresc" Value="tresc">
  64. <input type="submit" name"zatwierdz">


Tabela łączeni jest z 3 kolumn .Pierwsza id druga nick trzecia tresc .Dormularz dodaje rekordy w 2 i 3 kolumnie .Problem w tym że w 2 kolumnie obowiązkowo musze wpisywać cyfry .Nie wiem czemu?
Go to the top of the page
+Quote Post
Kicok
post
Post #14





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


Wszelkie dane tekstowe, jakie wysyłasz do bazy muszą być umieszczone w apostrofach. Jeśli wykonasz zapytanie:
  1. INSERT INTO shoutbox VALUES (NULL, 'tresc', nick)

to MySQL będzie uważał nick za jakąś kolumnę/tabelę czy inny obiekt i zapytanie wyrzuci błąd.
Liczby nie muszą być umieszczane w apostrofach, więc takie zapytanie wykona się poprawnie:
  1. INSERT INTO shoutbox VALUES (NULL, 'tresc', 1234)

MySQL przekonwertuje wtedy liczbę 1234 na napis '1234' i zapytanie się wykona.

A żeby nick mógł być napisem, to taj jak już mówiłem musisz umieścić go w apostrofach:
  1. INSERT INTO shoutbox VALUES (NULL, 'tresc', 'nick')




PS. NULL jest słowem kluczowym języka SQL i tak samo jak liczb nie umieszcza się go w apostrofach


--------------------
"Sumienie mam czyste, bo nieużywane."
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 Aktualny czas: 20.08.2025 - 05:28