problème d'envoi mail de confirmation

Répondre
lezarts
le 18/08/2011 à 12:00
lezarts
Bonjour à tous,
smiley Mon soucis du moment c'est que je n'arrive pas à trouver ou comprendre l'erreur du formulaire d'inscription, j'ai bien essayé divers solution mais bon..?
Alors j'en fais appelle à vous les experts du php smiley

Je vous joint :

le code d'erreur
Fatal error: Call to a member function prepare() on a non-object in C:\wamp\www\site\Lezarts\000_membres\inscription.php on line 25

et le code php
<?php
// on teste si le visiteur a soumis le formulaire
if (isset($_POST['inscription']) && $_POST['inscription'] == 'Inscription') {

// on teste l'existence de nos variables. On teste également si elles ne sont pas vides
if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass'])) && (isset($_POST['pass_confirm']) && !empty($_POST['pass_confirm'])) && (isset($_POST['email']) && !empty($_POST['email']))) {

// on teste les deux mots de passe
if ($_POST['pass'] != $_POST['pass_confirm']) {
$erreur = 'Les 2 mots de passe sont différents.';
}
else {
$base = mysql_connect ('localhost', 'root', '');
mysql_select_db ('espace_membres', $base);
// on recherche si ce login est déjà utilisé par un autre membre
$sql = 'SELECT count(*) FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'"';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$data = mysql_fetch_array($req);
// Récupération des variables nécessaires au mail de confirmation
$email = $_POST['email'];
$login = $_POST['login'];
// Génération aléatoire d'une clé
$cle = md5(microtime(TRUE)*100000);
// Insertion de la clé dans la base de données (à adapter en INSERT si besoin)
$stmt = $base->prepare('UPDATE membre SET cle=:cle WHERE login like :login');
$stmt->bindParam(':cle', $cle);
$stmt->bindParam(':login', $login);
$stmt->execute();
// Préparation du mail contenant le lien d'activation
$destinataire = $email;
$sujet = "Activer votre compte" ;
$entete = "From: inscription@votresite.com" ;
// Le lien d'activation est composé du login(log) et de la clé(cle)
$message = 'Bienvenue sur votre Email,
Pour activer votre compte, veuillez cliquer sur le lien ci dessous
ou copier/coller dans votre navigateur internet.
http://www.lezarts.org/000_membres/membre.php?log='.urlencode($login).'&cle='.urlencode($cle).'
---------------
Ceci est un mail automatique, Merci de ne pas y répondre.';
mail($destinataire, $sujet, $message, $entete) ; // Envoi du mail

if ($data[0] == 0) {
$sql = 'INSERT INTO membre VALUES("", "'.mysql_escape_string($_POST['login']).'", "'.mysql_escape_string(md5($_POST['pass'])).'", "'.mysql_escape_string($_POST['email']).'")';
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

session_start();
$_SESSION['login'] = $_POST['login'];
header('Location: membre.php');
exit();
}
else {
$erreur = 'Un membre possède déjà ce login.';
}
}
}
else {
$erreur = 'Tous les champs doivent être remplis merci.';
}
}
?>

<html>
<head>
<title>Inscription</title>
</head>

<body>
Inscription à l'espace membre :<br />
<form action="inscription.php" method="post">
Login :<input type="text" name="login" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>"><br />
Mot de passe :<input type="password" name="pass" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>"><br />
Confirmation mot de passe :<input type="password" name="pass_confirm" value="<?php if (isset($_POST['pass_confirm'])) echo htmlentities(trim($_POST['pass_confirm'])); ?>"><br />
Votre adresse mail :<input type="text" name="email" value="<?php if (isset($_POST['email'])) echo htmlentities(trim($_POST['email'])); ?>"><br />
<input type="submit" name="inscription" value="Inscription">
</form>
<?php
if (isset($erreur)) echo '<br />',$erreur;
?>
</body>
</html>

Dans l'attente de votre aide si toute fois il y'en une je vous remercie d'avance... smiley
Best wishes for a happy daylight and, good morning in your home @ + {:o)) Shi Xing Yi
LA GLOBULE
le 18/08/2011 à 20:33
LA GLOBULE
mysql_connect retourne un identifiant de connexion.

Or cet identifiant ne s'utilise pas comme un objet (tu dois t'emmeler les pinceaux avec PDO), donc tu ne peux pas faire un $base->prepare.

Bref, lance un truc du genre :

<?php
$sql = "UPDATE membre SET cle = '".mysql_real_escape_string($cle)."' WHERE login like '".mysql_real_escape_string($login)."'";
$tmp = mysql_query($sql);
?>
lezarts
le 19/08/2011 à 14:24
lezarts
Bonjour LA GLOBULE,

Je te remercie d'avoir répondu à mon problème récurant et il est vrais..? Que je commence juste avec la PDO et de plus je suis novice en php et autodidact, ce qui n'est pas toujours évidant quand on se posent des questions et que l'on n'a pas de prof pour répondre (pas les moyen de m'en payer un).....
Avant que j'intègre le code pour envoyer un mail de confimation tout fonctionnait, et suite à de longues heures de recherche sur internet j'ai fini par trouver un début de solution mais..? Ces solutions m'ont ammené d'autre bugs.

Bref..? De quoi se tirer les cheveux...

Ma question est :

Suite au bout de code que tu m'a fournis, je l'intègre ou exactement dans mon code avant de me recasser la tête... smiley

Je pense que tu as remarqué qu'une partie du code que j'ai taper à la main vient de tuto du site lephpfacile...

Merci d'avance pour ta réponse smiley
Best wishes for a happy daylight and, good morning in your home @ + {:o)) Shi Xing Yi
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours