Bonjour,
Je bloque sur un sujet le "name" identique.

Je m'explique j'ai créé une boucle qui récupére des items avec leur prix de la base de donnée.

Je souhaite pourvoir modifier le prix d'un item, quand j'utilise la requête sa modifie que le dernier item.

Je c'est que sa vient du name car il est identique partout.

Pour résoudre ça j'ai vu qu'il fallait rajouter des crochet "name='monNon[]'".

Mais la je bloque je vois pas comment après je renvoie en base de donner, car il renvoi array vu que [] -> c'est un tableau.

Es ce que je dois utiliser du javascript pour différencier les name ou en PHP c'est possible de le faire ?

Actuellement en PHP, je c'est modifier seulement quand il y a un name unique.

Voici mon code :

Html


<table class="tableau">
    <thead>
        <tr>
            <th colspan="5">
                <input class="form-control" id="search" type="text" placeholder="Tape quelques lettres ou chiffres pour trouver ton bonheur !!!"/>
            </th>
        </tr>
        <tr>
            <th>Numéro</th>
            <th>Non item</th>
            <th>Prix</th>
            <th>Modifier</th>
        </tr>
    </thead>
    <tbody>
        {% for vente in ventes %}
        <tr>
            <td>
                {{ vente.id }}
            </td>{#Name et photo#}
            <td>
                {{ vente.name|raw }}<br>
                <img src="{{ vente.photo }}" height="50px" width="50px">
            </td>{#Name et photo#}
            <td>
                <input type="text" name="prix[]" value="{{ vente.prix }}">
             </td>{#Prix#}
            <td>
              <button type="submit">Modifier</button>
           </td>{#modifier#}
        </tr>
        {% endfor %}
    </tbody>
</table>

Récupération base de donnée

private function creationItem($post){
        $pseudos = $this->db->query("SELECT * FROM guilde")->fetchAll();
        $ventes = $this->db->query("SELECT * FROM item")->fetchAll();
    return['pseudos' => $pseudos, 'ventes' => $ventes];
  }

Modification base de donnée

foreach ($post as $key => $item){
      switch ($key){
        case 'prix':
          if(!isset($post['prix']) and empty($post['prix'])){
            Session::getInstance()->SetFlash('erreur', "Le prix n'a pas été renseigné");
            $erreur =true;
          }
        break;
      }
    }
    if(!$erreur){
      $tableau = array(
        ':prix' => $post['prix']
      );
      $items = $this->db->query('UPDATE item set prix=:prix WHERE id=:id ', $tableau );
      if ($items) {
        Session::getInstance()->setFlash('success', 'La modification a bien été effectuée');
      }
      else {
        Session::getInstance()->setFlash('erreur', 'La modification à échoué');
      }
    }

Merci pour votre aide

5 réponses


SeigneurPixel
Réponse acceptée

Bonjour,
si tu utilises un champ avec un "name" ressemblant à ça

<input type='text' name='monNom[]' >

comme tu le dis tu auras un tableau ressemblant à cela

$post=[
  'monNom'=>[
    1=>Value,
    2=>Value,
    3=>Value
  ]
]

tu peux parcourir ton tableau comme cela

foreach($post['monNom'] as $key => $value){
  //instructionsBonjour,
}

tu pourra donc travailler sur chacune de tes valeurs indépendamment.

Cependant dans ton cas je pense que tu cherche a modifier le prix de chaque item.
Pour se faire soit tu ajoutes un champ caché avec l'id correspondant a l'item
ton code donnerais ceci

Méthode 1 :

<input type='hidden' name='id' value='{{ vente.id }}' >
<input type='text' name='prix' value='{{ vente.prix }}' >

Tu obtiens donc un tableau comme ceci

$post=[
    "id"=>1,
    "prix"=>15.5
]

soit tu peux concervé le principe que tu as utilisé et modifier ton champ comme ceci

Méthode 2 :

<input type='text' name='prix[{{ vente.id }}]' value='{{ vente.prix }}' >

Tu obtiendras donc un tableau comme ceci

$post=[
    "prix"=>[
        1=>15.5
        2=>20.5
        3=>5.5
     ]
]

La première méthode rajoute une ligne en html mais t'évite d'avoir a faire une boucle en php

Salut SirPixel
Dans un premier temps, il te faudra prendre un correcteur pour corriger quelques phrases :
Le prix n'a pas était renseigner => Le prix n'a pas été renseigné
La modification a bien était effectuée => La modification a bien été effectuée
La modification à échoué => La modification a échouée

Dans les posts du forum, cela n'a pas beaucoup d'importance d'avoir des fautes d'orthographe ou de grammaire.
Par contre dans une application, cela devient hyper important si tu veux que cela soit apprécié... par l'utilisateur.

Revenons sur le code :
Dans une boucle foreach, tu parcours la table $post pour la transformer dans une série de clés / valeurs.
Dans chaque boucle, tu travailles avec ces clés / valeurs

foreach ($post as $key => $item){
switch ($key){
case 'prix':
if(!isset($post['prix']) and empty($post['prix'])){
Session::getInstance()->SetFlash('erreur', "Le prix n'a pas était renseigner");
$erreur =true;
}
break;
}

Après tu utilises l'instruction 'case', en d'autres termes, tu dis pour la valeur $key égale à 'prix' voilà ce que je fais...
Donc isset($post['prix'] ne te sert à rien... puisque c'est la valeur 'prix'.

Je te laisse réfléchir pour améliorer ton code et trouver tes erreurs ;)

SirPixel
Auteur

Désoler je suis pas encour de français, et je veux bient te tester en Math pour voir on va rigoler.
Cependant, MA question était comment modifier une ligne de ma base de donner.
Oui j'ai tester l'input hidden mais sa me retourne toujour le dernier ID, de ma base de donnee
Mais merci quand meme pour ta réponse.

Bonjour.
Pour commencer le genre de phrase :

Désoler je suis pas encour de français, et je veux bient te tester en Math pour voir on va rigoler.

Tu devrais les éviter, car en disant ceci tu insinues qu'une personne qui est bonne en français est forcément mauvaise en mathématiques, et vice-versa, ce qui est totalement faux.
Si tu ne veux pas tenir compte d'un conseil qui t'es donné, libre à toi, mais il est inutile de faire des remarques de ce genre.
Ensuite, pour ce qui est de ton problème, tu n'as fais de retour que pour ce qui concerne la première méthode qui t'a été proposée par SeigneurPixel, mais aucun retour pour la seconde méthode qui devrait pourtant t'apporter la solution à ton problème.
Pour terminer, je trouve assez étrange que vos deux pseudonymes soient aussi proches textuellement parlant, sans oublier que les avatars sont exactement les mêmes et que les pseudonymes aient comme seule différence leur préfixe.

SirPixel
Auteur

Oui désolé il s'agit de mon frère qui ma réexpliqué sur discord.
Désolé. Le prolème est résolue.