Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Błąd po klikinięciu Zarejestruj
Forum PHP.pl > Forum > Przedszkole
Kerth
Mam taki kod:

  1. <?php
  2. // odbieramy dane z formularza
  3. $nick = $_POST['nick'];
  4. $email = $_POST['email'];
  5. $haslo = $_POST['haslo']; 
  6.  
  7. if($nick || $email || $haslo) {
  8.  
  9. // łączymy się z bazą danych
  10. $connection = @mysql_connect('xxx', 'xxx', 'xxx')
  11. or die('Brak połączenia z serwerem MySQL');
  12. $db = @mysql_select_db('xxx', $connection)
  13. or die('Nie mogę połączyć się z bazą danych');
  14.  
  15. // dodajemy rekord do bazy
  16. $ins = @mysql_query("INSERT INTO `GRACZE` SET `nick` = '$nick', `email` = '$email', `haslo` = '$haslo'");
  17.  
  18. if($ins) echo "Zostałeś poprawnie zarejestrowany.";
  19. else echo "Nie udało się zarejestrować. Skontaktuj się z Administratorem.";
  20.  
  21. mysql_close($connection);
  22. }
  23.  
  24. ?>


Wszystko w pliku z formularzem działa tylko pojawia mi się błąd z odniesieniem do register.php czyli ten kod(linijka 7):

  1. if($nick || $email || $haslo) {


A to błąd:

  1. Parse error: syntax error, unexpected T_IF in Kerth/register.php on line 7


Może mi ktoś powiedzieć co jest źle?
kubek3898
Poczytaj o empty() i/lub isset().

  1. if(!empty($nick))


Analogicznie do innych zmiennych wysyłanych.
Michael2318
Po pierwsze - takie dane należy zabezpieczać!
mysql_real_escape_string
Czyli:

  1. $nick = mysql_real_escape_string($_POST['nick']);
  2. $email = mysql_real_escape_string($_POST['email']);


Dwa:

  1. if ( !empty($nick) || !empty($email) || !empty($haslo) )
  2. {


Bo chyba chciałeś zrobić tak, że jeśli którakolwiek zmienna nie jest pusta to lecisz ze skryptem.
Kerth
To teraz mam coś takiego:

  1. <?php
  2. // odbieramy dane z formularza
  3. $nick = mysql_real_escape_string($_POST['nick']);
  4. $email = mysql_real_escape_string($_POST['email']);
  5. $haslo = mysql_real_escape_string($_POST['haslo']);
  6.  
  7. if ( !empty($nick) || !empty($email || !empty($haslo) ) {
  8.  
  9. // łączymy się z bazą danych
  10. $connection = @mysql_connect('xxx', 'xxx', 'xxx')
  11. or die('Brak połączenia z serwerem MySQL');
  12. $db = @mysql_select_db('xxx', $connection)
  13. or die('Nie mogę połączyć się z bazą danych');
  14.  
  15. // dodajemy rekord do bazy
  16. $ins = @mysql_query("INSERT INTO `GRACZE` SET `nick` = '$nick', `email` = '$email', `haslo` = '$haslo'");
  17.  
  18. if($ins) echo "Zostałeś poprawnie zarejestrowany.";
  19. else echo "Nie udało się zarejestrować. Skontaktuj się z Administratorem.";
  20.  
  21. mysql_close($connection);
  22. }
  23.  
  24. ?>


I tradycyjnie błąd(ta sama linijka[7])

  1. Parse error: syntax error, unexpected T_IF in Kerth/register.php on line 7


PS. Chodzi mi o coś takiego, żeby dane wprowadzane do formularza wysłać do bazy i zapisać jako rekord.

Co teraz?
Michael2318
Mój bład, wybacz:

  1. if ( !empty($nick) || !empty($email) || !empty($haslo) ) {
kubek3898
empty($email), a nie empty($email
Kerth
Michael2318

Ale to jest to samo co wyżej:

  1. if ( !empty($nick) || !empty($email) || !empty($haslo) ) {


Nadal taki sam błąd mi się pojawia.
Michael2318
Nie jest to samo bo tam przed chwilą też poprawiłem. Linia jest na 100% poprawna więc albo Ty ukrywasz jakiś kawałek kodu albo masz inaczej w pliku dodany kod niż tutaj podajesz na forum.
Kerth
To ja może dam całość kodu:

Plik index.php:


  1. <html>
  2. <head>
  3. <title> </title>
  4. </head>
  5. <body>
  6. <form action="register.php" method="post">
  7. Nick:<br />
  8. <input type="text" name="nick" /><br />
  9. Hasło:<br />
  10. <input type="text" name="haslo" /><br />
  11. E-mail:<br />
  12. <input type="text" name="email" /><br />
  13.  
  14. <input type="submit" value="Zarejestruj" />
  15. </form>
  16. </body>
  17. </html>


plik register.php:

  1. <?php
  2. // odbieramy dane z formularza
  3. $nick = mysql_real_escape_string($_POST['nick']);
  4. $email = mysql_real_escape_string($_POST['email']);
  5. $haslo = mysql_real_escape_string($_POST['haslo']);
  6.  
  7. if ( !empty($nick) || !empty($email) || !empty($haslo) ) {
  8.  
  9. // łączymy się z bazą danych
  10. $connection = @mysql_connect('xxx', 'xxx', 'xxx')
  11. or die('Brak połączenia z serwerem MySQL');
  12. $db = @mysql_select_db('xxx', $connection)
  13. or die('Nie mogę połączyć się z bazą danych');
  14.  
  15. // dodajemy rekord do bazy
  16. $ins = @mysql_query("INSERT INTO `GRACZE` SET `nick` = '$nick', `email` = '$email', `haslo` = '$haslo'");
  17.  
  18. if($ins) echo "Zostałeś poprawnie zarejestrowany.";
  19. else echo "Nie udało się zarejestrować. Skontaktuj się z Administratorem.";
  20.  
  21. mysql_close($connection);
  22. }
  23.  
  24. ?>


I błąd:

  1. Parse error: syntax error, unexpected T_BOOLEAN_OR, expecting ')' in /virtual/dawid4157.cba.pl/gra.dawid4157.cba.pl/register.php on line 7


Może w index.php jest coś nie tak?
Michael2318
No i co? Mówiłem, że nadal masz źle... Nie upieraj się, że wyżej jest tak samo jak wcześniej bo nie jest:

Cytat
if ( !empty($nick) || !empty($email_TU_BRAK_NAWIASU_DYKAJACEGO || !empty($haslo) ) {


ma być tak:

  1. if ( !empty($nick) || !empty($email) || !empty($haslo) ) {


Pisze Ci to po raz drugi wink.gif
Kerth
Nieporozumienie. Chwilę po wysłaniu posta edytowałem i wstawiłem nawias. Ale ok teraz "jest dobrze"(bo nie ma błędu) ale nie ma też nic. Po kliknięciu na "Zarejestruj" pokazuje się pusta strona a rekord nie dodaje się do bazy.
Michael2318
  1. $connection = @mysql_connect('xxx', 'xxx', 'xxx')


brakuje średnika na końcu.

Hasła dodając do bazy trzeba hashować (md5, sha1, cryptitd).
Funkcji mysql_query nie należy głuszyć, należy dodać kominukaty zwronte o błędzie jeśli wystepują - zaoszczędzi to czasu ludziom, którzy będą czytali kolejny Twój temat z problemem i Tobie samemu wink.gif

Zapytania SQL powinny być dodawane mniej więcej tak:
  1. $sql = "INSERT INTO tabela (nazwa_pola1, nazwa_pola2) VALUES ('".$zmienna1."', '".$zmienna2."')";
  2. if ( !($result = mysql_query($sql)) )
  3. {
  4. die('error in sql<br>'.mysql_error());
  5. }
kubek3898
Żadnego średnika nie brakuje jest przecież or die().

Skoro pokazuje się biała strona to wyrzuć @, bo ono tłumi błędy i pokaż co Ci wyrzuciło.
Michael2318
Co do or die() - zwracam honor.
Cytat
A zapytanie wykonuje dobrze...


Jeśli jesteś taki pewny to powodzenia w przyszłości w programowaniu... wink.gif Obyś nie osiwial od zgadywania gdzie jest błąd smile.gif
kubek3898
@up

Dobra teraz ja zwracam honor. Nie zauważyłem, że brakuje "" i "." biggrin.gif

Ale sama struktura zapytania jest dobra.
Kerth
A to jak w końcu ma to zapytanie wyglądać?

  1. $ins = @mysql_query("INSERT INTO `GRACZE` SET `nick` = "$nick", `email` = "$email", `haslo` = "$haslo");


Można chyba też stosować taką formę zapytania INSERT INTO bez VALUES(ja wolę tak)

PS. Zapytania w PAWN były łatwiejsze.
kubek3898
  1. mysql_query("INSERT INTO `GRACZE` SET `nick` = '".$nick."', `email` = '".$email."', `haslo` = '".$haslo."');
Michael2318
Moja uwaga dotyczyła się zwracania błedów mysql przez Ciebie. Nie dość że nie zwracasz sobie treści błędu mysql (funkcja mysql_error) to jeszcze głuszysz mysql_query ...
  1. $sql = "ZAPYTANIE";
  2. if ( !($result = mysql_query($sql)) )
  3. {
  4. die('error in sql<br>'.mysql_error());
  5. }
Kerth
Ale ja w kodzie nie mam nic związanego z mysql_error. Nie ma nawet takiej linijki.

Natomiast teraz mam taki bład z odniesieniem do linijki 19:

  1. if($ins) echo "Zostałeś poprawnie zarejestrowany.";


Błąd:
  1. Parse error: syntax error, unexpected T_STRING in /virtual/dawid4157.cba.pl/gra.dawid4157.cba.pl/register.php on line 19
Michael2318
No i właśnie to jest błąd, że tej linijki tam nie masz! Zastosuj się do tego co napisałem i sprawdź wreszcie co zwraca mysql_error() (jeśli nic nie zwróci to zapytanie jest poprawne)...
Kerth
Że niby tak?

  1. <?php
  2. // odbieramy dane z formularza
  3. $nick = mysql_real_escape_string($_POST['nick']);
  4. $email = mysql_real_escape_string($_POST['email']);
  5. $haslo = mysql_real_escape_string($_POST['haslo']);
  6.  
  7. $ins = "ZAPYTANIE";
  8. if ( !($result = mysql_query($ins)) )
  9. {
  10. die('error in sql<br>'.mysql_error());
  11. }
  12.  
  13. if ( !empty($nick) || !empty($email) || !empty($haslo) ) {
  14.  
  15. // łączymy się z bazą danych
  16. $connection = @mysql_connect('xxx', 'xxx', 'xxx')
  17. or die('Brak połączenia z serwerem MySQL');
  18. $db = @mysql_select_db('xxx', $connection)
  19. or die('Nie mogę połączyć się z bazą danych');
  20.  
  21. // dodajemy rekord do bazy
  22.  
  23. $ins = @mysql_query("INSERT INTO `GRACZE` SET `nick` = '".$nick."', `email` = '".$email."', `haslo` = '".$haslo."');
  24.  
  25. if($ins) echo "Zostałeś poprawnie zarejestrowany.";
  26. else echo "Nie udało się zarejestrować. Skontaktuj się z Administratorem.";
  27.  
  28. mysql_close($connection);
  29. }
  30.  
  31. ?>
Michael2318
  1. <?php
  2. // odbieramy dane z formularza
  3. $nick = mysql_real_escape_string($_POST['nick']);
  4. $email = mysql_real_escape_string($_POST['email']);
  5. $haslo = mysql_real_escape_string($_POST['haslo']);
  6.  
  7. if ( !empty($nick) || !empty($email) || !empty($haslo) ) {
  8.  
  9. // łączymy się z bazą danych
  10. $connection = mysql_connect('xxx', 'xxx', 'xxx')
  11. or die('Brak połączenia z serwerem MySQL');
  12. $db = mysql_select_db('xxx', $connection)
  13. or die('Nie mogę połączyć się z bazą danych');
  14.  
  15. // dodajemy rekord do bazy
  16.  
  17. $sql = "INSERT INTO `GRACZE` SET `nick` = '".$nick."', `email` = '".$email."', `haslo` = '".$haslo."'";
  18. if ( !($result = mysql_query($sql)) )
  19. {
  20. die('error in sql<br>'.mysql_error());
  21. }
  22. else
  23. {
  24. echo "Zostałeś poprawnie zarejestrowany.";
  25. }
  26.  
  27. mysql_close($connection);
  28. }
  29.  
  30. ?>


Kompletnie nie masz pojęcia co ten kod oznacza, tak wnioskuję po tym co przedstawiłeś powyżej.
Zacznij od podstaw bo tak długo nie pociągniesz smile.gif
Kerth
No ja wiem, że powinienem od podstaw ale coś umiem. Ale co do kodu to powracam do punktu wyjścia. Nic się nie pojawia i nie zapisuje.
Michael2318
  1. <?php
  2. ini_set('display_errors', 1);
  3. // odbieramy dane z formularza
  4. $nick = mysql_real_escape_string($_POST['nick']);
  5. $email = mysql_real_escape_string($_POST['email']);
  6. $haslo = $_POST['haslo'];
  7.  
  8. if ( !empty($nick) || !empty($email) || !empty($haslo) ) {
  9.  
  10. // łączymy się z bazą danych
  11. $connection = mysql_connect('xxx', 'xxx', 'xxx')
  12. or die('Brak połączenia z serwerem MySQL');
  13. $db = mysql_select_db('xxx', $connection)
  14. or die('Nie mogę połączyć się z bazą danych');
  15.  
  16. // dodajemy rekord do bazy
  17.  
  18. $sql = "INSERT INTO `GRACZE` (`nick`, `email`, `haslo`) VALUES('".$nick."', ".$email."', '".$haslo."')";
  19. if ( !($result = mysql_query($sql)) )
  20. {
  21. die('error in sql<br>'.mysql_error());
  22. }
  23. else
  24. {
  25. echo "Zostałeś poprawnie zarejestrowany.";
  26. }
  27.  
  28. mysql_close($connection);
  29. }
  30.  
  31. ?>
Kerth
Teraz to kosmos.

  1. Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) in /virtual/dawid4157.cba.pl/gra.dawid4157.cba.pl/register.php on line 5
  2.  
  3. Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /virtual/dawid4157.cba.pl/gra.dawid4157.cba.pl/register.php on line 5
  4.  
  5. Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) in /virtual/dawid4157.cba.pl/gra.dawid4157.cba.pl/register.php on line 6
  6.  
  7. Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /virtual/dawid4157.cba.pl/gra.dawid4157.cba.pl/register.php on line 6
  8. error in sql
  9. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'dawid')' at line 1
Michael2318
Od razu lepiej, wywal łączenie z bazą na sam poczatek:

  1. // łączymy się z bazą danych
  2. $connection = mysql_connect('xxx', 'xxx', 'xxx')
  3. or die('Brak połączenia z serwerem MySQL');
  4. $db = mysql_select_db('xxx', $connection)
  5. or die('Nie mogę połączyć się z bazą danych');


dodaj to po:

  1. <?php
  2. ini_set('display_errors', 1);
Kerth
  1. error in sql
  2. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@vp.pl', 'dawid')' at line 1



Co to oznacza?
Michael2318
I po to są właśnie komunikaty błędów.
Oznacza to tyle, że się machnąłem - nie tak:

  1. ".$email."'


tylko tak:

  1. '".$email."'
Kerth
Teraz wszystko działa. Dzięki wielkie.

PS. Wiem, że możesz pomyśleć sobie, że biorę się za coś jak nie umiem a to nie prawda. Chcę się nauczyć PHP w taki sposób jak się uczyłem PAWN tzn. pisząc różne systemy i powoli dążyć do stworzenia czegoś. Tam też pisałem nie wiadomo co aż w końcu się nauczyłem i stworzyłem serwer gry(SA:MP). A w tym przypadku próbuję zrobić swój system rejestracji.
Mam nadzieje, że się nauczę z tego forum dużo. Jeszcze raz dzięki wielkie. aarambo.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.