IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

cookie avec un nom mais plusieurs resultats


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    noobies
    Inscrit en
    Décembre 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : noobies

    Informations forums :
    Inscription : Décembre 2014
    Messages : 103
    Points : 51
    Points
    51
    Par défaut cookie avec un nom mais plusieurs resultats
    bonjour et bonne année a tous,

    donc je vous expose mon cas,

    j'ai un site de petites annonces, j'ai un lien en dessous de chaque annonce "ajouter en favoris", j'utilise donc les cookies pour stocker l'id de l'annonce et pouvoir l'afficher sur la page "favoris",
    ca fonctionne mais dès que je place un nouveau favoris ca ne m'affiche pas celui d'avant, ce que je souhaite dans un premier temps c'est afficher sur ma page favoris tout les favoris que le visiteur a ajouté.

    mon appel au cookie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="<?php echo $uri2;?>" <?php setcookie('adid', $favoris, time() + 365*24*3600, null, null, false, true);?>   style="color:#fff;text-decoration:none;">Ajouter en favoris</a>
    ma page 'favoris' ou j'affiche le resultat des cookies :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (empty($_COOKIE['adid'])){echo 'Pas de favoris enregistrés';}
    else{
    $adid = $_COOKIE['adid'];
    }
    echo $adid;
    merci pour votre aide

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Utilise une base de données plutôt que des cookies.
    Les cookies sont volatiles car limités dans le temps et liés au navigateur et ne sont pas prévus pour stocker beaucoup de données
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Homme Profil pro
    noobies
    Inscrit en
    Décembre 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : noobies

    Informations forums :
    Inscription : Décembre 2014
    Messages : 103
    Points : 51
    Points
    51
    Par défaut
    c'est ce que je pensais faire mais si le nombre de visiteurs qui ajoute des favoris est trop important ca va etre dure a gerer, l'avantage du cookies est qu'il n'a qu'un temps donné, bref je reste campé sur mon idée de cookie, je ne pense pas que le boncoin stock les favoris dans une base vu que quand tu change d'ordi tes favoris ne sont plus la, bref je voudrais juste pouvoir stocker plusieurs id dans un cookie et l'afficher en tableau, j'ai lu pas mal de post et ont ma donné des infos mais dès que je les met en oeuvre ma page se bloque et je suis obligé de supprimer le cookie pour l'afficher de nouveau :

    voici ce que l'on ma donné comme info :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    //récupérer le cookie existant
    if (!empty($_COOKIE['favoris']))
        $favoris = json_decode($_COOKIE['favoris'],true);
    else
        $favoris = array();
     
    //Ajouter l'item au cookie existants
    if (!empty($_GET['adid'])) {
        $favoris[]= $_GET['adid'];
        setcookie('favoris', json_encode($favoris), time() + 365*24*3600, null, null, false, true);
    }
     
     
    //Afficher les favoris
    print_r($favoris);
    ?>
     
    <p>
        <a href="?adid=item1">Ajouter item 1</a><br />
        <a href="?adid=item2">Ajouter item 2</a><br />
        <a href="?adid=item3">Ajouter item 3</a><br />
        <a href="?adid=item4">Ajouter item 4</a>
    </p>
    j'ai bien tenté mais dès que je place json_encode($favoris) tout ce plante ...

    quand je reste sur ma fonction ca fonctionne mais que un par un ...

    grrr je sens que je vais pas dormir encore une fois

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    "tout se plante" ? tu peux être plus précis ?

    Il vaut mettre les id en clef, cela évite d'avoir des doublons :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $favoris[$_GET['adid']]= 1 ;
    Le $favoris = array(); est un peu exageré : si l'utilisateur revient sur la page, il perd tous les favoris.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre du Club
    Homme Profil pro
    noobies
    Inscrit en
    Décembre 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : noobies

    Informations forums :
    Inscription : Décembre 2014
    Messages : 103
    Points : 51
    Points
    51
    Par défaut
    alors j'ai retenté, j'ai mis comme ca pour stocker mon cookie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        <a href="<?php echo $uri2;?>" <?php if (!empty($_GET['adid'])) {$favoris[]= $_GET['adid'];setcookie('favoris', json_encode($favoris), time() + 365*24*3600, null, null, false, true);};?>   style="color:#fff;text-decoration:none;">Ajouter en favoris</a>
    et pour le lire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if (!empty($_COOKIE['adid']))
        $favoris = json_decode($_COOKIE['adid'],true);
    else
        $favoris = array();
     
     
     //Afficher les favoris
    print_r($favoris);
     
    $sql = "SELECT * FROM phpas_adpics WHERE adid = $favoris";
    j'ai cette erreur sur la page de lecture :

    Array ( ) Erreur SQL !

    Query was empty

    merci a toi pour prendre du temps a m'aider

    j'ai essayé en supprimant mes requetes sql

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php
    require_once("initvars.inc.php");
    require_once("config.inc.php");
     
     
    if (!empty($_COOKIE['adid']))
        $favoris = json_decode($_COOKIE['adid'],true);
    else
        $favoris = array();
     
     
     
    //Afficher les favoris
    print_r($favoris);
     
    ?>
    j'ai :

    Array ( )

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Le code que tu nous montres au début fonctionne, ce n'est pas la peine de le changer (en dehors des suggestions que je t'ai faite)

    Par contre $favoris est un tableau, tu ne peux pas le placer dans une requête comme ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM phpas_adpics WHERE adid IN (" . explode(",", array_walk( $data, 'intval' )) . ")";
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre du Club
    Homme Profil pro
    noobies
    Inscrit en
    Décembre 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : noobies

    Informations forums :
    Inscription : Décembre 2014
    Messages : 103
    Points : 51
    Points
    51
    Par défaut
    ok je verais ca après car j'ai refais des test,

    et en faisant un echo j'ai ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    echo $_COOKIE['favoris'];
    if (!empty($_COOKIE['favoris']))
        $favoris = json_decode($_COOKIE['favoris'],true);
    else
        $favoris = array();
    //Afficher les favoris
    print_r($favoris);
    [\"127\"] alors que je devrais avoir 127

    mais je n'arrive toujours pas a afficher tout les id séléctionnés ... va etre longue la nuit je le sent

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Normal, tu affiches la chaine Json.

    Tu n'as pas tenu compte de mes remarques concernant le réinitialisation du tableau.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre du Club
    Homme Profil pro
    noobies
    Inscrit en
    Décembre 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : noobies

    Informations forums :
    Inscription : Décembre 2014
    Messages : 103
    Points : 51
    Points
    51
    Par défaut
    non j'ai supprimé mes requetes pour le moment, je test juste l'affichage des id

    j'ai modifié comme tu ma dit cette partie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php if (!empty($_GET['adid'])) {$favoris[$_GET['adid']]= 1 ;setcookie('favoris', json_encode($favoris), time() + 365*24*3600, null, null, false, true);};?>
    ca m'affiche dans l'echo

    {\"178\":1}

    mais comment afficher un tableau qui affiche les id en sortie de la chaine Json

  10. #10
    Membre du Club
    Homme Profil pro
    noobies
    Inscrit en
    Décembre 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : noobies

    Informations forums :
    Inscription : Décembre 2014
    Messages : 103
    Points : 51
    Points
    51
    Par défaut
    j'ai fais autrement, ca a l'air de fonctionner reste la requete, voici la requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    $adid = $_COOKIE['Adid'];;
     
    if(empty($adid))
    {
    echo 'Pas de favoris';
    }
    else{
     
    $data = array ($adid);
     
    print_r($data);
     
    $sql = "SELECT * FROM phpas_adpics WHERE adid IN (" . explode(",", array_walk( $data, 'intval' )) . ")";
     
    $pres = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());	
     
    }
    ce que ca m'affiche :

    Array ( [0] => Array ( [132] => 132 ) ) Erreur SQL !
    SELECT * FROM phpas_adpics WHERE adid IN (Array)
    Unknown column 'Array' in 'where clause'

  11. #11
    Membre du Club
    Homme Profil pro
    noobies
    Inscrit en
    Décembre 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : noobies

    Informations forums :
    Inscription : Décembre 2014
    Messages : 103
    Points : 51
    Points
    51
    Par défaut
    alors c'est bon ca fonctionne avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    <?php
    require_once("initvars.inc.php");
    require_once("config.inc.php");
     
    $adid = $_COOKIE['Adid'];;
     
    $data = implode(',', $adid)."";
     
    $sql = "SELECT * FROM phpas_adpics WHERE adid IN (".$data.")";
     
    $pres = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());	
     
    $row = mysql_fetch_array($pres);
     
    ?>	
     
      <div style="width:680px;">
         <table width="500px;">
            <tr>  
    <?php
     
    		if(isset($row['picfile']))
     
     
            {
    		while ($row = mysql_fetch_array($pres))
     
     
     
    	       {
              echo '<td style=\"width:250px;\">';
    	      echo "<img id=\"exp\" width=\"105px\" height=\"100px\" src=\"/adpics/".$row['picfile']."\">";
    	      echo '</td>';
    	       }
     
     
     
    	    }
    		else
    		{
    	      echo $imgb;
    		  echo $imgb;
    		  echo $imgb;
    		  echo $imgb;
    		  echo $imgb;
             }
     
     
     
    ?>		 
            </tr>  
          </table>
       </div>
    j'ai bien les photos des favoris, le soucis c'est que si il y a 5 photos ca m'affiche les 5 en plus des autres et tout affilées, j'ai essayé avec un tableau mais ca ne change rien, je voudrais qu'un photo de chaque et l'une en dessous de l'autres que je puisse mettre le titre et les desc a coté, merci

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    ah oui pardon j'ai mis explode au lieu de implode.
    le 'intval' n'est pas facultatif, sinon ta requête n'est pas sécurisée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM phpas_adpics WHERE adid IN (" . implode(",", array_walk( $data, 'intval' )) . ")";
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Membre du Club
    Homme Profil pro
    noobies
    Inscrit en
    Décembre 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : noobies

    Informations forums :
    Inscription : Décembre 2014
    Messages : 103
    Points : 51
    Points
    51
    Par défaut
    j'ai cette erreur :

    SELECT * FROM phpas_adpics WHERE adid IN ()You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $adid = $_COOKIE['Adid'];
    $sql = "SELECT * FROM phpas_adpics WHERE adid IN (" . implode(",", array_walk( $adid, 'intval' )) . ")";
    sinon autre probleme, si je place un prmier favoris il ne s'affiche pas par contre dans l'echo je le voit bien mais il y a une virgule après du coup
    ca ne s'affiche pas, au deuxieme j'ai que le deuxieme

    l'echo de deux favoris : 150,244

    l'echo d'un seul favoris : 150,

  14. #14
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Un cookie ne peut en aucun cas contenir un tableau, donc tu ne peux pas faire d'implode dessus !
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  15. #15
    Membre du Club
    Homme Profil pro
    noobies
    Inscrit en
    Décembre 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : noobies

    Informations forums :
    Inscription : Décembre 2014
    Messages : 103
    Points : 51
    Points
    51
    Par défaut
    j'ai fais comme ca et ca fonctionne sauf que ca ne m'affiche pas le premier favoris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $adid = $_COOKIE['Adid'];
     
    $data = implode(',', $adid);
     
    if(empty($data))
    {
    echo 'Pas de favoris enregistrés';
    }
    else{
     
    $sql = "SELECT * FROM phpas_adpics WHERE picid IN (".$data.") ";
            $pres = mysql_query($sql) or die($sql.mysql_error());	
            $row = mysql_fetch_array($pres);
    y'a des soucis avec les virgules, mais a partir du deuxieme tout va bien, ile ne m'affiche pas le premier car l'id comporte un virgule après

    et oui mon cookie a plusieurs valeur avec le meme nom :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    if (isset($_COOKIE['compte'])) {
        $compte = $_COOKIE['compte'] + 1;
    } else {
        $compte = $ite;
    }
    setcookie('Adid', $compte, time()+360000);
    setcookie("Adid[$compte]", $item, time()+360000);
    ?>

Discussions similaires

  1. [CR 2008] Requete avec des champs renvoyant plusieurs resultats
    Par caribou_espion dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 13/06/2008, 08h29
  2. Réponses: 2
    Dernier message: 11/12/2006, 13h15
  3. Réponses: 10
    Dernier message: 04/08/2006, 10h12
  4. Réponses: 8
    Dernier message: 11/05/2006, 23h18
  5. Requete assez compliqué avec plusieur resultat
    Par castelligreg dans le forum Access
    Réponses: 3
    Dernier message: 18/04/2006, 22h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo