PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 19-01-2012 21:30:33

demonjhon
Membre
Inscription : 19-01-2012
Messages : 3

erreur php ??!

j'ai un problème avec ce script alors qu'apparemment il devrait fonctionner :

<?php

// On démarre la session
session_start();
$loginOK = false;  // cf Astuce


// On n'effectue les traitement qu'à la condition que
// les informations aient été effectivement postées
if ( isset($_POST) && (!empty($_POST['login'])) && (!empty($_POST['password'])) ) {

  extract($_POST);  // je vous renvoie à la doc de cette fonction

  // On va chercher le mot de passe afférent à ce login
  $sql = "SELECT login, pwd FROM user WHERE login = '".addslashes($login)."'";
  $req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);
 
  // On vérifie que l'utilisateur existe bien
  if (mysql_num_rows($req) > 0) {
     $data = mysql_fetch_assoc($req);
   
    // On vérifie que son mot de passe est correct
    if ($password == $data['mdp']) {
      $loginOK = true;
    }
  }
}

// Si le login a été validé on met les données en sessions
if ($loginOK) {
  $_SESSION['pseudo'] = $data['pseudo'];
  $_SESSION['age'] = $data['age'];
     $_SESSION['sexe'] = $data['sexe'];
  $_SESSION['ville'] = $data['ville'];
}
else {
  echo 'Une erreur est survenue, veuillez réessayer !';
}


j'obtiens cette erreur :

Erreur SQL :
SELECT login, pwd FROM bd_principale WHERE login = 'dfgsdg'

j'ai un doute sur ma bd :s
je ne comprends également pas où se fait la connexion a ma bd hmm

Je débute en php alors un peu d'indulgence ;p

Hors ligne

#2 20-01-2012 04:37:21

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : erreur php ??!

Saluton,
Déjà, par principe, ne rien mettre avant session_start(). Aucun commentaire, pas même un espace.

<?php
session_start();// On démarre la session

Effectivement, il semble manquer la partie de code traitant de la connexion au serveur MySQL.
A ce sujet, tourne-toi au plus tôt vers PDO pour tes accès aux bases de données et pour gérer les erreurs par capture d'exceptions.
Pour avoir le message d'erreur de MySQL

$req = mysql_query($sql) or die(mysql_error().'<br />'.$sql);

En outre, évite ce code de feignasse

extract($_POST);  // je vous renvoie à la doc de cette fonction

et travaille un peu la sécurité eu égard aux injections SQL.
Bon courage.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 20-01-2012 07:50:57

demonjhon
Membre
Inscription : 19-01-2012
Messages : 3

Re : erreur php ??!

J'ai modifier mon code et le nouveau me donne ca. Je vais faire le test avec pdo oui je mettrai le resultat ensuite.

Qu'entend tu par :

En outre, évite ce code de feignasse
Code: php

extract($_POST);  // je vous renvoie à la doc de cette fonction


<?php
session_start();

// on se connecte à MySQL
$db = mysql_connect('localhost', 'root', '');

// on sélectionne la base
mysql_select_db('bd_principale',$db);


$loginOK = false;  // cf Astuce



// On n'effectue les traitement qu'à la condition que
// les informations aient été effectivement postées
if ( isset($_POST) && (!empty($_POST['login'])) && (!empty($_POST['password'])) )
{

  extract($_POST);  // je vous renvoie à la doc de cette fonction

  // On va chercher le mot de passe afférent à ce login
  $sql = "SELECT login, nom, prenom, ville, pwd FROM bd_principale WHERE login = '".addslashes($login)."'";
  $req = mysql_query($sql) or die(mysql_error().'<br />'.$sql);
 
  // On vérifie que l'utilisateur existe bien
  if (mysql_num_rows($req) > 0)
    {
     $data = mysql_fetch_assoc($req);
   
    // On vérifie que son mot de passe est correct
    if ($password == $data['pwd'])
        {
      $loginOK = true;
            }
    }
}

// Si le login a été validé on met les données en sessions
if ($loginOK) {
  $_SESSION['login'] = $data['login'];
  $_SESSION['nom'] = $data['nom'];
  $_SESSION['prenom'] = $data['prenom'];
  $_SESSION['ville'] = $data['ville'];
}
else {
  echo 'Une erreur est survenue, veuillez réessayer !';
}
?>


Merci pour ton bout de code en tout cas ca ma bien aider !!!!

Hors ligne

#4 20-01-2012 08:16:32

demonjhon
Membre
Inscription : 19-01-2012
Messages : 3

Re : erreur php ??!

Je vien de modifier mon cod en utilisant pdo:

<?php
session_start();


$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=bd_principale', 'root', '', $pdo_options);



$loginOK = false;  // cf Astuce



// On n'effectue les traitement qu'à la condition que
// les informations aient été effectivement postées
if ( isset($_POST) && (!empty($_POST['login'])) && (!empty($_POST['password'])) )
{

  extract($_POST);  // je vous renvoie à la doc de cette fonction

  // On va chercher le mot de passe afférent à ce login
  $sql = "SELECT login, nom, prenom, ville, pwd FROM bd_principale WHERE login = '".addslashes($login)."'";
  $req = $bdd->query($sql) or die(mysql_error().'<br />'.$sql);
 
  // On vérifie que l'utilisateur existe bien
  if ($req->rowCount() > 0)
    {
        $data = $req->fetch();
   
        // On vérifie que son mot de passe est correct
    if ($password == $data['pwd'])
        {
              $loginOK = true;
            }
    }
}

// Si le login a été validé on met les données en sessions
if ($loginOK) {
  $_SESSION['login'] = $data['login'];
  $_SESSION['nom'] = $data['nom'];
  $_SESSION['prenom'] = $data['prenom'];
  $_SESSION['ville'] = $data['ville'];
}
else {
  echo 'Une erreur est survenue, veuillez réessayer !';
}
?>


Ca fonctionne egalement.
Comment securiser un peu plus ce code ?

Merci

Hors ligne

#5 20-01-2012 09:05:10

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : erreur php ??!

S'agissant d'extract() lis ce post, un exemple parmi d'autres.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#6 20-01-2012 09:06:36

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : erreur php ??!

Pour PDO, il est dommage de ne pas en utiliser la gestion des exceptions.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#7 31-01-2012 06:30:37

JPFEN
Membre
Inscription : 31-01-2012
Messages : 2

Re : erreur php ??!

bonjour a tous

et merci d'avance

dans un formulaire php depuis le rajout de 8 champs le formulaire qui marcher affiche maintenent
le message suivant s'affiche    Column count
doesn't match value count at row 1
code de ma page

liste des champs rajouter   email2,clinterne,atelier1,atelier2,atelier3,atelier4,atelier5,atelier6,atelier7,atelier8,com_atelier




[  code de ma page



merci d'utiliser le wall .........................


copie img de ma base

[img align=c]/Users/macpro/Desktop/Capture des champ base sql.png[/img]



merci

je craques.....

Hors ligne

#8 31-01-2012 13:55:00

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : erreur php ??!

Une fois encore, le message d'erreur provenant de MySQL, il faudrait, à tout le moins, nous communiquer le texte de la requête soumise dans laquelle, d'après le message, le nombre d'arguments fournis ne correspond pas au nombre de colonnes de la table ou listées dans la requête.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#9 31-01-2012 14:36:01

JPFEN
Membre
Inscription : 31-01-2012
Messages : 2

Re : erreur php ??!

excuse moi je suis très très débutant

le seul message que j'ai est
Column count doesn't match value count at row 1

Hors ligne

#10 31-01-2012 15:01:08

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : erreur php ??!

Hé bien avec ça je ne peux pas t'en dire plus.

le message d'erreur provenant de MySQL, il faudrait, à tout le moins, nous communiquer le texte de la requête soumise dans laquelle, d'après le message, le nombre d'arguments fournis ne correspond pas au nombre de colonnes de la table ou listées dans la requête.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#11 01-02-2012 13:18:49

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : erreur php ??!

Bonjour,

Je crains fort qu'à la base MK a raison de te renvoyer sur la doc de la fonction extract, car visiblement c'est toi qui l'a mal comprise. Mais au dela de ça je t'invite aussi à aller vérifier la doc de isset..

JPFEN a écrit :

// On n'effectue les traitement qu'à la condition que
// les informations aient été effectivement postées
if ( isset($_POST) && (!empty($_POST['login'])) && (!empty($_POST['password'])) )
{

  extract($_POST);  // je vous renvoie à la doc de cette fonction

Ce code est une vrai passoire dans le sens où déjà au niveau du login et password, tu as autant de certitudes sur ces valeurs avant qu'après.
Commence par déjà faire un


if (!isset($_POST['login'])&& !isset($POST['password'])){
// message d'erreur ici.
}
 

En effet, si tu vérifies que $_POST est défini et que login et password contiennent quelque chose, tu ne vérifies pas s'ils sont définis avant tout traitement, ce qui est source d'erreur.

Ensuite si ton login existe bien mais que les quotes n'ont pas été échappés lors de l'insertion en bd, il se peut qu'il ne trouve pas l'enregistrement. Donc vérifie bien aussi cela.
De plus il est beaucoup mieux d'intégrer la vérification du password en même temps que le login au niveau de ta requête, car cela consolide ta requête face aux injections SQL, et évite les problèmes si tu ne t'es pas assuré par exemple que les logins soient uniques.

Ensuite je plussoie sur le dernier message de MK.

Dernière modification par Jc (01-02-2012 13:25:31)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

Pied de page des forums