Pdo bogué

Résolu
loulou -  
jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   -
pdo renvoie l'erreur
"SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)"
alors que la base, l'hote, l'utilisateur et le mot de passe sont correct.
J'ai activé toutes les extensions pdo sauf pdo_firebird.
J'utilise un raspberrypi pour héberger mon site personnel.
Je suis sous raspbian, j'utilise php 7.4, mariadb-server et apache2.
Le code pour se connecter à mysql est :
$host = '127.0.0.1';
$dbname = 'chat';
$username = 'root';
$password = 'mon mdp';
if(isset($_POST['insert'])){
try {
// se connecter à mysql
$pdo = new PDO("mysql:host=$host;dbname=$dbname","$username","$password");
} catch (PDOException $exc) {
echo $exc->getMessage();
exit();
}

4 réponses

  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour,

    Déjà, merci d'utiliser les balises de code lorsque tu postes du code sur le forum.
    Explications ( à lire entièrement ! ) disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

    Ensuite,
    ça ne sert à rien de placer le code de connexion à la bdd que si ton formuaire est envoyé..... place le directement au début de ton code.
    Pense aussi à activer l'affichage des erreurs PHP ainsi que l'affichage des erreurs PDO.

    <?php
    
    //Affichage des erreurs php 
    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);
    
    //connexion à la bdd
    $host = '127.0.0.1';
    $dbname = 'chat';
    $username = 'root';
    $password = 'mon mdp'; 
    
    try{
      $bdd =new PDO('mysql:host='.$host.';dbname='.$dbname.'; charset=utf8', $username, $password);
      // Activation des erreurs PDO
      $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
      $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    } catch(PDOException $e) {
        die('Erreur : ' . $e->getMessage());
    }
    
    if(isset($_POST['insert'])){
      
      
      /**
     //exemple d'utilisation d'une requête préparée en pdo:
    
     //préparation de la requête et des variables
     $sql = "INSERT INTO tatable (champ1,champ2)   VALUES (:valeur1,:autrevaleur)";
     $datas = array(':valeur1'=>$valeur1, ':autrevaleur'=>$toto);
    
      //Execution de la requete (il n'y a rien à toucher dans les lignes ci-dessous)
      try{
        $requete = $bdd -> prepare($sql) ;
        $requete->execute($datas) ;
      }catch(Exception $e){
        // en cas d'erreur :
         echo " Erreur ! ".$e->getMessage();
         echo " Les datas : " ;
        print_r($datas);
      }
      
      */
    }
    
    


    Et puis,
    As tu d'autres fichiers php ? n'aurais tu pas écrit le code de connexion à la bdd ailleurs ? (que tu aurais laissé en "localhost" au lieu de "127.0.0.1" ? )

    Par contre, comment sais tu que le user et le password sont bons ?
    Tu arrives à te connecter à la bdd par un autre moyen avec ces identifiants ( en ligne de commande par exemple ? ) Il faudrait faire ce teste la en premier pour être certains que les infos sont bonnes.

    0
  2. loulou
     
    J'arrive à me connecter à la bdd via "sudo mysql" et avec mysqli.
    Si vous voulez le code complet est :
    <?php
     // Initialiser la session
     session_start();
     // Vérifiez si l'utilisateur est connecté, sinon redirigez-le vers la page de connexion
     if(!isset($_SESSION["username"])){
      header("Location: login.php");
      exit(); 
     }
    $host = '127.0.0.1';
    $dbname = 'chat';
    $username = 'root';
    $password = 'mon mdp';
    if(isset($_POST['insert'])){
      try {
      // se connecter à mysql
      $pdo = new PDO("mysql:host=$host;dbname=$dbname","$username","$password");
      } catch (PDOException $exc) {
        echo $exc->getMessage();
        exit();
      }
      // récupérer les valeurs 
      $pseudo = $_SESSION["username"];
      $message = htmlspecialchars($_POST['message']);
      // Requête mysql pour insérer des données
      $sql = "INSERT INTO `chatbox`(`pseudo`, `message`) VALUES (:pseudo,:message)";
      $res = $pdo->prepare($sql);
      $exec = $res->execute(array(":pseudo"=>$pseudo,":message"=>$message));
      // vérifier si la requête d'insertion a réussi
      if($exec){
       $alerte = 'Message envoyé !!!';
      }else{
        echo "Échec de l'opération d'insertion";
      }
    }
    header("refresh: 15;");
    ?>
    <!DOCTYPE html>
    <html>
     <head>
      <META NAME="ROBOTS" content="none">
      <title>Tableau de bord</title>
      <link rel="stylesheet" href="style.css" />
     </head>
     <body>
      <div class="sucess">
      <h1>Bienvenue <?php echo $_SESSION['username']; ?> !</h1>
      <p>C'est votre tableau de bord.</p>
      <a href="logout.php">Déconnexion</a>
      </div>
      <form action="" method="post" class="box">
      <?php if (! empty($message)) { ?>
          <p class="errorMessage"><?php echo $alerte; ?></p>
      <?php } ?>
            <textarea type="text" name="message" placeholder="message" class="textarea"></textarea>
            <input type="submit" name="insert" value="Envoyer" class="box-button">
       <p></br></p>
       <?php
       $host = 'localhost';
       $dbname = 'chat';
       $username = 'root';
       $password = 'mon mdp';
         try {
         // se connecter à mysql
         $pdo = new PDO("mysql:host=$host;dbname=$dbname","$username","$password");
         } catch (PDOException $exc) {
        echo $exc->getMessage();
        exit();
         }
       $req = $pdo->query("SELECT * FROM chatbox ORDER BY ID DESC LIMIT 20");
       while($msg = $req->fetch()){
       ?>
       <p align="center"><font color="#003cff"><b><?php echo $msg['pseudo'] ?> :</b> <?php echo $msg['message'] ?></font></p>
       <?php
       } 
       ?>
       </form>  
     </body>
    </html>
    

    EDIT : Ajout des BALISES DE CODE !!

    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Tu peux m'explilquer pourquoi tu essayes de REFAIRE une connexion aux lignes 58 -> 68 ... alors que tu en a déjà une aux lignes 14 à 20 ??

      Surtout que dans cette seconde connexion tu as utilisé 'localhost" ( ah tiens.. ça correspond à ton message d'erreur contrairement au premier code que tu nous as montré... )

      Bref.. il ne faut qu'une seule connexion... la première...
      0
  3. loulou
     
    Je refais une connexion pour récupérer les messages du tchat.
    La premiere connexion sert uniquement à envoyer les messages dans la bdd.
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Une seule connexion par fichier php suffit..
      0
  4. loulou
     
    Mince, je viens de me rendre compte que je n'ai pas modifié le mot de passe de la 2eme connexion en installant le site sur le raspberrypi.
    0