Foreach () avec plusieurs Like

Eléphant du PHP | 101 Messages

24 avr. 2009, 00:32

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
muriel

Mammouth du PHP | 991 Messages

24 avr. 2009, 00:57

 mysql_query("SELECT * FROM tarif WHERE constructeur LIKE '%hp%' AND  constructeur LIKE '%canon%'  AND  constructeur LIKE '%brother%'   "); 
Peut etre ;)
DevOps, Symfony4, Hoa

Eléphant du PHP | 101 Messages

24 avr. 2009, 02:01

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.
muriel

Mammouth du PHP | 1511 Messages

24 avr. 2009, 07:28

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.

Invité
Invité n'ayant pas de compte PHPfrance

24 avr. 2009, 09:57

Bonjour momox,

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

Bonne journée

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 avr. 2009, 10:59

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...