Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 02/05/2023, à 12:11

Nataloche

Problème d'ouverture de base de donnée

Bonjour je suis une débutante en informatique , qui suis les cours de php de mon père et pour l'épater j'ai voulu faire en son absence, un mini chat avec un script que j'ai trouvé et phpmyadmin , pour ça j'ai crée une base " monchat" avec une table "news"  mais chaque fois que je clique sur envoi  je vois bien le formulaire apparaitre, mais ça me dit que la base de donnée n'existe pas

Voila le message : Erreur :SQLSTATE[42S02]: Base table or view not found: 1146 Table 'news.monchat' doesn't exist
pourtant la base de donnée existe bien ..Voila le script du formulaire :

ody
{
color: black; 
background-image: url("frere1.jpg");
background-attachment: fixed;
}

</style>

</head>
<body><h1 style="color:navy;">-Le Chat de mon site-</h1>
<form action="monchat_post.php" method="post">
        <p>

        <label for="pseudo">- Votre Pseudo ICI  </label>:<input type="text" name="pseudo" id="pseudo"/><br>
 <br />

        <label for="email"> - Votre email ICI-</label>:<input type="text" name="email" id="email"/><br>
         
<br>
<tr><td colspan=2><br><br>votre message ici :<br>
  <textarea COLS=47 ROWS=3 name=message></textarea>
</td></tr</table><br>
<br>
 - Pour envoyer ICI : <input type="submit" value="Envoyer" /> <br/>
	</p>
    </form>


<?php 

// Connexion à la base de données
try
{
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $bdd = new PDO('mysql:host=localhost;dbname=monchat', 'root', '', $pdo_options);
    
    // Récupération des 10 derniers messages
    $reponse = $bdd->query('SELECT * FROM monchat ORDER BY ID DESC LIMIT 0, 10');
    
    // Affichage de chaque message (toutes les données sont protégées par htmlspecialchars)
    while ($donnees = $reponse->fetch())
    {
       //echo date("d/m/Y H:i:s"); 
        echo htmlspecialchars($donnees['date']).'<p> <strong>' . htmlspecialchars($donnees['pseudo']) .
        '</strong><strong><h5>Mail:</h5></strong>'. htmlspecialchars($donnees['email']).'<strong><h5>message :</h5></strong>'.
 htmlspecialchars($donnees['message']). 
'<hr></p>';
    }
    
    $reponse->closeCursor();
}
catch(Exception $e)
{
    die ('Erreur :'.$e->getMessage());
}

?>
</body>
</html>

</html>

Voila celui de la deuxième page :

<?php
// Connexion à la base de données
try
{
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $bdd = new PDO('mysql:host=localhost;dbname=monchat''root', '', $pdo_options);
    
    // Insertion du message à l'aide d'une requête préparée
    $req = $bdd->prepare("INSERT INTO monchat (pseudo ,email, message) VALUES(?,?,?)");
    $req->execute(array ($_POST ['pseudo'],$_POST['email'], $_POST ['message'] ));
    $req=$bdd->query("SELECT DATE AS date FROM monchat");


$jour= date("d");
$mois = date("m");
$annee= date("Y");
$heure= date("H");
$minute=date("i");


echo "<h1><blink >Bonjour!</blink></h1><br/><br/>
  Nous sommes le : $jour/$mois/$annee et il est: 
$heure heures : $minute minutes . ";




  

    

     
    // Redirection du visiteur vers la page du minichat
    header('Location: monchat.php');
}
catch(Exception $e)
{
    die('Erreur : '.$e->getMessage());
}
?>

Je suis débutante et je ne sais pas ou je me plante ça serait sympa de m'aider

Hors ligne

#2 Le 02/05/2023, à 12:40

soshy

Re : Problème d'ouverture de base de donnée

Salut,

Alors attention à ne pas confondre ta base de données et les tables contenues dans ta base. Tu dis avoir une base nommée monchat et avec une table nommée news

Cela dit, dans ton code, nul part je vois "news".

Si je reprends ton code je trouve

$bdd = new PDO('mysql:host=localhost;dbname=monchat', 'root', '', $pdo_options);
$reponse = $bdd->query('SELECT * FROM monchat ORDER BY ID DESC LIMIT 0, 10');

Ce qui en gros veut dire :
- connecte toi à la base de données "monchat"
- Dans la table "monchat" (sous entendu, de la base à laquelle je suis connecté) selectionne moi les 10 derniers éléments


De même

INSERT INTO monchat (pseudo ,email, message) VALUES(?,?,?)

Insert dans la table "monchat" ...

Je pense que ton erreur est là, c'est pas la table monchat que tu veux lire et écrire, mais la table news

Mais du coup, je suis assez surpris du message d'erreur: Erreur :SQLSTATE[42S02]: Base table or view not found: 1146 Table 'news.monchat' doesn't exist
Qui laisse sous entendre que tu travailles sur la base nommées "news" (et que je ne vois pas d'où il sort l'info avec ton code) et qu'il ne trouve pas la table "monchat". En général, dans le contexte des bases de données on a "NomDeLaBase.NomDeLaTable"


Dernière chose, tu dois avoir une erreur

    $bdd = new PDO('mysql:host=localhost;dbname=monchat', 'root', '', $pdo_options);
    $bdd = new PDO('mysql:host=localhost;dbname=monchat''root', '', $pdo_options);

A priori ces 2 lignes devraient être identiques, il doit te manquer une virgule pour séparer les 2 premiers paramètres sur la 2nde ligne.

Dernière modification par soshy (Le 02/05/2023, à 13:41)

Hors ligne

#3 Le 03/05/2023, à 14:31

Nataloche

Re : Problème d'ouverture de base de donnée

Bonjour et merci pour ton coup de main ,je répond tard car je n'ai pas eu le temps avant, bien que j'ai lu ta réponse hier, (métier de vétérinaire oblige)  j'ai suivi tes instructions et effectivement le message d'erreur a disparu, mais les messages n’apparaissent pas je ne reçois qu'une page blanche , il semblerait que la redirection via la page appelée par "header" ne soit pas faite car ça reste sur la page " monchat_post.php" c'est ce qui apparaît sur la page blanche   ...Ma base de donnée et sa table sont correctes  mais restent vide ..Décidément ce n'est pas évident ..

Hors ligne

#4 Le 03/05/2023, à 22:13

alex2423

Re : Problème d'ouverture de base de donnée

Si ce n'est pas évident, il faut faire les choses une par une et non pas tout d'un seul coup.
Sur ta page, tu fais une insertion dans une table, puis après tu fais une lecture, et enfin une redirection.

Or il semblerait que ta table soit vide. Mieux vaut dans ce cas, se concentrer avant tout sur la partie uniquement des insertions. Et une fois que tu vois les données dans ta table avec phpMyAdmin (j'imagine que tu visualises tes données dans ta table "monchat" avec cet outil), tu peux passer à la suite au étape 2 et 3. 

Juste avant d'exécuter ta requête d'insertion dans ta table, tu peux également vérifier momentanément si tu as bien les bonnes que tu veux insérer. Tu fais passer un tableau de valeur à ta fonction.

Il peut donc intéressant de visualiser le tableau en mode "debuggage"

print_r(array ($_POST ['pseudo'],$_POST['email'], $_POST ['message'] ))

print_r permet de visualiser un tableau de valeur. Bien entendu, une fois que tu auras valider tes insertions, tu pourras supprimer le print_r.
Pour rappel : https://www.php.net/manual/fr/function.print-r.php

Ecrire un nombre de ligne de code d'un seul n'est pas chose aisé de mon point de vue. Bien entendu, avec l'habitude, il est possible d'aller au plus vite mais au début, je le déconseillerai

Dernière modification par alex2423 (Le 03/05/2023, à 22:15)

Hors ligne

#5 Le 03/05/2023, à 23:04

soshy

Re : Problème d'ouverture de base de donnée

On entre maintenant sur le terrain passionnant du débuggage...
Règle numéro 1, y aller étape par étape...

Que fait ton code ?
1- Remplir un formulaire
2- Submit (POST) du formulaire direction page 2
3- Lecture du formulaire reçu
4- Insertion des champs du formulaire en base
5- Redirection vers page 1
6- On va s'en tenir là pour l'instant ça sera déjà bien smile

Les symptômes pour établir un diagnostique:
- Pas de redirection vers page 1, donc l'étape 5 est cassée,
- Pas de données visible en base dans PHP myadmin, donc étape 4 cassée
- On passe bien sur la page 2, donc à priori, l'étape 2 est OK.

Le problème (au moins le premier) semble se situer étape 3 ou 4.
La première chose à faire est donc de vérifier que l'étape 3 fonctionne en affichant les éléments du fomulaire reçu. Par exemple comme l'a indiqué alex2423 à l'aide de la fonction printr. Si le résultat n'est pas concluant, c'est qu'on a mal transmit ou lu le formulaire. Si le résultat semble correct, c'est à l'étape 4 qu'on a fait une erreur.

Comment donc trouver des indices pour débugger l'étape 4 ?!
Dans ton code, on trouve

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

La ça veut dire que si une exception (une erreur en gros) survient quelque part dans le bloc try, on arrête tout et on passe directement dans le bloc catch. Et compte tenu du fait que la redirection n'est pas effectuée, j'aurai tendance à opter pour cette option, quelque chose dans le bloc try ne se passe pas comme prévu.
Ce qu'il y a de bien avec les exceptions, c'est qu'en général elles ont un message pour aider à comprendre ce qui a merdé. (d'où le $e->getMessage())
N'étant pas un expert du PHP, je ne suis pas bien sûr d'où devrait apparaitre le message d'erreur dans ce cas. Mais ! mais on peut toujours bricoler un truc...
Peut être que tu peux essayer un truc du genre

try {
    // des trucs ...
}
catch(Exception $e)
{
    print_r($e->getMessage());
    die('Erreur : '.$e->getMessage());
}

Avec un peu de chance, au lieu d'avoir une page blanche, un message d'erreur nous mettra sur une nouvelle piste !

Dernière modification par soshy (Le 03/05/2023, à 23:07)

Hors ligne

#6 Le 04/05/2023, à 06:55

Nataloche

Re : Problème d'ouverture de base de donnée

Bonjour et re merci a vous deux pour ces précisions mais hier soir j'ai réussi a faire fonctionner ce script en le retapant intégralement ( l'idée de comparer les longueurs étaient bonnes ) j'avais mis des espaces ou il ne fallait pas ..Je n'ai plus qu'une histoire de timestamp a corriger et ce sera tip top ..
Encore merci a vous car c'est vrai que ce n'est pas évident surtout si comme moi on a des lacunes en Anglais ..

Hors ligne