8797 sujets

Développement web côté serveur, CMS

Bonjour Smiley biggrin ,

Je n'arrive pas à séparer ma requete suivante correctement:

ref IN ('toto''papa''loulou')

comment arriver à ce résultat:

ref IN ('toto','papa','loulou')


J'ai procédé comme ceci (je sais pas si c'est la bonne méthode):

if(!empty($_SESSION['ref']))
{
	$tabref = explode(",", $_SESSION['ref']);
	$listref = "";
	$fref = 1;
	

	foreach($tabref as $ref)
	{

		if($fref){$listref .= "'".trim($ref)."'"; $fref = 0;}

		else{$listref .= ",'".trim($ref)."'";}
	}
	
	$refe .= "$listref";
}


Merci A+
Salut,
Tu t'en sortiras plus facilement avec un implode (ou join). Pour le traitement "trim et guillemets", une fonction appelée par walk me semble aussi judicieux.

$tabref = explode(",", $_SESSION['ref']);
array_walk($tabref, create_function('&$item', '$item = "\'" . trim($item) . "\'";'));
$listref = implode(',', $tabref);


En passant, $_SESSION['ref'] ne gagnerait-il pas à être un tableau ? (juste une question comme ça, hein)

a+
Merci jeje, j'ai essayé ta méthode mais j'ai toujours la requete qui s'affiche comme ça:
ref IN ('toto''papa''loulou')

En faite j'envoie la valeur "toto", celle ci est garder en session (c'est pour faire une sorte de panier) puis j'envoie la valeur "papa" (ainsi de suite...)mais la séparation n'est pas effectuer.
a écrit :
En passant, $_SESSION['ref'] ne gagnerait-il pas à être un tableau ?

Je suis pas très doué en php alors quand un truc marche j'évite d'y toucher Smiley cligne

A+ Smiley biggrin
moi je prends ton code et je suppose la valeur initial de ref

<?php
session_start();
$_SESSION['ref'] = "toto,tata,tintin";

if(!empty($_SESSION['ref']))
{
	$tabref = explode(",", $_SESSION['ref']);
	$listref = "";
	$fref = 1;
	

	foreach($tabref as $ref)
	{

		if($fref){$listref .= "'".trim($ref)."'"; $fref = 0;}

		else{$listref .= ",'".trim($ref)."'";}
	}
	
	$refe .= "$listref";
}

echo  $refe;

?>


j'obtiens à la sortie du echo
a écrit :

'toto','tata','tintin'


avec les virgules et le contraire m'aurait étonné. Smiley cligne ce bout de code un peu alambiqué semblait juste... comme l'exemple de jeje

donc 1/ le format de ta variable session est différent
2/ tu dois appliquer un traitement a $refe apres qui enleve les ,
Modifié par CPascal (24 Jan 2008 - 18:59)
En fait, je viens de me rendre compte que tout ça ne sert à peu près à rien si tu faisais le trim lors de la sauvegarde en session, mais bon, on va poursuivre ne serait-ce que pour l'exercice Smiley cligne

As-tu bien quelque-chose comme ceci :
$tabref = explode(",", $_SESSION['ref']);
array_walk($tabref, create_function('&$item', '$item = "\'" . trim($item) . "\'";'));
$listref = implode(',', $tabref);
$requete = 'SELECT.... WHERE ref IN (' . $listref . ')';


Pour débugger :
$tabref = explode(",", $_SESSION['ref']);
echo '<pre>' . print_r($tabref, true) . '</pre>';
array_walk($tabref, create_function('&$item', '$item = "\'" . trim($item) . "\'"; echo $item;'));


Voila qui devrait te permettre d'avancer un peu (parce que sinon, je vois pas ce qui cloche)
Bonjour, en parcourant rapidement, je me demande si une solution extrêmement simple ne serrait pas de passer en implode / explode tout bêtement ?



$_SESSION['ref'] = "toto,tata,tintin";
$tmp =explode(",",$_SESSION['ref']);
$_SESSION['ref'] = "'".implode("','",$tmp)."'"; // ajoute les guillemets manquants
echo $_SESSION['ref'];