8791 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai un formulaire pour le loguer sur une partie d'un site. A la validation de ce formulaire, je n'ai aucune variable qui passe Smiley confus . Pouvez-vous-m'aider Smiley biggrin ?


<?php
// on teste si nos variables sont définies
if (isset($_post['submit']) & $_post['submit']=="Connexion") { 

	// Connexion à la base de données
	// Valeurs à modifier selon vos paramètres de configuration
	include('connectbdd.php');
	$base = mysql_connect ($serveur, $login, $mdp);  
	mysql_select_db($table, $base);  

	// Sélection de l'utilisateur concerné 
	$a = $_post['nomdutilisateur'];
	$sql = "SELECT Mot_de_Passe FROM wt_administrateurs WHERE Nom_Utilisateur='$a'";
	// on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)  
	$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
	$resultat = mysql_fetch_array($req);
	
		
		// Vérification du mot de passe
		if(md5($_post["pwd"]) == $resultat["Mot_de_Passe"])
		{
			// dans ce cas, tout est ok, on peut démarrer notre session

			// on la démarre [smile]
			session_start ();
			// on enregistre les paramètres de notre visiteur comme variables de session
			$_SESSION['nomdutilisateur'] = $_post['nomdutilisateur'];
			$_SESSION['pwd'] = $_post['pwd'];
			$_SESSION['ok'] = "ok";

			// on redirige notre visiteur vers une page de notre section admin
			echo'<span class="center"><a href="#" onclick="window.parent.SexyLightbox.close(); return false;">Entrez dans l\'administration<br />Cliquez-ici puis appuyez sur F5.</a></span>';
		}
		else {
			echo "nom id : ".$_post['nomdutilisateur'];
			echo 'resultat mdp : '.$sql;
			echo '<br />mon mdp : '.$_post["pwd"].' et crypte : '.md5($_post["pwd"]);
			// Le visiteur n'a pas été reconnu comme étant admin de notre site. On utilise alors un petit javascript lui signalant ce fait
			//echo '<body onLoad="alert(\'Administrateur non reconnu...\')">';
			// puis on le redirige vers la page d'accueil
			//echo '<meta http-equiv="refresh" content="0;URL=loginadmin.php">';
		}
	// on libère l'espace mémoire alloué à cette requête  
	mysql_free_result ($req);  
	 
	// on ferme la connexion à la base de données  
	mysql_close (); 

}
else {
?>

<html>
	<head>
		<title>Formulaire d'identification</title>
	</head>
	 	<body>
		<form method="post" action="loginadmin.php">
			<fieldset><legend> Loguez-vous</legend>
				<label for="nomdutilisateur">Votre login : </label>
				<input type="text" name="nomdutilisateur" /> <br />
				<label for="mdp">Votre mot de passe : </label>
				<input type="password" name="pwd" /><br />
				<input type="submit" value="Connexion">
			</fieldset>
		</form>
	</body>
</html> 

<?php 
}
?>


Merci
Modifié par folvool (18 Oct 2010 - 14:31)
bonjour...

simple étourderie je suppose (la 3° que je croise en 2 jours)

les variables globales sont toujours en majuscules...

$_POST, $_GET , $_SESSION etc

tu appelles $_post... c'est une variable inconnue Smiley lol
Merci pour la réponse pchlj, mais même en mettant _POST en majuscule, ça ne change pas mon problème.
Salut

Pour ma part je ferais »

. . .
$a = (string) $_GET['nomdutilisateur];
$sql = "SELECT Mot_de_Passe FROM wt_administrateurs WHERE Nom_Utilisateur=$a";
. . .

$_POST est utile lors de la validation pour traitement avec INSERT
Mais si tu cherche à récupérer vaut mieux $_GET. N'oubli pas ici que toute information est déjà dans la base.

Essais le sais-t-on jamais.

++
Modifié par zardoz (18 Oct 2010 - 07:17)
@zardoz son formulaire utilise la méthode POST donc ça risque pas de fonctionner avec GET. En plus dans l'exemple que tu donnes tu as une énorme faille de sécurité (injection SQL, pas besoin de connaitre le mot de passe pour se loguer).

@folvool: en regardant rapidement je pense que ton problème est que tu as un & ou lieu d'un && dans ta condition:


if (isset($_POST['submit']) && $_POST['submit']=="Connexion") {  


PS: pour la sécurité, même remarque que pour zardoz.
Modifié par jb_gfx (18 Oct 2010 - 00:54)
Hello

Eh bien d'accord pour && que tous n'auront pas vu.
Pour ce qui est de mysql_real_escape_string ( ) d'accord aussi. Nous le savions.

Seulement il faut répondre d'abord et avant tout à la question. La fait de gérer la sécurité appartient à folvool.

J'ai trop souvent lu Heyoan répété mille fois l'importance de sécurisé la sortie des objets en BDD. Sans vraiment de résultat puisque nous voyons le manque de sécurité encore trop souvent.

C'est à folvool de s'en rendre compte et de s'informer sur le sujet.

PHP Manuel fr mysql_real_escape_string : !important
PHP Manuel fr injection SQL : lecture très intéressante ici

++
Modifié par zardoz (18 Oct 2010 - 03:07)
salut

a écrit :
Mais si tu cherche à récupérer vaut mieux $_GET


JAMAIS DE GET POUR UNE INTERROGATION/UPDATE/AJOUT

et ce même si, dans l'absolu ce n'est pas plus dangeureux que post si bien géré.

a écrit :
en regardant rapidement je pense que ton problème est que tu as un & ou lieu d'un && dans ta condition:


+1
Juste pour titre d'informations si ça ne marche toujours pas :

- Regarde si tu arrives bien à te connecter à ta base de donnée (faire une simple requête SQL du type "affiche moi le nom d'utilisateur de l'id X)
- Si cela fonctionne, affiche la requête générer, et exécute là directement dans ta base pour voir si la syntaxe est correcte (si tu n'es pas expert en SQL)
- Affiche le contenu de tes variables globales avec "print_r($_POST);" ce qui te permettra de voir les variables qui sont passés ou pas

Ensuite, si il y a des erreurs dans tes test logique ... c'est un peu plus dur de débugger ça sans connaitre ton code. Si un petite astuce qui peut aider :

- Si tu souhaite vérifier qu'un de test est bien passé, affiche un petit "echo 'Test alpha OK';" juste après un de test logique, au moins tu seras fixé rapidement sur l'endroit où ça pêche.

Ensuite, personnellement, je préfère utiliser les opérateurs logique "AND, OR" plutôt que leur équivalent "&&, ||" qui en fin de compte rende la lecture plus complexe et peuvent générer des erreurs d'inattention.
Modifié par Super_baloo8 (18 Oct 2010 - 14:05)
Merci pour toutes ces réponses.

Mon problème est corrigé: On ne regardait pas au bon endroit même si "_post" s'écrit "_POST" etqu j'avais écris "&" à la place de "&&".

J'ai résolu en ajoutant l'attribut "name" à mon bouton de type "submit"

<input type="submit" name="submit" value="Connexion">

qui remplace :
<input type="submit" value="Connexion">


Je vais quand même me documenter sur les injections SQL. Merci Smiley biggrin