Probleme php variable

Par MehdiWEB, il y a 11 ans


Bonsoir j'ai un problème avec une variable quand je l'echo sa s'affiche bien etc.. mais quand je veux update avec cette variable elle affiche rien voici la fonction dans mon models (MVC):

public function del_langue($langue) { $db = $this::getInstance(); $lang = explode(',', $_SESSION['user']->langue); foreach($lang as $langues) { $test = explode($langue, $langues); foreach($test as $tests) { // echo $tests; sa marche // mais sur la requete sa retourne rien $db->query("UPDATE users SET langue = '".$tests."' WHERE id = '".$_SESSION['user']->id."'"); } } }

Merci d'avance.

15 réponses

MehdiWEB, il y a 11 ans

Le code va récup toutes les valeurs apres la virgule ducoup il en trouve deux (dans ce cas) donc il va répéter la requete deux fois alors que on en a besoin que d'une seul fois pour utiliser l'explode donc c'est la méthode à adapter.

MrSaooty, il y a 11 ans

Peut-être comme ça ?

$db->query("UPDATE users SET langue = $tests WHERE id = $_SESSION['user']->id");
MehdiWEB, il y a 11 ans

Non sa vien pas de la requête c'est la variable qui retourne rien dans la requete.

MrSaooty, il y a 11 ans

Et bien, fait un var_dump de $tests et donne nous le résultat stp

MehdiWEB, il y a 11 ans

Sa marche, le var_dump() retourne bien ce qu'il doit retourner, mais sur la requete sa marche pas j'ai essayer avec prepare toujours rien

MrSaooty, il y a 11 ans

Il retourne quoi le var_dump ?

MehdiWEB, il y a 11 ans

Il retourne des chaines de caractères, je vais pas te dire exactement ce qu'il retourne car sa serai t'expliquer le principe du systeme et c'est trop long

MrSaooty, il y a 11 ans

Et bah je ne peux pas t'aider..

MehdiWEB, il y a 11 ans

Bon je t'explique l'utilisateur ajoute des langues, et c'est langues il faut bien qu'il puissent les supprimer alors quand il clique par exemple sur supprimer la langue espagnol sa va faire appel à la fonction del_langue('espagnol'); et enfaite le systeme va explode espagnol dans ls langues qu'il possédent et il va update la collone avec les langue qu'il possédent mais sans qu'il y'est le espagnol.

MrSaooty, il y a 11 ans

A mon avis le problème vient de là. Il ne veut pas avaler le contenu de $tests

kewai, il y a 11 ans

Et ca fonctionne pas car je parie que tu vois toujours la dernière langue de ta chaine de caractère enregistrée dans ta table ?!
un var_dump sur une requete update c'est pas super pertinent ^^

relis un peu ton code, et tu verras que ta requete dans un foreach... C'est pas vraiment efficace :)
de plus tes explode en on fait un tableau... Il faut que tu reconvertisses en une chaine de caractère

En fait je comprends simplement pourquoi tu as des foreachs.

Tu as moyen de faire

$string = 'ballon,cornichon,boulette,voiture'; $del = 'cornichon'; $array = explode($del . ',', $string); $newString = implode($array, '');
MehdiWEB, il y a 11 ans

C'est bon j'ai réussi avec un peu de réfléxion et d'UML oufff voici le code:

public function del_langue($langue) { $db = $this::getInstance(); $string = $_SESSION['user']->langue; $b = str_replace(',', ' ', $string); $c = explode(' ', $b); if(($k = array_search($langue, $c)) !== false) { unset($c[$k]); } for($i=0;$i<1; $i++){ $final = implode(',', $c); $db->query("UPDATE users SET langue = '".$final."' WHERE id = '".$_SESSION['user']->id."'"); } }
kewai, il y a 11 ans

ton for il te sert a quoi ?

$b = str_replace(',', ' ', $string); $c = explode(' ', $b);

? =

$fusion = explode(',', $string);
MehdiWEB, il y a 11 ans

C'est l'équivalent du foreach pour l'explode, car sinon il faudra faire manuellement et le but c'est que sa soit automatique.

kewai, il y a 11 ans

Mais lis un peu ce que tu as écrit :

for($i=0;$i<1; $i++){

i = 0,
tant que i est en dessous de 1 continuer
incrémenter i à chaque exécution de la boucle.

Ca fait pas tilt ? ^^