Pdo bogué

Résolu/Fermé
loulou - 11 janv. 2022 à 12:45
jordane45 Messages postés 38222 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 juillet 2024 - 12 janv. 2022 à 16:00
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

jordane45 Messages postés 38222 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 juillet 2024 4 683
11 janv. 2022 à 14:30
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
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
jordane45 Messages postés 38222 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 juillet 2024 4 683
12 janv. 2022 à 13:09
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
Je refais une connexion pour récupérer les messages du tchat.
La premiere connexion sert uniquement à envoyer les messages dans la bdd.
0
jordane45 Messages postés 38222 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 juillet 2024 4 683
12 janv. 2022 à 16:00
Une seule connexion par fichier php suffit..
0
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