Forum Clubic

Aidez moi a trouver mes erreurs - PHP MySQL

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é.

C pas ca?

J’aurais bien aimé mais non.

if (in_array(md5($user_password), $donnees))

D’ailleur la syntaxe est elle bonne?

Si non les erreur c’est ligne 18:

$donnees = mysql_fetch_array($reponse);

puis 21 :

if (in_array($user_pseudo, $donnees))

Merci de ta reponse rapide.

Un mysql_num_rows() serait peut etre moin lourd dans mon cas?


if (mysql_num_rows($requete)==1)
{
// bon profil : accés au site
}
else
{
echo 'barres toi!';
}

Sa peu le faire comme ça

corrigeons toutes les erreurs :

<?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.

Oula…
Ca c’est de la correction… J’en atendait pas tant.

T’assures,

Merci bcp.

me revoila…
j’ai essayer avec le code que tu m’a conseiller mais g tjrs une erreur:

Parse error: parse error in c:\program files\easyphp1-8\www\www\login.php on line 16

J’ai encadrer la ligne 16 par des //

J’avoue penser comprendre le fonctionnement de ton script, mais ne pas trouver d’ou vien l’erreur. dsl

sans plus tarder


<?php

// Demarrage de la session
session_start();

// Include du fichier de connexion a MySQL
include 'include/connexion.php';

if ( isset($_POST['pseudo']) && isset($_POST['pass'])) {

$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'] . '\'', $connexion_mysql);
 //
//
 if ( $rs && false !== ($data = mysql_fetch_assoc($rs)) ) {
 
mysql_free_result($rs);
$_SESSION['user_pseudo'] = $data['username'];
   
header('Location: [url=http://www.site.com/home.php');]http://www.site.com/home.php');[/url]
} 
else {
 
 ?>    
Erreur, veuillez vous réidentifier.<br /><a href="index.php">Retour</a>    
<?php
 }
}
mysql_close(); // Deconnection de MySQL

?>

Salut

J’ai trouvé ton code un peu compliqué :??:

Tout simplement :

<?
<?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 espérant que ça t’aidera :wink:

gabbersteam> j’ai oublié une parenthèse, après $_POST[‘pass’], ceci dit tu aurais pu la corriger tout seul…

RRMX> j’espère que le code compliqué n’est pas le mien.

non, comme tu as pu le voir, je me suis attaqué à son code original :stuck_out_tongue:

Ouf donc.

Bonjour

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

on lit l’erreur, et on la corrige tout seul.

(une petite recherche google peut aussi aider)

Je pense que c’est cette note qu’il fallait que je lise

j’ai corigé le problème en demarant direct la session au debut du script

cf:

<?php

// Demarrage de la session
session_start();

?>
<html>
<?php
// Include 

Seulement maintenant j’ai une page blanchge qui s’affiche peu uimporte que le user mot de pass soit correct ou non

Merci

lol,

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.

lis les commentaires dans la doc de header?

En particulier celui qui dit (je crois qu’il y ait réellement en plus) : “attention, vous ne devez pas mettre de saut de ligne avec <?php”

Pour information :

Une entête c’est un champ spécial envoyé avant toute donnée.
Quand une donnée est envoyée, cela termine l’entête.

Ici, je parle de données, pas de html. Donnée peut être tout ce que tu veux…