Probleme selecteur php

Bonjour, 

Je n'arrive pas a récupérer l'identifiant de mon selecteur 
En faite je lie la table incomes avec la table incomes_categories

<?php

require_once('./inc/header.php');
require_once ('./functions.php');

$db = db_connect();

session_start();

/* Vérifie et récupère les données de la table revenu de l'utilisateur pour le mettre à jour */
if (isset($_POST['inc_id']) & isset($_POST['inc_amount']) & isset($_POST['inc_receipt_date']) & isset($_POST['inc_cat_id']) & isset($_POST['user_id'])){
    
    try {

        $inc_id = $_POST['inc_id'];
        $inc_amount = $_POST['inc_amount'];
        $inc_receipt_date = $_POST['inc_receipt_date'];
        $inc_cat_id = $_POST['inc_cat_id'];
        $user_id = $_POST['user_id'];
        
        $sth = $db->prepare("UPDATE `incomes` SET `inc_amount`=:inc_amount, `inc_receipt_date`=:inc_receipt_date, `inc_cat_id`=:inc_cat_id, `user_id`=:user WHERE `inc_id`=:inc_id");
        
        $sth->bindParam(':inc_id', $inc_id);
        $sth->bindParam(':inc_amount', $inc_amount);
        $sth->bindParam(':inc_receipt_date', $inc_receipt_date);
        $sth->bindParam(':inc_cat_id', $inc_cat_id);
        $sth->bindParam(':user', $user_id);
        
        $sth->execute();
       
        header('location: users.php');
    }
    
    catch (PDOException $e){
    
        print "Erreur !: " . $e->getMessage() . "<br/>";
    }
} else {

    echo "";
}

$users = get_incomes_categories ();

?>
/* Categorie de revenu d'un utilisateur : requête paramétrée et utilisation de la méthode prépare avec des paramètres nommés */
function get_incomes_categories() {

    $db = db_connect();

    $sql = <<<EOD
    SELECT 
        `inc_cat_name`
    FROM
        `incomes_categories`
    LIMIT 10
    EOD;

    $incomeCategoriesStmt = $db->query($sql);

    $incomeCategories = $incomeCategoriesStmt->fetchAll(PDO::FETCH_ASSOC);
    
    return $incomeCategories;
}
            <div class="form-group" >
                <label class="control-label col-sm-3" for="inc_cat_id"><a>inc_cat_id</a></label>
                <div class="col-sm-8 col-xs-12">
                    <select name="inc_cat_id" required="true" class="form-control">
                        <option value="inc_cat_id">Changer la catégorie du revenu</option>
                        
                        <?php foreach ($users as $user) : ?>

                        <option>
                            <?php echo $user['inc_cat_name']; ?>
                        </option>

                        <?php endforeach; ?>
                    </select>
                    <!-- <input type="number" placeholder="Changer la catégorie du revenu" name="inc_cat_id" required="true" class="form-control"></input></br> -->
                </div>
            </div> 

il me renvoit cette erreur 

5 réponses

  1. Contributeur

    bonjour,

    je suppose que l'erreur se produit à a ligne 21 de ton code.

    comprends-tu le message d'erreur?

    0
    1. Il me dit qu'il ne comprend la valeur sélectionnée alors qu'il attend un int en valeur comme retour 

      0
    2. Contributeur
      @Lwdu76

      C'est une colonne définie comme entier, et tu essaies d'y faire entrer "produit financier".
      As-tu visualisé le contenu de $_POST?

      0
    3. @yg_be

      Dans ma méthode post je dit qu'il doit mettre à jour ma table incomes 

      0
    4. Contributeur
      @Lwdu76

      C'est une colonne définie comme entier, et tu essaies d'y faire entrer "produit financier".

      Ma question était à propos de la variable, pas de la méthode.

      0
    5. @yg_be

      Je n´y fais pas référence dans mes  $_POST 

      Je ne fais pas de $_POST ['inc_cat_name'] du coup il faut que j´en fasse un ? 

      0
  2. Contributeur

    J'ai l'impression que tu mélanges la communication avec le client (post) et le contenu de ta base de données.

    As-tu écrit tout cela?  Cela fonctionnait-il avant?  Dans quel contexte fais-tu ce travail?  Es-tu formé pour ce travail?

    0
    1. Je suis étudiant c´est un td pour utiliser du pdo et je bloque sur le fait que je voudrais récupérer le nom de la catégorie dans mon selecteur et qu'il envoi l´id de celui ci et je ne vois pas trop comment faire

      Je sais ce que fais la méthode post elle envoi les informations

      Pour récupérer les données de ma table incomes_catégories j´ai créé une variable users qui appel une fonction get_incomes catégories

      Est-ce que le problème viens de ma fonction get_incomes_categories ou je dois faire une jointure sur inc_cat_id ? 

      J´ai écrit une fonction pour chaque table qui affiche leurs informations comme celle de incomes_categories mais avec des jointures sur le user_id

      0
      1. Modérateur

        Bonjour,

        Ton souci vient de ta liste déroulante.

        Tu n'y a mis que le "nom" de la catégorie .. mais pas l'id correspondant..

        Il faut donc modifier ta liste comme ceci:

        <select name="inc_cat_id" required="true" class="form-control">
            <option value="inc_cat_id">Changer la catégorie du revenu</option>    
            <?php foreach ($users as $user) : ?>
            <option value="<?php echo $user['inc_cat_id']; ?>" ><?php echo $user['inc_cat_name']; ?> </option>
            <?php endforeach; ?>
        </select>

        0
        1. merci on peut faire comme ci dans un value parce que j'avais fait un value="inc_cat_id" mais ça n'avais pas marché 

          0
        2. Modérateur
          @lwdu76

          comme ça

          <option value="<?php echo $user['inc_cat_id']; ?>" >
          0
        3. @jordane45

          il me renvoit ceci

          0
        4. Modérateur
          @lwdu76

          Faudrait peut-être ( c'est même sûr.....) que ta requête SQL retourne toutes les données necessaires !

          Pour l'instant tu n'as que :

              SELECT 
                  `inc_cat_name`
              FROM
                  `incomes_categories`
              LIMIT 10
          

          faut donc y ajouter aussi l' ID de la catégorie

          0
      2. merci je n'avais pas vu que l'avais pas marqué 

        0