recherche fonction pour empecher l'action sql(resolu)

Eléphant du PHP | 59 Messages

17 oct. 2010, 01:57

bonjour,

je recherche une fonction qui empeche l'action sql si la valeur du champ et vide merci de me donné un exemple de code car je trouve pas du tout et aussi un code pour que les mot passe entré dans le champ mot de passe soit crypter dans la base de donée mysql!

merci a tous
Modifié en dernier par aurel08 le 13 nov. 2010, 01:01, modifié 1 fois.
debian lenny | php5.3.3 | mysql 5.1.51 | apache2.2.16

Petit nouveau ! | 8 Messages

17 oct. 2010, 02:22

bonjour
vos paramètres insérer dans la raquette sont envoyer par un formulaire Get ou Post non?
donc il vous suffi de contrôler ces paramètres sinon msg d'erreur

vous avez plusieurs choix selon votre besoin :
emtpy($var) retoure FALSE si var à une valeur non vide et différente de zéro.

ou
isset($var) renvoie TRUE si la variable var est définie, FALSE sinon.

ou tout simplement
if($var != "") : veut dire si la valeur différent du vide

voila un exemple de code

Code : Tout sélectionner

<?php if($var != "") $requette ; else ...... ; ?>

pour le cryptage je te conseille le md5
$pass = 'monmotdepasse';
$passecrypter = md5($pass);
le résulta sera une chaine de 32 comme ça : 1f3870be274f6c49b3e31a0c6728957f

pour le formulaire de connexion ou de contrôle

Code : Tout sélectionner

<?php $pass = GET ou POST du mot de passe if (md5($pass) == '1f3870be274f6c49b3e31a0c6728957f') echo "ok"; else echo 'erreur mot de passe' ; ?>

Eléphant du PHP | 59 Messages

17 oct. 2010, 03:40

je suis en post je veut un exemple de code s'il vous plais merci
debian lenny | php5.3.3 | mysql 5.1.51 | apache2.2.16

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 oct. 2010, 09:49

Sans vouloir paraître désagréable, il me semble que le message de mgone n'est constitué QUE d'exemples de code. Tu disposes même d'explications détaillées pour comprendre comment php fonctionne et comment mettre en pratique ce dont tu as besoin...

Maintenant, si ce que tu souhaites c'est un code tout fait qui fonctionne et que tu n'as plus qu'à mettre en ligne, on peut te proposer un devis, y a des développeurs et des boites de services qui ne vivent que de ça ;) On est là pour t'aider à comprendre et à apprendre, pas pour le faire à ta place :)

Et pour répondre à ta question, si ton formulaire envoi ses données en GET, tu utilises $_GET['nom_de_ton_champ'] pour les récupérer. S'il les envoi en POST, il te faut simplement utiliser $_POST['nom_de_ton_champ'] :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 59 Messages

17 oct. 2010, 10:04

bonjour,

avec
$mdp = $_POST['mdp'];
if (md5($mdp) == '1f3870be274f6c49b3e31a0c6728957f') echo "ok"; else echo 'erreur mot de passe' ; 
le mot de passe se crypte pas du tout j'ai fait une erreur de code voci ma page pour vous montrer ou je les peut etre que j'ai fait une erreur
<?php

// on declare toutes les variables
$login = $_POST['login'];
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
$email = $_POST['email'];
$mdp = $_POST['mdp'];
$verifmdp = $_POST['verifmdp'];

// on verifie que les 2 mot de passe sont identique.
if ($mdp != $verifmdp)
{
 echo " <br />erreur : Attention les 2 mot de passe sont diff&eacute;rent";
}


if( isset( $_POST['login'] ) && isset ( $_POST['nom'] ) && isset ( $_POST['prenom'] ) && isset ( $_POST['email'] ) && isset ( $_POST['mdp'] ) && isset ( $_POST['verifmdp'] ) ) 
{
echo "champ vide";
}

function getPassword($login) {
	global $dbh;

	$uid = $dbh->quote($login);
	$requete = "SELECT mdp FROM login WHERE uid='$uid'";
	$sth = $dbh->query($requete);
	$result = $sth->fetch(PDO::FETCH_ASSOC);
	if(!empty($result['mdp'])) {
	 return $result['mdp'];
	} else {
	  return FALSE;
	}
 }

function newPassword($login, $mdp) {
 $crypt = crypt($mdp);
  return setPassword($login, $crypt);
}

// on se connect sous mysql
try
{
    $bdd =  new PDO('mysql:host=localhost;dbname=sogamesm', 'sogamesm', '*************');
    $bdd->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
}
catch(PDOException $e)
{
    exit($e->getMessage());
}

$mdp = $_POST['mdp'];
if (md5($mdp) == '1f3870be274f6c49b3e31a0c6728957f') echo "ok"; else echo 'erreur mot de passe' ; 
$req = $bdd->prepare('INSERT INTO register_sogamesm(login, nom, prenom, email, mdp) VALUES(:login, :nom, :prenom, :email, :mdp)');
$req->execute(array(
   'login' => $login,
   'nom' => $nom,
   'prenom' => $prenom,
   'email' => $email,
   'mdp' => $mdp,
   ));

echo 'votre compte a bien été enregistré';


?>
debian lenny | php5.3.3 | mysql 5.1.51 | apache2.2.16

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 oct. 2010, 10:23

La fonction md5() retourne la valeur crypté de la variable passée en argument, mais ne change pas cette variable :)

Si tu veux récupérer la valeur cryptée pour pouvoir ensuite l'insérer en base il te faut soit remplacer la valeur de $mdp, soit faire appel à md5() au moment de la génération de ta requête :
$mdp = md5($mdp);
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 59 Messages

17 oct. 2010, 12:16

le mot de passe se crypt probleme il capte pas mon mot de passe donc il crypt un champ vide et pour la verification du champ j'ai vraiment rien compris au code
debian lenny | php5.3.3 | mysql 5.1.51 | apache2.2.16

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 oct. 2010, 12:36

Il y a deux étapes à distinguer. L'enregistrement en base du mot de passe crypté lors de la création de l'utilisateur, et la comparaison des mots de passe lors de l'authentification.

Pour le premier, il te faut récupérer le mot de passe saisi en clair par l'utilisateur, crypter celui-ci et l'insérer dans ta base de données. (et tu peux contrôler si celui-ci est vide ou non de la même manière que tu vérifies s'il est identique à celui envoyé pour confirmation).

Pour le second, l'utilisateur va là encore t'envoyer un mot de passe en clair. Il te faut donc crypter celui-ci et comparer la valeur obtenue à celle précédemment enregistrée en base. Si les deux concordent, c'est que le mot de passe est correct :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 59 Messages

17 oct. 2010, 12:50

vocii se que sa me donne mais comment faire pour le decrypter pour etre sur que sa été bien se que j'ai mis merci et je veut une focntion pour mes champ vide svp
debian lenny | php5.3.3 | mysql 5.1.51 | apache2.2.16

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 oct. 2010, 13:41

Ce qui est bien avec md5, c'est qu'on ne peut pas le décrypter pour retrouver le mot de passe d'origine et pirater un compte. Du coup pour vérifier les que les mots de passe correspondent, comme indiqué ci dessus, on compare les valeurs cryptées.

Et voici une fonction pour tes champs vides : empty()
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 59 Messages

17 oct. 2010, 16:55

ceci ne marche pas
// je verifie que les champs sont bon.
if( (!empty($login)) || (!empty($nom)) || (!empty($prenom)) || (!empty($email)) || (!empty($mdp)) || (!empty($verfimdp)) ) {
echo "les champ sont correct est remplie merci";
} else {
echo "les champs sont vide et inccorect";
}
quel est l'erreur
debian lenny | php5.3.3 | mysql 5.1.51 | apache2.2.16

Petit nouveau ! | 8 Messages

17 oct. 2010, 18:50

remplace tous les || par &&

c'est une erreur de logique:

pour votre cas si tu utilise !empty:
si ("var1 est non vide" et "var2 est non vide" et "var3 est non vide" ) c'est ok , sinon pas ok

pour l'inverse empty seulement
si ("var1 est vide" ou "var2 est vide" ou "var3 est vide" ) c'est pas ok , sinon c'est ok

Eléphant du PHP | 59 Messages

18 oct. 2010, 10:59

j'ai mis ceci mais l'action se fait toujour meme si il a rien de remplie que va t'il pas dans le code
<?php

// je verifie que les champs sont bon.
if(!empty($login) && !empty($nom) && !empty($prenom) && !empty($email) && !empty($mdp) && !empty($verfimdp)) {
echo "les champ sont correct est remplie merci";
} else {
echo "les champs sont vide et inccorect";

?>
debian lenny | php5.3.3 | mysql 5.1.51 | apache2.2.16

ViPHP
xTG
ViPHP | 7331 Messages

18 oct. 2010, 11:45

Ce test ne bloque en rien le script qui se déroule par la suite.
Il ne fait qu'afficher un texte ou un autre.

Soit tu inclus le reste de ton code à l'intérieur du if, soit tu ajoutes un die() ou un exit() dans la partie du if qui est fausse, cela aura pour conséquence de stopper l'exécution de la page.

Eléphant du PHP | 59 Messages

18 oct. 2010, 12:55

comme ceci ?
<?php
// je verifie que les champs sont bon.
if(!empty($login) && !empty($nom) && !empty($prenom) && !empty($email) && !empty($mdp) && !empty($verfimdp)) {
echo "les champ sont correct est remplie merci";
} else {
echo "les champs sont vide et inccorect";
exit();
$req = $bdd->prepare('INSERT INTO register_sogamesm(login, nom, prenom, email, mdp) VALUES(:login, :nom, :prenom, :email, :mdp)');
$req->execute(array(
   'login' => $login,
   'nom' => $nom,
   'prenom' => $prenom,
   'email' => $email,
   'mdp' => $mdp,
   ));
}
?>
car je voit vraiment pas comment regler se probleme
debian lenny | php5.3.3 | mysql 5.1.51 | apache2.2.16