Bonjour, débutant en PHP, j’essaie surement de faire un site qui dépasse de loin mes compétence. Mais malhereusement je suis obligé d’essayer car je dois finir ce p***** de site pour le 18 juin (Projet à presenter à l’ecole…
Donc si vous pouviez m’aider, la je bloque sur la page d’identification, ma page index.php contient juste un formulaire demandant pseudo et MDP.
Formulaire en methode POST qui pointe vers login.php qui est censé verifié les infos, créer une sessions si ces infos sont bonne, redirigé vers index si ce n’est pas le cas.
Et c’est la que vous allez surement commencer à rire:
mon login.php:
<?php
// Include du fichier de connexion a MySQL
include("include/connexion.php");
// Recuperation des données du formulaire
$user_pseudo=$_POST['pseudo'];
$user_password=$_POST['pass'];
// Demarrage de la session
session_start();
//La requête
$requete = mysql_query ("SELECT pseudo_usr, pass_usr FROM usr
WHERE pseudo_usr='$user_pseudo' AND password='".md5($user_password)."'");
//exécution de la requête
$donnees = mysql_fetch_array($reponse);
// Verification de la correspondance pseudo pass
if (in_array($user_pseudo, $donnees))
{
// Pseudo trouvé, vérification du Mot de Pass
if (in_array($user_password, $donnees))
{
// Mot de pass correcte, redirection vers le site
$_SESSION['user_pseudo'] = $user_pseudo;
$url="home.php";
header("Location: $url");
}
else
// Si mot de pass incorrecte, invite à recommencer
{
echo 'Erreur, veuillez vous réidentifier.<br /><a href="index.php">Retour</a>.';
}
}
else
// Si pseudo pas trouvé, invite à recommencer
{
echo 'Erreur, veuillez vous réidentifier.<br /><a href="index.php">Retour</a>.';
}
?>
Vous avez bien ri???
Maintenant si vous pourriez tenter de m’aider ce serait cool , paske ça m’affiche sa :
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\OCS Inventory NG\xampp\htdocs\www\login.php on line 18
Warning: in_array() [function.in-array]: Wrong datatype for second argument in C:\OCS Inventory NG\xampp\htdocs\www\login.php on line 21
Erreur, veuillez vous réidentifier.
Retour.
Merci bcp de votre aide.
PS: DSL mais a mon avis je vais poster bcp de msg de ce type jusqu’au 18…
C’est pas parce que tu fais pas de md5 au niveau de ton 2eme test?
Parce que le mot de passe que tu test est en clair et tu le test a celui de la base de donnée qui est encrypté.
<?php
# 1. on commence la session avant le reste
session_start();
# 2. include = instruction, parenthèses inutiles
# 3. chaînes de caractères => on utilise ' qui est moins gourmand
// Include du fichier de connexion a MySQL
include 'include/connexion.php';
# 4. et si ça n'existe pas? ... -> faux donc
// Recuperation des données du formulaire
// $user_pseudo=$_POST['pseudo'];
// $user_password=$_POST['pass'];
# 5. on est sur que les variables existent
if ( isset($_POST['pseudo']) && isset($_POST['pass'])) {
# 6. ici , mysql_unbuffered_query ne bufferise pas le résultat, ce qui est pratique
# cf. doc pour spécificité (example : mysql_num_rows ne renvoie rien)
# 7. mysql_real_escape_string PROTEGE la variable POST pseudo, qui peut contenir
# toute sorte de chose, et faire ce que l'on ne désire pas.
$rs = mysql_unbuffered_query( 'SELECT
pseudo_usr AS "username",
pass_usr AS "password"
FROM usr
WHERE pseudo_usr = \'' . mysql_real_escape_string($_POST['pseudo']) . '\'
AND password = \'' . md5($_POST['pass'] . '\'');
# 8. si aucun problème sur la requête, et s'il y a au moins une donnée
# ce qui veut dire une correspondance (user, password)
if ( $rs && false !== ($data = mysql_fetch_assoc($rs)) ) {
# 9. libère la ressource (ne sert plus)
mysql_free_result($rs);
$_SESSION['user_pseudo'] = $data['username'];
# 10. la redirection doit porter sur une URL complète, pas un chemin vers
# le fichier
header('Location: http://www.site.com/home.php');
} else {
?>
Erreur, veuillez vous réidentifier.<br /><a href="index.php">Retour</a>
<?php
}
}
?>
Pour me reprendre : quand tu fais une requête où tu spécifie des contraintes ce que tu choisis, alors il est inutile de refaire ce test par derrière en php.
<?
<?php
// Include du fichier de connexion a MySQL
include("include/connexion.php");
// Recuperation des données du formulaire
$user_pseudo = $_POST['pseudo'];
$user_password = $_POST['pass'];
// La requête
$requete = mysql_query("SELECT pseudo_usr, pass_usr FROM usr
WHERE pseudo_usr='".$user_pseudo."' AND password='".md5($user_password)."'");
$fromdb = mysql_fetch_array($requete);
if(($user_pseudo == $fromdb['pseudo_usr']) AND ($user_password == $fromdb['pass_usr']))
{
// Demarrage de la session
session_start();
// Mot de passe correct, redirection vers le site
$_SESSION['user_pseudo'] = $user_pseudo;
@header("Location: home.php"); ########" NOTA: On met un '@' pour eviter l'affichage d'un eventuel message d'erreur "########
}
else
{
die("Erreur, veuillez vous réidentifier.<br /><a href='index.php'>Retour</a>.");
}
mysql_close();
?>
en ajoutant la parenthese manquante a ton code j’ai maintenant l’eereur
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\program files\easyphp1-8\www\www\login.php:2) in c:\program files\easyphp1-8\www\www\login.php on line 5
C’est peu etre du a EasyPHP??? Que j’utilise en version 1.8 avec les paremetres par defaut.
Merci, et bonne fete à toutes les mamans (bien qu’il doit y en avoir peu sur ce forum programmation).
le prob est revenus sans rien changer, juste en actualisant et recommançant;
J’ai pas de HTML avant le demarrage de session, mon fichier commence direct par le code qu’il y a dans mon précédent post.
J’ai essayer de cirer les espace avant les <? mais rien n’y fait , tjrsd la meme erreur.