Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php/mysql]Wysyłanie danych do bazy
pioteer
post
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 25.02.2007
Skąd: Turośń Dolna

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


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

Ten post edytował pioteer 27.02.2007, 21:10:50
Go to the top of the page
+Quote Post
Cienki1980
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


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
Go to the top of the page
+Quote Post
pioteer
post
Post #3





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 25.02.2007
Skąd: Turośń Dolna

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


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?

Ten post edytował pioteer 27.02.2007, 21:14:25
Go to the top of the page
+Quote Post
Cienki1980
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


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 ''
Go to the top of the page
+Quote Post
pioteer
post
Post #5





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 25.02.2007
Skąd: Turośń Dolna

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


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.

Ten post edytował pioteer 27.02.2007, 21:58:00
Go to the top of the page
+Quote Post
Cienki1980
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


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');
Go to the top of the page
+Quote Post
sanchoo
post
Post #7





Grupa: Zarejestrowani
Postów: 161
Pomógł: 1
Dołączył: 11.02.2007
Skąd: Kraków

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


  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...
Go to the top of the page
+Quote Post
pioteer
post
Post #8





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 25.02.2007
Skąd: Turośń Dolna

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


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. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Dzięki, phpion.com

Ten post edytował pioteer 28.02.2007, 10:47:20
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 08:25