Je rencontre un problème sur la création de mes topics [Résolu]

Signaler
Messages postés
5
Date d'inscription
lundi 11 janvier 2021
Statut
Membre
Dernière intervention
11 janvier 2021
-
Messages postés
31014
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 janvier 2021
-
Bonjour,
Voici mon code :

<?php
session_start();
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', ''); /* Contient la connexion à la base de donnée $bdd */

/* Traitement du formulaire de création de Topic */
if(isset($_SESSION['id'])) {
if(isset($_POST['tsubmit'])) {
if(isset($_POST['tsujet'],$_POST['tcontenu'])) {
$sujet = htmlspecialchars($_POST['tsujet']);
$contenu = htmlspecialchars($_POST['tcontenu']);
if(!empty($sujet) AND !empty($contenu)) {
if(strlen($sujet) <= 70) {
if(isset($_POST['tmail'])) {
$notif_mail = 1;
} else {
$notif_mail = 0;
}
$ins = $bdd->prepare('INSERT INTO f_topics (id_createur, sujet, contenu, notif_createur, date_heure_creation) VALUES(?,?,?,?,NOW())');
$ins->execute(array($_SESSION['id'],$sujet,$contenu,$notif_mail));
} else {
$terror = "Votre sujet ne peut pas dépasser 70 caractères";
}
} else {
$terror = "Veuillez compléter tous les champs";
}
}
}
} else {
$terror = "Veuillez vous connecter pour poster un nouveau topic";
}

?>
<!DOCTYPE html>
<html lang="fr">
<head>

</head>
<body>
<form method="POST">
<table>
<tr>
<th colspan="2">Nouveau Topic</th>
</tr>
<tr>
<td>Sujet</td>
<td><input type="text" name="tsujet" size="70" maxlength="70" /></td>
</tr>
<tr>
<td>Catégorie</td>
<td>
<select>
<option>Catégorie 1</option>
<option>Catégorie 2</option>
<option>Catégorie 3</option>
<option>Catégorie 1</option>
</select>
</td>
</tr>
<tr>
<td>Sous-Catégorie</td>
<td>
<select>
<option>Sous-Catégorie 1</option>
<option>Sous-Catégorie 2</option>
<option>Sous-Catégorie 3</option>
<option>Sous-Catégorie 1</option>
</select>
</td>
</tr>
<tr>
<td>Message</td>
<td><textarea name="tcontenu"></textarea></td>
</tr>
<tr>
<td>Me notifier des réponses par mail</td>
<td><input type="checkbox" name="tmail" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="tsubmit" value="Poster le Topic" /></td>
</tr>
<?php if(isset($terror)) { ?>
<tr>
<td colspan="2"><?= $terror ?></td>
</tr>
<?php } ?>
</table>
</form>
</body>
</html>
Si quelqu'un aurait une idée...


Configuration: Windows / Chrome 87.0.4280.141

5 réponses

Messages postés
50446
Date d'inscription
mardi 8 janvier 2008
Statut
Modérateur
Dernière intervention
14 janvier 2021
6 670
Bonjour,

Pense à attribuer à ton code la couleur syntaxique et la forme correcte avec le bouton
<>
.
Messages postés
31014
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 janvier 2021
3 177
Bonjour

Commence par ça
https://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs

Cordialement,
Jordane
Messages postés
5
Date d'inscription
lundi 11 janvier 2021
Statut
Membre
Dernière intervention
11 janvier 2021

<?php
session_start();
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', ''); /* Contient la connexion à la base de donnée $bdd */
/*https://forums.commentcamarche.net/forum/affich-37037374-je-rencontre-un-probleme-sur-la-creation-de-mes-topics?uXXZc-c11BSl0nYbpVfVq0CRQy3KtHnu6tbluZVvO64*/
/*PRIMFX*/

/* Traitement du formulaire de création de Topic */
if(isset($_SESSION['id'])) {
   if(isset($_POST['tsubmit'])) {
      if(isset($_POST['tsujet'],$_POST['tcontenu'])) {
         $sujet = htmlspecialchars($_POST['tsujet']);
         $contenu = htmlspecialchars($_POST['tcontenu']);
         if(!empty($sujet) AND !empty($contenu)) {
            if(strlen($sujet) <= 70) {
               if(isset($_POST['tmail'])) {
                  $notif_mail = 1;
               } else {
                  $notif_mail = 0;
               }
               $ins = $bdd->prepare('INSERT INTO f_topics (id_createur, sujet, contenu, notif_createur, date_heure_creation) VALUES(?,?,?,?,NOW())');
               $ins->execute(array($_SESSION['id'],$sujet,$contenu,$notif_mail));
            } else {
               $terror = "Votre sujet ne peut pas dépasser 70 caractères";
            }
         } else {
            $terror = "Veuillez compléter tous les champs";
         }
      }
   }
} else {
   $terror = "Veuillez vous connecter pour poster un nouveau topic";
}
 
?>
<!DOCTYPE html>
<html lang="fr">
<head>
   
</head>
<body>
	<form method="POST">
		<table>
			<tr>
				<th colspan="2">Nouveau Topic</th>
			</tr>
			<tr>
				<td>Sujet</td>
				<td><input type="text" name="tsujet" size="70" maxlength="70" /></td>
			</tr>
			<tr>
				<td>Catégorie</td>
				<td>
					<select>
						<option>Catégorie 1</option>
						<option>Catégorie 2</option>
						<option>Catégorie 3</option>
						<option>Catégorie 1</option>
					</select>
				</td>
			</tr>
			<tr>
				<td>Sous-Catégorie</td>
				<td>
					<select>
						<option>Sous-Catégorie 1</option>
						<option>Sous-Catégorie 2</option>
						<option>Sous-Catégorie 3</option>
						<option>Sous-Catégorie 1</option>
					</select>
				</td>
			</tr>
			<tr>
				<td>Message</td>
				<td><textarea name="tcontenu"></textarea></td>
			</tr>
			<tr>
				<td>Me notifier des réponses par mail</td>
				<td><input type="checkbox" name="tmail" /></td>
			</tr>
			<tr>
				<td colspan="2"><input type="submit" name="tsubmit" value="Poster le Topic" /></td>
			</tr>
			<?php if(isset($terror)) { ?>
			<tr>
				<td colspan="2"><?= $terror ?></td>
			</tr>
			<?php } ?>
		</table>
	</form>
</body>
</html>




oui excuse moi voila le code
Messages postés
31014
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 janvier 2021
3 177
N'oublie pas de mettre en place le contenu du lien que je t'ai donné...
https://forums.commentcamarche.net/forum/affich-37037374-je-rencontre-un-probleme-sur-la-creation-de-mes-topics

Montre-nous ensuite le nouveau code que tu auras réalisé en expliquant le problème exact rencontré avec éventuellement les messages d'erreur affichés.
Messages postés
31014
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 janvier 2021
3 177
Je t'ai demander d'appliquer le contenu de ce lien
https://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs

Ça devrait permettre de voir les éventuelles erreurs au niveau de PDO...
Messages postés
5
Date d'inscription
lundi 11 janvier 2021
Statut
Membre
Dernière intervention
11 janvier 2021
>
Messages postés
31014
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 janvier 2021

J'ai donc appliqué ce code comme tu me le conseillais et ça ne m'affiche aucune erreur
Messages postés
31014
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 janvier 2021
3 177 >
Messages postés
5
Date d'inscription
lundi 11 janvier 2021
Statut
Membre
Dernière intervention
11 janvier 2021

Et je t'ai également demandé de nous partagé le code une fois modifié ...
Messages postés
5
Date d'inscription
lundi 11 janvier 2021
Statut
Membre
Dernière intervention
11 janvier 2021
>
Messages postés
31014
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 janvier 2021

<?php

try{
$bdd =new PDO('mysql:host=localhost;
 dbname=espace_membre; charset=utf8', 'root', '');
// 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());
} 

/* Traitement du formulaire de création de Topic */
if(isset($_SESSION['id'])) {
   if(isset($_POST['tsubmit'])) {
      if(isset($_POST['tsujet'],$_POST['tcontenu'])) {
         $sujet = htmlspecialchars($_POST['tsujet']);
         $contenu = htmlspecialchars($_POST['tcontenu']);
         if(!empty($sujet) AND !empty($contenu)) {
            if(strlen($sujet) <= 70) {
               if(isset($_POST['tmail'])) {
                  $notif_mail = 1;
               } else {
                  $notif_mail = 0;
               }
               $ins = $bdd->prepare('INSERT INTO f_topics (id_createur, sujet, contenu, notif_createur, date_heure_creation) VALUES(?,?,?,?,NOW())');
               $ins->execute(array($_SESSION['id'],$sujet,$contenu,$notif_mail));
            } else {
               $terror = "Votre sujet ne peut pas dépasser 70 caractères";
            }
         } else {
            $terror = "Veuillez compléter tous les champs";
         }
      }
   }
} else {
   $terror = "Veuillez vous connecter pour poster un nouveau topic";
}
 
?>
<!DOCTYPE html>
<html lang="fr">
<head>
    
</head>
<body>
 <form method="POST">
  <table>
   <tr>
    <th colspan="2">Nouveau Topic</th>
   </tr>
   <tr>
    <td>Sujet</td>
    <td><input type="text" name="tsujet" size="70" maxlength="70" /></td>
   </tr>
   <tr>
    <td>Catégorie</td>
    <td>
     <select>
      <option>Catégorie 1</option>
      <option>Catégorie 2</option>
      <option>Catégorie 3</option>
      <option>Catégorie 1</option>
     </select>
    </td>
   </tr>
   <tr>
    <td>Sous-Catégorie</td>
    <td>
     <select>
      <option>Sous-Catégorie 1</option>
      <option>Sous-Catégorie 2</option>
      <option>Sous-Catégorie 3</option>
      <option>Sous-Catégorie 1</option>
     </select>
    </td>
   </tr>
   <tr>
    <td>Message</td>
    <td><textarea name="tcontenu"></textarea></td>
   </tr>
   <tr>
    <td>Me notifier des réponses par mail</td>
    <td><input type="checkbox" name="tmail" /></td>
   </tr>
   <tr>
    <td colspan="2"><input type="submit" name="tsubmit" value="Poster le Topic" /></td>
   </tr>
   <?php if(isset($terror)) { ?>
   <tr>
    <td colspan="2"><?= $terror ?></td>
   </tr>
   <?php } ?>
  </table>
 </form>
</body>
</html>

EDIT : AJOUT DES BALISES DE CODE !!!!

Messages postés
31014
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 janvier 2021
3 177
Déjà.. on t'a demandé à plusieurs reprises d'utiliser les BALISES DE CODE pour poster ton code sur le forum .... visiblement ça ne veut pas entrer ....
J'ai édité ton message pour les mettre ( pour la dernière fois j'espère..)

Explications sur l'utilisation des balises de code ( à lire ENTIEREMENT et à APPLIQUER à l'avenir.. ) disponibles ici
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Ensuite.. tu n'as pas du lire complètement le lien que je t'avais donné... tu n'en a appliqué qu'une partie...

Bref, on va éviter de tourner en rond pendant toute la soirée..
Donc.. ton code devrait ressembler à ceci :

<?php
//Démarrage des sessions
session_start();

//affichage des erreurs PBP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//connexion à la bdd
try{
  $bdd =new PDO('mysql:host=localhost;dbname=espace_membre; charset=utf8', 'root', '');
  // 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 lors de la conbnexion à la bdd : ' . $e->getMessage());
} 

//récupération PROPRE des variables AVANT de les utiliser
$user_id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;
$sujet = !empty($_POST['tsujet']) ? $_POST['tsujet'] : "";
$contenu = !empty($_POST['tcontenu']) ? $_POST['tcontenu'] : "";
$notif_mail = isset($_POST['tmail']) ? 1 : 0;

// Affichage du contenu de la variable POST le temps des tests
echo "<pre>";
print_r($_POST);
echo "</pre>";

/* Traitement du formulaire de création de Topic */
if(isset($user_id)) {
  if(isset($_POST['tsubmit'])) {
    if(isset($sujet,$contenu)) {
       if(!empty($sujet) AND !empty($contenu)) {
          if(strlen($sujet) <= 70) {
           
           //préparation de la requête et des variables
             $sql = 'INSERT INTO f_topics (id_createur, sujet, contenu, notif_createur, date_heure_creation) VALUES(?,?,?,?,NOW())';
             $datas = array($user_id,$sujet,$contenu,$notif_mail);

            //Execution de la requete
            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);
            }

          } else {
             $terror = "Votre sujet ne peut pas dépasser 70 caractères";
          }
       } else {
          $terror = "Veuillez compléter tous les champs";
       }
    }
  }

} else {
   $terror = "Veuillez vous connecter pour poster un nouveau topic";
}
 
?>
<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="utf-8">
    <title>Nouveau Topic</title>
</head>
<body>
 <form method="POST" action="">
  <table>
   <tr>
    <th colspan="2">Nouveau Topic</th>
   </tr>
   <tr>
    <td>Sujet</td>
    <td><input type="text" name="tsujet" size="70" maxlength="70" value="<?php echo htmlspecialchars($sujet);?>"/></td>
   </tr>
   <tr>
    <td>Catégorie</td>
    <td>
     <select name="categorie">
      <option selected="selected">Catégorie 1</option>
      <option>Catégorie 2</option>
      <option>Catégorie 3</option>
   
     </select>
    </td>
   </tr>
   <tr>
    <td>Sous-Catégorie</td>
    <td>
     <select name="souscategorie">
      <option selected="selected">Sous-Catégorie 1</option>
      <option>Sous-Catégorie 2</option>
      <option>Sous-Catégorie 3</option>
     </select>
    </td>
   </tr>
   <tr>
    <td>Message</td>
    <td><textarea name="tcontenu"><?php echo htmlspecialchars($contenu);?></textarea></td>
   </tr>
   <tr>
    <td>Me notifier des réponses par mail</td>
    <td><input type="checkbox" name="tmail" value="1" /></td>
   </tr>
   <tr>
    <td colspan="2"><input type="submit" name="tsubmit" value="Poster le Topic" /></td>
   </tr>
   <?php 
   if(!empty($terror)) { 
   ?>
     <tr>
      <td colspan="2"><?php echo $terror; ?></td>
     </tr>
   <?php 
   }
   ?>
  </table>
 </form>
</body>
</html>


A noter que la fonction htmlspecialchars ne s'utilise que pour de l'affichage ... JAMAIS pour enregistrer les données en Bdd.
Messages postés
5
Date d'inscription
lundi 11 janvier 2021
Statut
Membre
Dernière intervention
11 janvier 2021

Autant pour moi une erreur s'affiche : PDOException: SQLSTATE [HY000]: Erreur générale: 1364 Le champ 'resolu' n'a pas de valeur par défaut
Messages postés
31014
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 janvier 2021
3 177
Ben voila .. tu as la cause du souci...
Soit tu ajoutes le champ résolu dans ta requête d'insert ... soit tu lui mets une valeur par défaut dans la bdd

Pense à mettre le sujet en résolu justement :-)