[RESOLU] afficher un message

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] afficher un message

Re: afficher un message

par challenger11 » 24 avr. 2015, 23:25

@Ryle un trés grand merci sa marche grâce à vous encore merci pour votre aide

Re: afficher un message

par Ryle » 24 avr. 2015, 13:58

A mon avis, ta comparaison de clé devrait se faire directement en base. Tu regardes si au moins un enregistrement correspond à ta clé, et si c'est le cas tu le mets à jour :
<?php

if (isset($_POST['envoyer']) && !empty($_POST['cles'])) {

	$cl=$_POST['cles'];

	$sql = "SELECT count(*) as nb FROM users WHERE cles='$cl'";
	$req = mysql_query($sql) or exit('Erreur SQL ligne '.__LINE__.' : '.mysql_error());
	
	$ligne = mysql_fetch_assoc($req);
	$nb = $ligne['nb'];
	
	if ($nb > 0) { //Génération d'une chaine aléatoire

		function chaine_aleatoire($nb_car, $chaine = 'azertyuiopqsdfghjklmwxcvbn123456789') {
		    $nb_lettres = strlen($chaine) - 1;
		    $generation = '';
		    for($i=0; $i < $nb_car; $i++) {
		        $pos = mt_rand(0, $nb_lettres);
		        $car = $chaine[$pos];
		        $generation .= $car;
		    }
		    return $generation;
		}

		$pass = chaine_aleatoire(8);

		// mise à jour du mot de passe
		$sql = "UPDATE users SET mdp='$pass' WHERE cles='$cl'";
		$rs=mysql_query($sql) or exit('Erreur SQL ligne '.__LINE__.' : '.mysql_error());
			
		echo 'le mot de passe a été modifié';
	} 
	else {
		echo 'insérez une clé valide ';
	}
}
?>

Re: afficher un message

par challenger11 » 24 avr. 2015, 00:05

Merci Ryle pour votre réponse oui en effet j'au un seul compte dans ma base de données alors j'ai crée un autre compte tout fonctionne correctement seulement le message d'erreur . Je précise ce que je veux exactement si je rentre une clé et qui existe dans la base de données le mot de passe change sinon si il se trouve pas un message d'erreur s'affiche à l'utilisateur .J'ai essayer la manipulation if ($cl == $nb) d’ailleurs c'étais comme sa au début mais sa ne marche pas rien ne change dans la base de données de plus le message d'erreur s'affiche pour toujours , alors qu'avec mon code actuel comme j'ai dis tous marche seulement le message d'erreur ne s'affiche pas si l'utilisateur entre une clé qui ne se trouve pas dans la base

Re: afficher un message

par Ryle » 23 avr. 2015, 23:36

Je rejoins la remarque de xTG, tu dis que tout marche, mais le code que tu nous présente ne correspond pas à ce que tu décris. A mon avis ton script fonctionne uniquement parce que tu le testes avec un seul utilisateur/enregistrement ou que coup de bol, c'est le premier de la liste ;)

En effet, ton SELECT retourne les champs "cles" de tous tes enregistrement. Si tu as 100 utilisateurs, tu récupères 100 clés si tu ne précise pas pour quel utilisateur particulier tu veux contrôler la clé. Tu devrais n'en retourner qu'une seule, voire faire la comparaison de la clé directement en base (chose que tu fais d'ailleurs bien pour la mise à jour du mot de passe : WHERE cles='$cl' ).

L'instruction $ligne=mysql_fetch_array($req); te permet de lire le premier enregistrement retourné par ta requête (donc sur les 100 clés récupérées en base, tu vas lire la première (en espérant que ce soit la bonne). Ca ne peut théoriquement fonctionner que si ta requête sql ne retourne qu'un seul enregistrement.

Enfin, tu as stocké la valeur de $_POST['cles'] dans ta variable $cl et la valeur récupérée en base ($ligne['cles']) dans ta variable $nb. La comparaison devrait donc simplement être if ($cl == $nb) :)

Re: afficher un message

par challenger11 » 23 avr. 2015, 18:26

bonjour @xTG ;
oui je vérifie la clé entrée est celle d'un utilisateur en particulier comme je vous est dis jusque la tous marche seulement si je rentre une fausse clé je veux qu'il lui affiche qu'elle fausse seulement dans mon cas si la clé n'est pas bonne il ne fais rien

Re: afficher un message

par xTG » 23 avr. 2015, 14:34

Tu sélectionnes dans ta table toutes les clés. Mais n'en vérifie aucune.
Que veux-tu faire ? Vérifier que la clé rentrée est celle d'un utilisateur en particulier ?

Car dans l'état ton script ne fait rien de tangible.

Re: afficher un message

par challenger11 » 23 avr. 2015, 00:46

Merci Tof73 pour votre réponse si je met 2 == au lieu d'une seul le mot de passe ne change plus dans la base de données alors qu'avec une seul égale il change et si je rentre une clé quelconque le mot de passe ne change pas mais le message d'erreur ne s'affiche pas .Autre chose avec == le message d'erreur s'affiche toujours que se sois vide ou clés valide ou au hasard et avec une seul = il ne s'affiche pas alors que tous marche parfaitement

Re: afficher un message

par tof73 » 22 avr. 2015, 23:48

if ($_POST['cles']=['cles'])
== pour comparer
= pour affecter

afficher un message

par challenger11 » 22 avr. 2015, 23:33

Bonsoir ,
On effet mon problème est simple je veux qu'un utilisateur entre une clés si c'est la bonne alors le mot de passe change dans la base de données et si c'est une mauvaise clés on lui indique un msg d'erreur.Tous fonctionne seulement si je met une clés au hasard rien ne se passe et il n'affiche pas le message d'erreur voulu. Donc voila mon code :
<?php
if (isset($_POST['envoyer'])&&(!empty($_POST['cles'])))
	{
	$cl='';
	$cl=$_POST['cles'];

	$sql="SELECT cles FROM users";
	$req=mysql_query($sql) or exit('Erreur SQL ligne '.__LINE__.' : '.mysql_error());
	$ligne=mysql_fetch_array($req);
	$nb=$ligne['cles'];
	
	if ($_POST['cles']=['cles'])
			{
			//Génération d'une chaine aléatoire
function chaine_aleatoire($nb_car, $chaine = 'azertyuiopqsdfghjklmwxcvbn123456789')
{
    $nb_lettres = strlen($chaine) - 1;
    $generation = '';
    for($i=0; $i < $nb_car; $i++)
    {
        $pos = mt_rand(0, $nb_lettres);
        $car = $chaine[$pos];
        $generation .= $car;
    }
    return $generation;
}
$x=chaine_aleatoire(8);
// mise à jour du mot de passe
$sq="UPDATE users 
			SET mdp='$x' 
			WHERE cles='$cl'";
			$rs=mysql_query($sq) or exit('Erreur SQL ligne '.__LINE__.' : '.mysql_error());
			
			
			} 
			else {echo ('insérez une clés valide ');}
			
			}
			?>
Merci d'avance pour votre aide :D :D