Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/sql]księga gości
Forum PHP.pl > Forum > Przedszkole
marlab.z.gdyni
witam
mam problem z poniszym skryptem


podejrzewam ze na 99% skopałem tablice sql

oczywiście będę bardzo rad za wskazanie błędów


kot formularza w ktorym wpisuje się dane
  1. <?php
  2. <!--c1--><div class='codetop'>KOD</div><div class='codemain'><!--ec1--><form enctype="multipart/form-data" action="dodaj.php" method="post">
  3. <p>Podpis:</p><input name="imie" type="text" maxlength="26" SIZE="30"><br>
  4. <p>Email:</p><input name="email" type="text" maxlength="26" SIZE="30"><br>
  5. <p>Strona WWW:</p><input name="www" type="text" maxlength="26" SIZE="30"><br>
  6. <br><p>Treść:</p><textarea name="wpis" cols="60" rows="7"></textarea>
  7. <br><br><input type="submit" value="Dodaj">
  8. <form><!--c2--></div><!--ec2-->
  9. ?>


kod pliku pobierającego, weryfikującego i zapisującego dane do sql

  1. <!--c1--><div class='codetop'>KOD</div><div class='codemain'><!--ec1-->
  2. <?
  3. $date=date("j, n, Y");
  4. if (file_exists("data.txt")) {
  5. $data_c = fopen("data.txt","r");
  6. $spr=fgets($data_c,20);
  7. fclose($data_c);
  8. }
  9. if (file_exists("czas.txt")) {
  10. $czas_c = fopen("czas.txt","r");
  11. $spr_c=fgets($czas_c,20);
  12. fclose($czas_c);
  13. }
  14. if($date!=$spr)
  15. {
  16. $ok=1;
  17. }
  18. else
  19. {
  20. if(date("i")>$spr_c)
  21. {
  22. $ok=1;
  23. }
  24. else
  25. {
  26. if($spr_c-date("i")>5)
  27. {
  28. $ok=1;
  29. }
  30. }
  31. }
  32.  
  33. if($ok==1)
  34. {
  35. if (file_exists("data.txt")) {
  36. $data = fopen("data.txt","w");
  37. fwrite($data,$date);
  38. fclose($data);
  39. }
  40. if (file_exists("czas.txt")) {
  41. $czas = fopen("czas.txt","w");
  42. fwrite($czas,date("i"));
  43. fclose($czas);
  44. }
  45. }
  46. else
  47. {
  48. echo'Dodawanie wpisu będzie możliwe z jakiś czas';
  49. }
  50.  
  51. $haslo='xxxxxxxxx';
  52. $login='xxxxx';
  53. $host='mysql2.yoyo.pl';
  54. $baza='xxxxxxxx';
  55. //pobieramy dane
  56. $imie=$_POST['imie'];
  57. $wpis=$_POST['wpis'];
  58. $www=$_POST['www'];
  59. $email=$_POST['email'];
  60. if(strlen($wpis)>50000)
  61. {
  62. }
  63. if(strlen($imie)>100)
  64. {
  65. }
  66. //znowu logujemy sie do bazy mysql
  67. @ $bd = mysql_pconnect($host, $login, $haslo);
  68.   if (!$bd)
  69.   {
  70.     echo 'Połączenie z bazą danych jest teraz nie możliwe.';
  71.     exit;
  72.   }
  73.   mysql_select_db($baza);
  74.   $tablica='ksiega';
  75. //wysylamy zapytanie
  76. $zapytanie = "insert into `$tablica` values ('".$wpis."', '".$imie." ,".$www."','".$email."',)";
  77. $dd = mysql_query($zapytanie);
  78. if($dd)
  79. {
  80. echo 'Wpis został dodany pomyślnie';
  81. }
  82. else
  83. {
  84. echo 'Niestety dodanie wpisu nie jest teraz możliwe, prosze spróbować później.';
  85. }
  86. //wczytanie pliku pierwszego
  87. echo '<script>';
  88. echo 'var strona="ok";';
  89. echo 'self.location.href=strona+".php";';
  90. echo '</script>';
  91. ?><!--c2--></div><!--ec2-->



natomiast plik wyswietlajacy dane to:
  1. <!--c1--><div class='codetop'>KOD</div><div class='codemain'><!--ec1-->
  2. <?
  3.  
  4. $haslo='xxxxxxxx;
  5. $login='xxxxxxxx';
  6. $host='xxxxxxxxxxx';
  7. $baza='xxxxxxxxx';
  8. //logowanie do serwera mysql
  9. @ $bd = mysql_pconnect($host, $login, $haslo);
  10.   if (!$bd)
  11.   {
  12.     echo 'Połączenie z bazą danych jest teraz nie możliwe.';
  13.     exit;
  14.   }
  15.   mysql_select_db($baza);
  16.   //wysyłamy zapytanie
  17.   $zapytanie = 'SELECT * FROM `ksiega` WHERE 1 LIMIT 0, 30';
  18.   $dd = mysql_query($zapytanie);
  19.   $bb = mysql_fetch_array($dd);
  20.   while($bb)
  21.   {
  22.    $wpis=stripslashes($bb['wpis']);
  23.    $imie=stripslashes($bb['imie']);
  24.    //wyswietlamy wpis
  25.    echo '<br>Napisał: '.$imie.'<br>'.$wpis. '<br>email: '.$email. '<br> WWW: '.$www;
  26.    $bb = mysql_fetch_array($dd);
  27.   }
  28. ?>
  29.  
  30. <!--c2--></div><!--ec2-->



jak powinna wygladac konstrukcja tabeli ?

u mnie (zrobilem zrzut w phpAdminem)


-- Struktura tabeli dla `ksiega`
--

CREATE TABLE `ksiega` (
`imie` text collate utf8_polish_ci NOT NULL,
`email` text collate utf8_polish_ci NOT NULL,
`www` text collate utf8_polish_ci NOT NULL,
`wpis` text collate utf8_polish_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;

--
-- Zrzut danych tabeli `ksiega`
--

INSERT INTO `ksiega` VALUES ('', '', '', '');
INSERT INTO `ksiega` VALUES ('', '', '', '');
INSERT INTO `ksiega` VALUES ('', '', '', '');
INSERT INTO `ksiega` VALUES ('', '', '', '');
INSERT INTO `ksiega` VALUES ('', '', '', '');
INSERT INTO `ksiega` VALUES ('', '', '', '');
INSERT INTO `ksiega` VALUES ('', '', '', '');
kossa
zmień typ pól - np. imie nie musi być text - za duże pole - wystarczy varchar nawet np. 30

bląd w zapytaniu:

Cytat
$zapytanie = "insert into `$tablica` values ('".$wpis."', '".$imie." ,".$www."','".$email."',)";

powinno byc:

  1. $zapytanie = "insert into $tablica (imie, emali, www, wpis) values ('".$imie."', '".$email." ,".$www."','".$wpis."')";


musisz podać kolejność wstawianych danych do kolumn

Łukasz
marlab.z.gdyni
Cytat(kossa @ 8.01.2007, 00:48:06 ) *
zmień typ pól - np. imie nie musi być text - za duże pole - wystarczy varchar nawet np. 30

bląd w zapytaniu:
powinno byc:

  1. $zapytanie = "insert into $tablica (imie, emali, www, wpis) values ('".$imie."', '".$email." ,".$www."','".$wpis."')";


musisz podać kolejność wstawianych danych do kolumn

Łukasz


oki zmieniłem na varchar max 30
zapytanie poprawione, jednak dalej dodaje puste pola do bazy

już nie mam pojęcia czemu biggrin.gif
ikioloak
Nie musi podawac kolejnosci jesli wstawia zgodnie z kolejnoscia ich wystepowania w bazie.
Przy kazdym
  1. <?php
  2. $dd = mysql_query($zapytanie);
  3. ?>
dodaj wyrzucenie bledu czyli:
  1. <?php
  2. $dd = mysql_query($zapytanie) or die(mysql_error());
  3. ?>

Jak wyrzuci jakis blad, daj przed tymi liniami print $zapytanie - zobaczysz gdzie cos ci sie gubi.

Jaki tak w ogole blad ci wyskakuje?
I ubierz fragmenty kodu w poscie w tagi [php].
marlab.z.gdyni
Cytat(ikioloak @ 8.01.2007, 00:58:48 ) *
$dd = mysql_query($zapytanie);
?>[/php] dodaj wyrzucenie bledu czyli:
  1. <?php
  2. $dd = mysql_query($zapytanie) or die(mysql_error());
  3. ?>

Jak wyrzuci jakis blad, daj przed tymi liniami print $zapytanie - zobaczysz gdzie cos ci sie gubi.

Jaki tak w ogole blad ci wyskakuje?
I ubierz fragmenty kodu w poscie w tagi [php].



ok
przepraszam zapomnialem o [php] juz jest poprawione smile.gif


wyskakuje mi



Column count doesn't match value count at row 1
Cezar708
1. MySQL jest baza relacyjna wiec proponuje abyś dodał klucz główny

  1. CREATE TABLE `ksiega` (
  2. `id_ksiega` integer NOT NULL PRIMARY_KEY,
  3. `imie` text collate utf8_polish_ci NOT NULL,
  4. `email` text collate utf8_polish_ci NOT NULL,
  5. `www` text collate utf8_polish_ci NOT NULL,
  6. `wpis` text collate utf8_polish_ci NOT NULL
  7. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;


... pisałem z palca, więc mogą być parsery smile.gif

2. Nie wiem czy to pisane z palca ale w skrypcie
  1. <?php
  2. $haslo='xxxxxxxx;
  3. $login='xxxxxxxx';
  4. $host='xxxxxxxxxxx';
  5. $baza='xxxxxxxxx';
  6. ?>

tu: w lini 1 jest parser (pewnie nie to jest problemem)

3. Tu jest najprawdopodobniej błąd, ponieważ u siebie w tabeli na pierszym miejscu masz imie, a tu wpisujesz wartość $wpis, czy czasem wpis nie przekroczył magicznej liczby ograniczonej przez imie VARCHAR()... stad ten błąd.
  1. <?php
  2. $zapytanie = "insert into `$tablica` values ('".$wpis."', '".$imie." ,".$www."','".$email."',)";
  3. ?>


4.
Cytat
musisz podać kolejność wstawianych danych do kolumn

Łukasz


... fakt nie musisz... ale ten przykład potwierdza jak dobrze mieć takie przyzwyczajenia

POZDRAWIAM
marlab.z.gdyni
Cytat(Cezar708 @ 8.01.2007, 02:19:06 ) *
1. MySQL jest baza relacyjna wiec proponuje abyś dodał klucz główny

  1. CREATE TABLE `ksiega` (
  2. `id_ksiega` integer NOT NULL PRIMARY_KEY,
  3. `imie` text collate utf8_polish_ci NOT NULL,
  4. `email` text collate utf8_polish_ci NOT NULL,
  5. `www` text collate utf8_polish_ci NOT NULL,
  6. `wpis` text collate utf8_polish_ci NOT NULL
  7. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;


... pisałem z palca, więc mogą być parsery smile.gif

2. Nie wiem czy to pisane z palca ale w skrypcie
  1. <?php
  2. $haslo='xxxxxxxx;
  3. $login='xxxxxxxx';
  4. $host='xxxxxxxxxxx';
  5. $baza='xxxxxxxxx';
  6. ?>

tu: w lini 1 jest parser (pewnie nie to jest problemem)

3. Tu jest najprawdopodobniej błąd, ponieważ u siebie w tabeli na pierszym miejscu masz imie, a tu wpisujesz wartość $wpis, czy czasem wpis nie przekroczył magicznej liczby ograniczonej przez imie VARCHAR()... stad ten błąd.
  1. <?php
  2. $zapytanie = "insert into `$tablica` values ('".$wpis."', '".$imie." ,".$www."','".$email."',)";
  3. ?>


4.
... fakt nie musisz... ale ten przykład potwierdza jak dobrze mieć takie przyzwyczajenia

POZDRAWIAM



wszystko poprawilem i dalej jest tzw "qpa"

wpisy niby sie dodaja
przy wyswietlaniu wpisow na stronie z basy sql przybywa pozycji lecz sa one puste

przegladajac tabele PhpAdminem widze ze baza jest pusta,
zadnych bledow nigdzie nie wywala etc
nospor
koncowka twojego forma wyglada tak:
  1. <br><br><input type="submit" value="Dodaj">
  2. <form><!--c2--></div><!--ec2-->

zle zamknales form. powinno byc tak:
  1. <br><br><input type="submit" value="Dodaj">
  2. </form><!--c2--></div><!--ec2-->

byc moze z tego powodu szly ci puste dane
marlab.z.gdyni
Cytat(nospor @ 8.01.2007, 10:17:55 ) *
koncowka twojego forma wyglada tak:
  1. <br><br><input type="submit" value="Dodaj">
  2. <form><!--c2--></div><!--ec2-->

zle zamknales form. powinno byc tak:
  1. <br><br><input type="submit" value="Dodaj">
  2. </form><!--c2--></div><!--ec2-->

byc moze z tego powodu szly ci puste dane



poprawione lecz dalej mam to smile.gif

Column count doesn't match value count at row 1

kod pliku ktory dodaje

  1. <?
  2. $date=date("j, n, Y");
  3. if (file_exists("data.txt")) {
  4. $data_c = fopen("data.txt","r");
  5. $spr=fgets($data_c,20);
  6. fclose($data_c);
  7. }
  8. if (file_exists("czas.txt")) {
  9. $czas_c = fopen("czas.txt","r");
  10. $spr_c=fgets($czas_c,20);
  11. fclose($czas_c);
  12. }
  13. if($date!=$spr)
  14. {
  15. $ok=1;
  16. }
  17. else
  18. {
  19. if(date("i")>$spr_c)
  20. {
  21. $ok=1;
  22. }
  23. else
  24. {
  25. if($spr_c-date("i")>5)
  26. {
  27. $ok=1;
  28. }
  29. }
  30. }
  31.  
  32. if($ok==1)
  33. {
  34. if (file_exists("data.txt")) {
  35. $data = fopen("data.txt","w");
  36. fwrite($data,$date);
  37. fclose($data);
  38. }
  39. if (file_exists("czas.txt")) {
  40. $czas = fopen("czas.txt","w");
  41. fwrite($czas,date("i"));
  42. fclose($czas);
  43. }
  44. }
  45. else
  46. {
  47. echo'Dodawanie wpisu będzie możliwe z jakiś czas';
  48. }
  49.  
  50. $haslo='cccccccc';
  51. $login='ccccccc';
  52. $host='cccccccccccccl';
  53. $baza='cccccccccccc';
  54.  
  55. $imie=$_POST['imie'];
  56. $email=$_POST['email'];
  57. $www=$_POST['www'];
  58. $wpis=$_POST['wpis'];
  59.  
  60. if(strlen($wpis)>50000)
  61. {
  62. }
  63. if(strlen($imie)>100)
  64. {
  65. }
  66. //znowu logujemy sie do bazy mysql
  67. @ $bd = mysql_pconnect($host, $login, $haslo);
  68. if (!$bd)
  69. {
  70. echo 'Połączenie z bazą danych jest teraz nie możliwe.';
  71. }
  72. $tablica='ksiega';
  73. //wysylamy zapytanie
  74.  
  75. $zapytanie = "insert into $tablica (imie, email, www, wpis) values ('".$imie."', '".$email." ,".$www."','".$wpis."')"; 
  76. $dd = mysql_query($zapytanie) or die(mysql_error());
  77.  
  78. if($dd)
  79. {
  80. echo 'Wpis został dodany pomyślnie';
  81. }
  82. else
  83. {
  84. echo 'Niestety dodanie wpisu nie jest teraz możliwe, prosze spróbować później.';
  85. }
  86. //wczytanie pliku pierwszego
  87. echo '<script>';
  88. echo 'var strona="ok";';
  89. echo 'self.location.href=strona+".php";';
  90. echo '</script>';
  91. ?>


klucz dodalem

  1. CREATE TABLE `ksiega` (
  2. `id_ksiega` int(11) NOT NULL,
  3. `imie` text collate utf8_polish_ci NOT NULL,
  4. `email` text collate utf8_polish_ci NOT NULL,
  5. `www` text collate utf8_polish_ci NOT NULL,
  6. `wpis` text collate utf8_polish_ci NOT NULL,
  7. PRIMARY KEY (`id_ksiega`)
  8. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;
sebik
bład ktory ci wywala oznacza ze liczba kolumn w tabeli jest rozna od liczby zmiennych ktore probujesz wpisac do tabeli, sprawdz dokladnie zapytanie, jesli ci dodaje puste pola do tabeli to przede wszystkim wydrukuj zapytanie przed jego wykonaniem zebys mogl zobaczyc czy jest prawidlowe, czy nie masz np. pustych zmiennych, poza ty do klucza glownego dodalbym wlasciwosc auto_increment, pozdro
skowron-line
a jakiego mysql-a uzywasz bo dopiero w 5 wersji nie trzeba w zapytaniu dodawac id
wiec jezeli masz baze wczesniejsza od 5 to blad jest zrozumialy
maryaan
zrzucaj sobie za pomoca var_dump() po kolei najpierw zmienne ktore sa przeslane, pozniej poskladane zapytanie i zobaczysz w ktorym meijscu gina dane
marlab.z.gdyni
Cytat(maryaan @ 8.01.2007, 16:52:29 ) *
zrzucaj sobie za pomoca var_dump() po kolei najpierw zmienne ktore sa przeslane, pozniej poskladane zapytanie i zobaczysz w ktorym meijscu gina dane


tylko nie krzycz .... ale możesz ciut jaśniej


baza wyglada teraz tak

  1. CREATE TABLE `ksiega` (
  2. `id_ksiega` int(11) NOT NULL AUTO_INCREMENT,
  3. `imie` text collate utf8_polish_ci NOT NULL,
  4. `email` text collate utf8_polish_ci NOT NULL,
  5. `www` text collate utf8_polish_ci NOT NULL,
  6. `wpis` text collate utf8_polish_ci NOT NULL,
  7. PRIMARY KEY (`id_ksiega`)
  8. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=1 ;


dalej jest pusta
i dalej ww. komunikat

juz zglupialem biggrin.gif
maryaan
odpal i zerknij w zrodlo strony:
  1. <?php
  2. $str = 'jakis tekst';
  3. $strArray = array('tekst1', 'tekst2', 'innyTekst', 'jeszczeInnyTekst');
  4.  
  5. echo 'zrzut $str:'."n";
  6. var_dump($str);
  7.  
  8. echo 'zrzut $strArray:'."n";
  9. var_dump($strArray);
  10. ?>


a pozniej pomysl jak to wykorzystac u siebie tongue.gif

//tak lepiej
marlab.z.gdyni
Cytat(maryaan @ 8.01.2007, 17:04:50 ) *
odpal i zerknij w zrodlo strony:
  1. <?php
  2. $str = 'jakis tekst';
  3. $strArray = array('tekst1', 'tekst2', 'innyTekst', 'jeszczeInnyTekst');
  4.  
  5. echo "zrzut $str:n";
  6. var_dump($str);
  7.  
  8. echo "zrzut $strArray:n";
  9. var_dump($strArray);
  10. ?>


a pozniej pomysl jak to wykorzystac u siebie tongue.gif



oki dane wpisane w formularzy wyswietlaja sie ok

a pod nimi blad

umn count doesn't match value count at row 1
maryaan
to teraz wyswietl zapytanie tuz przed samym wykonaniem (jesli sie nie da to zakomentuj wykonanie byle sie zapytanie wyswietlilo) i wklej to zapytanie do posta
marlab.z.gdyni
Cytat(maryaan @ 8.01.2007, 17:12:55 ) *
to teraz wyswietl zapytanie tuz przed samym wykonaniem (jesli sie nie da to zakomentuj wykonanie byle sie zapytanie wyswietlilo) i wklej to zapytanie do posta


wyswietla mi siet to czyli dane "uklada" ok
zrzut insert into ksiega (imie, email, www, wpis) values ('hgfhgf', 'hgfhgf ,http://wwww.wp.pl','gfdgfdgfdgfd'): Column count doesn't match value count at row 1


jak rozumiem samo zapisywanie danych cos nie trybi sad.gif

sprawdzam teraz inne konto www, moze na tym cos sie "pierdzieli" ...
maryaan
brakuje apostrofu po drugiej i przed trzecia dana !
sebik
dlatego 2 i 3 dane taktowalo jako jedno i liczba kolumn sie nie zgadzala smile.gif
marlab.z.gdyni
Cytat(maryaan @ 8.01.2007, 17:19:59 ) *
brakuje apostrofu po drugiej i przed trzecia dana !



wlasnie zauwazylem rowniez

takie pierdolka dziekuje wszystkim za pomoc
niedlugo bede Was meczyl bo chce dodac tokena biggrin.gif


Pozdrawiam i jeszcze raz dziekuje za cierpliwosc


marlab


Cytat(marlab.z.gdyni @ 8.01.2007, 17:22:46 ) *
wlasnie zauwazylem rowniez

takie pierdolka dziekuje wszystkim za pomoc
niedlugo bede Was meczyl bo chce dodac tokena biggrin.gif
Pozdrawiam i jeszcze raz dziekuje za cierpliwosc
marlab

i kolejny rpoblem
data
chcialbym zeby byla wyswietlana data smile.gif

mozna w sql zrobic pole zeby samo sobie zapisywalo date i godzine czy musze pobrac date i przywpisac ja a nastepnie wsadzic w tablice ?
pioch
pole DATETIME
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.