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
Auteur
Réponse acceptée

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."'");
        }
    }

Peut-être comme ça ?

$db->query("UPDATE users SET langue = $tests WHERE id = $_SESSION['user']->id");
MehdiWEB
Auteur

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

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

MehdiWEB
Auteur

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

Il retourne quoi le var_dump ?

MehdiWEB
Auteur

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

Et bah je ne peux pas t'aider..

MehdiWEB
Auteur

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.

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

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, '');

ton for il te sert a quoi ?

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

? =

 $fusion = explode(',', $string);
MehdiWEB
Auteur

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

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 ? ^^

MehdiWEB
Auteur

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.