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

Résolu
aure_4600 Messages postés 8 Statut Membre -  
jordane45 Messages postés 30426 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

5 réponses

  1. Chris 94 Messages postés 1937 Date d'inscription   Statut Modérateur Dernière intervention   7 536
     
    Bonjour,

    Pense à attribuer à ton code la couleur syntaxique et la forme correcte avec le bouton
    <>
    .
    0
  2. aure_4600 Messages postés 8 Statut Membre
     
    <?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
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      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
      1. aure_4600 Messages postés 8 Statut Membre > jordane45 Messages postés 30426 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
      2. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > aure_4600 Messages postés 8 Statut Membre
         
        Et je t'ai également demandé de nous partagé le code une fois modifié ...
        0
      3. aure_4600 Messages postés 8 Statut Membre > jordane45 Messages postés 30426 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
  3. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    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
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. aure_4600 Messages postés 8 Statut Membre
     
    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
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      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