boucle sql

Afrodite
Invité n'ayant pas de compte PHPfrance

30 août 2010, 14:28

Bonjour,

Je bute sur la récupération d'une variable sql sous forme de tableau dans un formulaire.
J'ai une table "vidéo" avec un champ "id_mot" qui contient le champ "nom_mot" ou "alias" de la table "motscle".
Je cherche donc à mettre à jour le champ "id_mot" (vidéo) qui contient plusieurs mots (ex: pau, sport).
Note : il y à peut être plus simple pour récupérer les données sous formes de colonnes par "type, mais je n'ai pa su trouver.
<table border="0" cellspacing="0" cellpadding="5">
  <tr valign="top">
 <td>  <?php 
 
 
 $sql = "SELECT * FROM motscle WHERE etat='on' AND type='Rubrique'";
$result = mysql_query($sql) or die ('Erreur : '.mysql_error() );

$total = mysql_num_rows($result); 
if($total) { ?>
<table border="0" cellspacing="0" cellpadding="5">
  <tr>
    <td><h2>Rubrique</h2></td>
    </tr>
    <?php
	   while($row = mysql_fetch_array($result)) {
	  ?>
    <tr>
    <td>
<input name="id_mot" type="checkbox" value="id_mot" />
      <?php echo $row[alias]; ?>
      <?php  }} ?>
</td></tr></table></td>
   <td> <?php $sql = "SELECT * FROM motscle WHERE etat='on' AND type='Partenaire'";
$result = mysql_query($sql) or die ('Erreur : '.mysql_error() );
$total = mysql_num_rows($result); 
if($total) { ?>
<table border="0" cellspacing="0" cellpadding="5">
  <tr>
    <td><h2>Partenaire</h2></td>
    <?php
	   while($row = mysql_fetch_array($result)) {
	  ?>
       <tr>
   <td> <input name="id_mot" type="checkbox" value="nom_mot[]" />
      <?php echo $row[alias]; ?>
      <?php  }} ?>
</td></tr></table></td>
   <td> <?php $sql = "SELECT * FROM motscle WHERE etat='on' AND type='Thématique'";
$result = mysql_query($sql) or die ('Erreur : '.mysql_error() );
$total = mysql_num_rows($result); 
if($total) { ?>
<table border="0" cellspacing="0" cellpadding="5">
  <tr>
    <td><h2>Thématique</h2></td>
    <?php
	   while($row = mysql_fetch_array($result)) {
	  ?>
      <tr>
     <td> <input name="id_mot" type="checkbox" value="nom_mot[]" />
      <?php echo $row[alias]; ?>
      <?php  }} ?>
</td></tr></table></td>
   <td> 
   <?php $sql = "SELECT * FROM motscle WHERE etat='on' AND type='Ville'";
$result = mysql_query($sql) or die ('Erreur : '.mysql_error() );
$total = mysql_num_rows($result); 
if($total) { ?>
<table border="0" cellspacing="0" cellpadding="5">
  <tr>
    <td><h2>Ville</h2></td>
    <?php
	   while($row = mysql_fetch_array($result)) {
	  ?>
   <tr valign="top">
 <td> <input name="id_mot" type="checkbox" value="nom_mot[]" />
      <?php echo $row[alias]; ?>
      <?php  }} ?>
</td></tr></table></td>
   <td> 
    <?php $sql = "SELECT * FROM motscle WHERE etat='on' AND type='Type'";
$result = mysql_query($sql) or die ('Erreur : '.mysql_error() );

$total = mysql_num_rows($result); 
if($total) { ?>
<table border="0" cellspacing="0" cellpadding="5">
  <tr>
    <td><h2>Type</h2></td>
 
  <?php
	   while($row = mysql_fetch_array($result)) {
	  ?>
    <tr valign="top">
   <td> <input name="id_mot" type="checkbox" value="nom_mot[]" />
      <?php echo $row[alias]; ?>
      <?php  }} ?>
</td></tr></table></td></tr></table>
.

Le formulaire est traité comme suit :
// vérifions que la variable a été transmise
$id_mot = (isset($_POST['id_mot']))?$_POST['id_mot']:null;

//$id_mot = array();
//while($tab[] = mysql_fetch_array($req)){} 
//echo implode(",",$id_mot);

//echo "Voici les motd cle que vous avez choisi :<br>";
// bouclons sur le tableau qui a été transmis et affichons les valeurs sélectionnées
if (!empty($id_mot)) {
	
	echo array_values($id_mot) ;
echo  $id_mot ;
	
	foreach($id_mot as $cle => $val){ 
	echo $cle;
	echo count ($id_mot);
$n = count($id_mot)-1;
if($cle == $n){
			
 $listenom .= $val;
}else {
$listenom .= $val.",";
}
}
}
ce qui me génère un beau
Warning: array_values() [function.array-values]: The argument should be an array in /homez/update-video.php on line 64
id_mot
Warning: Invalid argument supplied for foreach() in /homez/update-video.php on line 67
toute aide est bienvenue pour résoudre ce soucis, merci

Mammouth du PHP | 1967 Messages

30 août 2010, 14:37

la variable $id_mots n'est pas un tableau, et php te dit que la fonction array_values et foreach ont besoin d'un tableau
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 16 Messages

30 août 2010, 14:40

coucou,
merci de ta réponse,
Je me doutais bien qu'il y avait un truc du genre, vu le message d'erreur, mais même en syntaxant

Code : Tout sélectionner

value="id_mot5[]"
je n'ai pas plus de succés. :cry:

Mammouth du PHP | 672 Messages

30 août 2010, 14:42

Bonjour.

Si je suis bien, le message apparaît dans la deuxième page.
A priori, vue le message d'erreur, l'argument $id_mot n'est pas un array #-o

On va donc essayer de trouver à quel endroit se trouve le problème en remontant.
Première étape :
// vérifions que la variable a été transmise
$id_mot = (isset($_POST['id_mot']))?$_POST['id_mot']:null;

// bouclons sur le tableau qui a été transmis et affichons les valeurs sélectionnées
if (!empty($id_mot)) {
// Affichage du contenu de $id_mot. Les balises <pre> servent à la mise en forme.
echo "<pre>";
print_r ( $id_mot);
echo "</pre>";       
/* ... */
}
A vue de nez, le print_r ne devrait pas te donner un tableau.

=> On remonte.
Vu qu'on assigne le contenu de $_POST['id_mot'] à $id_mot, on va faire un print_r ($_POST);

Si le contenu de $_POST ne correspond pas à ce qu'on attend, il faut aller voir dans le formulaire...

Eléphanteau du PHP | 16 Messages

30 août 2010, 14:45

coucou macgawel,
le print me renvoie
id_mot[]

Eléphanteau du PHP | 16 Messages

30 août 2010, 16:05

résolu grâce au formulaire

Code : Tout sélectionner

<table border="0" cellspacing="0" cellpadding="5"> <tr valign="top"> <td> <?php $sql = "SELECT * FROM motscle WHERE etat='on' AND type='Rubrique'"; $result = mysql_query($sql) or die ('Erreur : '.mysql_error() ); //$total = mysql_num_rows($result); //if($total) { ?> <table border="0" cellspacing="0" cellpadding="5"> <tr> <td><h2>Rubriques</h2></td> </tr> <?php while($val = mysql_fetch_array($result)) { ?> <tr> <?php echo "<td align=\"left\"><input type='checkbox' nom_mot='nom_mot[]' name='nom_mot[]' value='".$val['nom_mot']."'>".$val['alias']." </td>"; } ?> <!--<td> <input name="nom_mot" type="checkbox" value="<?php echo $val[nom_mot]; ?>" /> <?php echo $val[alias]; ?> <?php //} ?> </td>--></tr></table></td> <td> <?php $sql = "SELECT * FROM motscle WHERE etat='on' AND type='Partenaire'"; $result = mysql_query($sql) or die ('Erreur : '.mysql_error() ); //$total = mysql_num_rows($result); //if($total) { ?> <table border="0" cellspacing="0" cellpadding="5"> <tr> <td><h2>Partenaires</h2></td> </tr> <?php while($val = mysql_fetch_array($result)) { ?> <tr> <?php echo "<td align=\"left\"><input type='checkbox' nom_mot='nom_mot[]' name='nom_mot[]' value='".$val['nom_mot']."'>".$val['alias']." </td>"; } ?> <!--<td> <input name="nom_mot" type="checkbox" value="<?php echo $val[nom_mot]; ?>" /> <?php echo $val[alias]; ?> <?php //} ?> </td>--></tr></table></td> <strong><td> <?php $sql = "SELECT * FROM motscle WHERE etat='on' AND type='thematique'"; $result = mysql_query($sql) or die ('Erreur : '.mysql_error() ); //$total = mysql_num_rows($result); //if($total) { ?> <table border="0" cellspacing="0" cellpadding="5"> <tr> <td><h2><strong>Th&eacute;matiques</strong></h2></td> </tr> <?php while($val = mysql_fetch_array($result)) { ?> <tr> <?php echo "<td align=\"left\"><input type='checkbox' nom_mot='nom_mot[]' name='nom_mot[]' value='".$val['nom_mot']."'>".$val['alias']." </td>"; } ?> <!--<td> <input name="nom_mot" type="checkbox" value="<?php echo $val[nom_mot]; ?>" /> <?php echo $val[alias]; ?> <?php //} ?> </td>--></tr></table></td></strong> <td> <?php $sql = "SELECT * FROM motscle WHERE etat='on' AND type='ville'"; $result = mysql_query($sql) or die ('Erreur : '.mysql_error() ); //$total = mysql_num_rows($result); //if($total) { ?> <table border="0" cellspacing="0" cellpadding="5"> <tr> <td><h2>Villes</h2></td> </tr> <?php while($val = mysql_fetch_array($result)) { ?> <tr> <?php echo "<td align=\"left\"><input type='checkbox' nom_mot='nom_mot[]' name='nom_mot[]' value='".$val['nom_mot']."'>".$val['alias']." </td>"; } ?> <!--<td> <input name="nom_mot" type="checkbox" value="<?php echo $val[nom_mot]; ?>" /> <?php echo $val[alias]; ?> <?php //} ?> </td>--></tr></table></td> <td> <?php $sql = "SELECT * FROM motscle, video WHERE etat='on' AND type='type'"; $result = mysql_query($sql) or die ('Erreur : '.mysql_error() ); //$total = mysql_num_rows($result); //if($total) { ?> <table border="0" cellspacing="0" cellpadding="5"> <tr> <td><h2>Types</h2></td> </tr> <?php while($val = mysql_fetch_array($result)) { ?> <tr> <?php echo "<td align=\"left\"><input type='checkbox' nom_mot='nom_mot[]' name='nom_mot[]' value='".$val['nom_mot']."'>".$val['alias']." </td>"; } ?> <!--<td> <input name="nom_mot" type="checkbox" value="<?php echo $val[nom_mot]; ?>" /> <?php echo $val[alias]; ?> <?php //} ?> </td>--></tr></table></td></tr></table>
traité par

Code : Tout sélectionner

// vérifions que la variable a été transmise $id_mot = (isset($_POST['nom_mot']))?$_POST['nom_mot']:null; //echo "Voici les motd cle que vous avez choisi :<br>"; // bouclons sur le tableau qui a été transmis et affichons les valeurs sélectionnées //if (!empty($nom_mot)) { // echo array_values($nom_mot) ; //echo $nom_mot ; foreach($nom_mot as $cle => $val){ //echo $cle; //echo count ($nom_mot); $n = count($nom_mot)-1; if($cle == $n){ $listenom .= $val; }else { $listenom .= $val.","; } }
:D