soad39 Posté 1 Novembre 2005 Partager Posté 1 Novembre 2005 Bonjour j'ai un probleme et je n'arrive pas a le résoudre! Ca me met : "Function name must be a string". Je vous met mon code : mon verif_ident : <?include("fonction.php");$user_id=check_id($_GET($pseudo),$_GET($passwd));session_start(); if ($user_id==-1){header("location:verif_ident.php");}else{ session_register("user_id"); header("location:identification.php");}?>Mon fonction.php : <? function check_id($pseudo,$passwd) { mysql_connect("localhost", "agenda_user", "steve"); mysql_select_db("agenda.mdb"); $req="select * from utilisateur"; $resultat=mysql_query($req); $trouve=false; while ($row==mysql_fetch_assoc($resultat)||($trouve=false)) { if ($pseudo==$row[usr_pseudo]||($passwd==$row[usr_passwd])) { $trouve=true;} } if ($trouve==false){return -1;} else {return $row[usr_id];} } function check_session() { if(!session_is_registered("user_id")) {header('location:verif_ident.php');} }?> Merci de me répondre car la je vais péter un câble !! Lien vers le commentaire Partager sur d’autres sites More sharing options...
soad39 Posté 1 Novembre 2005 Auteur Partager Posté 1 Novembre 2005 j'ai oublié de précisé que le problème venait de ma 2ième ligne de code : $user_id=check_id($_GET($pseudo),$_GET($passwd)); Je ne vois pas pourquoi il faudrait que ma fonction soit de type String alors qu'elle retourne un entier Lien vers le commentaire Partager sur d’autres sites More sharing options...
desg Posté 1 Novembre 2005 Partager Posté 1 Novembre 2005 (modifié) $_GET($pseudo) ?$_GET["$pseudo"] while ($row==mysql_fetch_assoc($resultat)||($trouve=false)) { ?c'est pas très bon, non plus un truc comme:$pseudo = ( empty($_GET["$pseudo"]) ) ? 'anonyme' : addslashes($_GET["$pseudo"]);....$req="select * from utilisateur WHERE user=$pseudo AND password=$password";if ( $mfa = mysql_fetch_array($req) ) { return TRUE;}else { return FALSE;} ...... ajouter un addslashes($pseudo) si magic_quote est pas actif serait mieux Modifié 1 Novembre 2005 par desg Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dan Posté 1 Novembre 2005 Partager Posté 1 Novembre 2005 Salut Soad, Comme desq te le signale, les variables $_GET s'adressent avec la syntaxe suivante: $_GET['nom_de_var'] ... $_GET() fait effectivement référence à une fonction, qui par défaut ne retourne rien alors que ta fonction check_id attend 2 chaînes en argument. D'où l'erreur que tu obtiens. Il est donc vraisemblable que si tu adresses une variable $pseudo passée dans l'URL, il faudra utiliser $_GET['pseudo'] ... idem pour le mot de passe. D'un autre côté, passer un mot de passe dans l'URL n'est pas vraiment conseillé. Il vaudrait mieux utiliser la méthode "post" et récupérer les valeurs avec $_POST['pseudo'] par exemple Dan Lien vers le commentaire Partager sur d’autres sites More sharing options...
soad39 Posté 1 Novembre 2005 Auteur Partager Posté 1 Novembre 2005 (modifié) Merci! En fait j'étais en méthode Post au début et j'ai cru que sa plantait à cause de cette méthode. Mais il est vrai que la méthode post est plus sécurisée!Sinon excusez moi mais je me suis planté dans ma syntaxe pour le check_id. Ma syntaxe initiale était bien celle que vous m'avez présenté (fausse manip en la réécrivant... ) mais j'ai toujours le même message d'erreur. desg Merci aussi pour ton amélioration. En fait j'avait le choix entre ma méthode et un truc qui ressemblait à la tienne mais vu que je comprennais mieux la mienne... En tout cas merci pour vos aides !! Dan, je dois faire comment alors? Car j'ai essayé en stockant mes $_GET["pseudo"] et $_GET["passwd"] dans deux variables différentes mais j'ai le même problème! Je dois être benêt... ps : Excellent forum !! Modifié 1 Novembre 2005 par soad39 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dan Posté 1 Novembre 2005 Partager Posté 1 Novembre 2005 Si tu passes tes variables pseudo et passwd par l'URL (méthode GET) tu peux appeller ta fonction comme-ceci: $user_id=check_id($_GET['pseudo'],$_GET['passwd']); avec la méthode POST (plus fiable) ce serait: $user_id=check_id($_POST['pseudo'],$_POST['passwd']); Tu peux t'assurer que la variable $_GET (ou $_POST) contient bien tes données avec un print_r($_GET); avant l'appel à ta fonction. Lien vers le commentaire Partager sur d’autres sites More sharing options...
soad39 Posté 1 Novembre 2005 Auteur Partager Posté 1 Novembre 2005 Ok merci, je vais essayé tout de suite. Lien vers le commentaire Partager sur d’autres sites More sharing options...
soad39 Posté 1 Novembre 2005 Auteur Partager Posté 1 Novembre 2005 (modifié) Mes variables sont bien prises en comptes merci Dan! Par contre après j'ai une boucle infinie donc il faut que je trouve ma connerie (si un de vous peut me la dire je suis preneur !!). Ceci ne viendrait pas de cette ligne par hasard? mysql_select_db("agenda.mdb"); Ici je n'indique pas où est la base de données à laquelle il doit acceder car il me semble qu'il doit la trouvé par défault étant donnée que je l'ai créer avec Wamp tout comme mes pages PHP. Modifié 1 Novembre 2005 par soad39 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dan Posté 1 Novembre 2005 Partager Posté 1 Novembre 2005 Il faudrait la source de ta fonction check_id(). Parce que si elle ne trouve pas le login et mot de passe, elle rappelle la même page. Le fait de rappeller cette page avec le header("location:...") te fait d'ailleurs perdre les variables $_GET ou $_POST ... Lien vers le commentaire Partager sur d’autres sites More sharing options...
xpatval Posté 1 Novembre 2005 Partager Posté 1 Novembre 2005 Le fait de rappeller cette page avec le header("location:...") te fait d'ailleurs perdre les variables $_GET ou $_POST ... <{POST_SNAPBACK}> Il est possible de les conserver avec le header("location:identification.php?var=$var&var2=$var2, si je ne m'abuse... xpatval Lien vers le commentaire Partager sur d’autres sites More sharing options...
desg Posté 1 Novembre 2005 Partager Posté 1 Novembre 2005 // la requéte selectione les 2 colones user et pasword ou les valeurs de $pseudo et // $password correspondent$req="select * from utilisateur WHERE user=$pseudo AND password=$password";// si la requète retourne quelque chose l'utilisateur existe bien :)if ( $mfa = mysql_fetch_array($req) ) { return TRUE;}// sinon la requéte ne retourne ne rien else { return FALSE;}// pour éviter les problèmes il vaut mieux que la variable ne soit pas vide // addslashes permet de rajouter un \ devant les carctères nuisible// c'est valable que si magic_quote n'est pas activé sur le serveur// cette ligne attribut la valeur 'anonyme' si $_GET["$pseudo"] est vide// (ça évite aussi les notices pour les variables indéfini ...)$pseudo = ( empty($_GET["$pseudo"]) ) ? 'anonyme' : addslashes($_GET["$pseudo"]); rajoute exit(); après header(location..) ça dit clairement au script de s'arrèter while ($row==mysql_fetch_assoc($resultat)||($trouve=false)) je pense que ta condition est toujours vraie essaye avec $trouve==false pour voire si t'es requète s'éxécute correctement tu peut faire mysql_select_db("agenda.mdb") or die('erreur 1:'.mysql_error());$resultat=mysql_query($req) or die('erreur 2:'.mysql_error()); ça arretera le script et renvera l'erreur de mysql Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant