Boucle foreach capricieuse

Smoking bird Messages postés 911 Statut Membre -  
Smoking bird Messages postés 911 Statut Membre -
Bonjour,

J'ai un problème avec ce code ci:

$ref=$_GET['ref'];
$image=$_GET['image'];

$sql="select ref,annexes from contenuofficiel where ref='".$ref."'";
$query=mysql_query($sql) or die(mysql_error());
while( $del=mysql_fetch_array($query) ) {
	$exploAnn=explode('||',$del['annexes']);
		foreach($exploAnn as $Image) {
			if( preg_match('/.jpg|.png|.gif|.jpeg/i',$Image) ){
				echo "fichier image<br />";
				if( preg_match("/$image/",$Image)) {
					echo 'cible';
				}
			}
		}
}


ref et image sont récupérées correctement.

Il y a deux tests avec expressions régulières dans le foreach, le premier se passe sans problème, mais c'est comme si à partir du second, le tableau $Image ne passait plus et n'existait tout simplement plus lors du test même.

Quelqu'un aurait -il une idée?

Merci

Smoke

4 réponses

pitxu Messages postés 708 Statut Membre 95
 
bonjour,

imbriquer une boucle for each dans une boucle while est impossible, il faut utiliser l'une des 3 méthodes suivantes :

Il existe 3 façons de parcourir un tableau associatif. La plus courante et la plus évidente c'est :

//solution 1
foreach ($maTable as $maCle => $maValeur) {
//mon code
}

mais on peut également faire :

//solution 2
while (list($maCle,$maValeur) = each($maTable)) {
//mon code
}

//et solution 3
while ($monProchainElement = next($maTable)) {
//mon code
}
0
Smoking bird Messages postés 911 Statut Membre 58
 
bonjour, et merci de ta réponse^^

Je t'avous ne pas la comprendre, cependant. D'abord parce que ma boucle foreach fonctionne (relativement) dans le while, et ensuite parce que je n'ai aucune idée de comment mettre en pratique les codes que tu proposes, pour le projet qui est le mien.

Est il possible d'utiliser une boucle foreach pour balayer des résultats mysql?
0
Smoking bird Messages postés 911 Statut Membre 58
 
up
0
toto
 
Bonjour

Bien sûr que si on peut imbriquer une boucle foreach à l'intérieur d'un boucle while.
Un foreach ne permet pas de balayer les résultats d'une requête (ils sont fournis sous forme d'une ressource, pas d'un tableau).

Peux-tu préciser si $Image semble vide lors du deuxième passage dans le foreach ou s'il disparaît entre le preg_match('/.jpg|.png|.gif|.jpeg/i',$Image) et le preg_match("/$image/",$Image) ?
0
Smoking bird Messages postés 911 Statut Membre 58
 
Bonjour toto et désolé de répondre aussi tard^^

J'ai modifié mon projet pour passer au delà de ce problème, mais il m'intrigue et j'aimerais bien trouver une solution^^

Dans mes souvenirs, $Image semble vide après la première regexp^^
0