Je rencontre un problème sur la création de mes topics

Résolu
aure_4600 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
jordane45 Messages postés 38480 Date d'inscription   Statut Modérateur Dernière intervention   -
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
A voir également:

5 réponses

Chris 94 Messages postés 54087 Date d'inscription   Statut Modérateur Dernière intervention   7 341
 
Bonjour,

Pense à attribuer à ton code la couleur syntaxique et la forme correcte avec le bouton
<>
.
0
jordane45 Messages postés 38480 Date d'inscription   Statut Modérateur Dernière intervention   4 746
 
0
aure_4600 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
<?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
0
jordane45 Messages postés 38480 Date d'inscription   Statut Modérateur Dernière intervention   4 746
 
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.
0
jordane45 Messages postés 38480 Date d'inscription   Statut Modérateur Dernière intervention   4 746
 
Je t'ai demander d'appliquer le contenu de ce lien
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

Ça devrait permettre de voir les éventuelles erreurs au niveau de PDO...
0
aure_4600 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   > jordane45 Messages postés 38480 Date d'inscription   Statut Modérateur Dernière intervention  
 
J'ai donc appliqué ce code comme tu me le conseillais et ça ne m'affiche aucune erreur
0
jordane45 Messages postés 38480 Date d'inscription   Statut Modérateur Dernière intervention   4 746 > aure_4600 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Et je t'ai également demandé de nous partagé le code une fois modifié ...
0
aure_4600 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   > jordane45 Messages postés 38480 Date d'inscription   Statut Modérateur Dernière intervention  
 
<?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 !!!!

0
jordane45 Messages postés 38480 Date d'inscription   Statut Modérateur Dernière intervention   4 746
 
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
aure_4600 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
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
0
jordane45 Messages postés 38480 Date d'inscription   Statut Modérateur Dernière intervention   4 746
 
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 :-)
0