Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Formularz rejestracyjny
Forum PHP.pl > Forum > Przedszkole
tosuch
Witam,

Chcę napisać formularz rejestracyjny, a że nigdy nie miałem styczności z PHP pomyślałem, że zrobie najpierw proste dodawanie danych do bazy danych. Jak się okazało, to nie jest takie proste. Przeczytałem już ze 2-3 kursy, ~15 przykładów, i dalej nie widzę błędy w moim formularzu:

index.html:

  1. <form enctype="text/plain" action="formularz.php" method="POST">
  2. <input name="imie" type="text" size="30" value="" > <br />
  3. <input name="nazwisko" type="text" size="30" value="" > <br />
  4.  
  5.  
  6. <input type="submit" value="Wyslij">
  7. </form>
  8.  
  9. </body>
  10. </head>
  11. </html>


formularz.php:

  1. <?php
  2. $db_user='login_sie_zgadza';
  3. $db_password='haslo_sie_zgadza';
  4. $database='DB_sie_zgadza';
  5.  
  6. mysql_connect('localhost',$db_user,$db_password);
  7. mysql_select_db($database) or die ("Nie udalo sie wybrac bazy danych");
  8.  
  9. $imie=$_POST['imie'];
  10. $nazwisko=$_POST['nazwisko'];
  11.  
  12. $query="INSERT INTO dane SET imie='$imie',nazwisko='$nazwisko'";
  13.  
  14. mysql_query($query);
  15.  
  16. ?>


Problem polega na tym, że nie dodaje danych do bazy. Jeżeli chodzi o połączenie to wszystko jest ok, bo mogę wyświetlić dane które się znajdują już w bazie (dodałem ręcznie w celach testowych) ale jak klikam "Wyślij" strona się przeładowuje, adres: index.html?imie=sadvc&nazwisko=sdvcsd, ale danych do bazy nie dodaje.

Mógłby ktoś mi pomóc ?

Z góry dziękuje.
Daiquiri
Poczytaj o tym jak buduje się zapytania do bazy danych i jak sprawdza się ich poprawność (np. na tym forum) smile.gif. Zawsze też możesz wyświetlić zawartość $query i zobaczyć czy Twoje zmienne są poprawnie wstawione - innymi słowy czy w ogóle tam są smile.gif.
tosuch
A mógłbyś to trochę bardziej sprecyzować?
Hekko
Twoje zapytanie INSERT jest złe, podaj nam kursy które czytałeś w których była taka składnia zapytania.
tosuch
Nie potrafię Ci podać kursów w których to było, po prostu nie pamiętam z którego to wziałem. Ale szukając go, natknąłem się na wydaje się właściwa konstrukcję:

  1. $imie=$_POST['imie'];
  2. $nazwisko=$_POST['nazwisko'];
  3.  
  4. $query="INSERT INTO `dane` VALUES('".$imie."','".$nazwisko."')";
  5.  
  6. mysql_query($query);


Po kliknięciu na Wyslij komunikaty:
Cytat
Notice: Undefined index: imie in /home/u7967/www/formularz.php on line 9

Notice: Undefined index: nazwisko in /home/u7967/www/formularz.php on line 10


Pomimo tych uwag, nie powinno byc problemu z dodaniem do bazy, ale dalej nie dodaje..

Formularz nad którym będę pracował będzie bardziej wymagający (rejestracja nowych klientów + generowanie pliku XML "w locie") więc wole narazie poćwiczyć na tego typu łatwiejszych
Daiquiri
Ludziska, Notice to nie jest błąd - to informacja, notatka. Wystarczy ją przetłumaczyć na język ojczysty lub zrozumieć w języku obcym, żeby wiedzieć co jest nie tak smile.gif.

A gdzie w zapytaniu chcesz dodać te wartości, tj. do jakich pól?
nospor
Cytat
Ludziska, Notice to nie jest błąd - to informacja, notatka.
Bardzo czesto ta "notatka" jest informacją o blędzie. Tak jak i w tym przypadku

Skoro nie ma indeksu imie i nazwisko w POST to jakim cudem ma ci się to dodac? Pozatym nic dziwnego ze nie ma w POST skoro sam mowiles ze te dane pojawily się w linku, czyli ze są w GET
tosuch
Napisałem, że pomimo tych uwag. :-)

Wracając do tematu, zmieniłem zapytanie:

  1. $query="INSERT INTO `dane`(`imie`,`nazwisko`) VALUES('".$imie."','".$nazwisko."')";


Nowe pole rekord dodany, ale jest pusty. Błąd jest teraz gdzieś w formularzu .html ? Czy jeżeli mam 3 pola w bazie: id(auto_increment), imie, nazwisko, powinienem wysylać wsyzstkie 3, czy wystarczą te dwa.

Cytat(nospor)
Skoro nie ma indeksu imie i nazwisko w POST to jakim cudem ma ci się to dodac? Pozatym nic dziwnego ze nie ma w POST skoro sam mowiles ze te dane pojawily się w linku, czyli ze są w GET


Dziwiłem się dlaczego tak jest, przecież w żadnym z kodów nie ma GET.
thek
Dopóki nie masz przesyłania plików - usuń enctype smile.gif W pliku formularz sprawdzaj czy zmienne $_POST są przysłane.

A składnia INSERT jest prawidłowa. Ogólnie dla zachowania zgodności pomiędzy INSERT i UPDATE, używanie SET w obu wypadkach jest jedną z możliwości. Masz jednak błąd, ponieważ w drugim przypadku (tym z VALUES) nie określiłeś nazwy kolumn do jakich wartości wpisujesz.
Daiquiri
Pisałam Ci na tym od początku - wyświetl sobie swoje zapytanie, żeby zobaczyć czy zmienne, z których korzystasz mają jakiekolwiek wartości.

@nospor
Dlatego nie polecam "ukrywania" tego co krzyczy notice, tylko przetłumaczenie tego na język zrozumiały dla siebie smile.gif.
nospor
Cytat
Pisałam Ci na tym od początku - wyświetl sobie swoje zapytanie, żeby zobaczyć czy zmienne, z których korzystasz mają jakiekolwiek wartości.
Przecież po komunikacie błędów widać, że nie mają. A nie mają bo idą GETem a nie POSTem

Cytat
@nospor
Dlatego nie polecam "ukrywania" tego co krzyczy notice, tylko przetłumaczenie tego na język zrozumiały dla siebie
A ja dlatego nie polecam mówić na NOTICE "notatka" tylko BLAD. Slowo notatka usypia czujność. smile.gif
tosuch
@Daiquiri

Mogłabyś mnie nakierować w jaki sposób i gdzie mam wyświetlić to zapytanie?

Rozumiem, że sprawdzenie czy zmienna post jest przesłana wygląda mnie więcej tak:
  1.  
  2. if($imie,$nazwisko){
  3. mysql_query($query)
  4. }


Sory, za to dopytywanie się, wiem że pewnie znajdę to na google, ale zależy mi na czasie. Zresztą jak widać w pierwszym kodzie nie wszystko znalezione w google będzie działać poprawnie...

Anyway, dzięki wszystkim za szybką pomoc. smile.gif
Daiquiri
Otóż to! Dlatego nie rozumiem dlaczego tak daleko z tym zabrnęliśmy. W sensie, że nie zostało to "wyłapane" przez autora po tej wyboistej drodze dążenia do perfekcji smile.gif.

@nospor,
Może mam dzisiaj pseudo językowo purystyczny dzień smile.gif.


Yhhh miałam na myśli zwykłe echo $query lub echo $imie, żebyś odkrył że zmienne są po prostu puste - stąd pusty rekord w bazie.
tosuch
@nospor
  1. <form enctype="text/plain" action="formularz.php" method="POST">


Jakim cudem może iść GET'em?

Ok, Wujek Google jest bardzo pomocny, ale nie byłby gdyby ludzie na forach nie rozwiązywali problemów, nawet w ich mniemaniu najbanalniejszych... ;-P
nospor
Juz ci powiedziano: wywal enctype="text/plain"
poza tym nie method="POST" a method="post"

Jesli po tych zmianach nadal idzie ci getem to masz przechlapane winksmiley.jpg
tosuch
No to mam przechlapane. Wywaliłem enctype, zmieniłem na method="post", ale zmiennych dalej nie ma.
Pojawiają się błędy, że imie, nazwisko nie jest zdefiniowane.

Myślicie, że pomoże
  1. define $imie=$_POST(`imie`) ?
nospor
Cytat
Myślicie, że pomoże
No skoro nie ma w POST imie to nie pomoze.

Myslisz ze jak masz pusty portfel i ze jak powiesz "abrakadabra 100zł" to w portfelu ci sie pojawi nagle 100zl?

Pokaz caly kod. Moze cos uprosciles, cos skasowales i to wszystko generuje blad. Pokaz caly kod formularza i caly kod jak ty to odbierasz.
Pokaz tez dokladnie link na jaki ci przekierowuje.
Chodzi mi oczywiscie o kody po zmianach

ps: skoro dane idą ci GETem to weź po prostu zamiast $_POST pisz $_GET
tosuch
index.html:
  1. <form action="formularz.php" method="post">
  2. <input name="imie" type="text" size="30" > <br />
  3. <input name="nazwisko" type="text" size="30" > <br />
  4.  
  5.  
  6. <input type="submit" value="Wyslij">
  7. </form>
  8.  
  9. </body>
  10. </head>
  11. </html>
  12.  


formularz.php
  1. <?php
  2. $db_user='';
  3. $db_password='';
  4. $database='';
  5. mysql_connect('localhost',$db_user,$db_password);
  6. mysql_select_db($database) or die ("Nie udalo sie wybrac bazy danych");
  7.  
  8. $imie=$_POST['imie'];
  9. $nazwisko=$_POST['nazwisko'];
  10.  
  11. $query="INSERT INTO `dane`(`imie`,`nazwisko`) VALUES('".$imie."','".$nazwisko."')";
  12.  
  13. echo $query;
  14.  
  15.  
  16. #mysql_query($query);
  17. ?>
  18.  


Zahashowałem query, dopóki zmienne nie będą się wczytywać.

Zmiana $_POST na $_GET nic nie dała. Po kliknięciu wyślij pojawiają się te dwa błędy i puste zapytanie.
nospor
Dodaj jeszcze
print_r($_POST);
print_r($_GET);
Jesli te dane są w GET to pobieraj je z GET i po sprawie.
A najlepiej pobieraj je z $_REQUEST. Wtedy niewazne czy w get czy w post to bedziesz je mial winksmiley.jpg Normalnie fatum nad Tobą ciąży winksmiley.jpg
tosuch
Dokładnie, fatum. Ciężka pierwsza przeprawa z php.

Zrobiłem tak jak mówiłeś:

  1. echo $query;
  2.  
  3. print_r($_POST);
  4. print_r($_GET);
  5.  
  6. print_r($_REQUEST);


I teraz wyświetla coś takiego:
Cytat
Notice: Undefined index: imie in /home/u7967/www/formularz.php on line 8

Notice: Undefined index: nazwisko in /home/u7967/www/formularz.php on line 9

INSERT INTO `dane`(`imie`,`nazwisko`) VALUES('','')Array ( ) Array ( ) Array ( [PHPSESSID] => m1a5alp8ev4gn7jhtmer9cjd64 )


Może jakiś błąd jest w index.html? Ale to przecież prosty formularz.. ;-/
nospor
cos krecisz.... ty nie masz tego ani w get ani w post.
1) Wyslales w ogole ten formularz? Napisz dokladnie jak wygląda link w przeglądarce po wyslaniu formularza
2) A czy ty przypadkiem nie masz włącząonej "register_globals"?

Wstaw sobie phpinfo(); i powiedz jakie masz wartosci w pod pozycją register_globals. Jak On to masz to w pliku konfiguracyjny wyłączyć.
tosuch
Nic nie kręce smile.gif Przecież wstawiłem oba kody, na moje oko też są już w miarę poprawne.

Z phpinfo()
Cytat
register_globals Off Off


Natomiast w adresie mam teraz /formularz.php po kliknięciu wyślij, i pojawiają się te uwagi a.k.a błędy.
nospor
No to ja już nie mam opcji sad.gif
tosuch
Nie załamuj mnie. smile.gif Jak Ty nie masz pomysłu to co ja, laik mam powiedzieć? ;-P
nospor
Wiesz, zeby to się dzialo u mnie na kompie, to by się doszlo. A ze to się dzieje u Ciebie to ja se na odlegosc moge... winksmiley.jpg

Dobra, ostatnia proba. Jak to nie pojdzie to masz coś z serwerem nie tak.

Stworz plik test.php o nastepującej tresci:
  1. <form method="POST">
  2. <input type="text" name="aa" />
  3. <input type="submit" value="GO"/>
  4. </form>
  5.  
  6. <?php
  7. print_r($_POST);
  8. ?>
  9.  

Odpal go i wyslij formularz. Powiedz co dostales na ekranie po wysylce.
thek
Ja już WIDZĘ byka! Zobacz zagnieżdżenie formularza Masz html, wewnątrz niego head, a WEWNĄTRZ head masz body...
Walnij:
  1. </head>
  2. <form action="formularz.php" method="post">
  3. <input name="imie" type="text" size="30" > <br />
  4. <input name="nazwisko" type="text" size="30" > <br />
  5.  
  6.  
  7. <input type="submit" value="Wyslij">
  8. </form>
  9.  
  10. </body>
  11. </html>
i napisz czy zadziergało smile.gif
tosuch
Cytat
Array ( [aa] => asd )


Także działa. Coś musi być nie tak z moim formularzem w html. Może scalić to w jeden plik, tak jak tutaj?

Cytat(thek @ 25.01.2011, 13:55:46 ) *
Ja już WIDZĘ byka! Zobacz zagnieżdżenie formularza Masz html, wewnątrz niego head, a WEWNĄTRZ head masz body...
Walnij:
  1. </head>
  2. <form action="formularz.php" method="post">
  3. <input name="imie" type="text" size="30" > <br />
  4. <input name="nazwisko" type="text" size="30" > <br />
  5.  
  6.  
  7. <input type="submit" value="Wyslij">
  8. </form>
  9.  
  10. </body>
  11. </html>
i napisz czy zadziergało smile.gif


I wszystko w tym temacie :-) Dzięki wszystkim za pomoc. Pewnie nie jeden problem jeszcze będę miał podczas pracy nad tym formularzem. Pozdrawiam! :-)
nospor
A tyle razy patrzyłem na ten kod specjalnie pod tym kątem :/ ech... starosc nie radość.
thek
Shit happens bro winksmiley.jpg Ale gdzie moderatorzy działają wspólnie z userem to prędzej czy później ( z reguły prędzej ) rozwiązanie się znajdzie. Tak czy inaczej pochwałę można dać userowi z racji tego, że nie siedział tylko i reagował na uwagi i się do nich stosował. Niektórzy wychodzą z założenia, że "i tak wiedzą lepiej" winksmiley.jpg
tosuch
Jak zrobię ten formularz docelowy (rejestracja rachunkow DM - co pewnie trochę potrwa) to mam nadzieję, że pomożecie go przetestować. ;-) A w przyszłości może założycie rachunek inwestycyjny tongue.gif
thek
To ja może podziękuję winksmiley.jpg Wolę dobrze zabezpieczone skrypty biggrin.gif
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.