[Fatal error: Call to a member function prepare() on a non-object in C:\xampp\htdocs\Register\regis]

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • [Fatal error: Call to a member function prepare() on a non-object in C:\xampp\htdocs\Register\regis]

      Hey,

      ich arbeite gerade an meinem Register Script, nach einem Tutorial.
      Und ich hab es genau so wie es im Tutorial beschrieben wird.

      Hier Zeit: 9:28 Linie ab 42.

      Bei mir kommt aber

      PHP-Quellcode

      1. Fatal error: Call to a member function prepare() on a non-object in C:\xampp\htdocs\Register\register_logic.php on line 44


      Bei mir sieht das folgend aus:

      PHP-Quellcode

      1. $user_ip = ip2long($_SERVER['REMOTE_ADDR']);
      2. $sql = 'INSET INTO
      3. user (username,passwort,email,ip,date)
      4. VALUES
      5. (?,?,?,?,NOW())';
      6. $stmt = $db->prepare($sql);
      7. $stmt->bind_param('sssi',$_POST['username'],$_POST['pass'],$_POST['email'],$user_ip);
      8. $succes_msg = "Vielen Dank für deine Registrierung ".htmlspecialchars($_POST['username']).", du kannst dich nun einloggen!";
      Alles anzeigen


      Linie 44 ist
      Linie 44 ||| $stmt = $db->prepare($sql);
      Linie 45 ||| $stmt->bind_param('sssi',$_POST['username'],$_POST['pass'],$_POST['email'],$user_ip);

      kann mir jemand sagen wo der Fehler ist?

      Vielen dank
    • Werbung zur Unterstützung des Forums ( Bitte AddBlocker deaktivieren )

    • Hey,

      doch $db ist definiert:$db = mysql_connect("localhost","root","");

      Ehm hier ist der Komplette Script:
      Register_logic.php

      PHP-Quellcode

      1. <?php
      2. $db = mysql_connect("localhost","root","");
      3. if(!isset($_POST['submit']))
      4. {
      5. return;
      6. }
      7. if( !isset($_POST['username']) || !isset($_POST['pass']) || !isset($_POST['email'])
      8. || empty($_POST['username']) || empty($_POST['pass']) || empty($_POST['email']) )
      9. {
      10. $error_msg = "Bitte alle Felder ausf&uuml;llen, die mit einem * gekennzeichnet sind!";
      11. return;
      12. }
      13. if($_POST['pass'][0] !== $_POST['pass'][1])
      14. {
      15. $error_msg = "Die Passw&ouml;rter stimmen nicht &uuml;berein!";
      16. return;
      17. }
      18. $salt = '64f6a5s4fs65gh564fdhd6f5g67a6w8d7a8e7f6s5d4gsd68fg7hf6fdg58h7';
      19. $_POST['pass'] = hash('sha256', $_POST['pass'][0].$salt);
      20. if(strlen($_POST['username']) > 20)
      21. {
      22. $error_msg = "Der Benutzername ist zu Lang!";
      23. }
      24. $_POST['username'] = trim($_POST['username']);
      25. if(!FILTER_VAR($_POST['email'],FILTER_VALIDATE_EMAIL))
      26. {
      27. $error_msg = "Bitte gebe eine G&uuml;ltige E-Mail ein!";
      28. return;
      29. }
      30. $user_ip = ip2long($_SERVER['REMOTE_ADDR']);
      31. $sql = 'INSET INTO
      32. user (username,passwort,email,ip,date)
      33. VALUES
      34. (?,?,?,?,NOW())';
      35. $stmt = $db->prepare($sql);
      36. $stmt->bind_param('sssi',$_POST['username'],$_POST['pass'],$_POST['email'],$user_ip);
      37. $succes_msg = "Vielen Dank f&uuml;r deine Registrierung ".htmlspecialchars($_POST['username']).", du kannst dich nun einloggen!";
      38. ?>
      Alles anzeigen


      Config.php

      PHP-Quellcode

      1. <?php
      2. //-----------------------------------------------//
      3. //--------------------CONFIG---------------------//
      4. //-----------------------------------------------//
      5. $db = mysql_connect("localhost","root","");
      6. ?>


      register_markup.php

      PHP-Quellcode

      1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
      3. <head>
      4. <title>--[Register]--</title>
      5. <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      6. <meta name="description" content="" />
      7. <meta name="author" content="" />
      8. <meta name="keywords" content="" />
      9. <meta name="generator" content="Webocton - Scriptly (www.scriptly.de)" />
      10. <link href="styles/style.css" type="text/css" rel="stylesheet" />
      11. <link href="favicon.ico" type="image/x-icon" rel="shortcut icon" />
      12. </head>
      13. <body>
      14. <!-- Textfelder -->
      15. <div style="margin: 0 auto; width:300px;">
      16. <form action="" method="post">
      17. <fieldset style="width: 160px; background-image:url(bg_center.png); border:2px solid darkred; border-radius: 5px 5px 5px 5px;">
      18. <legend>Registration</legend>
      19. <!-- Benutztername -->
      20. <fieldset style="width:150px; border-radius: 5px 5px 5px 5px;">
      21. <legend>
      22. <label for="username">Benutzername*: </label><br />
      23. </legend>
      24. <input type="text" name="username" maxlength="20" />
      25. </fieldset>
      26. <!-- Passwort -->
      27. <fieldset style="width:150px; border-radius: 5px 5px 5px 5px;">
      28. <legend>
      29. <label for="pass">Passwort*: </label><br />
      30. </legend>
      31. <input type="password" name="pass[]" id="pass1" />
      32. </fieldset>
      33. <!-- Passwort wiederholung -->
      34. <fieldset style="width:150px; border-radius: 5px 5px 5px 5px;">
      35. <legend>
      36. <label for="pass">Passwort wdh.*: </label><br />
      37. </legend>
      38. <input type="password" name="pass[]" id="pass2" />
      39. </fieldset>
      40. <!-- Email -->
      41. <fieldset style="width:150px; border-radius: 5px 5px 5px 5px;">
      42. <legend>
      43. <label for="email">E-Mail*: </label><br />
      44. </legend>
      45. <input type="text" name="email" />
      46. </fieldset>
      47. <!-- Buttons -->
      48. <fieldset style="width:150px; border-radius: 5px 5px 5px 5px; margin-top:10px;">
      49. <input type="submit" name="submit" value="Senden" />
      50. <input type="reset" name="reset" value="Reset" />
      51. </fieldset>
      52. <fieldset style="width:150px; border-radius: 5px 5px 5px 5px; margin-top:10px;">
      53. <legend>Status:</legend>
      54. <?php
      55. if(isset($error_msg) && !empty($error_msg))
      56. {
      57. echo $error_msg;
      58. }
      59. ?>
      60. </fieldset>
      61. </fieldset>
      62. </form>
      63. </div>
      64. </body>
      65. </html>
      Alles anzeigen


      Und Register.php

      PHP-Quellcode

      1. <?php
      2. require_once('register_logic.php');
      3. require_once('register_markup.php');
      4. require_once('config.php');
      5. ?>


      Greez
    • Also zum ersten, was auch im LInk zu finden ist, welchen ich dir zuvor gepostet habe:
      Bitte verwende schonmal mysqli_connect(); und nicht die veraltete mysql_connect(); .

      Für deinen Fehler an sich, kann ich dir aktuell nicht helfen, da ich gedanklich nicht darum kümmern,
      doch bitte lass dieses Skript. Beim Überfliegen fallen doch einige Verbesserungen auf.

      Daher biete ich dir an, dass wir uns morgen mal zusammensetzen und es genauer besprechen.
      Daher bitte ich dies zu entschuldigen.
      Bis dahin kannst du den oben von mir angegeben Link besuchen.

      Bis morgen
      // Virtual
    • Das stimmt. Erst seit MySQLi werden "Prepared Statements" unterstützt.


      Dieses von mir angelegte Skript funktioniert beispielsweise einwandfrei:

      PHP-Quellcode

      1. <?php
      2. //--> Fehlerdefinition
      3. error_reporting( E_ALL ^ E_WARNING );
      4. //--> Datenbankverbindung
      5. $db = new mysqli("localhost","root","","register");
      6. //-->Deklaration der genutzen Variablen
      7. $username = ''; //Benutzername
      8. $pwd = array(); //Passwort-Array
      9. $pwd[0] = ''; //Erstes Passwort
      10. $pwd[1] = ''; //Zweites Passwort
      11. $pwdsalt = ''; //Passwort verschlüsselt
      12. $email = ''; //Email
      13. $error['username_error'] = ''; //Fehler beim Benutzernamen
      14. $error['password0_error'] = ''; //Fehler beim ersten Passwort
      15. $error['password1_error'] = ''; //Fehler beim zweiten Passwort
      16. $error['password_not_same'] = ''; //Fehler bei Passwortübereinstimmung
      17. $error['email_error'] = ''; //Fehler bei der Email
      18. //--> Fehlerausgabe, wenn ein Fehler im Formular aufgetreten ist
      19. if( isset( $error_msg ) && !empty( $error_msg ) )
      20. {
      21. echo $error_msg;
      22. }
      23. //--> Ein Fehler in der MySQL-Verbindung vorhanden?
      24. if( mysqli_connect_error( $db ) )
      25. {
      26. echo 'Fehlernummer:' . mysqli_connect_errno() . '<br />' . mysqli_connect_error($db);
      27. }
      28. else //--> Hier ist kein Fehler inder Verbindung mehr aufgetreten.
      29. {
      30. //--> Überprüfen der Formulareingaben
      31. if( isset( $_POST['submit'] ) )
      32. {
      33. //--> Überprüfen, ob Benutzername eingegeben
      34. if( isset( $_POST['username'] ) && ( trim( $_POST['username'] ) != '' ) )
      35. {
      36. $username = $_POST['username'];
      37. }
      38. else
      39. {
      40. $error['username_error'] = ' Bitte geben Sie einen Benutzernamen an. ';
      41. }
      42. //--> Überprüfen, ob Passwort gesetzt ist
      43. if( isset( $_POST['pwd'][0] ) && ( trim( $_POST['pwd'][0] ) != '' ) )
      44. {
      45. $pwd[0] = $_POST["pwd"][0];
      46. }
      47. else
      48. {
      49. $error['password0_error'] = ' Bitte geben Sie ein Passwort an. ';
      50. }
      51. //--> Überprüfen, ob Passwort2 gesetzt ist
      52. if( isset( $_POST['pwd'][1] ) && trim( $_POST['pwd'][1] ) != '' )
      53. {
      54. $pwd[1] = $_POST["pwd"][1];
      55. }
      56. else
      57. {
      58. $error['password1_error'] = 'Bitte geben Sie ein Passwort an. ';
      59. }
      60. //--> Überprüfen, ob Passwörterübereinstimmen
      61. if( ( $_POST['pwd'][0] != '' ) && ( $_POST['pwd'][1] != '' ) && ( $_POST['pwd'][0] != $_POST['pwd'][1] ) )
      62. {
      63. $error['password_not_same'] = ' Die Passwörter stimmen nicht überein. ';
      64. $pwd[0] = '';
      65. $pwd[1] = '';
      66. }
      67. //--> Überprüfen, ob E-mail gesetzt ist
      68. if( isset( $_POST['email'] ) && ( trim( $_POST['email'] ) != '' ) )
      69. {
      70. $email = $_POST['email'];
      71. }
      72. else
      73. {
      74. $error['email_error'] = ' Bitte geben Sie eine Email an. ';
      75. }
      76. //--> Überprüfen, ob nirgends ein Fehler aufgetreten ist und in $error eingetragen wurde
      77. if( ( $error['username_error'] == '' ) && ( $error['password0_error'] == '' ) && ( $error['password1_error'] == '' ) && ( $error['email_error'] == '' ) &&
      78. ( $_POST['pwd'][0] == $_POST['pwd'][1] ) )
      79. {
      80. //--> Passwortsalterstellung, nur wenn kein Fehler in $error eingetragen wurde.
      81. $salt = '64f6a5s4fs65gh564fdhd6f5g67a6w8d7a8e7f6s5d4gsd68fg7hf6fdg58h7';
      82. $pwdsalt = hash('sha256', $_POST['pwd'][0].$salt);
      83. //--> Daten in die Datenbank eintragen
      84. $sql = "
      85. INSERT INTO
      86. user
      87. ( account , password )
      88. VALUES
      89. ( ? , ? )
      90. ";
      91. //$db->query($sql);
      92. $stmt = $db->prepare($sql);
      93. $stmt->bind_param("ss", $username, $pwdsalt);
      94. $stmt->execute();
      95. $stmt->close();
      96. echo '<span style="color:green;font-weight:bold;">Sie haben sich erfolgreich bei uns registriert</span>';
      97. //--> Da eingetragen wurde, können Variablen gelöscht werden
      98. $username = ''; //Benutzername
      99. $pwd = array(); //Passwort-Array
      100. $pwd[0] = ''; //Erstes Passwort
      101. $pwd[1] = ''; //Zweites Passwort
      102. $pwdsalt = ''; //Passwort verschlüsselt
      103. $email = ''; //Email
      104. }
      105. else
      106. {
      107. echo '<span style="color:red;font-weight:bold;">Sie haben einen Fehler im Formular.<br />Bitte überprüfen Sie nochmals Ihre Eingaben.</span><br /><hr />';
      108. echo '<pre>';
      109. echo '</pre>';
      110. }
      111. $db->close();
      112. }
      113. else
      114. {
      115. echo 'Hier können Sie sich für unser System registrieren.<br /><hr />';
      116. }
      117. //--> Kopf-Deklaration
      118. echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
      119. echo '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">';
      120. echo '<head>';
      121. echo '<title>--[Register]--</title>';
      122. echo '<meta name="description" content="" />';
      123. echo '<meta name="author" content="" />';
      124. echo '<meta name="keywords" content="" />';
      125. echo '<meta name="generator" content="Webocton - Scriptly (www.scriptly.de)" />';
      126. echo '<link href="styles/style.css" type="text/css" rel="stylesheet" />';
      127. echo '<link href="favicon.ico" type="image/x-icon" rel="shortcut icon" />';
      128. echo '</head>';
      129. echo '<body>';
      130. //--> Formular-Deklaration
      131. echo '<form action="" method="post">';
      132. echo 'Benutzername*:';
      133. echo '<input type="text" name="username" value="' . $username . '" maxlength="20" />' . $error['username_error'] . '<br />';
      134. echo 'Passwort*:';
      135. echo '<input type="password" name="pwd[]" value="' . $pwd[0] . '" />' . $error['password0_error'] . $error['password_not_same'] . '<br />';
      136. echo 'Passwort wdh.*:';
      137. echo '<input type="password" name="pwd[]" value="' . $pwd[1] . '" />' . $error['password1_error'] . '<br />';
      138. echo 'E-Mail*:';
      139. echo '<input type="text" name="email" value="' . $email . '" />' . $error['email_error'] . '<br />';
      140. echo '<input type="submit" name="submit" value="Senden" />';
      141. echo '</form>';
      142. //--> Ende des HTML-Dokumentes
      143. echo '</body>';
      144. echo '</html>';
      145. }
      146. ?>
      Alles anzeigen


      Mir ist bewusst, dass die Passwortverschlüsselung nicht unbedingt effektiv ist,
      jedoch habe ich sie lediglich aus dem Skript von Lalox3 übernommen.
      Ebenso weiß ich, dass die Fehlerausgaben am Formular nicht gesichert sind.
      Auch wird eine korrekte Überprüfung, was den Inhalt der Formulareingaben
      betrifft nicht getätigt. Wir wollen nun erst einmal beim Wesentlichen bleiben. ;)

      Gerne nehme ich noch Verbesserungsvorschläge an, da mir ein paar Stellen selber noch nicht ganz gefallen.
      Ich lerne gerne dazu.


      // Virtual