Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] błąd zapytania
Forum PHP.pl > Forum > Przedszkole
robert-0627
  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 ?.
Darti
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)
JaRoPHP
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ś.
robert-0627
INSERT INTO shoutbox VALUES(adsfasd, 'dsfsad')
BLAD: Column count doesn't match value count at row 1

Taki błąd .
Darti
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.
robert-0627
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 ?
Darti
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
szmerak
Wrzuć ten kod do www.phpfi.com
robert-0627
  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 .
barat
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 ?
robert-0627
Poźniej się w to pobawie .Narazie chcę sie dowiedzieć jak zrobić to żeby dało sie nie tylko liczby ?!?
barat
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
robert-0627
  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?
Kicok
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
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.