[SOS] Débuggage divers sur un petit site

Débuggage divers sur un petit site [SOS] - PHP - Programmation

Marsh Posté le 18-06-2012 à 23:54:56    

Salut les geek :o
premier site internet, du coup j'ai deux trois c**illes a droite a gauche, je me propose de vous les exposer ici, histoire de voir si vous avez le remede miracle.
J'essaie autant que possible de m'en sortir tout seul, mais parfois je vois vraiment pas...
Je tiens dispo le code complte/bdd aux ames de bonne volonté bien sur..
PS; deadline; jeudi soir :o
 
premier probleme;
 
 
J'ai une erreur qui doit correspondre à ce bout de code;

Code :
  1. function getUserInfo()
  2. {
  3.  global $db;
  4.  $sql = $db->prepare('SELECT u.id, u.nom, u.prenom, u.naissance, u.email, u.pays, u.ville, u.cp, u.sexe, u.statut, u.avatar, u.cv, u.accueil FROM site_session s INNER JOIN users u ON s.sid = :sid AND s.userid = u.id ');
  5.  $sql->execute( array(':sid' => session_id()) );
  6.  $userdata = $sql->fetch(PDO::FETCH_ASSOC);
  7.  if (empty($userdata))
  8.   {
  9.   $userdata = FALSE;
  10.   }
  11.  return $userdata;
  12. }


 
Il est mis en require_once 'fonctions_sessions.php'; sur une autre page; et lors de l'affichage de cette page, j'obtiens
 Fatal error: Call to a member function prepare() on a non-object  
1 0.0010 685336 {main}( ) ..\connection.php:0
2 0.0042 720512 getUserInfo( ) ..\connection.php:94

 
 
enfin je suppose que c'est au niveau de la fonction
Par ce que mon code sur la page, pour tout ce qui est avant la ligne 53; c'est;

Code :
  1. <?php
  2. //On se connecte à la BDD - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
  3. try
  4. {
  5. $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
  6. $bdd = new PDO('mysql:host=localhost;dbname=jobedge', 'root', '',
  7. $pdo_options);
  8. }
  9. catch (Exception $e)
  10. {
  11. die('Erreur : ' . $e->getMessage());
  12. }
  13. // On utilise le fichiers de fonctions de sessions; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
  14. require_once 'fonctions_sessions.php';
  15. // On démarre la session  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
  16. session_start();
  17. ?>
  18. <!DOCTYPE html>
  19. <html>
  20. <head>
  21.  <!--[if lt IE 9]>
  22.  <script
  23.  src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
  24.  <![endif]-->
  25.  <link rel="stylesheet" href="../../../CSS/base.css" />
  26.  <title>JobEdge - Le Centre de Vie professionnelle</title>
  27. </head>
  28. <body>
  29.  <header>
  30.   <div id="logo">
  31.   <a href="../../../../index.php"><img src="../../../images/logo.jpg" alt="Logo JobEdge" id="logo" /></a>
  32.   </div>
  33.   <div id="langue">
  34.    <table>
  35.     <tr>
  36.      <td><a href="../../FR/Global/connection.php" title="Langue fran&#xE7;aise">FR</a>  -  </td>
  37.      <td><a href="../../ES/Global/connection.php" title="Idioma espa&#xF1;ol">ES</a>  -  </td>
  38.      <td><a href="../../EN/Global/connection.php" title="English language">EN</a></td>
  39.     </tr>
  40.    </table>
  41.   </div>
  42.   <div id="compte">
  43.    <a href="connection.php">- Connection -</a></br>
  44.    <a style="font-size: x-small; font-style:italic;" href="Creation de compte/choixoptions.php">Creer un compte</a>
  45.   </div>
  46.  </header>


Message édité par TheMartel le 18-06-2012 à 23:55:33

---------------
[VDS]Ventes stock d’entreprise divers IT - 600€ les + de 2400€ de matériel
Reply

Marsh Posté le 18-06-2012 à 23:54:56   

Reply

Marsh Posté le 19-06-2012 à 00:16:41    

Ta variable $db est vide a première vue je dirais non?

 

Surtout que dans ta page principale ton instance PDO s'appelle $bdd :)

 

J'aurai plus vu (après c'est mon avis) un :

Code :
  1. // Ta page
  2. try
  3. {
  4. $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
  5. $GLOBALS['db'] = new PDO('mysql:host=localhost;dbname=jobedge', 'root', '',
  6. $pdo_options);
  7. }
  8. catch (Exception $e)
  9. {
  10. die('Erreur : ' . $e->getMessage());
  11. }
  12. // function_sessions.php
  13. $db = $GLOBALS['db'];


Message édité par xaeon le 19-06-2012 à 00:22:18
Reply

Marsh Posté le 19-06-2012 à 00:27:01    

disons que cette partie;

Code :
  1. //On se connecte à la BDD - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   
  2. try
  3. {
  4. $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
  5. $bdd = new PDO('mysql:host=localhost;dbname=jobedge', 'root', '',
  6. $pdo_options);
  7. }
  8. catch (Exception $e)
  9. {
  10. die('Erreur : ' . $e->getMessage());
  11. }


est testée et fonctionelle sur tout le site...
de meme, bizarement en mettant en en tete d'autres pages mon

Code :
  1. <?php
  2. //On se connecte à la BDD - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   
  3. try
  4. {
  5. $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
  6. $bdd = new PDO('mysql:host=localhost;dbname=jobedge', 'root', '',
  7. $pdo_options);
  8. }
  9. catch (Exception $e)
  10. {
  11. die('Erreur : ' . $e->getMessage());
  12. }
  13. // On utilise le fichiers de fonctions de sessions; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   
  14. require_once 'fonctions_sessions.php';
  15. // On démarre la session  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   
  16. session_start();
  17. ?>


ça fopnctionne correctement (enfin pas d'erreurs renvoyées...)
 
 
Je comprend pas les modification que tu as fait en ligne 15, ça va plus me connecter a mon fichier contenant mes fonctions ça ?


Message édité par TheMartel le 19-06-2012 à 00:28:10

---------------
[VDS]Ventes stock d’entreprise divers IT - 600€ les + de 2400€ de matériel
Reply

Marsh Posté le 19-06-2012 à 00:35:44    

La variable $GLOBALS contient toutes les variables disponibles, ca permet de savoir un peu ce qu'on fait avec des variables globales comme tu le fais.

 

http://php.net/manual/fr/reserved. [...] lobals.php

 

Cependant dans ton cas j'ai peine à croire qu'une variable globale $bdd puisse être appelée dans les fonctions via un simple global $db (à la rigueur global $bdd).
D'ailleurs l'erreur que tu donnes dans ton 1er post est assez explicite, $db dans la fonction getUserInfo() n'est pas une instance PDO donc tu ne peux pas lui appliquer de méthode prepare.

 

POur la ligne 15 de mon code, elle doit remplacer avec "ma méthode", la ligne 3 de ton premier bout de code.

 

Bref, 2 solutions:
- en conservant ta méthode

Code :
  1. function getUserInfo()
  2. {
  3. global $bdd;
  4. $sql = $db->prepare('SELECT u.id, u.nom, u.prenom, u.naissance, u.email, u.pays, u.ville, u.cp, u.sexe, u.statut, u.avatar, u.cv, u.accueil FROM site_session s INNER JOIN users u ON s.sid = :sid AND s.userid = u.id ');
  5. $sql->execute( array(':sid' => session_id()) );
  6. $userdata = $sql->fetch(PDO::FETCH_ASSOC);
  7. if (empty($userdata))
  8.  {
  9.  $userdata = FALSE;
  10.  }
  11. return $userdata;
  12. }


- avec "ma méthode"

Code :
  1. function getUserInfo()
  2. {
  3. $bd = $GLOBALS['bdd'];
  4. $sql = $db->prepare('SELECT u.id, u.nom, u.prenom, u.naissance, u.email, u.pays, u.ville, u.cp, u.sexe, u.statut, u.avatar, u.cv, u.accueil FROM site_session s INNER JOIN users u ON s.sid = :sid AND s.userid = u.id ');
  5. $sql->execute( array(':sid' => session_id()) );
  6. $userdata = $sql->fetch(PDO::FETCH_ASSOC);
  7. if (empty($userdata))
  8.  {
  9.  $userdata = FALSE;
  10.  }
  11. return $userdata;
  12. }


et

Code :
  1. <?php
  2. //On se connecte à la BDD - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
  3. try
  4. {
  5. $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
  6. $GLOBALS['bdd'] = new PDO('mysql:host=localhost;dbname=jobedge', 'root', '',
  7. $pdo_options);
  8. }
  9. catch (Exception $e)
  10. {
  11. die('Erreur : ' . $e->getMessage());
  12. }
  13. // On utilise le fichiers de fonctions de sessions; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
  14. require_once 'fonctions_sessions.php';
  15. // On démarre la session  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
  16. session_start();
  17. ?>
  18. <!DOCTYPE html>
  19. <html>
  20. <head>
  21. <!--[if lt IE 9]>
  22. <script
  23. src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
  24. <![endif]-->
  25. <link rel="stylesheet" href="../../../CSS/base.css" />
  26. <title>JobEdge - Le Centre de Vie professionnelle</title>
  27. </head>
  28. <body>
  29. <header>
  30.  <div id="logo">
  31.  <a href="../../../../index.php"><img src="../../../images/logo.jpg" alt="Logo JobEdge" id="logo" /></a>
  32.  </div>
  33.  <div id="langue">
  34.    <table>
  35.     <tr>
  36.      <td><a href="../../FR/Global/connection.php" title="Langue fran&#xE7;aise">FR</a>  -  </td>
  37.      <td><a href="../../ES/Global/connection.php" title="Idioma espa&#xF1;ol">ES</a>  -  </td>
  38.      <td><a href="../../EN/Global/connection.php" title="English language">EN</a></td>
  39.     </tr>
  40.    </table>
  41.  </div>
  42.  <div id="compte">
  43.    <a href="connection.php">- Connection -</a></br>
  44.    <a style="font-size: x-small; font-style:italic;" href="Creation de compte/choixoptions.php">Creer un compte</a>
  45.  </div>
  46. </header>



Message édité par xaeon le 19-06-2012 à 00:39:27
Reply

Marsh Posté le 19-06-2012 à 00:46:38    

J'ai pris ta méthode :D
Testée un peu avant que tu edit, marche niquel
Vais voir pour son fonctionnement maintenant... (enfin pour les fonctionnement de la connection et tout quoi :o, c'est le module session/identification pour ceux qui avait pas remarqué :) )
 
Tu geres :D


---------------
[VDS]Ventes stock d’entreprise divers IT - 600€ les + de 2400€ de matériel
Reply

Marsh Posté le 19-06-2012 à 00:48:16    

De rien, ca sent les PTIs non? BTS?

Reply

Marsh Posté le 19-06-2012 à 00:59:26    

xaeon a écrit :

De rien, ca sent les PTIs non? BTS?


DEUSt, projet de site marchand que je complique un peu comme un con :o
 
bon nouveau souci, au niveau de la reconaissance des variables je pense.
erreur rencontrée; aucune identification possible, meme avec le bon mdp et bon email ça me renvoie le message prevu pour un echec d'identification...
je met les deux pages conpletes là;

Code :
  1. <?php
  2. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
  3. function openSession($userid)
  4. {
  5.  $db = $GLOBALS['db'];
  6.  // On supprime la session en cours
  7.  $deleteSQL = $db->prepare('DELETE FROM site_session WHERE userid = :userid');
  8.  $deleteSQL->execute(array(':userid' => $userid));
  9.  // Re-génération du sid (id de session)
  10.  session_regenerate_id();
  11.  // On insère le nouvel id de session dans la bdd
  12.  $insertSQL = $db->prepare('INSERT INTO site_session (sid, userid) VALUES (:sid, :userid)');
  13.  $insertSQL->execute(array(':sid' => session_id(),':userid' => $userid));
  14.  return TRUE;
  15. }
  16. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
  17. function getLoginCheck($email, $mdp)
  18. {
  19.  $db = $GLOBALS['db'];
  20.  $email = addslashes(trim($email));
  21.  $mdp = md5(addslashes(trim($mdp)));
  22.  // Petite vérification pour éviter une requête sql, email est verifié par HTML5
  23.  if (empty($mdp))
  24.   {
  25.   return FALSE;
  26.   }
  27.  else
  28.   {
  29.   $sql = $db->prepare('SELECT id FROM users WHERE email = :email AND mdp = :mdp ');
  30.   $sql->execute(array(':email' => $email,':mdp' => $mdp));
  31.   $userdata = $sql->fetch(PDO::FETCH_ASSOC);
  32.   if (!empty($userdata))
  33.    {
  34.    $userdata = $userdata['id'];
  35.    }
  36.   else
  37.    {
  38.    $userdata = FALSE;
  39.    }
  40.   return $userdata;
  41.   }
  42. }
  43. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
  44. function getUserInfo()
  45. {
  46.  $db = $GLOBALS['db'];
  47.  $sql = $db->prepare('SELECT u.id, u.nom, u.prenom, u.naissance, u.email, u.pays, u.ville, u.cp, u.sexe, u.statut, u.avatar, u.cv, u.accueil FROM site_session s INNER JOIN users u ON s.sid = :sid AND s.userid = u.id ');
  48.  $sql->execute( array(':sid' => session_id()) );
  49.  $userdata = $sql->fetch(PDO::FETCH_ASSOC);
  50.  if (empty($userdata))
  51.   {
  52.   $userdata = FALSE;
  53.   }
  54.  return $userdata;
  55. }
  56. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
  57. function closeSession()
  58. {
  59.  $db = $GLOBALS['db'];
  60.  $deleteSQL = $db->prepare('DELETE FROM site_session WHERE sid = :sid');
  61.  $deleteSQL->execute( array(':sid' => session_id()) );
  62.  echo '<meta http-equiv="Refresh" content="0;'.$_SERVER['PHP_SELF'].'">'; // permet de rafraichir la page
  63. }
  64. ?>


Code :
  1. <?php
  2. //On se connecte à la BDD - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
  3. try
  4. {
  5. $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
  6. $GLOBALS['db'] = new PDO('mysql:host=localhost;dbname=jobedge', 'root', '',
  7. $pdo_options);
  8. }
  9. catch (Exception $e)
  10. {
  11. die('Erreur : ' . $e->getMessage());
  12. }
  13. // On utilise le fichiers de fonctions de sessions; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
  14. require_once 'fonctions_sessions.php';
  15. // On démarre la session  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
  16. session_start();
  17. ?>
  18. <!DOCTYPE html>
  19. <html>
  20. <head>
  21.  <!--[if lt IE 9]>
  22.  <script
  23.  src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
  24.  <![endif]-->
  25.  <link rel="stylesheet" href="../../../CSS/base.css" />
  26.  <title>JobEdge - Le Centre de Vie professionnelle</title>
  27. </head>
  28. <body>
  29.   <article>
  30.    <div align="center">
  31. <?php
  32. if ($userdata = getUserinfo())
  33. {
  34. openSession($userdata['id']);
  35. }
  36. else
  37. {
  38. if (!$_POST)
  39.  //afficher le formulaire d'identification si aucune data n'a été envoyée auparavent
  40.  {
  41.  ?>
  42.  <form method="post" action="connection.php">
  43.   <table class="tableau_options">
  44.    <tr>
  45.     <td>Email :  </td>
  46.     <td><input type="email" name="email"><br/></td>
  47.    </tr>
  48.    <tr>
  49.     <td>Mot de passe:
  50.     <td><input type="password" name="mdp"><br/></td>
  51.    </tr>
  52.   </table>
  53.   &nbsp;<br/>
  54.   <input type="reset">&nbsp;
  55.   <input type="submit" value="Se connecter" style="width:200px">
  56.  <form>
  57.  <br/>
  58.  <hr/>
  59.  Pas encore de compte ? <br/>
  60.  &nbsp;<br/>
  61.  <input type="button" name="lien_options" value="Creez un nouveau compte !" onclick="self.location.href='choixoptions.php'">
  62.  <?php
  63.  }
  64. else
  65.  {
  66.  // Vérifie si le couple email/mdp est correct
  67.  if (!$loginCheck = getLoginCheck($_POST['email'], $_POST['mdp']))
  68.   {
  69.   ?>
  70.   Email ou mot de passe incorrect.<br/>
  71.   Veuillez réessayer.<br/>
  72.   <hr/>
  73.   <form method="post" action="connection.php">
  74.    <table class="tableau_options">
  75.     <tr>
  76.      <td>Email :  </td>
  77.      <td><input type="email" name="email"><br/></td>
  78.     </tr>
  79.     <tr>
  80.      <td>Mot de passe:
  81.      <td><input type="password" name="mdp"><br/></td>
  82.     </tr>
  83.    </table>
  84.    &nbsp;<br/>
  85.    <input type="reset">&nbsp;
  86.    <input type="submit" value="Se connecter" style="width:200px">
  87.   <form>
  88.   <br/>
  89.   <hr/>
  90.   Pas encore de compte ?<br/>
  91.   &nbsp;<br/>
  92.   <input type="button" name="lien_options" value="Creez un nouveau compte !" onclick="self.location.href='choixoptions.php'">
  93.   <?php
  94.   }
  95.  else
  96.   {
  97.   // On initialise la session avec le userid récupérer par loginCheck
  98.   openSession($loginCheck);
  99.   $userdata = getUserInfo();
  100.   echo 'vous etest connecté';
  101.   if (empty($userdata))
  102.    {
  103.    die('erreur');
  104.    }
  105.   }
  106.  }
  107. }
  108. ?>
  109.      &nbsp;<br>
  110.    <div>
  111.    <br/>
  112.    &nbsp;<br/>
  113.   </article>
  114.   <aside>
  115.    <img src="../../../images/pub.jpg" alt="publicite" />
  116.   </aside>
  117.  </section>
  118. </body>
  119. </html>


 


Message édité par TheMartel le 19-06-2012 à 01:04:47

---------------
[VDS]Ventes stock d’entreprise divers IT - 600€ les + de 2400€ de matériel
Reply

Marsh Posté le 19-06-2012 à 01:05:10    

J'ai fait un peu de nettoyage quand meme, le reste posera pas souci...


---------------
[VDS]Ventes stock d’entreprise divers IT - 600€ les + de 2400€ de matériel
Reply

Marsh Posté le 19-06-2012 à 01:20:14    

Ligne 73 de ton code, ça me semble étrange:

Code :
  1. if (!$loginCheck = getLoginCheck($_POST['email'], $_POST['mdp']))


Je ne sais pas si le placement du NOT (!) est correct ici je l'aurai mis sur un niveau superieur de parenthèse

Code :
  1. if (!($loginCheck = getLoginCheck($_POST['email'], $_POST['mdp'])))


Mais je ne pense pas que ca vienne d'ici, je regarderai demain quand j'aurai les yeux en face des trous, néanmoins il y a déjà un endroit où tu fais un test inutile:

Code :
  1. function getLoginCheck($email, $mdp)
  2. {
  3. $db = $GLOBALS['db'];
  4. $email = addslashes(trim($email));
  5. $mdp = md5(addslashes(trim($mdp)));
  6. // Petite vérification pour éviter une requête sql, email est verifié par HTML5
  7. if (empty($mdp))
  8.  {
  9.  return FALSE;
  10.  }
  11. else
  12.  {
  13.  $sql = $db->prepare('SELECT id FROM users WHERE email = :email AND mdp = :mdp ');
  14.  $sql->execute(array(':email' => $email,':mdp' => $mdp));
  15.  $userdata = $sql->fetch(PDO::FETCH_ASSOC);
  16.  if (!empty($userdata))
  17.    {
  18.    $userdata = $userdata['id'];
  19.    }
  20.  else
  21.    {
  22.    $userdata = FALSE;
  23.    }
  24.  return $userdata;
  25.  }
  26. }


tu appliques à $mdp la fonction md5, donc même si la chaine $mdp est vide à la base et bien tu vas obtenir une hashage correspondant à une chaine vide, et donc on ne rentrera jamais dans le test testant si $mdp est vide.

Reply

Marsh Posté le 19-06-2012 à 01:21:57    

Merci
Vais chercher sur tes piste, voir ce que ça donne :)
 
 
EDIT; essayé pour le niveau de parenthese, ça a rien changé en effet, mais a prior tu as raison :)
Nettoyé pour le test inutile, je vais voir si je le met au dessus du coup...


Message édité par TheMartel le 19-06-2012 à 01:28:36

---------------
[VDS]Ventes stock d’entreprise divers IT - 600€ les + de 2400€ de matériel
Reply

Marsh Posté le 19-06-2012 à 01:21:57   

Reply

Marsh Posté le 19-06-2012 à 03:14:25    

Bon dodo, sinon demain je pourrais rien faire...


---------------
[VDS]Ventes stock d’entreprise divers IT - 600€ les + de 2400€ de matériel
Reply

Marsh Posté le 19-06-2012 à 09:52:14    

Bon, on va déplier le code parties par parties:
 
- ligne 38 :

Code :
  1. if($userdata = getUserInfo()){


Ta fonction getUserInfo() renvoie soit un tableau associatif soit FALSE, je pense que tu devrais plutôt revoir ta fonction ainsi

Code :
  1. function getUserInfo()
  2. {
  3. $db = $GLOBALS['db'];
  4. // on initialise la variable, même si PHP est sympa niveau déclarations ce n'est pas un mal de le faire.  
  5. $userdata = null;
  6. $sql = $db->prepare('SELECT u.id, u.nom, u.prenom, u.naissance, u.email, u.pays, u.ville, u.cp, u.sexe, u.statut, u.avatar, u.cv, u.accueil FROM site_session s INNER JOIN users u ON s.sid = :sid AND s.userid = u.id ');
  7. $sql->execute( array(':sid' => session_id()) );
  8. $userdata = $sql->fetch(PDO::FETCH_ASSOC));
  9. if(empty($userdata)
  10.   $userdata = null;
  11. return $userdata;
  12. }


Ta fonction renvoie ainsi des valeurs logiques, soit un tableau associatif, soit null et correspond donc mieux à son nom. If faudra donc changer le test précédemment cité pour qu'il vérifie la "non-nullité".
 
- ligne 44 :

Code :
  1. if(!($_POST))


Comment $_POST peut valoir FALSE? Je ne sais même pas comment tu peux ou non rentrer dans cette partie. J'aurai plus vu un :

Code :
  1. if(empty($_POST))


 
Je pense qu'en regardant déjà ça tu auras les idées plus claires :)

Reply

Marsh Posté le 19-06-2012 à 11:47:41    

testé, avec
if (!is_null($userdata))  
et avec
if (is_null($userdata)) //du coup en inversant les concequences bien sur...
mais ça me renvoie
Notice: Undefined variable: userdata in C:\wamp\www\Serveur internet\Site Internet projet\CV Edge\CV.org\Site\Contenu\FR\Global\connection.php on line 94
L94 c'est la ligne de mon if


Message édité par TheMartel le 19-06-2012 à 12:02:53

---------------
[VDS]Ventes stock d’entreprise divers IT - 600€ les + de 2400€ de matériel
Reply

Marsh Posté le 19-06-2012 à 14:53:14    

Après ton session start, tu fais un $userdata = getUserInfo(); et dans le test un if(!is_null($userdata)) et ça devrait permettre de résoudre une bonne partie de ton problème.
 
Encore une fois, comme mis en commentaire (ligne 4) de mon poste précédent, PHP est tolérant, mais pas tant que ca, ici il voit que tu fais un test sur une variable qui n'a jamais été valorisée... forcement il crache une erreur

Reply

Marsh Posté le 19-06-2012 à 15:29:54    

Je regarde en rentrant à 17h30 , j'ai pas ma bdd sur cette machine.


---------------
[VDS]Ventes stock d’entreprise divers IT - 600€ les + de 2400€ de matériel
Reply

Marsh Posté le 19-06-2012 à 17:57:00    

ça me renvoie  
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'userid' cannot be null'
et
PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'userid' cannot be null  
ligne 15 incrimmiée...
j'ai mis, tout le reste du code étant identique;

Code :
  1. ...
  2. // On utilise le fichiers de fonctions de sessions; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
  3. require_once 'fonctions_sessions.php';
  4. // On démarre la session  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
  5. session_start();
  6. $userdata = getUserInfo();
  7. ?>


---------------
[VDS]Ventes stock d’entreprise divers IT - 600€ les + de 2400€ de matériel
Reply

Marsh Posté le 19-06-2012 à 18:28:08    

Tu pourrais me faire un dump de ton schéma de base de données histoire que je teste de mon coté? Les données à la rigueur je m'en fou mais au moins le schéma ^^'

Reply

Marsh Posté le 19-06-2012 à 18:29:48    

Reply

Marsh Posté le 19-06-2012 à 18:50:00    

Bon alors perso j'arrive à me connecter :D

 

A première vue les passwords qui sont dans ta base de donnée ont été insérés avec la fonction MySQL :  PASSWORD('chaine'), cependant à la connection tu demandes un hash MD5 :(
MySQL :

Code :
  1. SELECT PASSWORD('123456')
  2. --> *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
  3. SELECT MD5('123456')
  4. --> e10adc3949ba59abbe56e057f20f883e
  5. SELECT SHA('123456')
  6. --> 7c4a8d09ca3762af61e59520943dc26494f8941b


Message édité par xaeon le 19-06-2012 à 18:54:56
Reply

Marsh Posté le 19-06-2012 à 19:04:23    

Je dégage cette entrée, je les met en text directement?
(enfin vais tester comme ça :D )


---------------
[VDS]Ventes stock d’entreprise divers IT - 600€ les + de 2400€ de matériel
Reply

Marsh Posté le 19-06-2012 à 19:39:16    

no result, toujours bloqué
c'est le fonction opensession qui aime pas le userdata en false, je evrait peurt etre la mettre en userdata='0'?


Message édité par TheMartel le 19-06-2012 à 19:39:50

---------------
[VDS]Ventes stock d’entreprise divers IT - 600€ les + de 2400€ de matériel
Reply

Marsh Posté le 19-06-2012 à 19:40:10    

Nope je finis de manger et je te fais un topo, tu peux me confirmer que toi tu n'arrives pas à te connecter?

Reply

Marsh Posté le 19-06-2012 à 19:41:21    

ouaip j'arrive meme pas a afficher le formulaire...
 
Je taff sur le reste en attendant, y reste deux trois choses a boucler... mais je veux pas me lancer sur le panier avant d'avoir des sessiosn actives


Message édité par TheMartel le 19-06-2012 à 19:42:31

---------------
[VDS]Ventes stock d’entreprise divers IT - 600€ les + de 2400€ de matériel
Reply

Marsh Posté le 19-06-2012 à 20:16:23    

Alors voila ce que j'ai dans mes fichiers personnellement en conservant ton architecture:
 
accueil.php

Code :
  1. <?php
  2. //On se connecte à la BDD - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   
  3. try
  4. {
  5. $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
  6. $GLOBALS['db'] = new PDO('mysql:host=localhost;dbname=hfr', 'root', '123456',
  7. $pdo_options);
  8. }
  9. catch (Exception $e)
  10. {
  11. die('Erreur : ' . $e->getMessage());
  12. }
  13. // On utilise le fichiers de fonctions de sessions; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   
  14. require_once 'fonctions_sessions.php';
  15. // On démarre la session  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   
  16. session_start();
  17. $userdata = getUserInfo()
  18. ?>
  19. <!DOCTYPE html>
  20. <html>
  21. <head>
  22. <!--[if lt IE 9]>
  23. <script
  24. src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
  25. <![endif]-->
  26. <link rel="stylesheet" href="../../../CSS/base.css" />
  27. <title>JobEdge - Le Centre de Vie professionnelle</title>
  28. </head>
  29. <body>
  30.  <article>
  31.    <div align="center">
  32. <?php
  33. if(!is_null($userdata))
  34. {
  35. openSession($userdata['id']);
  36. }
  37. else
  38. {
  39. if (empty($_POST))
  40. //afficher le formulaire d'identification si aucune data n'a été envoyée auparavent
  41. {
  42. ?>
  43. <form method="post" action="connection.php">
  44.  <table class="tableau_options">
  45.    <tr>
  46.     <td>Email :  </td>
  47.     <td><input type="email" name="email"><br/></td>
  48.    </tr>
  49.    <tr>
  50.     <td>Mot de passe:
  51.     <td><input type="password" name="mdp"><br/></td>
  52.    </tr>
  53.  </table>
  54.  &nbsp;<br/>
  55.  <input type="reset">&nbsp;
  56.  <input type="submit" value="Se connecter" style="width:200px">
  57. <form>
  58. <br/>
  59. <hr/>
  60. Pas encore de compte ? <br/>
  61. &nbsp;<br/>
  62. <input type="button" name="lien_options" value="Creez un nouveau compte !" onclick="self.location.href='choixoptions.php'">
  63. <?php
  64. }
  65. else
  66. {
  67. // Vérifie si le couple email/mdp est correct
  68. if (!$loginCheck = getLoginCheck($_POST['email'], $_POST['mdp']))
  69.  {
  70.  ?>
  71.  Email ou mot de passe incorrect.<br/>
  72.  Veuillez réessayer.<br/>
  73.  <hr/>
  74.  <form method="post" action="connection.php">
  75.    <table class="tableau_options">
  76.     <tr>
  77.      <td>Email :  </td>
  78.      <td><input type="email" name="email"><br/></td>
  79.     </tr>
  80.     <tr>
  81.      <td>Mot de passe:
  82.      <td><input type="password" name="mdp"><br/></td>
  83.     </tr>
  84.    </table>
  85.    &nbsp;<br/>
  86.    <input type="reset">&nbsp;
  87.    <input type="submit" value="Se connecter" style="width:200px">
  88.  <form>
  89.  <br/>
  90.  <hr/>
  91.  Pas encore de compte ?<br/>
  92.  &nbsp;<br/>
  93.  <input type="button" name="lien_options" value="Creez un nouveau compte !" onclick="self.location.href='choixoptions.php'">
  94.  <?php
  95.  }
  96. else
  97.  {
  98.  // On initialise la session avec le userid récupérer par loginCheck
  99.  openSession($loginCheck);
  100.  $userdata = getUserInfo();
  101.  echo 'vous etest connecté';
  102.  if (empty($userdata))
  103.    {
  104.    die('erreur');
  105.    }
  106.  }
  107. }
  108. }
  109. ?>
  110.      &nbsp;<br>
  111.    <div>
  112.    <br/>
  113.    &nbsp;<br/>
  114.  </article>
  115.  <aside>
  116.    <img src="../../../images/pub.jpg" alt="publicite" />
  117.  </aside>
  118. </section>
  119. </body>
  120. </html>


 
fonctions_sessions.php

Code :
  1. <?php
  2. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   
  3. function openSession($userid)
  4. {
  5. $db = $GLOBALS['db'];
  6. // On supprime la session en cours
  7. $deleteSQL = $db->prepare('DELETE FROM site_session WHERE userid = :userid');
  8. $deleteSQL->execute(array(':userid' => $userid));
  9. // Re-génération du sid (id de session)
  10. session_regenerate_id();
  11. // On insère le nouvel id de session dans la bdd
  12. $insertSQL = $db->prepare('INSERT INTO site_session (sid, userid) VALUES (:sid, :userid)');
  13. $insertSQL->execute(array(':sid' => session_id(), ':userid' => $userid));
  14. return true;
  15. }
  16. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   
  17. // Ici je pense que vu que le but est de retourner une ID, et qu'en BDD un ID est un entier positif strictement superieur à 0, en lieu et place de false, retourner 0 semble suffisant?
  18. function getLoginCheck($email, $mdp)
  19. {
  20. $db = $GLOBALS['db'];
  21. $email = addslashes(trim($email));
  22. $mdp = addslashes(trim($mdp));
  23. // Petite vérification pour éviter une requête sql, email est verifié par HTML5
  24. if(empty($mdp))
  25.  {
  26.  return 0;
  27.  }
  28. else
  29.  {
  30.  $mdp = md5($mdp);
  31.  $sql = $db->prepare('SELECT id FROM users WHERE email = :email AND mdp = :mdp ');
  32.  $sql->execute(array(':email' => $email,':mdp' => $mdp));
  33.  $userdata = $sql->fetch(PDO::FETCH_ASSOC);
  34.  if(!empty($userdata))
  35.  {
  36.   $userdata = $userdata['id'];
  37.  }
  38.  else
  39.  {
  40.   $userdata = 0;
  41.  }
  42.  return $userdata;
  43.  }
  44. }
  45. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   
  46. function getUserInfo()
  47. {
  48. $db = $GLOBALS['db'];
  49. $userdata = null;
  50. $sql = $db->prepare('SELECT u.id, u.nom, u.prenom, u.naissance, u.email, u.pays, u.ville, u.cp, u.sexe, u.statut, u.avatar, u.cv, u.accueil FROM site_session s INNER JOIN users u ON s.sid = :sid AND s.userid = u.id ');
  51. $sql->execute( array(':sid' => session_id()) );
  52. $userdata = $sql->fetch(PDO::FETCH_ASSOC);
  53. if(empty($userdata))
  54.  {
  55.  $userdata = null;
  56.  }
  57. return $userdata;
  58. }
  59. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   
  60. function closeSession()
  61. {
  62. $db = $GLOBALS['db'];
  63. $deleteSQL = $db->prepare('DELETE FROM site_session WHERE sid = :sid');
  64. $deleteSQL->execute( array(':sid' => session_id()) );
  65. echo '<meta http-equiv="Refresh" content="0;'.$_SERVER['PHP_SELF'].'">'; // permet de rafraichir la page
  66. }
  67. ?>


 
De plus j'ai ajouté l'entrée suivante dans la BDD :  

Code :
  1. INSERT INTO `users` (`nom`, `prenom`, `naissance`, `email`, `pays`, `ville`, `cp`, `adresse`, `telephone`, `sexe`, `statut`, `avatar`, `cv`, `accueil`, `mdp`) VALUES
  2. ('xaeon', 'xaeon', '2012-06-04', 'xaeon@hfr.com', 'France', 'Paris', 75000, '123', 123, 1, 1, '', '', '', 'e10adc3949ba59abbe56e057f20f883e');


En me connectant avec xaeon@hfr.com + 123456 ca fonctionne :)

Reply

Marsh Posté le 19-06-2012 à 20:28:31    

tu as modifié quoi de la page d'identification?


---------------
[VDS]Ventes stock d’entreprise divers IT - 600€ les + de 2400€ de matériel
Reply

Marsh Posté le 19-06-2012 à 20:43:33    

incomprehenssible, ça marchait pas avec ceux déja enregistré, mais en ajoutant ton entrée dans la bbd ça passe :D


---------------
[VDS]Ventes stock d’entreprise divers IT - 600€ les + de 2400€ de matériel
Reply

Marsh Posté le 19-06-2012 à 20:44:36    

Si tu parles de accueil.php rien hormis que j'ai changer les identifiants pour la BDD pour qu'elle fonctionne chez moi.

 

Edit ::

 

pour ton post juste au dessus oui tu as entré tes utilisateurs avec le mot de passe chiffré par la fonction PASSWORD() et non MD5()


Message édité par xaeon le 19-06-2012 à 20:47:05
Reply

Marsh Posté le 19-06-2012 à 20:50:56    

faut pas changer les userdata= false des autres fonctions aussi pendant qu'on y est?


---------------
[VDS]Ventes stock d’entreprise divers IT - 600€ les + de 2400€ de matériel
Reply

Marsh Posté le 19-06-2012 à 21:01:12    

Sisi :) Mais je te laisse libre de faire ce que tu souhaites :D

Reply

Marsh Posté le 19-06-2012 à 21:04:12    

ok :D
 
on continue la série :D
je remplace dans mes pages la div id="compte" par

Code :
  1. <div id="compte">
  2.   <?php
  3.    if(is_null($userdata))
  4.     {
  5.     echo '<a href="connection.php">- Connection -</a></br>';
  6.     echo '<a style="font-size: x-small; font-style:italic;" href="Creation de compte/choixoptions.php">Creer un compte</a>';
  7.     }
  8.    else
  9.     {
  10.     echo '<a href="<?php closesessions();?>">Se deconnecter</a>';
  11.     }
  12.   ?>
  13.   </div>


Le probleme, c'est qu'en y cliquant, ça me renvoi un beau forbidden
You don't have permission to access /Serveur internet/Site Internet projet/CV Edge/CV.org/Site/Contenu/FR/Global/< on this server.
 
de plus ça deconnecte pas :D


---------------
[VDS]Ventes stock d’entreprise divers IT - 600€ les + de 2400€ de matériel
Reply

Marsh Posté le 19-06-2012 à 21:08:39    

Alors là je te conseille de faire un script php dédié à la déconnexion avec redirection vers la page de login parce que à la ligne 10 tu appelles une fonctions comme lien et forcement ca peut pas le faire :D

Reply

Marsh Posté le 19-06-2012 à 21:11:42    

xaeon a écrit :

Alors là je te conseille de faire un script php dédié à la déconnexion avec redirection vers la page de login parce que à la ligne 10 tu appelles une fonctions comme lien et forcement ca peut pas le faire :D


Pourtant c'est sencé etre possible non?
je veux appeler une des fonctions du fonction_sessions.php...


---------------
[VDS]Ventes stock d’entreprise divers IT - 600€ les + de 2400€ de matériel
Reply

Marsh Posté le 19-06-2012 à 21:14:40    

Non tu peux appeler un fichier (script) php qui va executer ta fonction mais tu ne peux pas appeler ta fonction comme cible d'un lien.

Reply

Marsh Posté le 19-06-2012 à 21:16:07    

Bon je vois pas trop comment faire, je vais faire un truc sale avec une variable :D
 
edit;
du coup ça donne ça;

Code :
  1. if(is_null($userdata))//verifie si une session est ouverte
  2.     {
  3.     echo '<a href="connection.php">- Connection -</a></br>';
  4.     echo '<a style="font-size: x-small; font-style:italic;" href="Creation de compte/choixoptions.php">Creer un compte</a>';
  5.     }
  6.    else
  7.     {
  8.     if ($get_[deconnection]="oui" )
  9.     {
  10.     closeSession();
  11.     }
  12.     else
  13.     {
  14.     echo '<a href='connection.php?deconnection="oui"'>Se deconnecter</a>';
  15.     }
  16.     }


mais je doit me tromper quelque part dans mon lien, parce que ça veux pas
Parse error: syntax error, unexpected T_STRING, expecting ',' or ';'


Message édité par TheMartel le 19-06-2012 à 21:23:56

---------------
[VDS]Ventes stock d’entreprise divers IT - 600€ les + de 2400€ de matériel
Reply

Marsh Posté le 19-06-2012 à 21:21:07    

tu fais simplement un fichier deconnexion.php

Code :
  1. <?php
  2. require_once 'fonctions_sessions.php';
  3. closesessions();
  4. ?>


 
Et ta page

Code :
  1. <div id="compte">
  2.  <?php
  3.    if(is_null($userdata))
  4.     {
  5.     echo '<a href="connection.php">- Connection -</a></br>';
  6.     echo '<a style="font-size: x-small; font-style:italic;" href="Creation de compte/choixoptions.php">Creer un compte</a>';
  7.     }
  8.    else
  9.     {
  10.     echo '<a href="deconnexion.php">Se deconnecter</a>';
  11.     }
  12.  ?>
  13.  </div>

Reply

Marsh Posté le 19-06-2012 à 21:24:35    

Oui mais je prend ta solution, je termine sur quelle page finalement?
ouai ça reste bloqué sur la page deconection comme je le pensait, vu que la dernier action de closesession c'est d'actualiser la page sur laquelle elle s'execute :D


Message édité par TheMartel le 19-06-2012 à 21:33:45

---------------
[VDS]Ventes stock d’entreprise divers IT - 600€ les + de 2400€ de matériel
Reply

Marsh Posté le 19-06-2012 à 21:36:03    

Alors simplement dans deconnexion.php tu ajoutes à la fin un :
include('accueil.php');
 
Et tu enleves le rafraîchissement du closeSession :D

Reply

Marsh Posté le 19-06-2012 à 22:16:10    

ça me renvoie des trucs bizares :o
 
ça m'écris;
3 0.0078 735520 session_start ( ) ..\accueil.php:18
en haut de ma page...
 
PS; ma page de connection c'est connection.php pas accueil.php :D


Message édité par TheMartel le 19-06-2012 à 22:20:41

---------------
[VDS]Ventes stock d’entreprise divers IT - 600€ les + de 2400€ de matériel
Reply

Marsh Posté le 19-06-2012 à 22:50:45    

Hum a aucun moment tu n'appelles connection.php dans ton code il me semble...

 

Edit :: J'ai rien dit :D


Message édité par xaeon le 19-06-2012 à 22:51:28
Reply

Marsh Posté le 19-06-2012 à 22:58:25    

:D
 
J'ai un peu travaillé ma page, de façon qu'apres deconnection ça renvoie sur la page d'accueil générale;

Code :
  1. <?php
  2.  require_once 'fonctions_sessions.php';
  3.  closeSession();
  4.  ?>
  5.  <div align='center'>
  6.   <table class="tableau_options">
  7.   <tr>
  8.    <td>Vous etes bien deconnecté !</td>
  9.   </tr>
  10.   </table>
  11.   <META http-equiv="refresh" content="1; URL=accueil.php">
  12.  </div>


Tout s'execute bien, ça renvoie bien sur ma page, dans les temps qu'il faut pour voir le message.
par contre, ça deconnecte pas... :D


---------------
[VDS]Ventes stock d’entreprise divers IT - 600€ les + de 2400€ de matériel
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed