8797 sujets

Développement web côté serveur, CMS

Bonjour j'ai un souci pour un formulaire qui permet de se loguer à un compte client avec un login et un mot de passe. Pour éviter les injonctions sql j'ai utilisé la fonction mysql_real_escape_string.
En local il n'y a pas de problème mais sur mon serveur chez l'hébergeur infomaniak il y a un souci.
Lorsque j'enlève la fonction mysql_real_escape_string la requete fonctionne bien il trouve mon compte client. A l'inverse avec la fonction mysql_real_escape_string aucun résultat ne m'est retourné.
Voici mon code


function magic_s($var)
{
if ( get_magic_quotes_gpc() ) return stripslashes($var);
else return $var;
} 

//si la personne a rempli le formulaire on verifie
if (isset($_POST['login']) && isset($_POST['mdp']))
{
		//on recupere les variables du formulaire
		$login = magic_s($_POST['login']); 
		$passe= magic_s($_POST['mdp']); 
		authentification($login,$passe);//appel de la fonction 
}

voici ma fonction authentification
function authentification($login,$passe){
$req_auth="select Cli_id from client where login='".mysql_real_escape_string($login)."' and mdp='".mysql_real_escape_string(sha1('$passe'))."'";
$query_req_auth=mysql_query($req_auth) or die("Erreur lors de la verification du client".mysql_error());
$client=mysql_fetch_assoc($query_req_auth);
$row=mysql_num_rows($query_req_auth);
deconnexion();
if ($row!=0)
	{
// si il est corretement identifié on créé la session d'utilisateur valide
echo'bienvenue';
}else{
echo'erreur';
}


ps: La connexion à la base de données est ok

Merci pour votre aide avec cette foutu fonction mysql_real_escape_string
Si vous avez des méthodes efficaces pour éviter les injections sql n'hésiter pas.
Merci
Modifié par greg12 (08 Dec 2008 - 22:19)

Je fais comme cela:

<?php
session_start() ;
include 'connexion.php';
if (isset($_POST['pseudo']) && isset($_POST["passe"]) && !empty($_POST["pseudo"]) && !empty($_POST["passe"]))
{
//on recupere les données du formulaire

$login = mysql_real_escape_string(stripslashes($_POST['pseudo']));

$passe = mysql_real_escape_string(htmlspecialchars($_POST['passe']));
//etc etc etc ......
merci de ton aide rouge je vais essayer cela. Quel est la différence entre

mysql_real_escape_string(stripslashes

et

mysql_real_escape_string(htmlspecialchars


je vous tiens au courant si le script fonctionne sur mon serveur.
Greg
Cela ne marche pas j'ai fais des tests pour voir d'où venait le problème. Et voici le message d'erreur Sur le net je n'ai rien trouvé de concluant pour ce message:

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'httpd'@'localhost' (using password: NO)

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in 


Merci pour votre aide.

Greg
Modifié par greg12 (08 Dec 2008 - 21:57)
Salut,

greg12 a écrit :

Pour éviter les injonctions sql
On parle plutôt d'injection SQL. Smiley cligne

Peut-être que le problème vient de ce que pseudo et/ou passe n'ont pas eu droit au mysql_real_escape_string au moment de l'INSERT ?

Quoi qu'il en soit il suffit de faire un echo $req_auth; juste avant mysql_query et de lancer la requête telle-quelle dans PHPMyAdmin (ou plus simplement de faire un second echo $req_auth; en supprimant mysql_real_escape_string et de voir la différence entre les 2).
Modifié par Heyoan (08 Dec 2008 - 22:02)
greg12 a écrit :
Cela ne marche pas j'ai fais des tests pour voir d'où venait le problème. Et voici le message d'erreur Sur le net je n'ai rien trouvé de concluant pour ce message:

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'httpd'@'localhost' (using password: NO)

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in 


Merci pour votre aide.

Greg

Est-ce que tu es bien connecté (mysql_connect et mysql_select_db avant de faire le mysql-real-escape-string ?
Ok c'est bon Smiley biggrin Smiley biggrin . merci rouge pour ton script cela fonctionne je ne savais pas que pour la fonction mysql_real_escape_string il fallait que la connexion à la base soit faite. Juste avant de faire appel à cette fonction j'ai mis ma fonction de connexion à ma base de données et cela a marché.

Problème résolu. Vive le forum Alsacréations

Greg
Modifié par greg12 (08 Dec 2008 - 22:18)
PS en repassant par là : le test suivant
if (isset($_POST['pseudo']) && isset($_POST["passe"]) && !empty($_POST["pseudo"]) && !empty($_POST["passe"]))
est à remplacer par
if (!empty($_POST["pseudo"]) && !empty($_POST["passe"]))
puisque !empty vérifie déjà l'existence de la variable.

Pour ce qui est de stripslashes autant garder ta fonction actuelle magic_s qui vérifie d'abord comment sont paramétrés les magic quotes avant de l'appliquer.

Quant au htmlspecialchars il est très bien mais il ne sert qu'au moment du réaffichage de la variable... donc pas ici. Smiley cligne
Modifié par Heyoan (09 Dec 2008 - 08:10)