Aller au contenu

Probleme php


soad39

Sujets conseillés

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 !! :evil:

Lien vers le commentaire
Partager sur d’autres sites

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 :wacko:

Lien vers le commentaire
Partager sur d’autres sites

:blink:

$_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é par desg
Lien vers le commentaire
Partager sur d’autres sites

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

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... :blush: ) 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... :blush:

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... :blush:

ps : Excellent forum !!

Modifié par soad39
Lien vers le commentaire
Partager sur d’autres sites

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

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é par soad39
Lien vers le commentaire
Partager sur d’autres sites

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

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

// 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

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...