Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/08/2007, 21h18   #1
Inscrit
 
Inscription : juin 2006
Messages : 531
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 531
Points : 225
Points : 225
Par défaut [SQL] Requête UPDATE et tableau

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 :
1
2
3
 
<input type="hidden" name="idArticle[]" value="'.$idArticle.'">
<textarea cols="50" rows="20" name="contenu[]">'.stripslashes($article).'</textarea><p>
REQUETE UPDATE :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
<?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']
?>
Merci d'avance :-)
JackBeauregard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2007, 21h34   #2
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
affiche ta requête pour vérifier qu'elle est correcte
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2007, 22h12   #3
Inscrit
 
Inscription : juin 2006
Messages : 531
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 531
Points : 225
Points : 225
Salut Mathieu,

J'ai donc ajouté cette ligne :

Code :
 mysql_query($updater) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
Ca n'affiche rien, pas de message d'erreur ni rien.

A mon avis, le problème provient du tableau avec le contenu des articles dans la deuxième requête. Je n'indique pas "contenu[]" mais "contenu" et ça rate.
Mais c'est pas juste comme ça, ce serait trop beau.
JackBeauregard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2007, 22h27   #4
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
dans le même formulaire tu as plusieurs zone correspondant chacune à un autre article ?

si c'est ça, construit ton formulaire comme ça :
Code :
1
2
3
4
5
foreach / while () {
    ?>
        <textarea cols="50" rows="20" name="contenuArticle[<?php echo htmlspecialchars($idArticle);?>]"><?php echo htmlspecialchars($contenuArticle);?></textarea>
    <?php
}
et ensuite pour le traitement du formulaire regarde ce qui se trouve dans la variable $_POST['contenuArticle']
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2007, 22h41   #5
Inscrit
 
Inscription : juin 2006
Messages : 531
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 531
Points : 225
Points : 225
Hum, alors j'ai changé cette ligne :
Code :
1
2
3
4
 
 
//suppression de l'input hidden, on passe l'id de l'article dans l'attribut name
<textarea cols="50" rows="20" name="contenu['.$idArticle.']">'.stripslashes($def).'</textarea><p>
Le code censé s'exécuter après validation du formulaire :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
//si il y a la variable "envoyer"
if(isset($_POST['valider']))
{

$contenu = array_map( 'mysql_real_escape_string', $_POST['contenu'] );
//on va chercher les id des hidden ( sans doute inutile vu qu'on les a, mais c'est pour le while et je n'ai pas envie de réétudier el script)
$select="SELECT id FROM articles WHERE id IN (".implode(',', $contenu).") ";
$resultat = mysql_query("$select");
while 
line 11 ($R = mysql_fetch_array($resultat)) 
{
$updater="UPDATE  `articles ` SET article='".$contenu."' WHERE id ='".$contenu."'"; 
 mysql_query($updater) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
;}
line 16  mysql_free_result($resultat);

}//ferme isset['envoyer']

?>



Et j'obtiens ça :

Code :
1
2
3
4
5
Warning: array_map() [function.array-map]: Argument #2 should be an array in /home/site/www/admin/menu-lien-interne-ancien.php on line 6
 
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/site/www/admin/menu-lien-interne-ancien.php on line 12
 
Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /home/site/www/admin/menu-lien-interne-ancien.php on line 17
JackBeauregard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2007, 23h46   #6
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
regarde ce que tu récupère dans $_POST['contenuArticle']

ton traitement doit ressembler à ça :
Code :
1
2
3
4
5
6
7
foreach ($_POST['contenuArticle'] as $idArticle => $contenuArticle) {
    $idArticleSQL = mysql_real_escape_string($idArticle);
    $contenuArticleSQL = mysql_real_escape_string($contenuArticle);
 
    $requete = "UPDATE `articles` SET article = '$contenuArticleSQL' WHERE id = '$idArticleSQL'";
    // ...
}
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2007, 11h38   #7
Inscrit
 
Inscription : juin 2006
Messages : 531
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 531
Points : 225
Points : 225
Je ne comprend pas cette méthode.

Parce que là j'obtiens un textarea comme ceci :

Code :
<textarea name="contenu[1]" > le texte de l'article </textarea>
Bon ici, j'ai donc dans l'attribut name l'id de l'article et dans le champ lui même j'ai son contenu.

Mais finalement, le contenu est nommé par contenu[1].

Donc maintenant je reprend ton code :
Code :
1
2
3
4
5
6
7
foreach ($_POST['contenuArticle'] as $idArticle => $contenuArticle) {
    $idArticleSQL = mysql_real_escape_string($idArticle);
    $contenuArticleSQL = mysql_real_escape_string($contenuArticle);
 
    $requete = "UPDATE `articles` SET article = '$contenuArticleSQL' WHERE id = '$idArticleSQL'";
    // ...
}
Et là, je ne vois pas comment d'un coup tu te retrouves avec une variable $_POST['contenuArticle], une variable $idArticle et encore une variable contenuArticleSQl alors qu'au début il n'y qu'un seul attribut name...
JackBeauregard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2007, 10h54   #8
Inscrit
 
Inscription : juin 2006
Messages : 531
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 531
Points : 225
Points : 225
J'ai réussi comme ça, je le dis pour la science :

Code :
1
2
3
4
5
6
7
8
9
10
11
 
 
name="contenu['.$id_article.']"
 
après
 
Code:
while (list($id_article,$article)=each($_POST['contenu'])
{
 
$updater="UPDATE  `articles` SET article='".$article."' WHERE id ='".$idArticle."'";

Enfin pour être honnête, on m'a donné la soluce

Merci Matthieu d'avoir fait avancer le schmilblick :-)
JackBeauregard est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h03.


 
 
 
 
Partenaires

Hébergement Web