2011-03-21 3 views
0

j'ai une erreur fatale dans mon code, Fatal error: Appel à une préparation fonction membre() sur un non-objet ... sur la ligne 28mysqli - erreur fatale

Code Mise à jour:

<? 
function check($sql, $db, $email, $pwdHasher, $hash, $userExists, $sendPass) { 
    if(!empty($_POST['email']) && validateEmail($email)) { 
     $email = $_POST["email"]; 
     if ($sql = $db->prepare("select email from users where email=?")) { 

      $sql->bind_param('s', $email); 

      $sql->execute(); 

      $sql->bind_result($email); 

      while ($sql->fetch()) { 

       $pwdHasher = new PasswordHash(8, FALSE); 

       $hash = $pwdHasher->HashPassword($userExists["email"]); 

       $sendPass=$hash; 

       ($sql = $db->prepare('insert into password_reset (code) values (?)')); Warning: mysqli::prepare() [mysqli.prepare]: All data must be fetched before a new statement prepare takes place 
       $sql->bind_param('s', $hash); //Fatal error: Call to a member function bind_param() on a non-object 

       $sql->execute(); 
       $sql->fetch(); 

      } 
     } 
    } 
} 

    if (check($sql, $db, $email, $email,$pwdHasher, $hash, $userExists, $sendPass)) { 
     ($sql = $db->prepare("select userid from password_reset where code=?")); 
     $sql->bind_param('s', $hash); 
     $sql->execute(); 
     $sql->bind_result($hash); 

     if ($sql->fetch()) { 
      echo $hash; 

     }; 

     $pwrurl = "www.yoursite.com/reset_password.php?userid=" .$hash . "&code =" . $sendPass; 

     $mailbody = "Dear user,<br><br>If this e-mail does not apply to you please ignore it. It appears that you have requested a password reset at our website www.yoursitehere.com<br> 
      To reset your password, please click the link below. If you cannot click it, please paste it into your web browser's address bar.<br> <a href='$pwrurl'>$pwrurl</a> <br> <br> 
      Thanks,\nThe Administration"; 

     $mail->MsgHTML($mailbody); 

     $mail->AddAddress($email,"Membro"); 

     $mail->IsHTML(true); 

     if(!$mail->Send()) { 
      echo "Deu erro: " . $mail->ErrorInfo; 
     } else { 
      echo "Enviado com sucesso"; 
     } 


     $sql->close(); 
     $db->close(); 

    } 


?> 

Quelqu'un peut-il vérifier le code? mon idée est. J'ai une fonction et si est valide envoyer l'email. Probablement j'ai une erreur dans le code

merci !!

+0

Est-ce que vous obtenez une erreur fatale PHP ** et ** une erreur SQL en même temps? –

+0

$ db est la connexion à la base de données –

Répondre

2

Vous appelez check() avec un paramètre trop peu.

function check($sql, $db, $email, $pwdHasher, $hash, $userExists, $sendPass) { 
         ^------------ Missing 

check($sql, $email, $email,$pwdHasher, $hash, $userExists, $sendPass 
+0

oui, vous avez raison, je mets à jour mon code. Maintenant, j'ai de nouveaux problèmes parce que je ne termine pas la première déclaration avant la seconde. –

+0

je sépare le code en blocs de requête et fonctionne maintenant sans problème, merci –

0

Il ressort clairement de l'erreur que votre $db n'est pas l'objet et pas non plus l'objet qui ont la connexion pour la base de données et peut appeler la fonction mysqli.

Veuillez vérifier et vous assurer que vous passez le bon objet dans la fonction et vous oubliez de passer cet objet.

+0

merci Shakti. Le problème est que j'ai oublié l'argument $ db, de toute façon maintenant je reçois de nouvelles erreurs ... :). Code mis à jour –