[RESOLU] Sélectionner la bonne catégorie dans un POST

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Sélectionner la bonne catégorie dans un POST

Re: Sélectionner la bonne catégorie dans un POST

par or 1 » 02 oct. 2021, 12:10

le code html généré par ce php est valide ?
https://validator.w3.org/

Re: Sélectionner la bonne catégorie dans un POST

par Noobiephp » 02 oct. 2021, 11:17

J'ai trouvé la solution !!!

Code : Tout sélectionner

<!-- Sélelectionner la catégorie --> <div class="card-header bg-dark text-white mb-4"> <select class="form-select" name="category"> <option selected>Choisissez votre catégorie</option> <option value=" <?php foreach($bdd->query('SELECT * FROM categories ORDER BY id ASC') as $row) { if($row['id'] == $topic_categories) echo '<option selected="selected" value="'. $row['id'] . '">' . $row['nom_categorie'] . '</option>'; else echo '<option value="'. $row['id'] . '">' . $row['nom_categorie'] . '</option>'; } ?>" </option> </select> </div>

Re: Sélectionner la bonne catégorie dans un POST

par or 1 » 01 oct. 2021, 19:47

La liste n'est pas déroulante, ça me crée juste 3 fois la même chose
quel est le code html auquel il faut que l'exécution du php aboutisse ?
en gros, il faut commencer par coder en dur la liste déroulante, et quand cela fonctionnera, le faire en php.

Re: Sélectionner la bonne catégorie dans un POST

par Noobiephp » 01 oct. 2021, 11:53

Ok j'ai finalement réussi à afficher les catégories T_T

J'ai utilisé
$topic_categories = $bdd->query('SELECT id, category_name, category_description FROM categories ORDER BY id DESC LIMIT 0,5');
        <?php while ($category = $topic_categories->fetch()) { ?>
 <!-- Sélelectionner la catégorie -->
            <div class="card-header bg-dark text-white mb-4">
                <select class="form-select" aria-label="Default select example">
                    <option selected>Sélectionnez votre catégorie</option>
                    <option value="?"><?= $category['category_name']; ?></option>
                </select>
            </div>
            <?php } ?>
Problème désormais : je n'arrive pas à afficher les catégories dans un menu déroulé normal...

Je ne trouve également pas comment valider le formulaire et rentrer les topics dans la bonne catégorie. J'ai un message d'erreur qui s'affiche quand je valide le formulaire (j'ai inséré les bonnes variables $topic_catégorie dans mon publishActions.php, enfin je crois...)
<?php
 
require('actions/database.php');
 
$topic_categories = $bdd->query('SELECT id, category_name, category_description FROM categories ORDER BY id DESC LIMIT 0,5');
 
 
//Valider le formulaire
if(isset($_POST['validate'])){
 
 
    //Vérifier si les champs ne sont pas vides
    if(!empty($_POST['title']) AND !empty($_POST['content'])){
         
 
        //Les données du topic
        $topic_category = $topic_categories['id'];
        $topic_title = htmlspecialchars($_POST['title']);
        $topic_content = nl2br(htmlspecialchars($_POST['content']));
        $topic_date = date('d/m/Y H:i:s' );
        $topic_id_author = $_SESSION['id'];
        $topic_pseudo_author = $_SESSION['pseudo'];
        $topic_image_author = $_SESSION['image'];
  
        //Insérer le topic sur topics
        $insertTopicOnWebsite = $bdd->prepare('INSERT INTO topics(catégorie, titre, contenu, id_auteur, pseudo_auteur, image_auteur, date_publication)VALUES(?, ?, ?, ?, ?, ?, ?)');
        $insertTopicOnWebsite->execute(
            array(
                $topic_category,
                $topic_title, 
                $topic_content,
                $topic_id_author,
                $topic_pseudo_author,
                $topic_image_author,
                $topic_date,
            )
        );
         
        $successMsg = "Votre topic a bien été publié sur le site";
         
    }else{
        $errorMsg = "Veuillez compléter tous les champs...";
    }
 
}
La liste n'est pas déroulante, ça me crée juste 3 fois la même chose
<?php
require('actions/users/securityAction.php');
require('actions/topics/publishTopicAction.php');
?>
<!DOCTYPE html>
<html lang="en">
<link rel="stylesheet" href="assets/style.css">
<?php include 'includes/head.php'; ?>
 
<body>
    <?php include 'includes/navbar.php'; ?>
 
    <br><br>
 
    <form class="container" method="POST">
 
        <?php
        if (isset($errorMsg)) {
            echo '<p class="alert alert-danger" role="alert">' . $errorMsg . '</p>';
        } elseif (isset($successMsg)) {
            echo '<p class="alert alert-success" role="alert">' . $successMsg . '</p>';
        }
        ?>
 
        <div class="alert alert-danger" role="alert">
            <div class="card-body">
                <span>Soyez libres de poster tout ce que vous voulez, mais assurez vous de respecter nos conditions.</span>
            </div>
        </div>
 
        <div class="card bg-dark text-white mb-4 mb-4">
        <?php while ($category = $topic_categories->fetch()) { ?>
            <!-- Sélelectionner la catégorie -->
            <div class="card-header bg-dark text-white mb-4">
                <select class="form-select" aria-label="Default select example">
                    <option selected>Sélectionnez votre catégorie</option>
                    <option value="?"><?= $category['category_name']; ?></option>
                </select>
            </div>
            <?php } ?>
            <!-- Choisir un titre -->
            <div class="card-header bg-dark text-white mb-4">
                <input type="text" class="form-control" name="title" placeholder="Titre de votre topic">
            </div>
             
            <!-- Ecrire le contenu -->
            <div class="card">
                <div class="card-body">
                    <textarea type="text" class="form-control" name="content" placeholder="Contenu de votre topic"></textarea>
                </div>
            </div>
             
        </div>
 
        <!-- Valider -->
 
        <button type="submit" class="btn btn-primary" name="validate">Publier</button>
        <a href="index.php" class="btn btn-secondary">Retour</a>
    </form>
 
</body>
 
</html>

Re: Sélectionner la bonne catégorie dans un POST

par Noobiephp » 01 oct. 2021, 11:31

le code html pour afficher la liste déroulante des catégories me semble correct mais le message d'erreur me dit qu'elle ne l'est pas... Les fichiers sont bien inclus, la fonction est définie dans le code PHP mais j'ai toujours le même message d'erreur ...
Warning: Undefined variable $topic_categories in C:\xampp\htdocs\Forum\publish-topic.php on line 38
Avec juste la commande fetch elles devraient toutes être affichées normalement ?

Re: Sélectionner la bonne catégorie dans un POST

par or 1 » 01 oct. 2021, 11:14

il faut faire les choses dans l'ordre.
1. afficher le contenu de la liste déroulante correctement pour permettre à l'utilisateur de faire sa sélection
2. récupérer le contenu de cette liste en php, pas besoin de requête sql select (sauf pour vérifier que l'id passé par le formulaire existe bien)

Re: Sélectionner la bonne catégorie dans un POST

par Noobiephp » 01 oct. 2021, 11:05

J'ai essayé de cette façon et ça ne fonctionne toujours pas je deviens fou ...

Re: Sélectionner la bonne catégorie dans un POST

par Noobiephp » 01 oct. 2021, 10:41

merci je connaissais pas ...

Re: Sélectionner la bonne catégorie dans un POST

par or 1 » 01 oct. 2021, 10:38

Re: Sélectionner la bonne catégorie dans un POST

par Noobiephp » 01 oct. 2021, 10:35

Malheureusement non... En fait le support était minime à la base et j'ai développé le reste du forum moi même en utilisant ce que je connaissais. Là je suis bloqué parce que je n'ai aucun "précédent" qui me permet de voir comment récuperer les données ...

Ma base de données est articulée comme ça :

ANSWERS (id, id_auteur, pseudo_auteur, id_topic, contenu)
CATEGORIES (id, category_name, category_description)
TOPICS (id, titre, contenu, id_auteur, pseudo_auteur, image_auteur, date_publication)
USERS (id, pseudo, email, signature, mdp, image)

l'idée serait d'insérer un topic dans la bonne catégorie ...

J'ai essayé ça mais ça ne fonctionne toujours pas. Je ne suis vraiment pas sûr de ce que je fais et je cherche des réponses par ci par là mais c'est un peu compliqué

Re: Sélectionner la bonne catégorie dans un POST

par or 1 » 01 oct. 2021, 10:26

et le support que vous utilisez pour apprendre n'évoque pas cet aspect ?

Re: Sélectionner la bonne catégorie dans un POST

par Noobiephp » 01 oct. 2021, 10:19

Non ...

Re: Sélectionner la bonne catégorie dans un POST

par or 1 » 01 oct. 2021, 09:32

vous avez auparavant réussi à afficher le contenu d'une requête select ?

Re: Sélectionner la bonne catégorie dans un POST

par Noobiephp » 01 oct. 2021, 09:16

quel est le code html généré par ce code ?
<select class="form-select" aria-label="Default select example">
<option selected>Sélectionnez la catégorie</option>
<option value="1"><?= $topic_category ?></option>
</select>
"Warning : Underfined variable $topic_category in C####### /forum/publish-topic.php on line 38"

j'ai essayé une requête SQL comme ça
$bdd->query('SELECT * FROM categories');
et toujours pareil ...

Re: Sélectionner la bonne catégorie dans un POST

par or 1 » 01 oct. 2021, 09:10

quel est le code html généré par ce code ?
<select class="form-select" aria-label="Default select example">
<option selected>Sélectionnez la catégorie</option>
<option value="1"><?= $topic_category ?></option>
</select>