foreach qui n'affiche pas toutes les valeurs de array

Eléphant du PHP | 75 Messages

13 janv. 2010, 15:44

Bonjour,

J'ai réalisé un petit script :
<?php
$dossier = './pdf';
$lecture = scandir($dossier);

$selec = '-- SELECTIONNEZ --';
if(isset($_GET['modifier_news'])){
	$selectioned = $news['pdf'];
	$lecture[] = $selectioned;
	$lecture[] = $selec;
}
else{
	$lecture[] = $selec;
}
$tab = array_slice($lecture,2);
$renverse = array_reverse($tab);
$unique = array_unique($renverse);
foreach($unique AS $valeur){
	$list_pdf = '<option value="'.$valeur.'">'.$valeur.'</option>';
}
echo '<select name="pdf">'.$list_pdf.'</pdf>';
?>	
En faisait un print_r($unique); cela me renvoi ça :

Array ( [0] => -- SELECTIONNEZ -- [1] => recetteFromage1sf_ge.pdf [2] => SFParisMouf-degust-aperiSlowN1.pdf [3] => SFParisMouf-degust-From-vins26mars.pdf [4] => SFParisMouf-degust-10-12-2009.pdf [5] => PDF-SlowFood-vinsCorse.pdf )

Or la liste émise par le foreach me renvoi ça :

PDF-SlowFood-vinsCorse.pdf

Vous savez pourquoi ça ne me renvoi que la dernière valeur ? :s

ViPHP
ViPHP | 1136 Messages

13 janv. 2010, 15:48

Slt ,

tu as oublié le "." devant le égal pour concaténer
 $list_pdf .= '<option value="'.$valeur.'">'.$valeur.'</option>'; 
Ch.

Eléphant du PHP | 75 Messages

13 janv. 2010, 16:34

Merci. ;)

Ca fonctionne maintenant. ^^

Cependant, je souhaite ajouter une fonction.

Si jamais on modifie une news, je souhaite que le champ qui s'affiche en premier sur la liste est celui qui à été préalablement choisis lors que la création de la news.

j'ai pense à ça :
		<?php
		$dossier = './pdf';
		$lecture = scandir($dossier);
		
		$selec = '-- SELECTIONNEZ --';
		if(isset($_GET['modifier_news'])){
			$selectioned = $news['pdf'];
			$lecture[] = $selectioned;
			$lecture[] = $selec;
		}
		else{
			$lecture[] = $selec;
		}
		$tab = array_slice($lecture,2);
		$renverse = array_reverse($tab);
		$unique = array_unique($renverse);	
		
		foreach($unique AS $valeur){
			$list_pdf .= '<option value ="'.$valeur.'">'.$valeur.'</option>';
		}
		if(isset($_GET['modifier_news'])){
			$list_pdf = str_replace('value="'.$news['pdf'].'"','value="'.$news['pdf'].'" selected="selected";',$list_pdf);
		}
		echo '<select name="pdf">'.$list_pdf.'</pdf>';
		?>	
Mais ça ne change strictement rien.

Si j'ajoute un . ici : $list_pdf .= str_replace('value="'.$news['pdf'].'"','value="'.$news['pdf'].'" selected="selected";',$list_pdf);

Je verrais toujours -- SELECTIONNEZ -- et quand je clique sur la liste, elle m'affiche deux fois le contenu du dossier. :s

Merci. ;)

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

13 janv. 2010, 22:37

Dans ta liste d'options, tu as un espace entre le "value" et le "=", du coup, lorsque tu fais le replace, comme tu cherches une chaine sans espace, il ne la trouve pas et ne peut donc pas la remplacer...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 75 Messages

13 janv. 2010, 23:03

Encore une fois, merci. =D>

Il faudrait sans doute que j'aille m'acheter des yeux... #-o

Mammouth du PHP | 672 Messages

14 janv. 2010, 10:12

Profites-en pour corriger ton HTML :
echo '<select name="pdf">'.$list_pdf.'</pdf>';
La balise fermante </pdf> n'existe pas en HTML (à ma connaissance) !