Bonjour,
je me permet de vous contacter car j'essaye de protéger un site par login/pass via une base de donnée.
Pour cela je me suis basé sur un script réalisé par Didier sur site ASP-PHP.net.
Voici ce qui marche :
+suppression d'un membre
+connexion d'un membre
+modification d'un membre
Voici ce qui ne marche pas :
+ajout d'un membre
+envoie d'un mail : quand je recoit un mail après la demande d'inscription d'un nouveau membre, je ne reçoit pas ce qu'il a rentré mais les données du premier membre que j'ai supprimé (là je ne comprends vraiment pas pourquoi...)
Si vous voulez regarder, ce sera plus parlant : <lien>
http://www.delamotte-bouloumie.fr/10/admin.php</lien> (log : Hugues1 pass : 2609881)
Si vous voulez savoir ce qui se passe avec le mail, inscrivez vous sur le site et demandez moi le mail reçu. ^^
Enfin voici les différents codes :
_conn.php
<code>
<?
try
{
$bdd = new PDO('mysql:host=****.amen.fr;dbname=****', '****', '****');
}
catch (Exception $e)
{
die('Erreur : ' . $e->getMessage());
}
?>
</code>
_mail.php
<code>
<?
function doMail($msg,$ID) {
try
{
$bdd = new PDO('mysql:host=****.amen.fr;dbname=****', '****', '****');
}
catch (Exception $e)
{
die('Erreur : ' . $e->getMessage());
}
$n="delamotte-bouloumie.fr";
$n2="Administrateur";
$m="****";
$url="http://".getenv("SERVER_NAME").getenv("SCRIPT_NAME");
$tete = "From: ".$n." <".$m.">\n";
$tete .= "Reply-To: ".$m."\n";
$sujet="Adhesion au site ".$n;
// fiche concernée
$SQL = "SELECT * FROM exo_pass";
if($ID)
$SQL .= " WHERE ID=" . $ID;
else // ou la dernière
$SQL .= " ORDER BY ID DESC LIMIT 1";
echo gettype($bdd);
$result = $bdd->query($SQL);
$val = $result->fetch();
$nT=$val["login"];
$mT=$val["email"];
$result->closeCursor();
// messages
switch($msg) {
case "new":
$body="Demande soumise par :\n\n";
$body.="Login : ".$nT."\n";
$body.="Email : ".$mT."\n";
$body.="\n".$url."\n";
// destinataires
$tete .= "Bcc: ".$m;
$SQL = "SELECT email FROM exo_pass";
$SQL .= " WHERE nivo < 3";
$result = $bdd->query($SQL);
while($val = $result->fetch())
if($val["email"]!="")
$tete .= ",".$val["email"];
$tete .= "\n";
$result->closeCursor();
break;
case "ok":
$body="Votre demande a ete acceptee !!!\n\n";
$body.="Login : ".$nT."\n";
$body.="Passe : ".$val["pass"]."\n";
$body.="Acces : ".$url."\n";
$body.="\nCordialement,\n".$n2."\n".$m."\n";
}
if(getenv("SERVER_NAME")=="localhost")
echo "En local le message ne peut pas partir !...";
else
return mail($nT." <".$mT.">",$sujet,$body,$tete);
}
?>
</code>
_protect.php
<code>
<? // Libellés des niveaux
$nivo=array("WebMaster","Collaborateur","Membre");
// On lit le cookie
$protect=$passe10;
// si vide >> niveau 4
if($protect=="") $protect="4";?>
<center>
<? // si identifié >> lien vers page Admin
if($protect<"4") {
?><A href="admin.php">Page
<? echo $nivo[$protect-1];
// sinon >> Devenir membre
} else {?><A href="admin.php?membre=new"
>Devenir membre<?
} ?></A> -
<A href="page1.php">Page 1</A> -
<A href="page2.php">Page 2</A> -
<A href="page3.php">Page 3</A>
</center><hr>
</code>
admin.php
<code>
<? include("_conn.php");
include("_mail.php");
if(isset($pass))
{
// === DECONNEXION ===
if($pass=="no")
{
setcookie("passe10");
setcookie("passe10id");
}
// === IDENTIFICATION ===
elseif(isset($login))
{
$SQL = "SELECT * FROM exo_pass";
$SQL .= " WHERE login='$login'";
$SQL .= " AND pass='$pass'";
$result = $bdd->query($SQL);
if($val = $result->fetch())
{
// on stocke le niveau/id dans un cookie
setcookie("passe10",$val["nivo"]);
setcookie("passe10id",$val["ID"]);
$result->closeCursor();
}
else
{
$temp = "?membre=new";
$result->closeCursor();
}
}
// on valide le cookie
Header("Location: ".$PHP_SELF.$temp);
}
// === NOUVELLE FICHE ===
elseif(isset($newlogin) && isset($newpass))
{
// Vérifie la non existence du login
$SQL = "SELECT * FROM exo_pass";
$SQL .= " WHERE login = '$newlogin'";
$result = $bdd->query($SQL);
// si login inconnu, ajoute la fiche
if($result->rowCount()==0)
{
$SQL = "INSERT INTO exo_pass(login,pass,nivo)";
$SQL .= " VALUES('$newlogin','$newpass',$newtype)";
$result = $bdd->query($SQL);
// sinon messages d'erreur
}
else
{
echo "<b>Login déjà pris !</b>";
}
}
elseif(isset($newtype))
{
echo "<b>Formulaire incomplet !</b>";
// === INSCRIPTION ===
}
elseif(($login!="") && ($newmail!=""))
{
// Vérifie la non existence du login
$SQL = "SELECT * FROM exo_pass";
$SQL .= " WHERE login = '$login'";
$result = $bdd->query($SQL);
if($result->rowCount()==0)
{
$SQL = "INSERT INTO exo_pass(login,nivo,email)";
$SQL .= " VALUES('$login',4,'$newmail')";
$result = $bdd->query($SQL);
//$result->closeCursor();
$OKinsc=true;
// envoi msg
doMail("new","");
// sinon messages d'erreur
}
else
{
$result->closeCursor();
echo "<b>Choisissez un autre login !</b>";
}
}
include("_protect.php");
if($protect<"3")
{
// === DESTRUCTION ===
if(isset($del))
{
$SQL = "DELETE FROM exo_pass";
$SQL .= " WHERE ID=" . $del;
$result = $bdd->query($SQL);
$result->closeCursor();
// === VALIDATION ===
}
elseif(isset($OK))
{
$SQL = "UPDATE exo_pass SET pass=email";
$SQL .= ",nivo=3 WHERE ID=" . $OK;
$result = $bdd->query($SQL);
$result->closeCursor();
// envoi msg
doMail("ok",$OK);
}
}
// === MODIFICATION ===
if(isset($modlogin) && isset($modpass))
{
$SQL = "UPDATE exo_pass SET";
$SQL .= " login='" . $modlogin;
$SQL .= "',pass='" . $modpass;
$SQL .= "',nivo=" . $modtype;
$SQL .= ",email='" . $modmail;
$SQL .= "' WHERE ID=" . $modid;
$result = $bdd->query($SQL);
$result->closeCursor();
}
// === CONSTRUCTION DE LA PAGE ===
// LIEN DE DECONNEXION
if($protect<"4")
{
?>
<A href="?pass=no">Déconnecter</A><br>
<? // FORMULAIRE D'EDITION DE LA FICHE
if($protect<>"1")
{
$SQL = "SELECT * FROM exo_pass WHERE ID=";
$SQL .= $passe10id;
$result = $bdd->query($SQL);
$val = $result->fetch();
$result->closeCursor();
?>
<form method="post" action="admin.php">
<table bgcolor=#EEEEFF><tr>
<input type="hidden" name="modid"
value="<?echo $val["ID"];?>">
<input type="hidden" name="modlogin"
value="<?echo $val["login"];?>">
<input type="hidden" name="modtype"
value="<?echo $val["nivo"];?>">
<td>Password<br>
<input type="password" name="modpass"
value="<?echo $val["pass"];?>"></td>
<th><b><?echo $val["login"];?></b><br>
<input type="submit" value="Modifier"></th>
</tr><tr><td colspan=2>E-mail<br>
<input size=40 name="modmail"
value="<?echo $val["email"];?>"></td>
</tr></table>
</form>
<? }
// SI NIVEAU 1 OU 2
if($protect<"3") { ?>
<br><table bgcolor=#EEEEFF>
<tr><th colspan=3 nowrap
>Liste des mots de passe</th></tr>
<form method="post" action="admin.php"><tr>
<tr bgcolor=#DDDDEE>
<td> LOGIN </td>
<td> PASSWORD </td>
<th><input type="submit" value="Ajouter"></th>
</tr><tr>
<td><input name="newlogin"></td>
<td><input name="newpass"></td>
<td><select name="newtype">
<? for($i=$protect;$i<sizeof($nivo);$i++) { ?>
<option value="<? echo ($i+1)."\">".$nivo[$i];?>
</option>
<? } ?>
</select></td>
</tr></form>
<? // LISTE DES LOGIN/PASS
$SQL = "SELECT * FROM exo_pass";
$SQL .= " WHERE nivo > " . $protect;
$SQL .= " AND nivo < 4 ORDER BY nivo,login";
$result = $bdd->query($SQL);
while ($val = $result->fetch())
{ ?>
<tr>
<? // Edition/supression si niveau 1
if($protect=="1")
{
?>
<form method="post" action="admin.php">
<input type="hidden" name="modid"
value="<? echo $val["ID"]; ?>">
<input type="hidden" name="modmail"
value="<? echo $val["email"]; ?>">
<td nowrap><input name="modlogin"
value="<? echo $val["login"]; ?>"></td>
<td nowrap><input name="modpass"
value="<? echo $val["pass"]; ?>"></td>
<td><select name="modtype">
<?for($i=1;$i<sizeof($nivo);$i++) { ?>
<option value="<?echo $i+1;?>"
<?if($i+1==$val["nivo"])
echo "SELECTED"; ?>
><?echo $nivo[$i]; ?></option>
<? } ?>
</select></td>
<td><input type="submit" value="OK"></td>
</form>
<td>
<A href="?del=<? echo $val["ID"]; ?>">del</A>
</td>
<? // sinon affichage simple
} else { ?>
<td nowrap><? echo $val["login"]; ?></td>
<td nowrap><? echo $val["pass"]; ?></td>
<td><? echo $nivo[$val["nivo"]-1]; ?></td>
<? }
// Lien pour envoyer le login/pass
if($val["email"]!="") { ?>
<td nowrap><A href="mailto:<?
echo $val["email"];
echo "?subject=Mot de passe";
echo "&body=Login: " . $val["login"];
echo " - Pass: " . $val["pass"];
echo " a entrer sur la page http://";
echo $SERVER_NAME;
echo $SCRIPT_NAME;
?>">SEND Login/Pass</A></td>
<? } ?>
</tr>
<? }
$result->closeCursor();
// LISTE DES MEMBRES EN ATTENTE
?><tr><th colspan=3 nowrap
>Membres en attente</th></tr>
<? $SQL = "SELECT * FROM exo_pass";
$SQL .= " WHERE nivo = 4 ORDER BY login";
$result = $bdd->query($SQL);
while ($val = $result->fetch()) { ?>
<tr>
<td><? echo $val["login"]; ?></td>
<td colspan=2>
<A href="mailto:<? echo $val["email"]; ?>"
><? echo $val["email"]; ?></A></td>
<td><A href="?OK=<? echo $val["ID"]; ?>"
>OK</A></td>
<td><A href="?del=<? echo $val["ID"]; ?>"
>del</A></td>
</tr>
<? } $result->closeCursor();?>
</table>
<? }
}
// sinon si MESSAGE D'INSCRIPTION
elseif($OKinsc) { ?>
<b>Si votre inscription est acceptée </b>
<br>Vous recevrez votre mot de passe par E-mail
<? // FORMULAIRE D'IDENTIFICATION/INSCRIPTION sinon
} else {
if($membre=="new") { ?>
Pour devenir membre, veuillez remplir le formulaire
<? } ?>
<form method="post" action="admin.php">
<table><tr>
<td>Login<br><input name="login"></td>
<?if($membre=="new") { ?>
<td><br>
<input type="Submit" value="Inscription">
</td></tr><tr><td colspan=2>E-mail<br>
<input size=40 name="newmail">
<? } else { ?>
<td>Password<br>
<input type="password" name="pass">
</td><td><br>
<input type="Submit" value="Entrer">
<? } ?>
</td></tr></table>
</form>
<? }
// Déconnexion
?>
</code>
Si quelqu'un pouvait trouver mon problème ce serait vraiment cool car je dois vous l'avouer je suis dépassé...
En tout cas merci d'avoir pris le temps de me lire.
Lalalallal