Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [MySQL][PDO]Problem z zapytaniem
GandiFly
post 30.06.2013, 16:19:29
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 30.06.2013

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


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

Ten post edytował GandiFly 30.06.2013, 16:20:24
Go to the top of the page
+Quote Post
skowron-line
post 30.06.2013, 16:23:23
Post #2





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


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)


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
sajegib
post 30.06.2013, 16:24:21
Post #3





Grupa: Zarejestrowani
Postów: 352
Pomógł: 59
Dołączył: 16.01.2013

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


Przeczytaj komunikat ktory dostajesz od parsera, nie możesz użyć obiektu jak tablicy, musisz zrobić fetch najpierw
Go to the top of the page
+Quote Post
GandiFly
post 30.06.2013, 16:28:19
Post #4





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 30.06.2013

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


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
Go to the top of the page
+Quote Post
c1chy
post 30.06.2013, 16:31:48
Post #5





Grupa: Zarejestrowani
Postów: 72
Pomógł: 16
Dołączył: 21.06.2013

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


W komunikacie masz wszystko napisane, klasa PDO nie ma metody bindValue za to klasa PDOStatement ją ma.

Ten post edytował c1chy 30.06.2013, 16:32:15


--------------------
devstrefa.wordpress.com
Go to the top of the page
+Quote Post
GandiFly
post 30.06.2013, 16:44:23
Post #6





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 30.06.2013

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


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));

Go to the top of the page
+Quote Post
nospor
post 30.06.2013, 16:47:00
Post #7





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6296
Dołączył: 27.12.2004




http://pl1.php.net/manual/en/pdostatement.bindvalue.php
Czy tak ciezko zajrzej i zobaczyc jak sie uzywa BINDVALUE?questionmark.gifquestionmark.gif?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
GandiFly
post 30.06.2013, 17:41:26
Post #8





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 30.06.2013

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


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/
Go to the top of the page
+Quote Post
nospor
post 30.06.2013, 17:54:29
Post #9





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6296
Dołączył: 27.12.2004




Widocznie masz blad zapytania. Wyswietl go


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
GandiFly
post 30.06.2013, 18:10:44
Post #10





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 30.06.2013

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


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. ?>


Ten post edytował GandiFly 30.06.2013, 18:11:50
Go to the top of the page
+Quote Post
nospor
post 30.06.2013, 18:19:17
Post #11





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6296
Dołączył: 27.12.2004




Masz wyswietlic blad PDO a nie obiekt PDO...


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
GandiFly
post 30.06.2013, 21:19:07
Post #12





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 30.06.2013

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


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



Ten post edytował GandiFly 30.06.2013, 21:21:38
Go to the top of the page
+Quote Post
ber32
post 30.06.2013, 21:33:46
Post #13





Grupa: Zarejestrowani
Postów: 332
Pomógł: 22
Dołączył: 6.07.2010

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


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' )");



--------------------
Go to the top of the page
+Quote Post
GandiFly
post 30.06.2013, 21:39:22
Post #14





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 30.06.2013

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


Niestety dalej nic do bazy się nie dodaje
Go to the top of the page
+Quote Post
ber32
post 30.06.2013, 21:40:32
Post #15





Grupa: Zarejestrowani
Postów: 332
Pomógł: 22
Dołączył: 6.07.2010

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


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));


Ten post edytował ber32 30.06.2013, 22:31:03


--------------------
Go to the top of the page
+Quote Post
GandiFly
post 30.06.2013, 21:43:04
Post #16





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 30.06.2013

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


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.  
Go to the top of the page
+Quote Post
c1chy
post 30.06.2013, 21:48:05
Post #17





Grupa: Zarejestrowani
Postów: 72
Pomógł: 16
Dołączył: 21.06.2013

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


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


--------------------
devstrefa.wordpress.com
Go to the top of the page
+Quote Post
ber32
post 30.06.2013, 21:48:12
Post #18





Grupa: Zarejestrowani
Postów: 332
Pomógł: 22
Dołączył: 6.07.2010

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


Zadeklaruj
  1. email = :email


--------------------
Go to the top of the page
+Quote Post
GandiFly
post 30.06.2013, 21:53:00
Post #19





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 30.06.2013

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


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ą
Go to the top of the page
+Quote Post
ber32
post 30.06.2013, 21:57:30
Post #20





Grupa: Zarejestrowani
Postów: 332
Pomógł: 22
Dołączył: 6.07.2010

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


następny błąd
  1. if ($existEmail -> rowCount >= 1) $error .= '-Ten email jest już używany <br>';


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 06:35