Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/mysql]Wysyłanie danych do bazy
Forum PHP.pl > Forum > Przedszkole
pioteer
Co prawda od dawna bawię się w php, jednak pierwszy raz zdarza mi się taki problem...

Problem niby błahy, a pytałem kilka osób dlaczego mi nie wysyła danych, nie potrafili udzielić odpowiedzi. Mam nadzieję, że pomożecie rozwikłać ten problem. Na czym on polega? Otóż próbuję wysłać dane do bazy, jednak po godzinach prób, nadal się nie udaje. Być może są jakieś błędy w kodzie, ale sprawdzałem mysql_error i nic nie wyświetlało.

Oto kod php sprawdzający formularz rejestracji i wysyłający dane do bazy 'db' w tabeli 'users'.
Dostępny pod tym adresem: http://phpfi.com/209283

Kod SQL bazy danych:
Cytat
CREATE TABLE `users` (
`nr` int(20) NOT NULL auto_increment,
`login` varchar(20) NOT NULL default '',
`pass` varchar(20) NOT NULL default '',
`passw` varchar(20) NOT NULL default '',
`mail` varchar(20) NOT NULL default '',
`email` varchar(20) NOT NULL default '',
`gg` varchar(10) NOT NULL default '',
`jabber` varchar(20) NOT NULL default '',
`www` varchar(20) NOT NULL default '',
`hobby` varchar(50) NOT NULL default '',
PRIMARY KEY (`nr`)
) TYPE=MyISAM AUTO_INCREMENT=33 ;


Oraz kod formularza rejestracji:
http://phpfi.com/209266
Cienki1980
Najpierw pobierz wartości z POST a dopiero potem wstaw je do zapytania.

Kolejność działań w kodzie powinna być taka:
1. pobranie danych z POST ( $zmienna=$_POST['zmienna']; )
2. sprawdzenie poprawności wpisanych danych ( czy są wpisane )
3. zapytanie do bazy
pioteer
Poprawiony kod php:
  1. <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
  2. <?php 
  3.  
  4.  function connect_mysql()
  5. {
  6.  $db_host = 'localhost';
  7.  $db_user = 'root';
  8. $db_pass = 'krasnal';
  9. $db_name = 'db'; 
  10.  
  11. $connect = mysql_pconnect($db_host, $db_user, $db_pass);
  12. if(!$connect)
  13. {
  14.  echo "Wystąpił błąd: Połączenie z bazą nie powiodło się.";
  15.  exit; }
  16.  
  17.  
  18. if(!@mysql_select_db($db_name, $connect)) {
  19. echo '<b>Baza danych chwilowo niedostepna. Przepraszamy.</b>';
  20. exit;  }
  21.  
  22. } 
  23. connect_mysql();
  24.  
  25. $pass=$_POST["pass"];
  26. $passw=$_POST["passw"];
  27. $email=$_POST['email'];
  28. $mail=$_POST['mail'];
  29.  
  30. if (empty($pass) || empty($passw) || $pass != $passw){
  31. echo "Wpisane hasła nie zgadzają się <br/ >";
  32. $error='true';
  33. }
  34. if (!ereg("^[a-zA-Z1-9]{1,10}[^@]+@([a-zA-Z]+.)+[a-z]{2,4}$", $mail) and !ereg("^[a-zA-Z1-9]{1,10}[^@]+@([a-zA-Z]+.)+[a-z]{2,4}$", $email)|| empty($mail) || empty($email) || $mail != $email )
  35. {
  36. echo "Wpisane adresy e-mail różnią się bądź mają niepoprawną formę. <br/ >";
  37. $error='true';
  38. }
  39.  
  40. if($error=='true'){
  41.  
  42. echo "Wróć do strony <a href="form_registration.php">z formularzem</a> i uzupełnij poprawnie dane." ;
  43. }else{
  44. echo "Dziękuje za wypełnienie formularza";
  45. }
  46.  
  47.  
  48. $zapytanie = "INSERT INTO 'users' VALUES('','$login', '$pass', '$passw', '$mail', '$email', '$gg', '$jabber', '$www', '$hobby')";
  49. $wykonaj = mysql_query($zapytanie);
  50.  
  51.  
  52. ?>


Mimo wszystko, dane nadal nie są zapisywane do bazy danych.

Może coś źle w kodzie sql bazy?
Cienki1980
Po 48 linii zrób echo $zapytanie ( przed wysłaniem go do bazy ) i sprawdź czy wszystkie dane są takie jak być powinny ( chodzi mi o skopiowanie tekstu, który pokaże się na stronie po wykonaniu kodu ). Jeżeli uważasz, że są OK to wykonaj je bezpośrednio do bazy ( np w phpMyAdminie ) .. albo pokaż je tutaj.

I tak między nami skoro masz w formularzu opcje dodatkowe, to mogłeś je w bazie zrobić NULL a nie NOT NULL default ''
pioteer
Wyświetliło się:
Cytat
INSERT INTO 'users' VALUES('','login', 'pass', 'pass', 'mail@mail.ru', 'mail@mail.ru', 'gg', 'jid', 'www', 'hobby')

A więc wszystko ok, pierwsze pole to nr użytkownika, dlatego jest puste.

Jako że pola gg, www, jabber i hobby są opcjonalne ustawię tak jak wspomniałeś wyżej.
Cienki1980
Ok czyli dane przekazują sie poprawnie. Jeżeli to zapytanie poprawnie wykonuje się bezpośrednio bazie danych ( z poziomu konsoli lub phpMyAdmina ) to wtedy błędu szukać w połączeniu do bazy.

Może spróbuj z taką budową zapytania:
  1. INSERT INTO nazwa_tabeli(kol1,kol2,kol3) VALUES ('val1','val2','val3');
sanchoo
  1. <?php
  2. CREATE TABLE `users` (
  3. `nr` int(20) NOT NULL auto_increment,
  4. `login` varchar(20) NOT NULL default '',
  5. `pass` varchar(20) NOT NULL default '',
  6. `passw` varchar(20) NOT NULL default '',
  7. `mail` varchar(20) NOT NULL default '',
  8. `email` varchar(20) NOT NULL default '',
  9. `gg` varchar(10) NOT NULL default '',
  10. `jabber` varchar(20) NOT NULL default '',
  11. `www` varchar(20) NOT NULL default '',
  12. `hobby` varchar(50) NOT NULL default '',
  13. PRIMARY KEY (`nr`)
  14. ) TYPE=MyISAM AUTO_INCREMENT=33 ;
  15. ?>

...wydaje mi sie ze dla bezpieczenstwa warto usawic jeszcze login jako PRIMATY KEY...
pioteer
Baza nadal nie działa. Tzn, jak wpisałem
  1. <?php
  2. $zapytanie = "INSERT into users(nr,login, pass, passw, mail, email, gg, jabber, www, hobby, time) values ('','$login','$pass','$passw','$mail','$email','$gg','$jabber','$www','$hobby','$time');";
  3. ?>


to nie działa, natomiast jeśli wartości są wpisane bez $ to wszystko działa. Dlaczego tak się dzieje?


Problem rozwiązany. Wysyłane było pole, którego zapomniałem dać w bazie danych. smile.gif
Dzięki, phpion.com
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.