Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Mój pierwszy skrypt rejestracji
Forum PHP.pl > Forum > Przedszkole
nansss
Witam. Robię własny skrypt rejestracji oparty o bazę danych.
Mój skrypt na tą chwilę wygląda następująco:

  1. <?php
  2. $connect = mysql_connect('localhost', 'root', 'password') or die('Nie mo&#x17C;na po&#x142;&#x105;czyc si&#x119; z baz&#x105; danych. Przepraszamy za k&#x142;opoty');
  3. $db = mysql_select_db('db') or die('Nie mo&#x17C;na wybra&#x107; bazy danych. Przepraszamy za k&#x142;opoty');
  4. echo '<center><form action="zaloguj.php" method="post">
  5. Login:<br> <input type="text" name="login" /><br><br>
  6. email:<br> <input type="text" name="email" /><br><br>
  7. Has&#x142;o<br> <input type="password" name="haslo1" /><br><br>
  8. Potwierd&#x17A; has&#x142;o:<br> <input type="password" name="haslo2" /><br>
  9. <input type="submit" value="Rejestruj">
  10. <input type="reset" value="Wyczy&#x15B;&#x107;">
  11. </form></center>';
  12. $login = $_POST['login'];
  13. $email = $_POST['email'];
  14. $haslo1 = $_POST['haslo1'];
  15. $haslo2 = $_POST['haslo2'];
  16. $data = $_POST['Y-m-d'];
  17. $zapytanie = "INSERT INTO `rejestracja` ('login', 'email', 'haslo1', 'haslo2' 'data') VALUES ('".$login."', '".$email."', '".$haslo1."', '".$haslo2."', '".$data."')" or die(mysql_error());
  18. $idzapytania = mysql_query($zapytanie);
  19. mysql_close($connect);
  20. ?>


Dlaczego po wciśnieciu przycisku "Rejestruj" nie wysyła danych do bazy?
PS. Historie z PHP i MySql dopiero zaczynam
ziqzaq
1.
  1. $zapytanie = 'INSERT itd...';
  2. if ( ! mysql_query($zapytanie))
  3. {
  4. }
  5. else
  6. {
  7. echo 'Dodano nowy rekord';
  8. }

2.
W nazwach kolumn ma być nie apostrof (') tylko gravis (`).
Pozdr.
nansss
Ma to wyglądać tak:?

  1. <?php
  2. $connect = mysql_connect('localhost', 'root', 'password') or die('Nie mo&#x17C;na po&#x142;&#x105;czyc si&#x119; z baz&#x105; danych. Przepraszamy za k&#x142;opoty');
  3. $db = mysql_select_db('db') or die('Nie mo&#x17C;na wybra&#x107; bazy danych. Przepraszamy za k&#x142;opoty');
  4. echo '<center><form action="zaloguj.php" method="post">
  5. Login:<br> <input type="text" name="login" /><br><br>
  6. email:<br> <input type="text" name="email" /><br><br>
  7. Has&#x142;o<br> <input type="password" name="haslo1" /><br><br>
  8. Potwierd&#x17A; has&#x142;o:<br> <input type="password" name="haslo2" /><br>
  9. <input type="submit" value="Rejestruj">
  10. <input type="reset" value="Wyczy&#x15B;&#x107;">
  11. </form></center>';
  12. $login = $_POST['login'];
  13. $email = $_POST['email'];
  14. $haslo1 = $_POST['haslo1'];
  15. $haslo2 = $_POST['haslo2'];
  16. $data = $_POST['Y-m-d'];
  17. $zapytanie = "INSERT INTO `rejestracja` (`login`, `email`, `haslo1`, `haslo2` `data`) VALUES ('".$login."', '".$email."', '".$haslo1."', '".$haslo2."', '".$data."')";
  18. $idzapytania = mysql_query($zapytanie);
  19. if ( ! mysql_query($zapytanie))
  20. {
  21. }
  22. else
  23. {
  24. echo 'Twoje konto zosta&#x142;o utworzone';
  25. }
  26. mysql_close($connect);
  27. ?>
ziqzaq
Tak jak napisałem.
Zapytanie bez tego: "or die(mysql_error())".
mysql_query masz w if-ie, więc wywal to wcześniejsze.
Pozdr.
nansss
Teraz to wygląda tak:

  1. <?php
  2. $connect = mysql_connect('localhost', 'root', 'password') or die('Nie mo&#x17C;na po&#x142;&#x105;czyc si&#x119; z baz&#x105; danych. Przepraszamy za k&#x142;opoty');
  3. $db = mysql_select_db('db') or die('Nie mo&#x17C;na wybra&#x107; bazy danych. Przepraszamy za k&#x142;opoty');
  4. echo '<center><form action="zaloguj.php" method="post">
  5. Login:<br> <input type="text" name="login" /><br><br>
  6. email:<br> <input type="text" name="email" /><br><br>
  7. Has&#x142;o<br> <input type="password" name="haslo1" /><br><br>
  8. Potwierd&#x17A; has&#x142;o:<br> <input type="password" name="haslo2" /><br>
  9. <input type="submit" value="Rejestruj">
  10. <input type="reset" value="Wyczy&#x15B;&#x107;">
  11. </form></center>';
  12. $login = $_POST['login'];
  13. $email = $_POST['email'];
  14. $haslo1 = $_POST['haslo1'];
  15. $haslo2 = $_POST['haslo2'];
  16. $data = $_POST['Y-m-d'];
  17. $zapytanie = "INSERT INTO `rejestracja` (`login`, `email`, `haslo1`, `haslo2` `data`) VALUES ('".$login."', '".$email."', '".$haslo1."', '".$haslo2."', '".$data."')";
  18. if ( ! mysql_query($zapytanie))
  19. {
  20. }
  21. else
  22. {
  23. echo 'Twoje konto zosta&#x142;o za&#x142;o&#x17C;one';
  24. }
  25. mysql_close($connect);
  26. ?>


Dobrze?
ziqzaq
Cytat
mysql_query masz w if-ie, więc wywal to wcześniejsze.

a więc jeszcze to: "$idzapytania = mysql_query($zapytanie);"

Dobra rada. Próbuj czytać swój kod ze zrozumieniem.
Zastanów się co robi każda linijka i jak to współgra ze sobą.
Jak nie znasz jakiejś funkcji (parametry; co zwraca itd.) to szukaj najpierw w manualu php.
Ułatwi ci to życie.
Pozdr.
nansss
Z powyższego kodu wyrzuca błąd o treści:
Something is wrong in your syntax obok 'data`) VALUES ('', '', '', '', '')' w linii 1
Pierwszy raz spotkałem się z takim błędem. Co oznacza i jak go naprawić?
ziqzaq
Człowieku popatrz w swój kod.
Masz błąd w zapytaniu.
Przeczytaj treść zwróconego błędu, i Sam(a) go znajdź.
Musisz się tego nauczyć bo z każdą pierdołą będziesz lecieć na forum.
Pozdr.

nansss
Teraz nie wyskakują żadne błędy, ale przy każdym odświeżeniu strony wyskakuje komunikat "Twoje konto zostało założone i dodaje w bazie danych rekordy.

  1. <?php
  2. $connect = mysql_connect('localhost', 'root', 'password') or die('Nie mo&#x17C;na po&#x142;&#x105;czyc si&#x119; z baz&#x105; danych. Przepraszamy za k&#x142;opoty');
  3. $db = mysql_select_db('db') or die('Nie mo&#x17C;na wybra&#x107; bazy danych. Przepraszamy za k&#x142;opoty');
  4. echo '<center><form action="zaloguj.php" method="post">
  5. Login:<br> <input type="text" name="login" /><br><br>
  6. email:<br> <input type="text" name="email" /><br><br>
  7. Has&#x142;o<br> <input type="password" name="haslo1" /><br><br>
  8. Potwierd&#x17A; has&#x142;o:<br> <input type="password" name="haslo2" /><br>
  9. <input type="submit" value="Rejestruj">
  10. <input type="reset" value="Wyczy&#x15B;&#x107;">
  11. </form></center>';
  12. $login = $_POST['login'];
  13. $email = $_POST['email'];
  14. $haslo1 = $_POST['haslo1'];
  15. $haslo2 = $_POST['haslo2'];
  16. $data = $_POST['Y-m-d'];
  17. $zapytanie = "INSERT INTO `rejestracja` (`login`, `email`, `haslo1`, `haslo2`, `data`) VALUES ('".$login."', '".$email."', '".$haslo1."', '".$haslo2."', '".$data."')";
  18. if ( ! mysql_query($zapytanie))
  19. {
  20. }
  21. else
  22. {
  23. echo 'Twoje konto zosta&#x142;o za&#x142;o&#x17C;one';
  24. }
  25. mysql_close($connect);
  26. ?>


Co robić?

Jak zrobić takie coś, że jeśli wszystkie pola nie zostaną uzupełnione to nie przejdzie dalej?
ziqzaq
1. Nie podaje gotowych przykładów po to żebyś przejrzał podane przeze mnie linki. winksmiley.jpg
  1. if ($_SERVER['REQUEST_METHOD'] == 'POST')
  2. {
  3. // Najpierw sprawdź czy pola formularza są wypełnione (np. funkcją empty())
  4. // i zabezpiecz się przed sql injection (drugi link niżej)
  5. // Teraz polaczenie z baza
  6. // Teraz dodawanie rekordu do bazy
  7. }

2. Kod html daj poza "?>" bez "echo". IMHO będzie kod przejrzystszy.
3.
Dwa wątki dla ciebie do przejrzenia: zapis przy odświeżaniu i sql injection.
4. Poszukaj na forum tematów o rejestracji. Na pewno jest multum przykładów.

PS. Teraz zauważyłem takie coś:
  1. $data = $_POST['Y-m-d'];

Co wg. ciebie to robi i skąd się wzięło?
nansss
Cytat(ziqzaq @ 18.08.2009, 20:37:55 ) *
  1. $data = $_POST['Y-m-d'];

Co wg. ciebie to robi i skąd się wzięło?


Teraz jest tak:

  1. $data = date('Y-m-d-G:i:s');



Ociu
Panie nansss. Jeszcze jeden post typu 'dobrze?' itp. skończą się ostrzeżeniem. Dużo szybciej jest jak Pan sobie sam sprawdzi i postara się sam rozwiązać problem niż lecieć na forum i czekać na gotowca.
nansss
W miarę swoich możliwości poradziłem sobie. Jeszcze została mi jedna rzecz do zrobienia z którą nie mogę sobie poradzić. Mianowicie jest to skrypt aby sprawdzić czy dana nazwa użytkownika istnieje. Jeśli tak to nie zezwoli na rejestracje i poda odpowiedni komunikat. Natomiast jeśli nie istnieje to można utworzyć. Nie wiem jak to zrobić.
Mógłbym prosić o pomoc?
potreb
Tworzysz proste zapytanie
  1. SELECT username, count(username) AS isusername FROM tabela WHERE username = $_POST['username']
Fifi209
Wystarczy, że dasz index unique na login. (na mail też możesz)
I się nie doda. winksmiley.jpg
nansss
Cytat(fifi209 @ 19.08.2009, 01:57:59 ) *
Wystarczy, że dasz index unique na login. (na mail też możesz)
I się nie doda. winksmiley.jpg


Zrobiłem tak i nie dodaje, ale teraz chcę zeby pokazywał odpowiedni komunikat

  1. elseif(co tutaj?)
  2. {
  3. echo '<center>Podana nazwa u&#x17C;ytkownika jest ju&#x17C; zaj&#x119;ta.</center> <meta http-equiv="Refresh" content="3; url=index.php" />';
  4. }


Dzięki za pomoc
marian2299
Takie głupie pytanie, ale:
Czemu hasła nie sa w md5 ?
  1. #
  2. $haslo1 = $_POST['haslo1'];
  3. #
  4. $haslo2 = $_POST['haslo2'];
  5. #
  6. $data = $_POST['Y-m-d'];
  7. #
  8. $zapytanie = "INSERT INTO `rejestracja` ('login', 'email', 'haslo1', 'haslo2' 'data') VALUES ('".$login."', '".$email."', '".$haslo1."', '".$haslo2."', '".$data."')" or die(mysql_error());

Jaki jest sens wysyłania potwierdzenia hasła do bazy ?


Zrób to tak:

  1. <?php
  2. $connect = mysql_connect('localhost', 'root', 'password') or die('Nie mo?na po??czyc si? z baz? danych. Przepraszamy za k?opoty');
  3. $db = mysql_select_db('db') or die('Nie mo?na wybra? bazy danych. Przepraszamy za k?opoty');
  4.  
  5. $login = $_POST['login'];
  6. $email = $_POST['email'];
  7. $haslo = md5($_POST['haslo1']);
  8. $haslo2 = md5($_POST['haslo2']);
  9. $data = date('Y-m-d-G:i:s');
  10.  
  11. if (issset($_POST['rejestruj'])){
  12. if($login != NULL or $email != NULL or $haslo != NULL){
  13. echo "Uzupełnij wszystkie pola"; }
  14. else {
  15. $ile =mysql_query("SELECT * FROM `rejestracja` WHERE login = '$login'");
  16. $ile = mysql_num_rows($ile);
  17.  
  18. if ($ile==0) {
  19.  
  20. $zapytanie = "INSERT INTO `rejestracja` (`login`, `email`, `haslo`, `data`) VALUES ('".$login."', '".$email."', '".$haslo."', '".$data."')";
  21.  
  22. echo "Użytkownik \"".$login."\" został zarejestrowany";
  23.  
  24. } else { echo "Taki użytkownik już istnieje. Wybierz inny login"; }
  25. }
  26. }
  27. else echo'<p style="text-align: center;"><form action="zaloguj.php" method="post">
  28. Login:<br /> <input type="text" name="login" /><br /><br />
  29. email:<br /> <input type="text" name="email" /><br /><br />
  30. Hasło<br /> <input type="password" name="haslo" /><br /><br />
  31. Potwierdź hasło:<br> <input type="password" name="haslo2" /><br />
  32. <input type="submit" name="rejestruj" value="Rejestruj" />
  33. <input type="reset" value="Wyczyść" />
  34. </form></p>';
  35.  
  36.  
  37. mysql_close($connect);
  38. ?>

I popraw drobne błędziki.
nansss
Ja się dopiero uczę więc nie znam jeszcze wszystkich możliwości PHP i MySql.

Przy tym pytanie:

Cytat(fifi209 @ 19.08.2009, 01:57:59 ) *
Wystarczy, że dasz index unique na login. (na mail też możesz)
I się nie doda. winksmiley.jpg



Zrobiłem tak i nie dodaje, ale teraz chcę żeby pokazywał odpowiedni komunikat

  1. elseif(co tutaj?)
  2. {
  3. [url="http://www.php.net/echo"]echo[/url] '<center>Podana nazwa u&#x17C;ytkownika jest ju&#x17C; zaj&#x119;ta.</center> <meta http-equiv="Refresh" content="3; url=index.php" />';
  4. }

Spawnm
Kpisz z nas exclamation.gifquestionmark.gifexclamation.gif
Zamykam.
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.