Problème PHP MySQL
Je n'y connais pas grand chose (pour ne pas dire rien) et ai un problème. Voici mon code:
<? include('verifsession.php');
include('sql_connect.php');
$req=mysql_query("select pseudo from membres where login='$_POST[login]'");
$pseudo=mysql_result($req,0,"pseudo");
?>
<html>
<head>
<title>Accueil membre</title>
<SCRIPT LANGUAGE="JavaScript1.1">
function right(e)
{var msg = "Le vol est interdit chez moi";
if (navigator.appName == 'Netscape' && e.which == 3){alert(msg);}
else if (navigator.appName == 'Microsoft Internet Explorer' && event.button==2){alert(msg);}return true;}
document.onmousedown = right;
</SCRIPT>
<script LANGUAGE="JavaScript" FOR="window" EVENT="onload()">
parent.status = ('LFB Promotion 2002')
</script>
<link rel="stylesheet" type="text/css" href="Logo/sommaire.css">
</head>
<body bgcolor="#E7E7CF" text="#000000">
<div align="center">
<p><b><font size="3" face="Arial">Bonjour <? echo"$pseudo" ?></font></b></p>
<p> </p>
<p><a href="modifperso.php"><font size="3" face="Arial">Modifier ses données personnelles (autoriser la publication dans la
liste des membres)</font></a></p>
<p> </p>
<p><a href="deconnexion.php"><font size="3" face="Arial">Se déconnecter</font></a></p>
</div>
</body>
</html>
Voici le texte d'erreur:
Notice: Undefined index: login in c:\program files\easyphp\www\lfb\espacemembre\accueilmembres.php on line 3
Warning: mysql_result(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp\www\lfb\espacemembre\accueilmembres.php on line 4
Qui dois-je faire?
Merci d'avance,
Arnaud
33 réponses
Le problème central décrit une page d'accueil membre qui lit $_POST['login'] mais déclenche une notice Undefined index: login lorsque le paramètre n'est pas transmis et que la requête échoue. Des réponses suggèrent de vérifier l'existence des données POST avec isset, d'utiliser des sessions pour l'authentification et de moderniser le code avec PDO/MySQLi afin d'éviter les dépréciations et risques. D'autres interventions soulignent des failles potentielles (injections SQL, stockage des mots de passe) et proposent des ajustements ciblés comme remplacer $_POST par $_SESSION et corriger le flux de connexion. En complément, la situation souligne que la sécurité et la stabilité des pages d'authentification nécessitent une vérification systématique des entrées et une séparation claire entre affichage et traitement côté serveur.
-
Oui, je te remercie, je l'avais vu, et c'est déjà changé...
Merci en out cas! -
En lisant ton code, je me rend compte que les session ne sont pas utiliser:
donc si tu passe le login de ta page de login à la page de test tu ne peut plus la passer à la page suivante.
regarde ton fichier connexion et cherche s'il utilise les session (fonction session_start( ) ).
Après tu regarde si le login est enregistrer dans la session:
$_SESSION['login']= ... ;
ou
session_register('login');
si c'est la cas, dans ta page d'affichage, tu rajoute au début la fonction session_start() et tu pourra faire:
echo $_SESSION['login']; -
Tout d'abord merci,
j'ai essayé de remplacer le POST par le SESSION (au niveau du premier POST, puis du second, puis des deux) mais du coup il dit que _SESSION n'est pas defini, et donc que le login est absent... Voci mon code:
<?
include('sql_connect.php');
if($_POST["login"]=='' || $_POST["password"]=='')
{$mess=0;}
else{
$req=mysql_query("select * from membres where login='$_POST[login]'");
$_POST["data"] = mysql_fetch_array($req);
if(mysql_num_rows($req)==0)
{$mess=1;}
else{if($data['password'] != $password){$mess=2;}}
if(!isset($mess))
{
session_start();
session_register('login');
if($data['statut']=="private")
{$mess=3;echo"<meta http-equiv=\"refresh\" content=\"0;URL=accueilprivate.php\">";}
else{$mess=4;echo"<meta http-equiv=\"refresh\" content=\"0;URL=accueilmembres.php\">";}
}
}
?>
Qu'en penses-tu?
Arnaud -
J'ai essayé de me loguer en utilisant le mot de passe que tu as donné et effectivement il y bien une page qui s'affiche entre les deux avec les ereur suivante:
Notice: Undefined variable: data in c:\program files\easyphp\www\lfb\espacemembre\connexion.php on line 16 Notice: Undefined variable: password in c:\program files\easyphp\www\lfb\espacemembre\connexion.php on line 16 Notice: Undefined variable: data in c:\program files\easyphp\www\lfb\espacemembre\connexion.php on line 23
le fichier connexion utilise à la ligne 16 et 23 la variable $data qui n'existe pas, ainsi que la variable password à la ligne 16.
Pour c'est erreur la je ne sais pas quoi faire.
Pour les précédent problème, je pense que la page connexion.php est utilisé pour tester si le mot de passe est correct, après il renvoie l'utilisateur sur la page accueilmembres.php mais s'en passer les variable par la méthode POST. C'est pour cela que $_POST['login'] n'existe pas.
Il se paut que tes pages PHP utlise les session, pour cela essaye de remplacer le $_POST['login'] pas $_SESSION['login'] -
Ok, Merci!!!
Et bonne nuit!
Arnaud -
ModérateurWep je verrais ça plus tard, j'ai regardé brièvement sur le site officiel de Php pour voir à quoi sert setlocale() et là j'ai pas bien compris :-)
Bonne nuit ^_^
Li4uLlZvdHJlIGTpdm916SBzZXJ2aXRldXIuLi4u
-
Merci pour tout...
Mais une erreur réglée en appelant une autre ($Notice: Passing locale category name as string is deprecated. Use the LC_* -constants instead. in......... on line..... dans laquelle il y a
$loctime=setlocale("LC_TIME","$lang");
je vais abandonner et te laisser un peu tranquile...
Merci encore pour tout...
Arnaud -
ModérateurJe ne sais pas. Ce qui change entre différent serveurs ça peut être la version de Php, les reglages de Php, les chemins de certains fichiers.....
Il m'a semblé avoir vu une erreur du genre $PHP_SELF undefined variable etc....
Ca tu peux le transformer en $_SERVER['PHP_SELF']
Li4uLlZvdHJlIGTpdm916SBzZXJ2aXRldXIuLi4u
-
Pour une fois... j'ai tout compris!!!
Je suis d'ailleurs assez d'accord...
Pour la base de données, elle a en effet été importée depuis multimania puis mise sur mon site dans le dossier de easyphp...
Mais si tout a marché dans la même configuration, j'entends sans changer erreur par erreur, c'est peut etre qu'il y a une manip a faire...
Arnaud -
ModérateurJe t'explique pourquoi c'est compliqué : il faudrait regarder erreur par erreur pour corriger. C'est un peu dur car tu as plusieurs pages php, sans compter qu'on a pas la structure de la base de données devant nous. (d'ailleurs est ce que tu l'a importée sur ton site et sur Easy Php la base de données?)
Pour corriger il faudrait avoir tout à disposition devant soi... et quand bien même j'aurais tout devant moi, je ne pense pas que j'aurais le temps de m'en occuper...
Donc sur un forum c'est pas pratique... :-)
Li4uLlZvdHJlIGTpdm916SBzZXJ2aXRldXIuLi4u
-
Ben écoute je n'ai plus de contact avec l'ami qui a adapté ces scripts (car ils ne sont pas de lui)...
Donc je sais pas trop...
Le forum, il est super basic... Mais a la limite je crois que je vais l'enlever... J'ai reussi a reparer le livre d'or... Pour l'instant c'est tout...
mais encore une fois, ce que je ne comprends pas c'est pourquoi les scripts ont fonctionné pendant quelques heures hier...
Bon donc personne n'a de solution? je ne pensais pas etre a l'origine d'un probleme si complexe...
Arnaud -
ModérateurWep, là il va falloir changer quelques trucs. Mais il ya plusieurs problèmes et là sur un forum c'est un peu compliqué. Il n'y a personne autour de toi qui connait le Php? Et celui qui a écris le script?
Attention, on peut se connecter avec n'importe quel mot de passe sur ce site !
Li4uLlZvdHJlIGTpdm916SBzZXJ2aXRldXIuLi4u
-
Les messages sont arrivés en même temps:
< 18 > - Problème PHP MySQL
Ajouté par Arnaud (13/01/2005 à 20:52 GMT+1)
Ce que je ne comprends pas, c'est pourquoi cela a marché quelque temps... Et maintenant fini...
Si tu veux te rendre compte de ce qu'est mon malheur, rdv là:
http://arnaud.myftp.biz
Nous travaillons actuellement dans l'espace membre mais il y a aussi le forum et le chat qui ne marchent pas... plus tout ce qui est mail
Si tu veux tester, tu peux utiliser le pseudo superman et comme mot de passe (bien que tu n'en aie pas besoin) superman64
Arnaud
[ Continuer la discussion ][ Répondre à Arnaud ]
< 19 > - Problème PHP MySQL
Ajouté par Arnaud (13/01/2005 à 20:53 GMT+1)
Ca j'ai comprends... Je te remercie...
Mais dans notre cas cela n'a pas l'air de fonctionner...
ps: je suis finalement resté sur easyphp 1.6
Arnaud -
ModérateurMais je me trompe sûrement dans ce que je te dis car ton script utilise déjà
$_POST['login'] pour recevoir les variables depuis un formulaire
Donc je ne sais pas....
Li4uLlZvdHJlIGTpdm916SBzZXJ2aXRldXIuLi4u
-
Ca j'ai comprends... Je te remercie...
Mais dans notre cas cela n'a pas l'air de fonctionner...
ps: je suis finalement resté sur easyphp 1.6
Arnaud -
Ce que je ne comprends pas, c'est pourquoi cela a marché quelque temps... Et maintenant fini...
Si tu veux te rendre compte de ce qu'est mon malheur, rdv là:
http://arnaud.myftp.biz
Nous travaillons actuellement dans l'espace membre mais il y a aussi le forum et le chat qui ne marchent pas... plus tout ce qui est mail
Si tu veux tester, tu peux utiliser le pseudo superman et comme mot de passe (bien que tu n'en aie pas besoin) superman64
Arnaud -
ModérateurSi tu veux t'adapter à Easy Php 1.7 il faut changer certaines variables qui sont entrées par methode post ou get (voir dans les formulaires:
<form method="post".......> <form method="post">
A partir de là tu adaptes tes variables, au lieu de recevoir des variables depuis un formulaire par $variable, tu reçois par $_GET['variable'] ou $_POST['variable'] selon la methode employée...Li4uLlZvdHJlIGTpdm916SBzZXJ2aXRldXIuLi4u
-
Merci encore,
J'ai donc remplacé
echo $pseudo
par
echo $_POST['pseudo'];
Mais ça n'a rien changé...
Je file lire ton lien, même si je suis à peu prêt sur que je ne vais rien y comprendre... ;-)
Que penses-tu de tout ça? Que dois je faire? Si le problème est globale il est possible que cela ne viennent pas du code en lui même si?
Arnaud -
Modérateur
Bon... Multimania a probablement activé les variables globales, chose que ne fait peut être pas easyphp 1.7 contrairement au 1.6 (ce n'est qu'une supposition).
Pour expliquer en gros: sur multimania lorsque tu envoies une variable via un formulaire tu trouveras dans ce formulaire:<input type="text" name="une_variable">
Lorsque tu la reçois sur la page de traitement (avec variables globales activées) tu l'auras de cette manière;// Affichera le contenu de $ma_variable echo $ma_variable;
Avec les variables globales désactivées il faut la recupérer comme ça:/* Selon la methode employée par le formulaire (get ou post), on va prendre post pat défaut */ echo $_POST['ma_variable'];
Voir: http://www.commentcamarche.net/php/phpform.php3
Bon je dis ça ce n'est qu'une supposition.... En tout cas la seconde solution marche, quelque soit le statut des variables.
Ensuite je n'ai pas l'impression que ton script vérifie le mot de passe des utilisateurs, il va cherche le pseudo dans la base de données puis c'est tout.
On peut même se connecter sur ta page sans s'être loggué.
Li4uLlZvdHJlIGTpdm916SBzZXJ2aXRldXIuLi4u
-
J'ai aussi oublié de dire qu'au départ j'utilisait easyphp 1.7 mais que l'on m'a conseillé d'utiliser easyphp 1.6 pour des raisons de compatibilité... Et en effet quand je suis passé sur le six, la plupart des scripts fonctionnaient (dont celui de l'espace membre sur lequel nous sommes en train de nous arracher les cheveux). mais depuis que j'ai redemarré mon ordi ce matin, c'est revenu comme avant sur easyphp 1.7
Arnaud
- 1
- 2