8796 sujets

Développement web côté serveur, CMS

Bonjour,

après recherche, je ne trouve pas comment résoudre ce petit problème :

j'ai un formulaire contenant un textarea ; l'utilisateur devra saisir plusieurs phrases, séparées par des retours à la ligne. Je souhaite récupérer chaque ligne de ce textarea comme une entrée d'un tableau PHP array. Je conçois à peu près le processus théoriquement, mais je ne sais pas trop comment l'appliquer en PHP, sans que ce soit lourdingue... Smiley sweatdrop

Merci d'avance à ceux qui peuvent m'aider ! Smiley smile
Modifié par lionel (14 Feb 2008 - 13:27)
hiiiii j'avais pas vu que tu avais donné la réponse !

mon poste ne sert plus a rien...
Modifié par Chum (14 Feb 2008 - 11:36)
Merci beaucoup pour vos réponses ! Smiley smile

Après quelques tests, il semble qu'il faille procéder ainsi :


$array = explode("\r\n", $_POST['entries']);

sinon j'ai une espace avant ou après chaque entrée du tableau, même si elles sont traitées par trim().

Ça fonctionne nickel sous Mac et Win, il faudrait que je fasse un test sous Linux pour être sûr.
Administrateur
sous Linux les \r\n sont souvent réduits à \n, il serait possible d'anticiper avec un preg_split en considérant les deux possibilités.
Merci Dew, il faut que je telécharge une distrib toute faite pour tester sous VMWare, et que je me plonge dans les expressions régulières afin de ne plus avoir froid dans le dos quand on me parle de preg... Smiley lol

Concernant les espaces à retirer avec trim(), une fois la fonction explode appliquée, il reste des espaces à supprimer (a fortiori si l'utilisateur en a saisi) dans chaque entrée. Or je n'ai pas trouvé d'autre méthode que ceci pour les supprimer :


function textarea_to_array($var) {
	$var = trim($var);

	$var = htmlspecialchars($var,ENT_QUOTES);
	$var = explode("\r\n",$var);

	function trim_entries(&$value) { $value = trim($value); }
	array_walk($var,'trim_entries');

	return $var;
}

$array = textarea_to_array($_POST['entry']);

var_dump($array);

Je trouve ça un peu lourdingue, il n'y aurait pas plus simple ?
le seul probleme est lorsque l'on fait des enter sans rien mettre on aura un champ vide dans le tableau