blog-machine
Messages postés114Date d'inscriptionsamedi 27 juillet 2013StatutMembreDernière intervention 7 mai 2014
-
18 févr. 2014 à 22:34
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 2022
-
27 févr. 2014 à 14:06
Bonjour,
Voici le scénario :
- Mon client se connecte à mon site
- Il remplit un formulaire (voir champs plus bas)
- Il reçoit un mail de confirmation
- Dans ce mail, il y a un lien avec pour le nom de dossier un codage md5
dans ce dossier il y a les fichiers dont j'ai besoin pour la suite (copy dans répertoire).
- Un clic sur le lien on arrive sur la page de login et du mot de passe
et maintenant :
J'ai une base de donnée UTILISATEURS avec des champs
- prénom
- nom
- nomlogin et
- nompasse
- email
Je souhaite
a) - Connexion à la BDD
//Bon, là je me connecte à ma base avec les informations de mon hébergeur, ok
ob_start(); $host="mysql51-114.perso"; // Host name - nom serveur $login="atohmn66base"; // Mysql nom utilisateur $password="*******"; // Mysql mot de passe $db_name="atohmn66base"; // nom de la base de donnée $tbl_name="UTILISATEURS"; // nom de la table
Mais, Ou est-ce que je l'indique dans le mail de contact ?
Je souhaite :
a) - Connexion à la BDD
b) - Insertion en BDD de données
puis pour la connexion au site :
c) - Recherche de l'utilisateur et de son password pour le comparer à ce que l'utilisateur aura saisi pour se loguer.
// Define $nomlogin and $motpasse - définition des variables login et password
// Est-ce que "nomlogin" et "motpasse" sont bien les clés de ma table "utilisateurs" oui sont ils bien placés ?
$sql="SELECT * FROM $tbl_name WHERE nomlogin='$nomlogin' and motpasse='$motpasse'"; $result=mysql_query($sql);
// Comptage des rangs de la table
$count=mysql_num_rows($result);
// Si le résultat match login et mot de passe, la table doit être à 1 rang
if($count==1){
// - enregistre le login et le mot de passe et envoi vers le fichier "connect.php" session_register("nomlogin"); session_register("motpasse"); header("location:login_success.php"); } else { echo "Mauvais nom d'utilisateur ou mauvais mot de passe"; }
ob_end_flush();
Où se trouve le code à garder, à jeter, à réutiliser ?
jordane45
Messages postés37490Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention25 mai 2023341 19 févr. 2014 à 00:29
Désolé de te dire ça ... mais on ne peut pas passer notre temps à regarder chaque ligne de code que tu ecris.(ou récupère sur le net )....
Teste le et tu verras si ça fonctionne...
Si ça plante... tu reviens avec le message d'erreur et des explications claires sur le souci rencontré.
NB: le code que tu nous montres est un code "typique" de connexion au site.
Si nécéssaie..Il faudra bien entendu l'adapter à tes besoins
Par contre ce code NE CREE pas l'utiliasateur dans la BDD.
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202237 27 févr. 2014 à 14:06
j'aurais plutôt vus ça pour ta connexion BDD :
<?php
ob_start();
/** config.php :: Begin **/
define('_DB_HOST', "mysql51-114.perso"); // Host name - nom serveur
define('_DB_USER', "atohmn66base"); // Mysql nom utilisateur
define('_DB_PWD', "*******"); // Mysql mot de passe
define('_DB_BASE', "atohmn66base"); // nom de la base de donnée
define('_DB_PREFIX', ""); // préfixe des tables
define('tblUsers', _DB_PREFIX."UTILISATEURS"); // table utilisateurs
define('tblRights', _DB_PREFIX."DROITS"); // table des droits utilisateurs
define('tblInfos', _DB_PREFIX."INFOS"); // table des infos utilisateurs
/* surcharge de mysqli */
class mysqliex extends mysqli{
public function queryToArray($sql, $idFieldName, &$array){
if($result = $this->query($sql))
{
$array = array();
while($row = $result->fetch_assoc())
{
$array[ $row[$idFieldName] ] = $row;
}
$result->free();
return true;
}
return false;
}
}
/* création de l'objet $DB connécté à la base de donnée */
if($DB = new mysqliex(_DB_HOST, _DB_USER, _DB_PWD, _DB_BASE))
{
}
else
{
exit('No database connection.');
}
/** config.php :: End **/
?>
avec fichier de config à appeler en require (erreur si fichier non dispo, meilleur souplesse d'appel)
des constantes globale (define) qui peuvent être appelées de n'importe ou.
et un objet MySQLi ($DB) qui est bien plus pratique à utiliser que MySQL (obsolete).
et l'autre partie, avec quelques corrections :
<?php
/* tools.php :: begin */
class Tools {
public function getParam($param, $default=null)
{
return isset($_GET[$param]) ? $_GET[$param] : $default;
}
public function postParam($param, $default=null)
{
return isset($_POST[$param]) ? $_POST[$param] : $default;
}
public function validateStr($str, $regexp=null, $minLen=null, $maxLen=null)
{
$r = is_string($str);
$l = strlen($str);
if($regexp!==null){
$r = $r && preg_match($regexp, $str);
}
if($minLen !== null){
$r = $r && $l>=$minLen;
}
if($maxLen !== null){
$r = $r && $l<=$maxLen;
}
return $r;
}
}
/* tools.php :: end */
require_once('tools.php');
// recupération login/pass posté
$login= substr(Tools::postParam('nomlogin', false),0,20);
$passw= sha1( substr(Tools::postParam('motpasse', false),0,16) );
if(!$login || !$passw )
{
echo 'Erreur nom d\'utilisateur ou de mots de passe non définit.';
}
else
{ // on succes if((!$login || !$passw)
// Validation login/pass
if(
!Tools::validate($login, '/^[a-z0-9_-.]{4,16}$/i', 4, 16) ||
!Tools::validate($passw, '/^[a-z0-9]{32,128}$/i', 32, 128)
)
{
echo 'Erreur validation nom d\'utilisateur ou de mots de passe.';
}
else
{ // on success if(!Tools::validate**
// Récupération d'un utilisateur correspondant
$sql= sprintf("SELECT %s FROM %s WHERE nomlogin='%s' and motpasse='%s'",
'*',
tblUsers,
$login,
$passw
);
if($result=$DB->query($sql))
{
// si on à trouvé au moins un utilisateur
if($result->num_rows == 1)
{
session_register("login");
session_register("passw");
header("location:login_success.php");
}
else
{
// on fail : if($result->num_rows == 1)
echo 'L\'utilisateur n\'existe pas.';
}
}
else
{
// on fail : if($result=$DB->query($sql))
echo 'Erreur lors de la récupération d\'un utilisateur.',
}
}
}
ob_end_flush();
?>