Page 1 sur 1

Foreach () avec plusieurs Like

Posté : 24 avr. 2009, 00:32
par muriel
Bonjour à tous,

Il y a quelques jours vous m'avez aidé pour crée mon code et je vous remercie une nouvelle fois mais je bloque sur une nouveau probleme dans ce meme code je desirai ajouter 3 differents LIKE '%hp' AND '%canon' AND '%brother' mais evidement cela ne marche absolument pas j'ai une erreur sur le foreach() et en allant lire des explications je comprends pourquoi cela ne marche pas mais je ne trouve pas la solution et c'est la raison pour laquelle je fais une nouvelle fois appel à vous, voici le code complet qui lui marche:
$result_query = mysql_query("SELECT * FROM tarif WHERE constructeur LIKE '%hp%'");
?> 
<table> 
<?php 
$col = 0 ; 
$row = 0; 

while($result = mysql_fetch_array($result_query)) { 

  $tb[$row][$col] = $result; 
  $row++; 

  if ($row == 10) { $row =0;$col++;} 

} 

//et ensuite  

foreach ($tb as $v){ 

  echo '<tr>  
<td> '. ((!empty($v[0])) ? $v[0]['constructeur'].' '.$v[0]['reference'] : '&nbsp;').'</td> 
<td> '. ((!empty($v[0])) ? $v[1]['constructeur'].' '.$v[1]['reference'] : '&nbsp;').'</td> 
<td> '. ((!empty($v[0])) ? $v[2]['constructeur'] : '&nbsp;').'</td> 
</tr> '; 

} 
?>
 </tr> 
</table>  
D'avance merci mille fois de votre aide,
muriel

Posté : 24 avr. 2009, 00:57
par thehawk
 mysql_query("SELECT * FROM tarif WHERE constructeur LIKE '%hp%' AND  constructeur LIKE '%canon%'  AND  constructeur LIKE '%brother%'   "); 
Peut etre ;)

Posté : 24 avr. 2009, 02:01
par muriel
Bonsoir thehawk,

J'avais essayé ce code mais malheureusement j'ai toujours l'erreur au niveau de la ligne
(Invalid argument supplied for foreach() )
foreach ($tb as $v){ 
et j'ai lu que le foreach n'accepte u'une valeur sinon il faut faire un "array= " et là j'avoue que je suis perdue, mais merci de ton aide thehawk.

Posté : 24 avr. 2009, 07:28
par momox
Utilises la fonction print_r() afin de vérifier la structure de ton tableau. Ca te permettra de voir ton erreur ;)
Ensuite, ta requete est mal construite concernant les LIKE multiples. Il faudrait utiliser OR car tu demandes tous les produits dont les constructeurs sont en même temps HP, CANON, et BROTHER avec AND.

Posté : 24 avr. 2009, 09:57
par Invité
Bonjour momox,

Merci de ton aide le "OR" marche parfaitement bien.

Bonne journée

Posté : 24 avr. 2009, 10:59
par Ryle
Accessoirement, il faudrait également déclarer le tablea $tb en dehors de la boucle while. En effet, dès lors que ta requête ne trouvera aucun enregistrement correspondant, la variable $tb ne sera pas déclarée (puisqu'il n'entrera pas dans le while) et l'appel au foreach() renverra l'avertissement ci-dessus (mauvais argument spécifié).

Il suffit pour éviter cela, de simplement ajouter un " $tb = array(); " avant le while, afin de le déclarer :)