Problème de requête et variables PHP

Résolu
Bonjour, j'ai un p'tit problème à un niveau inconnu et je cherche comment le résoudre.

Le contexte est simple : j'inscrit mon numéro d'identification et mon nom de famille et celui ci doit me diriger vers une page adherent / administrateur ou visiteur.


voici la page de formulaire : connexion.php

<div id='milieu_contenu'>
<form method='POST' action='#'><div class='contourCentre'>
<table><tr><td>Nom de famille :</td><td><input type='text' name='famille'/></td></tr>
<tr><td>N° d'identification :</td><td><input type='password' name='pass'/></td></tr>
<tr><td><br/></td></tr><tr><td><input type='submit' id='lien-bouton' value='se connecter'/></td></tr></table></div></form>
<?php
if (isset($_POST['famille']) and isset($_POST['pass']))
{
include('modele/m_verif.php');
}
?>
</div>


la page de vérification : m_verif.php

<?php
include('connexion_sql.php');
$req = "SELECT * FROM utilisateur WHERE nom='".$_POST["famille"]."' AND id=".$_POST["pass"];
$res= mysql_query($req);

if ($res)
{
header ('location: index.php?utilisateur=$resultat');
session_start();
}
else
{
echo $res." ".$_POST["famille"];
echo"<font color=red>Vous ne pouvez pas vous connecter !</font>";
//echo "<meta http-equiv=\"refresh\" content=\"3;URL=../index.php?page=connexion\">";
}
?>


J'ai fait un "echo" de $res et $_post['famille'] a la fin pour voir ce qu'il me retourne à chaque fois. le $res ne me retourne rien mais le $_post me récupère bien ma variable.
La requête fonctionne très bien dans le phpmyadmin :

SELECT * FROM utilisateur WHERE nom='Bob' AND id=1

Merci à vous si vous me débloquez.

8 réponses

  1. ça ne fonctionne pas mais j'ai trouvé autrement ;)

    Voici le code :

    <?php
    include('connexion_sql.php');
    $famille=mysql_real_escape_string($_POST["famille"]);//mysql_real_escape_string sécurise les variables que l'on a saisi
    $id=mysql_real_escape_string($_POST["id"]);
    $req = "SELECT * FROM utilisateur WHERE nom='".$famille."' AND id=".$id;
    $reponse = $bdd->query($req) or die (print_r($bdd->errorInfo()));
    while ($donnees = $reponse->fetch())
    {
    echo $donnees['fonction'];
    }
    if($reponse)
    {
    $fonction=$donnees['fonction'];//faire la différence de fonction entre les utilisateurs
    session_start();//démarrage d'une session
    $_SESSION['fonction']=$fonction;//$_SESSION pour gèrer la page principale
    header ("location: index.php?utilisateur=$fonction");
    }
    else
    {
    echo"<font color=red>Vous ne pouvez pas vous connecter !</font>";
    }
    ?>
    1. tu as fait ça en PDO, le script que je t'ai donné est en méthode "classique"

      alors soit tu continue le script en PDO soit tu modifies

      connexion_sql.php

      //variables modifiables lorsque tu passera en distant
      $host='localhost';
      $user_host='root';
      $pass_host='';
      $db='nomdetabase';
      //
      $cnx = mysql_connect('$host',$user_host,$pass_host) or die ("Pb connexion serveur ".mysql_error());
      			
      $db_select  = mysql_select_db($db) or die ("Pb selection base ".mysql_error());
      
      1. je test ça, et je vous en donne des nouvelles.
    2. voila connexion_sql.php

      <?php
      try
      {
      $bdd= new PDO('mysql:host=localhost;dbname=nomdemabase','root','');
      }

      catch(Exception $e)
      {
      die('Erreur :'.$e->getMessage());
      }


      ('je travail que en local pour l'instant')
      1. Ha donc ça veut dire que ton script:
        connexion_sql.php

        n'est pas bon

        donnes nous le code en masquant les codes d'acces bdd bien sur
        1. voir remarques:
          la page de vérification : m_verif.php 
          
          <?php 
          include('connexion_sql.php'); 
          //penses a securiser les valeurs reçues d'un formulaire avant la requette 
          $famille=mysql_real_escape_string($_POST["famille"]); 
          $id=mysql_real_escape_string($_POST["id"]); 
          $req = "SELECT * FROM utilisateur WHERE nom='".$famille."' AND id=".$id; 
          $res= mysql_query($req)  or die("Pb avec la requette: ".mysql_error()); 
          if(mysql_num_rows($res)>0){ 
           //si on a trouvé une réponse 
           $row=mysql_fetch_array($res); 
           //pour que tu puisses faire la différence de fonction entre les utilisateurs il faudrait une colonne "fonction" à ta table utilisateurs avec admin ou membre en face pour chaque ligne de nom/id 
           $fonction=$row['fonction']; 
           //il faut des double quottes " si tu veux que ta variable php soit interprétée ! 
          //mettre session_start avant header
           session_start(); 
                  //il faut initialiser une variable de session que l'on pourra tester ensuite dans la page admin par exemple 
             $_SESSION['fonction']=$fonction; 
           header ("location: index.php?utilisateur=$fonction"); 
          
          } 
          
          
          } 
          else 
          { 
          echo"<font color=red>Vous ne pouvez pas vous connecter !</font>"; 
          
          } 
          ?> 
          
          1. je test cela, je vous en dis plus dès que possible, merci en tout cas !
          2. Problème de sélection de la base de données : no database selected
        2. Bonjour,

          Remplace la ligne $res= mysql_query($req); par $res= mysql_query($req)or die(mysql_error());

          Si tu as une erreur SQL tu la verras.

          Pense à activer le display_errors.
          1. Même résultat, j'avais déjà essayé de parcourir les résultats de ma requête mais ça n'avais pas marché. Ca m'énerve un peu je reste dessus depuis 2 jours u_u ...
            Merci en tout cas
            1. Tu execute la query avec
              $res= mysql_query($req); 

              mais tu dois parcourir les résultats en faisant par exemple :
              while ($row = mysql_fetch_array($res)) {
                  echo $row['nom_du_champ_dans_la_table'];
              }
              


              Pour tester si tu as des résultats, tu peux faire
              if (mysql_num_rows($res)>0) {
              
              }
              


              Tu fais un "if $res" => redirige, sinon echo $res .. petit problème de logique la aussi

              Voila j'espère que ca pourra t'aider :)