8722 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Je suis actuellement en train de développer un back office avec codeigniter, dans lequel je dois modifier des éléments, par exemple une actualité avec son titre et son contenu, pour afficher mes actualités de la base de données je fais une requête dans mon model et j'affiche le résultat dans ma vue avec foreach vu que le résultat de la requete retourne un tableau avec la fonction result_array(), tout s'affiche correctement mais quand je veux modifier une actu gràce à un bouton , à chaque fois je récupère le dernier id du foreach , ce qui est normal mais comment je fais pour récupérer n'importe quel id du foreach ?

j'espère avoir était clair dans la description de mon problème ^^

voici le code de mon model et de ma vue

Le model :
public function AfficherActu() {
 
        $query = $this->db->get('actualite');
 
        $resultat = $query->result_array();
 
 
        if (empty($resultat)) {
            return false;
        } else {
            return $resultat;
        }
    }


La vue :
echo validation_errors();
            echo form_open('administration/modifier_actualite');
             
             
            foreach ($allActualite as $key => $value) {
                 
                echo $value['titre_actu'].'<br>';
                echo $value['texte_actu'].'<br>';;
                echo $value['id'].'<br>';    
                echo '<input type="hidden" value="'.$value['id'].'" name="id" ><br>';
                echo '<input type="submit" value="Modifier" name="modifier">';
                echo '<input type="submit" value="Supprimer" name="supprimer"><br>';
            }
Tu t'emmèles les pinceaux dû à un problème de type d'input!

Ton formulaire est un formulaire unique. Cependant, à chaque itération de la boucle foreach(), tu rajoutes un input type="hidden" avec le même nom que les autres: "id". C'est ça, ton problème. Ton navigateur prend le dernier et n'envoie que celui-là.

La solution? Quelque chose comme ceci à la place des 3 inputs:


                echo '<input type="submit" value="'.((int)$value["id"]).'" name="modifier">';
                echo '<input type="submit" value="'.((int)$value["id"]).'" name="supprimer"><br>';


Quand un utilisateur cliquera sur un des deux boutons, tu récupèreras l'id dans $_POST["modifier"] ou $_POST["supprimer"], suivant ce qu'il a cliqué.
Merci de ta réponse complète mais peux-tu juste m'expliquer ce que fait concrètement ((int)$value["id"]) ?

merci Smiley cligne
Je viens de tester mais ça ne marche pas, ma fonction qui contient ma requête pour récupérer l'actualité ne marche plus en effet celle-ci me renvoi faux. l'id ne passe plus apparament Smiley ohwell
Modérateur
La solution la plus simple est de faire un formulaire par ligne.

anima a écrit :

La solution? Quelque chose comme ceci à la place des 3 inputs:


                echo '&lt;input type=&quot;submit&quot; value=&quot;'.((int)$value[&quot;id&quot;]).'&quot; name=&quot;modifier&quot;&gt;';
                echo '&lt;input type=&quot;submit&quot; value=&quot;'.((int)$value[&quot;id&quot;]).'&quot; name=&quot;supprimer&quot;&gt;&lt;br&gt;';


Non pas vraiment, le value d'un input sera aussi utilisé comme texte du boutton, ce n'est pas terrible. Pour info (int)$value['id'] va caster $value['id'] sur un entier (le convertir en un entier), ce qui n'est pas très utile pour le concaténer dans une chaîne.

on peut plutôt faire

  <input type="submit" value="Modifier" name="edit[<?php print $value['id']; ?>]">
  <input type="submit" value="Supprimer" name="delete[<?php print $value['id']; ?>]">

en suite côté serveur on teste si $_POST['delete'] ou $_POST['edit'] sont définis, si un des deux l'est on récupèrera l'id qui sera la première clé.
Alors j'ai mis ça :
echo '<input type="submit" value="Modifier" name="edit[<?php print '.$value['id'].'; ?>]">';
				echo '<input type="submit" value="Supprimer" name="delete[<?php print '.$value['id'].'; ?>]">';


Quand je clique sur modifier j'ai ce message que j'ai jamais eu : Disallowed Key Characters.
Modérateur
Euh ouais alors dans ce sens ce sera plutôt:


echo '<input type="submit" value="Modifier" name="edit['.$value['id'].']">';
echo '<input type="submit" value="Supprimer" name="delete['.$value['id'].']">';
Cela ne marche toujours pas, ca me dit qu'il peut pas convertir un array en string Smiley ohwell

et
Unknown column 'Array' in 'where clause'

SELECT * FROM (`actualite`) WHERE `id` = Array

normal il ne prent plus l'id correctement Smiley ohwell
Modérateur
Normal, oui, <input type="submit" value="Modifier" name="edit[234]> donnera à la soumission:


$_POST [ edit ] => array(
  [234] => Modifier
)


il faut donc récupérer la première clé du tableau =>


if (isset($_POST['edit'])) {
  $id = key($_POST['edit']);
}

Modifié par kustolovic (19 Dec 2013 - 21:04)