[résolu] Problème avec UPDATE et un tableau

WRInaute passionné
Bonjour,

J'ai un formulaire avec une liste de textarea correspondant à des articles.

Je fais des modifs dans chaque textarea, je clique sur valider et ça doit updater chaque article.

Mais ça fonctionne pas.

Je vous donne le code, si vous voulez bien jeter un coup d'oeil :

FORMULAIRE :
Code:
<input type="hidden" name="idArticle[]" value="'.$idArticle.'">
<textarea cols="50" rows="20" name="contenu[]">'.stripslashes($article).'</textarea><p>

REQUETE UPDATE :
Code:
<?php
//si il y a la variable "envoyer"
if(isset($_POST['valider1']))
{
//-------- on filtre les champs ---------------
$idArticle= array_map( 'intval', $_POST['idArticle'] );
$contenu = array_map( 'mysql_real_escape_string', $_POST['contenu'] );

$select="SELECT id FROM definitions WHERE id IN (".implode(',', $idArticle).") ";
$resultat = mysql_query("$select");
while 
($R = mysql_fetch_array($resultat)) 
{
$updater="UPDATE  `articles` SET article='".$contenu."' WHERE id ='".$idArticle."'"; 
mysql_query("$updater"); 
;}
mysql_free_result($resultat);

}//ferme isset['envoyer']
?>
 
WRInaute occasionnel
pourquoi tu fais pas plutôt un balayage du tableau $contenu après avoir affecté dans la première page l'id de l'article dans le nom du textarea

Code:
name="contenu['.$id_article.']"

après

Code:
while (list($id_article,$article)=each($_POST['contenu'])
{

$updater="UPDATE  `articles` SET article='".$article."' WHERE id ='".$idArticle."'";
 
WRInaute passionné
Salut erestrebian,

Je comprend pas ta méthode à vrai dire.

Tu veux que j'attribue une valeur à name en plus de celle du value ?

Comme la requête fait-elle la différence ensuite ?

Parce que dans ton exemple tu marques $idArticle et $article mais en pratique, j'aurais deux fois $article.
 
WRInaute occasionnel
En fait, tu envoies un tableau d'articles ($contenu) dans les deux cas sauf que dans mon cas, tu l'envoies avec en clef l'identifiant de l'article et en valeur le contenu de l'article. Du coup, plus besoin de l'hidden et tu n'as qu'à parcourir le tableau que tu as envoyé afin d'en récupérer les clefs et les valeurs.

(cela dit, je n'ai peut-être pas cerné correctement la problématique. tu veux faire un formulaire qui te permettrait de corriger plusieurs articles puis les envoyer à une base de données une fois qu'ils sont corrigés?)
 
WRInaute passionné
(cela dit, je n'ai peut-être pas cerné correctement la problématique. tu veux faire un formulaire qui te permettrait de corriger plusieurs articles puis les envoyer à une base de données une fois qu'ils sont corrigés?)

Oui
En fait je fais des modifications dans plusieurs articles à la foi. Je les affiche tous dans un textarea différent.

Ce que je pige pas c'est ça :

Code:
while (list($id_article,$article)=each($_POST['contenu'])

Comment diable ce $id_article peut-il subitement apparaître, de même que ce $article, puisqu'à la base, mon textarea se nomme contenu[] ?? Et quels valeurs contiennent ces variables ? Comment leurs sont-elles attribuées ?
 
WRInaute occasionnel
La fonction each retourne une paire clé valeur du tableau... Puis mets le pointeur du tableau sur l'élément suviant.

La fonction list récupère les données renvoyées et leur attribue des noms de variables.

Donc la ligne que tu ne comprends pas pourrait se traduire en français comme un ordre au serveur : "Pour chaque enregistrement du tableau, fourni moi la clef qui s'appellera $id_article puis la valeur correspondante qui s'appellera $article. Une fois que tu as effectué cela passe à la ligne suivante du tableau. Si l'affectation fonctionne, exécute la commande comprise dans le while... S'il n'y a plus rien à affecter alors sors de la boucle."

Il faut bien comprendre que $id_article et $article sont affectés durant le while et qu'ils changent à chaque passage.
 
WRInaute passionné
Super, ça fonctionne impeccable :)

Je ne connaissais pas ces fonctions, en plus j'avais pas les idées clairs

Une reco pour chacune de tes réponses, ça vaut bien ça :)

**edit**
Ah bah je peux recommander qu'une seule fois, tant pis.


Merci encore.
 
WRInaute occasionnel
De rien, j'aurai aimé trouvé un sujet comme ça quand je me suis pris la tête avec un passage de variables...

Tu peux sans doute rajouté résolu devant le nom de ton sujet, ça permettra au personnes qui se posent la même question sur un moteur de recherche d'arriver directement ici... (et à ceux qui souhaitent répondre de passer à autre chose)
 
Discussions similaires
Haut