Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PDO]Problem z zapytaniem
Forum PHP.pl > Forum > Przedszkole
GandiFly
Witam mam taki oto problem:
To jest kod pliku register.php
  1. <?php
  2. include 'config.php';
  3. if (isset($_POST['send'])) {
  4.  
  5. // Zabezpiecz dane z formularza przed kodem HTML
  6.  
  7. $email = htmlspecialchars($_POST['email']);
  8. $email_re = htmlspecialchars($_POST['email_re']);
  9. $pass = htmlspecialchars($_POST['pass']);
  10. $pass_re = htmlspecialchars($_POST['pass_re']);
  11.  
  12. // Sprawdź czy podany email istnieje już w bazie
  13.  
  14. $existEmail = $pdo->prepare("SELECT COUNT(*) FROM users WHERE email = :email LIMIT 1");
  15. $existEmail->execute(array(':email' => $email));
  16.  
  17. $error = ''; // Zmienna przechowywująca wszystkie błędy
  18.  
  19. // Sprawdzanie czy nie wystąpiły błędy
  20.  
  21. if (!$email || !$email_re || !$pass || !$pass_re ) $error .= 'Musisz wypełnić wszystkie pola formularza <br>';
  22. if ($existEmail[0] >= 1) $error .= '-Ten email jest już używany <br>';
  23. if ($email != $email_re) $error .= '- E-maile się nie zgadzają<br>';
  24. if ($pass != $pass_re) $error .= '- Hasła się nie zgadzają<br>';
  25.  
  26. // Jeżeli jakieś błędy wystąpiły to je wyświetl:
  27.  
  28. if ($error != '') {
  29. echo '<p class="error">Rejestracja nie powiodła się, popraw następujące błędy:<br>'.$errors.'</p>';
  30. }
  31.  
  32. // Jeżeli wszystko jest OK to kontynuuj rejestrację
  33.  
  34. else {
  35.  
  36. // Losuj kod aktywujący, koduj hasło
  37.  
  38. $pass = sha1($pass);
  39. $kod = uniqid(rand());
  40.  
  41. // Zapisz dane do bazy
  42.  
  43. $pdo -> prepare("INSERT INTO users (email, pass, adresip, data, kod) VALUES (:email, :pass, '{$_SERVER['REMOTE_ADDR']}', NOW(), '$kod' );");
  44. $pdo->execute(array(':email' => $email));
  45. $pdo->execute(array(':pass' => $pass));
  46.  
  47. $list = "Witaj '.$email.'! Kliknij w poniższy link, aby aktywować swoje konto. '.$moja_strona.'weryfikacja.php?weryfikacja=potwierdz&kod='.$kod.'";
  48.  
  49. mail ($email, "Rejestracja użytkownika", $list, "From: <kontakt@twoja-strona.pl>");
  50. echo '<p class="success">'.$email.', zostałeś zarejestrowany. Na adres email został wysłany mail z linkiem aktywującym. Jeżeli w ciągu 5 min go nie dostaniesz proszę sprawdzić też w spamie.</p>';
  51. }
  52. } else {
  53. ?>
  54.  
  55. <form method="post" action="">
  56.  
  57. <label for="email">Email:</label>
  58. <input type="text" name="email" maxlength="50" id="email" />
  59.  
  60. <label for="email_again">Email (ponownie):</label>
  61. <input type="text" maxlength="255" name="email_re" id="email_again" /><br />
  62.  
  63. <label for="pass">Hasło:</label>
  64. <input maxlength="32" type="password" name="pass" id="pass" />
  65.  
  66. <label for="pass_again">Hasło (ponownie):</label>
  67. <input maxlength="32" type="password" name="pass_re" id="pass_again" />
  68. <br />
  69. Akceptuje regulamin: <input type="checkbox" name="reg" id="reg" onClick="if(this.checked==true){ submit.disabled=false;}else{ submit.disabled=true;}" />
  70. <br />
  71. <input type="hidden" name="send" value="1" />
  72. <input type="submit" id="submit" value="Zarejestruj" disabled="true"/>
  73. </form>
  74. <?php
  75. }
  76. ?>


Podczas próby zarejestrowania wyskakuje mi taki błąd:
  1. Fatal error: Cannot use object of type PDOStatement as array in /home/u817225384/public_html/demo/skrypty/register.php on line 22


PDO dopiero się ucze tak więc prosił bym o pomoc. Z góry dziękuje
skowron-line
Nie pobrałeś wartości po wykonaniu zapytania. W linii 22 odwołujesz się do obiektu PDO
Zobacz http://www.php.net/manual/en/pdo.prepare.php (example)
sajegib
Przeczytaj komunikat ktory dostajesz od parsera, nie możesz użyć obiektu jak tablicy, musisz zrobić fetch najpierw
GandiFly
Dzięki za odpowiedź już do tego doszedłem i rozwiązałem lecz niestety mam 2 problem.
To jest przerobiony kod:
  1. <?php
  2. include 'config.php';
  3. if (isset($_POST['send'])) {
  4.  
  5. // Zabezpiecz dane z formularza przed kodem HTML
  6.  
  7. $email = htmlspecialchars($_POST['email']);
  8. $email_re = htmlspecialchars($_POST['email_re']);
  9. $pass = htmlspecialchars($_POST['pass']);
  10. $pass_re = htmlspecialchars($_POST['pass_re']);
  11.  
  12. // Sprawdź czy podany email istnieje już w bazie
  13.  
  14. $stat = $pdo -> prepare("SELECT COUNT(*) FROM users WHERE email = :email LIMIT 1");
  15. $stat -> bindValue(':email', $email, PDO::PARAM_STR);
  16. $stat -> execute();
  17. $existEmail = $stat->fetchAll();
  18.  
  19. $error = ''; // Zmienna przechowywująca wszystkie błędy
  20.  
  21. // Sprawdzanie czy nie wystąpiły błędy
  22.  
  23. if (!$email || !$email_re || !$pass || !$pass_re ) $error .= 'Musisz wypełnić wszystkie pola formularza <br>';
  24. if ($existEmail -> rowCount >= 1) $error .= '-Ten email jest już używany <br>';
  25. if ($email != $email_re) $error .= '- E-maile się nie zgadzają<br>';
  26. if ($pass != $pass_re) $error .= '- Hasła się nie zgadzają<br>';
  27.  
  28. // Jeżeli jakieś błędy wystąpiły to je wyświetl:
  29.  
  30. if ($error != '') {
  31. echo '<p class="error">Rejestracja nie powiodła się, popraw następujące błędy:<br>'.$errors.'</p>';
  32. }
  33.  
  34. // Jeżeli wszystko jest OK to kontynuuj rejestrację
  35.  
  36. else {
  37.  
  38. // Losuj kod aktywujący, koduj hasło
  39.  
  40. $pass = sha1($pass);
  41. $kod = uniqid(rand());
  42.  
  43. // Zapisz dane do bazy
  44.  
  45. $zapytanie = $pdo -> prepare("INSERT INTO users (email, pass, adresip, data, kod) VALUES (:email, :pass, '{$_SERVER['REMOTE_ADDR']}', NOW(), '$kod' );");
  46. $pdo -> bindValue(':email', $email, PDO::PARAM_STR);
  47. $pdo -> bindValue(':pass', $pass, PDO::PARAM_STR);
  48. $zapytanie -> execute();
  49.  
  50. $list = "Witaj '.$email.'! Kliknij w poniższy link, aby aktywować swoje konto. '.$moja_strona.'weryfikacja.php?weryfikacja=potwierdz&kod='.$kod.'";
  51.  
  52. mail ($email, "Rejestracja użytkownika", $list, "From: <kontakt@twoja-strona.pl>");
  53. echo '<p class="success">'.$email.', zostałeś zarejestrowany. Na adres email został wysłany mail z linkiem aktywującym. Jeżeli w ciągu 5 min go nie dostaniesz proszę sprawdzić też w spamie.</p>';
  54. }
  55. } else {
  56. ?>
  57.  
  58. <form method="post" action="">
  59.  
  60. <label for="email">Email:</label>
  61. <input type="text" name="email" maxlength="50" id="email" />
  62.  
  63. <label for="email_again">Email (ponownie):</label>
  64. <input type="text" maxlength="255" name="email_re" id="email_again" /><br />
  65.  
  66. <label for="pass">Hasło:</label>
  67. <input maxlength="32" type="password" name="pass" id="pass" />
  68.  
  69. <label for="pass_again">Hasło (ponownie):</label>
  70. <input maxlength="32" type="password" name="pass_re" id="pass_again" />
  71. <br />
  72. Akceptuje regulamin: <input type="checkbox" name="reg" id="reg" onClick="if(this.checked==true){ submit.disabled=false;}else{ submit.disabled=true;}" />
  73. <br />
  74. <input type="hidden" name="send" value="1" />
  75. <input type="submit" id="submit" value="Zarejestruj" disabled="true"/>
  76. </form>
  77. <?php
  78. }
  79. ?>


A taki błąd wyskakuje:
  1. Fatal error: Call to undefined method PDO::bindValue() in /home/u817225384/public_html/demo/skrypty/register.php on line 46
c1chy
W komunikacie masz wszystko napisane, klasa PDO nie ma metody bindValue za to klasa PDOStatement ją ma.
GandiFly
Niestety nie za bardzo rozumiem.

Czyli zamiast tego:
  1. $zapytanie = $pdo -> prepare("INSERT INTO users (email, pass, adresip, data, kod) VALUES (:email, :pass, '{$_SERVER['REMOTE_ADDR']}', NOW(), '$kod' );");
  2. $pdo -> bindValue(':email', $email, PDO::PARAM_STR);
  3. $pdo -> bindValue(':pass', $pass, PDO::PARAM_STR);
  4. $zapytanie -> execute();


Ma być tak:

  1. $zapytanie = $pdo -> prepare("INSERT INTO users (email, pass, adresip, data, kod) VALUES (:email, :pass, '{$_SERVER['REMOTE_ADDR']}', NOW(), '$kod' );");
  2. $pdo -> execute(array(':email', $email, PDO::PARAM_STR));
  3. $pdo -> execute(array(':pass', $pass, PDO::PARAM_STR));

nospor
http://pl1.php.net/manual/en/pdostatement.bindvalue.php
Czy tak ciezko zajrzej i zobaczyc jak sie uzywa BINDVALUE?questionmark.gifquestionmark.gif?
GandiFly
Wszystko jest niby ok wyświetla się odpowiedni komunikat lecz nic się nie dodaje do bazy:
Oto kod:
  1. <?php
  2. include 'config.php';
  3. if (isset($_POST['send'])) {
  4.  
  5. // Zabezpiecz dane z formularza przed kodem HTML
  6.  
  7. $email = htmlspecialchars($_POST['email']);
  8. $email_re = htmlspecialchars($_POST['email_re']);
  9. $pass = htmlspecialchars($_POST['pass']);
  10. $pass_re = htmlspecialchars($_POST['pass_re']);
  11.  
  12. // Sprawdź czy podany email istnieje już w bazie
  13.  
  14. $zapytanie = "SELECT COUNT(*) FROM users WHERE email = :email LIMIT 1";
  15. $existEmail = $pdo->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
  16. $existEmail -> bindValue(':email', $email, PDO::PARAM_STR);
  17. $existEmail -> execute();
  18. $existEmail = $existEmail->fetchAll();
  19.  
  20.  
  21. $error = ''; // Zmienna przechowywująca wszystkie błędy
  22.  
  23. // Sprawdzanie czy nie wystąpiły błędy
  24.  
  25. if (!$email || !$email_re || !$pass || !$pass_re ) $error .= 'Musisz wypełnić wszystkie pola formularza <br>';
  26. if ($existEmail -> rowCount >= 1) $error .= '-Ten email jest już używany <br>';
  27. if ($email != $email_re) $error .= '- E-maile się nie zgadzają<br>';
  28. if ($pass != $pass_re) $error .= '- Hasła się nie zgadzają<br>';
  29.  
  30. // Jeżeli jakieś błędy wystąpiły to je wyświetl:
  31.  
  32. if ($error != '') {
  33. echo '<p class="error">Rejestracja nie powiodła się, popraw następujące błędy:<br>'.$error.'</p>';
  34. }
  35.  
  36. // Jeżeli wszystko jest OK to kontynuuj rejestrację
  37.  
  38. else {
  39.  
  40. // Losuj kod aktywujący, koduj hasło
  41.  
  42. $pass = sha1($pass);
  43. $kod = uniqid(rand());
  44.  
  45. // Zapisz dane do bazy
  46.  
  47. $zapytanie = $pdo->prepare("INSERT INTO users (email, pass, adresip, data, kod) VALUES (:email, :pass, '{$_SERVER['REMOTE_ADDR']}', NOW(), '$kod' );");
  48. $zapytanie->bindValue(':email', $email);
  49. $zapytanie->bindValue(':pass', $pass);
  50. $zapytanie->execute();
  51.  
  52. $list = "Witaj '.$email.'! Kliknij w poniższy link, aby aktywować swoje konto. '.$moja_strona.'weryfikacja.php?weryfikacja=potwierdz&kod='.$kod.'";
  53.  
  54. mail ($email, "Rejestracja użytkownika", $list, "From: <kontakt@twoja-strona.pl>");
  55. echo '<p class="success">'.$email.', zostałeś zarejestrowany. Na adres email został wysłany mail z linkiem aktywującym. Jeżeli w ciągu 5 min go nie dostaniesz proszę sprawdzić też w spamie.</p>';
  56. }
  57. } else {
  58. ?>
  59.  
  60. <form method="post" action="">
  61.  
  62. <label for="email">Email:</label>
  63. <input type="text" name="email" maxlength="50" id="email" />
  64.  
  65. <label for="email_again">Email (ponownie):</label>
  66. <input type="text" maxlength="255" name="email_re" id="email_again" /><br />
  67.  
  68. <label for="pass">Hasło:</label>
  69. <input maxlength="32" type="password" name="pass" id="pass" />
  70.  
  71. <label for="pass_again">Hasło (ponownie):</label>
  72. <input maxlength="32" type="password" name="pass_re" id="pass_again" />
  73. <br />
  74. Akceptuje regulamin: <input type="checkbox" name="reg" id="reg" onClick="if(this.checked==true){ submit.disabled=false;}else{ submit.disabled=true;}" />
  75. <br />
  76. <input type="hidden" name="send" value="1" />
  77. <input type="submit" id="submit" value="Zarejestruj" disabled="true"/>
  78. </form>
  79. <?php
  80. }
  81. ?>


Wszystko robiłem tak jak tutaj: PDOStatement

Tutaj można zobaczyć działanie kodu:
http://dynamicwebs.zz.mu/demo/skrypty/register.php/
nospor
Widocznie masz blad zapytania. Wyswietl go
GandiFly
Po wyświetleniu ukazuje się taki błąd:
  1. Catchable fatal error: Object of class PDOStatement could not be converted to string in /home/u817225384/public_html/demo/skrypty/register.php on line 52


Mam taki kod:

  1. <?php
  2. include 'config.php';
  3. if (isset($_POST['send'])) {
  4.  
  5. // Zabezpiecz dane z formularza przed kodem HTML
  6.  
  7. $email = htmlspecialchars($_POST['email']);
  8. $email_re = htmlspecialchars($_POST['email_re']);
  9. $pass = htmlspecialchars($_POST['pass']);
  10. $pass_re = htmlspecialchars($_POST['pass_re']);
  11.  
  12. // Sprawdź czy podany email istnieje już w bazie
  13.  
  14. $zapytanie = "SELECT COUNT(*) FROM users WHERE email = :email LIMIT 1";
  15. $existEmail = $pdo->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
  16. $existEmail -> bindValue(':email', $email, PDO::PARAM_STR);
  17. $existEmail -> execute();
  18. $existEmail = $existEmail->fetchAll();
  19.  
  20.  
  21. $error = ''; // Zmienna przechowywująca wszystkie błędy
  22.  
  23. // Sprawdzanie czy nie wystąpiły błędy
  24.  
  25. if (!$email || !$email_re || !$pass || !$pass_re ) $error .= 'Musisz wypełnić wszystkie pola formularza <br>';
  26. if ($existEmail -> rowCount >= 1) $error .= '-Ten email jest już używany <br>';
  27. if ($email != $email_re) $error .= '- E-maile się nie zgadzają<br>';
  28. if ($pass != $pass_re) $error .= '- Hasła się nie zgadzają<br>';
  29.  
  30. // Jeżeli jakieś błędy wystąpiły to je wyświetl:
  31.  
  32. if ($error != '') {
  33. echo '<p class="error">Rejestracja nie powiodła się, popraw następujące błędy:<br>'.$error.'</p>';
  34. }
  35.  
  36. // Jeżeli wszystko jest OK to kontynuuj rejestrację
  37.  
  38. else {
  39.  
  40. // Losuj kod aktywujący, koduj hasło
  41.  
  42. $pass = sha1($pass);
  43. $kod = uniqid(rand());
  44.  
  45. // Zapisz dane do bazy
  46.  
  47. $zapytanie = $pdo->prepare("INSERT INTO users (email, pass, adresip, data, kod) VALUES (:email, :pass, '{$_SERVER['REMOTE_ADDR']}', NOW(), '$kod' );");
  48. $zapytanie->bindValue(':email', $email);
  49. $zapytanie->bindValue(':pass', $pass);
  50. $zapytanie->execute();
  51.  
  52. echo $zapytanie;
  53.  
  54. $list = "Witaj '.$email.'! Kliknij w poniższy link, aby aktywować swoje konto. '.$moja_strona.'weryfikacja.php?weryfikacja=potwierdz&kod='.$kod.'";
  55.  
  56. mail ($email, "Rejestracja użytkownika", $list, "From: <kontakt@twoja-strona.pl>");
  57. echo '<p class="success">'.$email.', zostałeś zarejestrowany. Na adres email został wysłany mail z linkiem aktywującym. Jeżeli w ciągu 5 min go nie dostaniesz proszę sprawdzić też w spamie.</p>';
  58. }
  59. } else {
  60. ?>
  61.  
  62. <form method="post" action="">
  63.  
  64. <label for="email">Email:</label>
  65. <input type="text" name="email" maxlength="50" id="email" />
  66.  
  67. <label for="email_again">Email (ponownie):</label>
  68. <input type="text" maxlength="255" name="email_re" id="email_again" /><br />
  69.  
  70. <label for="pass">Hasło:</label>
  71. <input maxlength="32" type="password" name="pass" id="pass" />
  72.  
  73. <label for="pass_again">Hasło (ponownie):</label>
  74. <input maxlength="32" type="password" name="pass_re" id="pass_again" />
  75. <br />
  76. Akceptuje regulamin: <input type="checkbox" name="reg" id="reg" onClick="if(this.checked==true){ submit.disabled=false;}else{ submit.disabled=true;}" />
  77. <br />
  78. <input type="hidden" name="send" value="1" />
  79. <input type="submit" id="submit" value="Zarejestruj" disabled="true"/>
  80. </form>
  81. <?php
  82. }
  83. ?>
nospor
Masz wyswietlic blad PDO a nie obiekt PDO...
GandiFly
Gdy wyświetlam błąd PDO takim kodem:
  1. try
  2. {
  3. $pdo->query("INSERT INTO users (email, pass, adresip, data, kod) VALUES ('$email', '$pass', '{$_SERVER['REMOTE_ADDR']}', NOW(), '$kod' );");
  4. }
  5. catch(PDOException $e)
  6. {
  7. print_r( $e->getMessage() );
  8. }


To nic się nie pokazuje.

No bo mnie szlag trafi. Albo ten błąd jest tak prosty albo ja jestem tak głupi.
Dalej nie działa:

  1. <?php
  2. include 'config.php';
  3. if (isset($_POST['send'])) {
  4.  
  5. // Zabezpiecz dane z formularza przed kodem HTML
  6.  
  7. $email = htmlspecialchars($_POST['email']);
  8. $email_re = htmlspecialchars($_POST['email_re']);
  9. $pass = htmlspecialchars($_POST['pass']);
  10. $pass_re = htmlspecialchars($_POST['pass_re']);
  11.  
  12. // Sprawdź czy podany email istnieje już w bazie
  13. $zapytanie = "SELECT COUNT(*) FROM users WHERE email = :email LIMIT 1";
  14. $existEmail = $pdo->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
  15. $existEmail -> bindValue(':email', $email, PDO::PARAM_STR);
  16. $existEmail -> execute();
  17. $existEmail = $existEmail->fetchAll();
  18.  
  19. $error = ''; // Zmienna przechowywująca wszystkie błędy
  20.  
  21. // Sprawdzanie czy nie wystąpiły błędy
  22.  
  23. if (!$email || !$email_re || !$pass || !$pass_re ) $error .= 'Musisz wypełnić wszystkie pola formularza <br>';
  24. if ($existEmail -> rowCount >= 1) $error .= '-Ten email jest już używany <br>';
  25. if ($email != $email_re) $error .= '- E-maile się nie zgadzają<br>';
  26. if ($pass != $pass_re) $error .= '- Hasła się nie zgadzają<br>';
  27.  
  28. // Jeżeli jakieś błędy wystąpiły to je wyświetl:
  29.  
  30. if ($error != '') {
  31. echo '<p class="error">Rejestracja nie powiodła się, popraw następujące błędy:<br>'.$error.'</p>';
  32. }
  33.  
  34. // Jeżeli wszystko jest OK to kontynuuj rejestrację
  35.  
  36. else {
  37.  
  38. // Losuj kod aktywujący, koduj hasło
  39.  
  40. $pass = sha1($pass);
  41. $kod = uniqid(rand());
  42.  
  43. // Zapisz dane do bazy
  44.  
  45. $zapytanie = $pdo->prepare("INSERT INTO users (email, pass, adresip, data, kod) VALUES (:email, :pass, '{$_SERVER['REMOTE_ADDR']}', NOW(), '$kod' );");
  46. $zapytanie->bindValue(':email', $email, PDO::PARAM_STR);
  47. $zapytanie->bindValue(':pass', $pass, PDO::PARAM_STR);
  48. $zapytanie->execute();
  49.  
  50.  
  51. $list = "Witaj '.$email.'! Kliknij w poniższy link, aby aktywować swoje konto. '.$moja_strona.'weryfikacja.php?weryfikacja=potwierdz&kod='.$kod.'";
  52.  
  53. mail ($email, "Rejestracja użytkownika", $list, "From: <kontakt@twoja-strona.pl>");
  54. echo '<p class="success">'.$email.', zostałeś zarejestrowany. Na adres email został wysłany mail z linkiem aktywującym. Jeżeli w ciągu 5 min go nie dostaniesz proszę sprawdzić też w spamie.</p>';
  55. }
  56. } else {
  57. ?>
  58.  
  59. <form method="post" action="">
  60.  
  61. <label for="email">Email:</label>
  62. <input type="text" name="email" maxlength="50" id="email" />
  63.  
  64. <label for="email_again">Email (ponownie):</label>
  65. <input type="text" maxlength="255" name="email_re" id="email_again" /><br />
  66.  
  67. <label for="pass">Hasło:</label>
  68. <input maxlength="32" type="password" name="pass" id="pass" />
  69.  
  70. <label for="pass_again">Hasło (ponownie):</label>
  71. <input maxlength="32" type="password" name="pass_re" id="pass_again" />
  72. <br />
  73. Akceptuje regulamin: <input type="checkbox" name="reg" id="reg" onClick="if(this.checked==true){ submit.disabled=false;}else{ submit.disabled=true;}" />
  74. <br />
  75. <input type="hidden" name="send" value="1" />
  76. <input type="submit" id="submit" value="Zarejestruj" disabled="true"/>
  77. </form>
  78. <?php
  79. }
  80. ?>


Tak wygląda moja Baza

ber32
Witam.
nospor
Cytat
Widocznie masz blad zapytania.

Racja
  1. $pdo->query("INSERT INTO users (email, pass, adresip, data, kod) VALUES ('$email', '$pass', '{$_SERVER['REMOTE_ADDR']}', NOW(), '$kod' );");

a powinno być
  1. $pdo->query("INSERT INTO users (email, pass, adresip, data, kod) VALUES ('$email', '$pass', '{$_SERVER['REMOTE_ADDR']}', NOW(), '$kod' )");

GandiFly
Niestety dalej nic do bazy się nie dodaje
ber32
no bo masz jeszcze tu błąd

  1. $zapytanie = "SELECT COUNT(*) FROM users WHERE email = :email LIMIT 1";
  2. $existEmail = $pdo->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
GandiFly
Teraz takie coś:

  1. Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: no parameters were bound in /home/u817225384/public_html/demo/skrypty/register.php on line 16


A tak zmieniłem kod
  1. <?php
  2. include 'config.php';
  3. if (isset($_POST['send'])) {
  4.  
  5. // Zabezpiecz dane z formularza przed kodem HTML
  6.  
  7. $email = htmlspecialchars($_POST['email']);
  8. $email_re = htmlspecialchars($_POST['email_re']);
  9. $pass = htmlspecialchars($_POST['pass']);
  10. $pass_re = htmlspecialchars($_POST['pass_re']);
  11. try
  12. {
  13. // Sprawdź czy podany email istnieje już w bazie
  14. $zapytanie = "SELECT COUNT(*) FROM users WHERE email = :email LIMIT 1";
  15. $existEmail = $pdo->prepare($zapytanie, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
  16. $existEmail -> execute();
  17. $existEmail = $existEmail->fetchAll();
  18.  
  19. $error = ''; // Zmienna przechowywująca wszystkie błędy
  20.  
  21. // Sprawdzanie czy nie wystąpiły błędy
  22.  
  23. if (!$email || !$email_re || !$pass || !$pass_re ) $error .= 'Musisz wypełnić wszystkie pola formularza <br>';
  24. if ($existEmail -> rowCount >= 1) $error .= '-Ten email jest już używany <br>';
  25. if ($email != $email_re) $error .= '- E-maile się nie zgadzają<br>';
  26. if ($pass != $pass_re) $error .= '- Hasła się nie zgadzają<br>';
  27.  
  28. // Jeżeli jakieś błędy wystąpiły to je wyświetl:
  29.  
  30. if ($error != '') {
  31. echo '<p class="error">Rejestracja nie powiodła się, popraw następujące błędy:<br>'.$error.'</p>';
  32. }
  33.  
  34. // Jeżeli wszystko jest OK to kontynuuj rejestrację
  35.  
  36. else {
  37.  
  38. // Losuj kod aktywujący, koduj hasło
  39.  
  40. $pass = sha1($pass);
  41. $kod = uniqid(rand());
  42.  
  43. // Zapisz dane do bazy
  44.  
  45. $zapytanie = $pdo->prepare("INSERT INTO users (email, pass, adresip, data, kod) VALUES (:email, :pass, '{$_SERVER['REMOTE_ADDR']}', NOW(), '$kod' )");
  46. $zapytanie->bindValue(':email', $email, PDO::PARAM_STR);
  47. $zapytanie->bindValue(':pass', $pass, PDO::PARAM_STR);
  48. $zapytanie->execute();
  49.  
  50.  
  51. $list = "Witaj '.$email.'! Kliknij w poniższy link, aby aktywować swoje konto. '.$moja_strona.'weryfikacja.php?weryfikacja=potwierdz&kod='.$kod.'";
  52.  
  53. mail ($email, "Rejestracja użytkownika", $list, "From: <kontakt@twoja-strona.pl>");
  54. echo '<p class="success">'.$email.', zostałeś zarejestrowany. Na adres email został wysłany mail z linkiem aktywującym. Jeżeli w ciągu 5 min go nie dostaniesz proszę sprawdzić też w spamie.</p>';
  55. }
  56. }
  57. catch(PDOException $e)
  58. {
  59. print_r( $e->getMessage() );
  60. }
  61.  
  62. } else {
  63. ?>
  64.  
  65. <form method="post" action="">
  66.  
  67. <label for="email">Email:</label>
  68. <input type="text" name="email" maxlength="50" id="email" />
  69.  
  70. <label for="email_again">Email (ponownie):</label>
  71. <input type="text" maxlength="255" name="email_re" id="email_again" /><br />
  72.  
  73. <label for="pass">Hasło:</label>
  74. <input maxlength="32" type="password" name="pass" id="pass" />
  75.  
  76. <label for="pass_again">Hasło (ponownie):</label>
  77. <input maxlength="32" type="password" name="pass_re" id="pass_again" />
  78. <br />
  79. Akceptuje regulamin: <input type="checkbox" name="reg" id="reg" onClick="if(this.checked==true){ submit.disabled=false;}else{ submit.disabled=true;}" />
  80. <br />
  81. <input type="hidden" name="send" value="1" />
  82. <input type="submit" id="submit" value="Zarejestruj" disabled="true"/>
  83. </form>
  84. <?php
  85. }
  86. ?>
  87.  
c1chy
Napiszę to jeszcze raz, komunikat o błędzie mówi wszystko ... masz nawet dokładnie podaną linijkę gdzie jest błąd. Nie warto z każdym errorem tworzyć nowego posta bo nawet jak ktoś za Ciebie to poprawi to nie zapamiętasz tego i za 2 dni będziesz miał identyczny problem.

Żeby jednak nie był to pusty post to w linii nr 16 masz błąd polegający na tym że nie zbindowałeś parametrów które zostały użyte w prepare
ber32
Zadeklaruj
  1. email = :email
GandiFly
Niestety i to nie pomaga.

Teraz mam taki kod:
  1. <?php
  2. include 'config.php';
  3. if (isset($_POST['send'])) {
  4.  
  5. // Zabezpiecz dane z formularza przed kodem HTML
  6.  
  7. $email = htmlspecialchars($_POST['email']);
  8. $email_re = htmlspecialchars($_POST['email_re']);
  9. $pass = htmlspecialchars($_POST['pass']);
  10. $pass_re = htmlspecialchars($_POST['pass_re']);
  11. try
  12. {
  13. // Sprawdź czy podany email istnieje już w bazie
  14. $zapytanie = "SELECT COUNT(*) FROM users WHERE email = :email LIMIT 1";
  15. $existEmail = $pdo->prepare($zapytanie, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
  16. $existEmail->bindValue(':email', $email, PDO::PARAM_STR);
  17. $existEmail -> execute();
  18. $existEmail = $existEmail->fetchAll();
  19.  
  20. $error = ''; // Zmienna przechowywująca wszystkie błędy
  21.  
  22. // Sprawdzanie czy nie wystąpiły błędy
  23.  
  24. if (!$email || !$email_re || !$pass || !$pass_re ) $error .= 'Musisz wypełnić wszystkie pola formularza <br>';
  25. if ($existEmail -> rowCount >= 1) $error .= '-Ten email jest już używany <br>';
  26. if ($email != $email_re) $error .= '- E-maile się nie zgadzają<br>';
  27. if ($pass != $pass_re) $error .= '- Hasła się nie zgadzają<br>';
  28.  
  29. // Jeżeli jakieś błędy wystąpiły to je wyświetl:
  30.  
  31. if ($error != '') {
  32. echo '<p class="error">Rejestracja nie powiodła się, popraw następujące błędy:<br>'.$error.'</p>';
  33. }
  34.  
  35. // Jeżeli wszystko jest OK to kontynuuj rejestrację
  36.  
  37. else {
  38.  
  39. // Losuj kod aktywujący, koduj hasło
  40.  
  41. $pass = sha1($pass);
  42. $kod = uniqid(rand());
  43.  
  44. // Zapisz dane do bazy
  45.  
  46. $zapytanie = $pdo->prepare("INSERT INTO users (email, pass, adresip, data, kod) VALUES (:email, :pass, '{$_SERVER['REMOTE_ADDR']}', NOW(), '$kod' )");
  47. $zapytanie->bindValue(':email', $email, PDO::PARAM_STR);
  48. $zapytanie->bindValue(':pass', $pass, PDO::PARAM_STR);
  49. $zapytanie->execute();
  50.  
  51.  
  52. $list = "Witaj '.$email.'! Kliknij w poniższy link, aby aktywować swoje konto. '.$moja_strona.'weryfikacja.php?weryfikacja=potwierdz&kod='.$kod.'";
  53.  
  54. mail ($email, "Rejestracja użytkownika", $list, "From: <kontakt@twoja-strona.pl>");
  55. echo '<p class="success">'.$email.', zostałeś zarejestrowany. Na adres email został wysłany mail z linkiem aktywującym. Jeżeli w ciągu 5 min go nie dostaniesz proszę sprawdzić też w spamie.</p>';
  56. }
  57. }
  58. catch(PDOException $e)
  59. {
  60. print_r( $e->getMessage() );
  61. }
  62.  
  63. } else {
  64. ?>
  65.  
  66. <form method="post" action="">
  67.  
  68. <label for="email">Email:</label>
  69. <input type="text" name="email" maxlength="50" id="email" />
  70.  
  71. <label for="email_again">Email (ponownie):</label>
  72. <input type="text" maxlength="255" name="email_re" id="email_again" /><br />
  73.  
  74. <label for="pass">Hasło:</label>
  75. <input maxlength="32" type="password" name="pass" id="pass" />
  76.  
  77. <label for="pass_again">Hasło (ponownie):</label>
  78. <input maxlength="32" type="password" name="pass_re" id="pass_again" />
  79. <br />
  80. Akceptuje regulamin: <input type="checkbox" name="reg" id="reg" onClick="if(this.checked==true){ submit.disabled=false;}else{ submit.disabled=true;}" />
  81. <br />
  82. <input type="hidden" name="send" value="1" />
  83. <input type="submit" id="submit" value="Zarejestruj" disabled="true"/>
  84. </form>
  85. <?php
  86. }
  87. ?>
  88.  


http://dynamicwebs.zz.mu/demo/skrypty/register.php

I wszystko idzie dobrze wyświetla się komunikat o zarejestrowania a jednak dane do bazy dalej się nie dodają
ber32
następny błąd
  1. if ($existEmail -> rowCount >= 1) $error .= '-Ten email jest już używany <br>';
GandiFly
Mam teraz tak:
  1. if (!$email || !$email_re || !$pass || !$pass_re ) $error .= 'Musisz wypełnić wszystkie pola formularza <br>';
  2. if ($existEmail -> rowCount() >= 1) $error .= '-Ten email jest już używany <br>';
  3. if ($email != $email_re) $error .= '- E-maile się nie zgadzają<br>';
  4. if ($pass != $pass_re) $error .= '- Hasła się nie zgadzają<br>';


Dobrze to jest?

Chyba że tak:
  1. $zapytanie = "SELECT COUNT(*) FROM users WHERE email = :email LIMIT 1";
  2. $existEmail = $pdo->prepare($zapytanie, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
  3. $existEmail->bindValue(':email', $email, PDO::PARAM_STR);
  4. $existEmail -> execute();
  5. $count = $stat -> rowCount();
  6.  
  7. $error = ''; // Zmienna przechowywująca wszystkie błędy
  8.  
  9. // Sprawdzanie czy nie wystąpiły błędy
  10.  
  11. if (!$email || !$email_re || !$pass || !$pass_re ) $error .= 'Musisz wypełnić wszystkie pola formularza <br>';
  12. if ($count >= 1) $error .= '-Ten email jest już używany <br>';
  13. if ($email != $email_re) $error .= '- E-maile się nie zgadzają<br>';
  14. if ($pass != $pass_re) $error .= '- Hasła się nie zgadzają<br>';
ber32
I jeszcze tu
  1. $zapytanie = "SELECT COUNT(*) FROM users WHERE email = :email LIMIT 1";


zamień na
  1. $zapytanie = "SELECT * FROM users WHERE email = :email LIMIT 1";

a to z kąd

  1. $stat ->

GandiFly
Hah poprawiłem wszystko. A to dalej nie działa..
  1. <?php
  2. include 'config.php';
  3. if (isset($_POST['send'])) {
  4.  
  5. // Zabezpiecz dane z formularza przed kodem HTML
  6.  
  7. $email = htmlspecialchars($_POST['email']);
  8. $email_re = htmlspecialchars($_POST['email_re']);
  9. $pass = htmlspecialchars($_POST['pass']);
  10. $pass_re = htmlspecialchars($_POST['pass_re']);
  11. try
  12. {
  13. // Sprawdź czy podany email istnieje już w bazie
  14. $zapytanie = "SELECT COUNT(*) FROM users WHERE email = :email LIMIT 1";
  15. $existEmail = $pdo->prepare($zapytanie, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
  16. $existEmail->bindValue(':email', $email, PDO::PARAM_STR);
  17. $existEmail -> execute();
  18. $count = $existEmail -> rowCount();
  19.  
  20. $error = ''; // Zmienna przechowywująca wszystkie błędy
  21.  
  22. // Sprawdzanie czy nie wystąpiły błędy
  23.  
  24. if (!$email || !$email_re || !$pass || !$pass_re ) $error .= 'Musisz wypełnić wszystkie pola formularza <br>';
  25. if ($count[0] >= 1) $error .= '-Ten email jest już używany <br>';
  26. if ($email != $email_re) $error .= '- E-maile się nie zgadzają<br>';
  27. if ($pass != $pass_re) $error .= '- Hasła się nie zgadzają<br>';
  28.  
  29. // Jeżeli jakieś błędy wystąpiły to je wyświetl:
  30.  
  31. if ($error != '') {
  32. echo '<p class="error">Rejestracja nie powiodła się, popraw następujące błędy:<br>'.$error.'</p>';
  33. }
  34.  
  35. // Jeżeli wszystko jest OK to kontynuuj rejestrację
  36.  
  37. else {
  38.  
  39. // Losuj kod aktywujący, koduj hasło
  40.  
  41. $pass = sha1($pass);
  42. $kod = uniqid(rand());
  43.  
  44. // Zapisz dane do bazy
  45.  
  46. $zapytanie = $pdo->prepare("INSERT INTO users (email, pass, adresip, data, kod) VALUES (:email, :pass, '{$_SERVER['REMOTE_ADDR']}', NOW(), '$kod' )");
  47. $zapytanie->bindValue(':email', $email, PDO::PARAM_STR);
  48. $zapytanie->bindValue(':pass', $pass, PDO::PARAM_STR);
  49. $zapytanie->execute();
  50.  
  51.  
  52. $list = "Witaj '.$email.'! Kliknij w poniższy link, aby aktywować swoje konto. '.$moja_strona.'weryfikacja.php?weryfikacja=potwierdz&kod='.$kod.'";
  53.  
  54. mail ($email, "Rejestracja użytkownika", $list, "From: <kontakt@twoja-strona.pl>");
  55. echo '<p class="success">'.$email.', zostałeś zarejestrowany. Na adres email został wysłany mail z linkiem aktywującym. Jeżeli w ciągu 5 min go nie dostaniesz proszę sprawdzić też w spamie.</p>';
  56. }
  57. }
  58. catch(PDOException $e)
  59. {
  60. print_r( $e->getMessage() );
  61. }
  62.  
  63. } else {
  64. ?>
  65.  
  66. <form method="post" action="">
  67.  
  68. <label for="email">Email:</label>
  69. <input type="text" name="email" maxlength="50" id="email" />
  70.  
  71. <label for="email_again">Email (ponownie):</label>
  72. <input type="text" maxlength="255" name="email_re" id="email_again" /><br />
  73.  
  74. <label for="pass">Hasło:</label>
  75. <input maxlength="32" type="password" name="pass" id="pass" />
  76.  
  77. <label for="pass_again">Hasło (ponownie):</label>
  78. <input maxlength="32" type="password" name="pass_re" id="pass_again" />
  79. <br />
  80. Akceptuje regulamin: <input type="checkbox" name="reg" id="reg" onClick="if(this.checked==true){ submit.disabled=false;}else{ submit.disabled=true;}" />
  81. <br />
  82. <input type="hidden" name="send" value="1" />
  83. <input type="submit" id="submit" value="Zarejestruj" disabled="true"/>
  84. </form>
  85. <?php
  86. }
  87. ?>
  88.  


To jest plik config.php
  1. <?php
  2.  
  3. $db_server = ''; // Serwer bazy danych
  4. $db_user = ''; // Nazwa użytkownika
  5. $db_pass = ''; // Hasło
  6. $db_name = ''; // Nazwa bazy danych
  7.  
  8.  
  9. // POŁĄCZ Z BAZĄ DANYCH
  10. try {
  11. $pdo = new PDO('mysql:host='.$db_server.';dbname='.$db_name.'', $db_user, $db_pass);
  12. echo 'Połączenie nawiązane!';
  13. } catch(PDOException $e){
  14. echo 'Błąd:'.$e->getMessage();
  15. }
  16.  
  17. ?>
ber32
Jeszcze nie wszystko

zmień to co pisałem
GandiFly
Wielkie dzięki za wszystko smile.gif Po poprawieniu tego co mówiłeś kod nadal nie działał i postanowiłem jeszcze raz sprawdzić zapytanie okazało się że w nim był błąd.
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.