PhP et BDD comment faire?

Résolu
Bonjour,
Je suis actuellement entrain de réaliser un site internet pour un projet je le réalise en php avec dreamweaver, et je voudrais savoir comment pouvoir mettre en relation ma base de données avec ma page php.
Ma page php est très basique elle possède seulement un espace pour rentrer un nom d'utilisateur ainsi qu'un autre emplacement pour le mot de passe et un bouton rentrer, ainsi je voudrai que l'utilisateur qui fait partie de ma base de données user puisse acceder a l'acceuil du site et dans le cas contraire afficher un message d'erreur g crée une table user:

CREATE TABLE `cekciwebmaster`.`user` (
`nom_user` VARCHAR( 15 ) NOT NULL ,
`password` VARCHAR( 20 ) NOT NULL ,
`id_user` INT NOT NULL AUTO_INCREMENT ,
PRIMARY KEY ( `id_user` )
) ENGINE = MYISAM

et à partir de la je ne c'est pas comment en supposant que je m'y soit bien pri jusqu'a présent quelqu'un aurait-il des suggestions ou même un tuto pour les nuls très bien détaillées aà me proposer?????
Configuration: Linux
Firefox 1.5.0.13

35 réponses

Résumé de la discussion

La discussion porte sur la mise en relation d'une base de données MySQL avec une page PHP pour authentifier des utilisateurs et ouvrir l'accueil en cas de réussite. Les réponses proposent une approche étape par étape avec contrôle d'accès, gestion des sessions et redirection via header Location, tout en évitant les erreurs récurrentes d'envoi de sorties. Certaines interventions signalent des headers déjà envoyés, des requêtes SQL mal construites et la nécessité d'exécuter le flux dans l'ordre avant d'ajouter des sécurités basiques. D'autres échanges préconisent de tester le flux sans base de données puis d'établir la connexion, en vérifiant l'emplacement des fichiers, permissions et les paramètres de session pour éviter les erreurs.

Bobot (l’IA à votre service)
  1. Au début de ta page est-ce que tu as bien mis

    <?php
    session_start();
    if (!isset($_SESSION["nom_user"]))
    {
    header("HTTP/1.0 403 Forbidden");
    exit;
    }
    ?>

    Si oui ferme toutes tes fenêtres de navigation efface le cache et essai de nouveau d'entrer directement l'adresse
    1. Merci Php pour ce topic tres explicite.

      Je cherche a afficher les donnees de la table relatives a la session ouverte mais je n y arrive pas.
      En récupérant

      <? echo $_SESSION["nom_user"];?>

      cela fonctionne parfaitement mais si je créé une nouvelle variable dans la table t1 et que je souhaite l afficher cela donne

      <? echo $_SESSION["t1"];?>

      mais ca ne donne rien, comment je peux le déclarer cette nouvelle variable dans ton script afin de l afficher dans la page de destination.

      Merci pour ton aide.
  2. Oki c'est bon sa fonctionne cependant si je rentre directement l'url de la page d'acceuil disons https://free.fr/espace/acceuil.php j'y accède sans qu'il y est besoin d'authentification c a d sans que l'on est besoin de passer par https://free.fr/index_final.php a quoi c'est du???
    1. Reprend mon code en poste n°13

      Il faut faire le controle d'accès avant la première instruction de ta page c'est-à-dire avant
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0

      Si tu veux le header est ce que le navigateur recoit en premier avant le code HTML de la page : une fois que le début de la page est envoyé tu n'as plus le droit d'envoyer un autre header c'est pourquoi ca plante
      1. Ce message d’erreur indique que vous tenter d’écrire des entêtes HTML, alors que le corps de la page a déjà été enrichi.
        Mais je comprends pa comment faire pour corriger l'erreur.
        1. Autan pour moi c'était le mot de passe qui était pas correcte
          Maintenant j'obtiens ce message:
          Warning: Cannot modify header information - headers already sent by (output started at /mnt/103/sda/0/3/cekciwebmaster/index_final.php:72) in /mnt/103/sda/0/3/cekciwebmaster/index_final.php on line 58 l'url que j'ai rentrer est la suivante pour l'url absolue:

          function controle_access($nom_user, $password,$url_absolue)
          {
          $result = mysql_select_user($nom_user,$password);
          if (mysql_num_rows($result)==0)
          {
          return false;
          }
          else
          {
          $_SESSION["nom_user"] = $nom_user;
          $_SESSION["password"] = $password;
          header("Location: ".$url_absolue);
          exit;
          }
          }

          ?>
          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
          <html xmlns="http://www.w3.org/1999/xhtml">
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
          <title>Accès securisé pour Site Comité d'entreprise KCI Medical</title>
          </head>

          <body>
          <?php
          $nom_user = isset($_POST['nom_user']) ? addslashes(htmlspecialchars($_POST['nom_user'])) : null;
          $password = isset($_POST['password']) ? addslashes(htmlspecialchars($_POST['password'])) : null;
          if(!empty($nom_user) && !empty($password))
          {
          // L'url fournit doit être absolue
          $url_absolue = "[http://]".$_SERVER['HTTP_HOST']."/cekciwebmaster.free.fr/espace_membre/acceuil.php";

          //$url = "https://www.google.fr/?gws_rd=ssl";
          $result = controle_access($nom_user,$password,$url_absolue);

          if (!$result)
          {
          echo "Vous n'avez pas été reconnu ! Vérifiez vos identifiants ...";
          }
          }
          ?>
          1. La je vois pas

            T'es pas déjà connecté à la base via phpmydamin ?

            Essai :

            <?php 
            $cfg_hostname="sql.free.fr"; 
            $cfg_username="root"; 
            $cfg_password=" "; 
            $cfg_database=" "; 
            $mysql_link=null; 
            
            function mysql_connecter() 
            { 
            global $cfg_hostname,$cfg_username,$cfg_password,$mysql_link,$cfg_database; 
            
            if (!$mysql_link) 
            { 
            $link = mysql_connect($cfg_hostname, $cfg_username, $cfg_password) or die("Impossible de se connecter au serveur MySql : ".$cfg_hostname." !"); 
            
            mysql_select_db($cfg_database,$link) or die("Impossible de sélectionner la base de données : ".$cfg_database." !"); 
            $mysql_link = $link; 
            } 
            return $mysql_link; 
            } 
            
            
            mysql_connecter();
            
            ?>


            Pour t'affranchir des sessions

            1. Voila le message d'erreur

              Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'cekciwebmaster'@'172.20.244.241' (using password: YES) in /mnt/103/sda/0/3/cekciwebmaster/index_final.php on line 17
              Impossible de se connecter au serveur MySql : sql.free.fr !
              1. Alors pourquoi dans ton code je vois

                $cfg_hostname="sql.free.fr";
                $cfg_username="root";
                $cfg_password=" ";

                ?????? pour le password ok

                et surtout le message d'erreur t'indique bien que tu tentes de te connecter avec root !
                1. non c'est pas root c'est cekciwebmaster l'adresse c'est bien sql.free.fr et le mot de passe est bon aussi j'ai verifier... Une autre suggestions??
                  En plus sa fonctionnait avan qu'on essaye sessions start()
                  1. A mon avis le username n'est pas root

                    De plus il faut aussi entrer le mot de passe que Free t'as communiqué

                    Vérifie aussi que l'adresse sql.free.fr est la bonne !
                    1. Bon continuons dans notre explorations diabloques du php et de la BDD maintenant je n'ai plus de probleme aux niveaux de ma page index_final.php il apparait normalement les espaces afin de rentrer le nom et le mdp cependant (ben oui ya un cpt si sa marchait du premier coup tout le tps sa serait trop facile) donc cependant quand je valide mon identifiant et mdp j'obtiens le message d'erreur suivant:

                      Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'root'@'172.20.244.241' (using password: YES) in /mnt/103/sda/0/3/root/index_final.php on line 17
                      Impossible de se connecter au serveur MySql : sql.free.fr !

                      voila le code je tiens a souligner qu'auparavant il se connectai au serveur mysql (pour ceux qui prenne le probleme en route...):

                      <?php
                      session_start();
                      session_unset();

                      $cfg_hostname="sql.free.fr";
                      $cfg_username="root";
                      $cfg_password=" ";
                      $cfg_database=" ";
                      $mysql_link=null;

                      function mysql_connecter()
                      {
                      global $cfg_hostname,$cfg_username,$cfg_password,$mysql_link,$cfg_database;

                      if (!$mysql_link)
                      {
                      $link = mysql_connect($cfg_hostname, $cfg_username, $cfg_password) or die("Impossible de se connecter au serveur MySql : ".$cfg_hostname." !");

                      mysql_select_db($cfg_database,$link) or die("Impossible de sélectionner la base de données : ".$cfg_database." !");
                      $mysql_link = $link;
                      }
                      return $mysql_link;
                      }

                      function mysql_select_user($nom_user, $password)
                      {
                      $result = 0;
                      if(!empty($nom_user) && !empty($password))
                      {
                      $link = mysql_connecter();
                      $query="SELECT * FROM `user` WHERE `nom_user` = '".$nom_user."' and `password` = '".$password."'";

                      $result = @mysql_query($query);
                      if (!$result)
                      {
                      echo "query = ".$query."\n";
                      echo "mysql_errno = ".mysql_errno($link)."\n";
                      echo "mysql_error = ".mysql_error($link)."\n";
                      exit;
                      }
                      }
                      return $result;
                      }

                      function controle_access($nom_user, $password,$url_absolue)
                      {
                      $result = mysql_select_user($nom_user,$password);
                      if (mysql_num_rows($result)==0)
                      {
                      return false;
                      }
                      else
                      {
                      $_SESSION["nom_user"] = $nom_user;
                      $_SESSION["password"] = $password;
                      header("Location: ".$url_absolue);
                      exit;
                      }
                      }

                      ?>
                      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                      <html xmlns="http://www.w3.org/1999/xhtml">
                      <head>
                      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                      <title>Accès securisé pour Site Comité d'entreprise KCI Medical</title>
                      </head>

                      <body>
                      <?php
                      $nom_user = isset($_POST['nom_user']) ? addslashes(htmlspecialchars($_POST['nom_user'])) : null;
                      $password = isset($_POST['password']) ? addslashes(htmlspecialchars($_POST['password'])) : null;
                      if(!empty($nom_user) && !empty($password))
                      {
                      // L'url fournit doit être absolue
                      $url_absolue = "[http://]".$_SERVER['HTTP_HOST']."/espace_membre/acceuil.php";

                      //$url = "https://www.google.fr/?gws_rd=ssl";
                      $result = controle_access($nom_user,$password,$url_absolue);

                      if (!$result)
                      {
                      echo "Vous n'avez pas été reconnu ! Vérifiez vos identifiants ...";
                      }
                      }
                      ?>
                      <html>
                      <head>
                      </head>
                      <body>
                      <?php
                      if (isset($_POST['nom_user']) || isset($_POST['password']))
                      {
                      echo "Vous devez renseigner votre nom d'utilisateur et votre mot de passe pour vous connectez !";
                      }
                      ?>

                      <form action="<?php echo htmlentities($_SERVER['PHP_SELF']);?>" method="post">
                      Username <input type="text" id="nom_user" name="nom_user" value=""></br>
                      Password <input type="text" id="password" name="password" value="">
                      <input type="submit" value"Valider" >
                      </form>
                      </body>
                      </html>
                      </body>
                      </html>
                      1. Bien vue ceci expliqe cela :) j'te remercie pour les tuyau et surtout pour la patience.
                        1. voila la config de free:

                          Session Support enabled
                          Registered save handlers files user

                          Directive Local Value Master Value
                          session.auto_start Off Off
                          session.bug_compat_42 On On
                          session.bug_compat_warn On On
                          session.cache_expire 180 180
                          session.cache_limiter nocache nocache
                          session.cookie_domain no value no value
                          session.cookie_lifetime 0 0
                          session.cookie_path / /
                          session.cookie_secure Off Off
                          session.entropy_file no value no value
                          session.entropy_length 0 0
                          session.gc_divisor 100 100
                          session.gc_maxlifetime 1440 1440
                          session.gc_probability 1 1
                          session.name PHPSESSID PHPSESSID
                          session.referer_check no value no value
                          session.save_handler files files
                          session.save_path /mnt/103/sda/0/3/root/sessions /cache/sessions
                          session.serialize_handler php php
                          session.use_cookies On On
                          session.use_only_cookies Off Off
                          session.use_trans_sid Off Off
                          1. Alors ca viendt de chez Free

                            Essai le code suivant

                            <?php
                            phpinfo();
                            ?>

                            Et lance le sur le serveur Free ca va te donner la config de php

                            Regarde si les sessions sont activées
                            1. Je test sur internet directement sur le serveur les pages st heberger chez free et je sui sous windows XP pro Pack SP2.

                              et voila le résultat du test:

                              Warning: session_start() [function.session-start]: open(/mnt/103/sda/0/3/cekciwebmaster/sessions/sess_b81f36192efc63b9d491ba0a61e6ec2d, O_RDWR) failed: No such file or directory (2) in /mnt/103/sda/0/3/cekciwebmaster/test.php on line 2

                              Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /mnt/103/sda/0/3/cekciwebmaster/test.php:2) in /mnt/103/sda/0/3/cekciwebmaster/test.php on line 2

                              Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/103/sda/0/3/cekciwebmaster/test.php:2) in /mnt/103/sda/0/3/cekciwebmaster/test.php on line 2

                              Warning: Unknown(): open(/mnt/103/sda/0/3/cekciwebmaster/sessions/sess_b81f36192efc63b9d491ba0a61e6ec2d, O_RDWR) failed: No such file or directory (2) in Unknown on line 0

                              Warning: Unknown(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/mnt/103/sda/0/3/cekciwebmaster/sessions) in Unknown on line 0

                              voila le code:
                              <?php
                              session_start();
                              ?>

                              <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                              <html xmlns="http://www.w3.org/1999/xhtml">
                              <head>
                              <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                              <title>Document sans titre</title>
                              </head>

                              <body>
                              </body>
                              </html>
                              1. Tu testes où exactement ?

                                Sur un PC local ? Sur Internet ?

                                Tu utilises Windows ou Linux ?

                                Ferme ton navigateur relance le puis
                                teste juste ceci

                                <?php
                                session_start();
                                ?>
                                1. J'ai effectuer le changement mais j'obtien toujours les mêmes messages:

                                  Warning: session_start() [function.session-start]: open(/mnt/103/sda/0/3/cekciwebmaster/sessions/sess_fd8e977563b0cce16c952e185a9ec24b, O_RDWR) failed: No such file or directory (2) in /mnt/103/sda/0/3/cekciwebmaster/index_final.php on line 2

                                  Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /mnt/103/sda/0/3/cekciwebmaster/index_final.php:2) in /mnt/103/sda/0/3/cekciwebmaster/index_final.php on line 2

                                  Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/103/sda/0/3/cekciwebmaster/index_final.php:2) in /mnt/103/sda/0/3/cekciwebmaster/index_final.php on line 2

                                  Warning: Unknown(): open(/mnt/103/sda/0/3/cekciwebmaster/sessions/sess_fd8e977563b0cce16c952e185a9ec24b, O_RDWR) failed: No such file or directory (2) in Unknown on line 0

                                  Warning: Unknown(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/mnt/103/sda/0/3/cekciwebmaster/sessions) in Unknown on line 0

                                  voila les codes:

                                  <?php
                                  session_start();
                                  session_unset();

                                  $cfg_hostname="localhost";
                                  $cfg_username="root";
                                  $cfg_password="";
                                  $cfg_database="";
                                  $mysql_link=null;

                                  function mysql_connecter()
                                  {
                                  global $cfg_hostname,$cfg_username,$cfg_password,$mysql_link,$cfg_database;

                                  if (!$mysql_link)
                                  {
                                  $link = mysql_connect($cfg_hostname, $cfg_username, $cfg_password) or die("Impossible de se connecter au serveur MySql : ".$cfg_hostname." !");

                                  mysql_select_db($cfg_database,$link) or die("Impossible de sélectionner la base de données : ".$cfg_database." !");
                                  $mysql_link = $link;
                                  }
                                  return $mysql_link;
                                  }

                                  function mysql_select_user($nom_user, $password)
                                  {
                                  $result = 0;
                                  if(!empty($nom_user) && !empty($password))
                                  {
                                  $link = mysql_connecter();
                                  $query="SELECT * FROM `user` WHERE `nom_user` = '".$nom_user."' and `password` = '".$password."'";

                                  $result = @mysql_query($query);
                                  if (!$result)
                                  {
                                  echo "query = ".$query."\n";
                                  echo "mysql_errno = ".mysql_errno($link)."\n";
                                  echo "mysql_error = ".mysql_error($link)."\n";
                                  exit;
                                  }
                                  }
                                  return $result;
                                  }

                                  function controle_access($nom_user, $password,$url_absolue)
                                  {
                                  $result = mysql_select_user($nom_user,$password);
                                  if (mysql_num_rows($result)==0)
                                  {
                                  return false;
                                  }
                                  else
                                  {
                                  $_SESSION["nom_user"] = $nom_user;
                                  $_SESSION["password"] = $password;
                                  header("Location: ".$url_absolue);
                                  exit;
                                  }
                                  }

                                  ?>
                                  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                                  <html xmlns="http://www.w3.org/1999/xhtml">
                                  <head>
                                  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                                  <title>Accès securisé pour Site Comité d'entreprise KCI Medical</title>
                                  </head>

                                  <body>
                                  <?php
                                  $nom_user = isset($_POST['nom_user']) ? addslashes(htmlspecialchars($_POST['nom_user'])) : null;
                                  $password = isset($_POST['password']) ? addslashes(htmlspecialchars($_POST['password'])) : null;
                                  if(!empty($nom_user) && !empty($password))
                                  {
                                  // L'url fournit doit être absolue
                                  $url_absolue = "[http://]".$_SERVER['HTTP_HOST']."/espace_membre/acceuil.php";

                                  //$url = "https://www.google.fr/?gws_rd=ssl";
                                  $result = controle_access($nom_user,$password,$url_absolue);

                                  if (!$result)
                                  {
                                  echo "Vous n'avez pas été reconnu ! Vérifiez vos identifiants ...";
                                  }
                                  }
                                  ?>
                                  <html>
                                  <head>
                                  </head>
                                  <body>
                                  <?php
                                  if (isset($_POST['nom_user']) || isset($_POST['password']))
                                  {
                                  echo "Vous devez renseigner votre nom d'utilisateur et votre mot de passe pour vous connectez !";
                                  }
                                  ?>

                                  <form action="<?php echo htmlentities($_SERVER['PHP_SELF']);?>" method="post">
                                  Username <input type="text" id="nom_user" name="nom_user" value=""></br>
                                  Password <input type="text" id="password" name="password" value="">
                                  <input type="submit" value"Valider" >
                                  </form>
                                  </body>
                                  </html>
                                  </body>
                                  </html>
                                  • 1
                                  • 2