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

PHP & Base de données Discussion :

redirection menu déroulant [MySQL]


Sujet :

PHP & Base de données

  1. #21
    Membre régulier Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Points : 70
    Points
    70
    Par défaut
    Je suis pas tout, dans l'idée vaguement...

    En fait ce que tu veux dire c'est de ne pas renseigner l'id lors de mon INSERT comme ci-suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $query = mysql_query("INSERT INTO news (hid,nom,titre,spec,photoarticle,date) VALUES ('$group','$name','$titre','$spec','$largefile',now())");
    dans ce cas concernant l'ajout d'un article.

    Si c'est le cas, à aucun moment que ce soit pour l'ajout d'un article, d'une catégorie ou d'un commentaire je ne renseigne l'id lors mon INSERT

    ou dois-je modifier la structure de mes tables ?

  2. #22
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    Salut,

    j'ai l'impression qu'il y a une ptite confusion ici...ta table est déjà remplie, c'est juste au niveau de la sélection que ça coince.

    Sinon tu pourrais pê commencer par tester une requête simple puis rajouter les conditions au fur et à mesure, pour voir où ça coince.

    Une idée comme ça..

  3. #23
    Membre régulier Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Points : 70
    Points
    70
    Par défaut
    Effectivement j'aurais du commencer par là

    Et là jai un début de réponse en m'apercevant que la requête marche si et seulement si un commentaire est entré pour chaque article .

    Si aucun commentaire n'est entré, la réquête me retourne aucun résultat...

    voici ma table commentaire :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CREATE TABLE commentaire (
      id int(11) NOT NULL auto_increment,
      hid int(11) NOT NULL default '0',
      sid int(11) NOT NULL default '0',
      nom varchar(80) NOT NULL default '',
      spec text NOT NULL,
      email varchar(80) NOT NULL default '',
      PRIMARY KEY  (id),
      FULLTEXT KEY nom (nom,spec)
    ) TYPE=MyISAM;

    voilou

  4. #24
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    Si tu as une table vide dans ta jointure, c normal qu'il ne te retourne pas d'enregistrements..

    J'ai l'impression que pour ce que tu veux, tu dois séparer ta requête en 2; 1 pour sélectionner les news puis une autre pr sélectionner les commentaire de chaque news.

    Si j'ai bien compris..

  5. #25
    Membre régulier Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Points : 70
    Points
    70
    Par défaut
    oki je vois l'idée et comprend l'erreur qui est logique en effet ...

    Pour séparer ma requête en 2 quelle architecture dois-je utiliser? Je m'y perd un peu avec tt ça

  6. #26
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    Quelque chose comme ça:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $res = mysql_query("SELECT NewsId FROM news WHERE ...");
     
    while ($data = mysql_fetch_array($res))
    	{
    	$result = mysql_query("SELECT * FROM commentaires WHERE NewsId = ".$data['NewsId']);
    	}

  7. #27
    Membre régulier Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Points : 70
    Points
    70
    Par défaut
    Bon allez je me lance, tanpis c'est complètement à côté puisque ma requête me renvoie 0 résultat mais en suivant ton exemple ci dessus, voici mon "code" ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $hid = $_POST['hid'];
     
            $search = mysql_query("SELECT news.id,news.nom,news.titre,news.spec,news.photoarticle,news.visu,news.date FROM news WHERE news.hid='$hid' ORDER BY news.date DESC LIMIT 0, 100");
            $num = mysql_num_rows($search);
     
     
            while ($data = mysql_fetch_array($search))
    	    {
    	    $result = mysql_query("SELECT commentaire.sid,count( * ) FROM commentaires AS nombre WHERE  commentaire.sid = ".$data['news.id']);
    		$nombre = $row['nombre'];
    	    }

  8. #28
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Tu peux faire un petit rappel du problème et où tu en es, stp ?

  9. #29
    Membre régulier Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Points : 70
    Points
    70
    Par défaut
    Oki alors pour le petit rappel, voilà :

    J'ai une requête qui fait appel aux tables "news", "cat" et "commentaire" ci-dessous :

    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
     
    $hid = $_POST['hid'];
     
    $search = mysql_query("SELECT news.id,news.nom,news.titre,news.spec,news.photoarticle,news.date,count( * ) AS nombre FROM news JOIN commentaire WHERE news.id = commentaire.sid AND news.hid='$hid' GROUP BY news.id ORDER BY news.date DESC LIMIT 0, 100") or die ("ERROR:" . mysql_error());
    		$num = mysql_num_rows($search);
            $nombre = $row['nombre'];
     
     
    if ($num == 0) {
     
    			echo "Il y a <b>$num</b> article(s) associées à la catégorie : </b>";
     
    			echo "Pas d'article!";
     
     
    		} else {
     
     
     
    			echo "Il y a <b>$num</b> news associées à la catégorie";
     
    			while ($row = mysql_fetch_array($search)) {
     
    echo "$row[0]";
     
    }
    Après moultes tentatives, il s'avère que ma requête me renvoie 0 résultat car ma table commentaire est vide, en y pensant logique ...

    De ce fait, on me conseille un peu plus haut de séparer cette requête en 2 de telle sorte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $res = mysql_query("SELECT NewsId FROM news WHERE ...");
     
    while ($data = mysql_fetch_array($res))
    	{
    	$result = mysql_query("SELECT * FROM commentaires WHERE NewsId = ".$data['NewsId']);
    	}
    et à mon tour de me lancer et de l'adapter à mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $hid = $_POST['hid'];
     
            $search = mysql_query("SELECT news.id,news.nom,news.titre,news.spec,news.photoarticle,news.visu,news.date FROM news WHERE news.hid='$hid' ORDER BY news.date DESC LIMIT 0, 100");
            $num = mysql_num_rows($search);
     
     
            while ($data = mysql_fetch_array($search))
    	    {
    	    $result = mysql_query("SELECT commentaire.sid,count( * ) FROM commentaires AS nombre WHERE  commentaire.sid = ".$data['news.id']);
    		$nombre = $row['nombre'];
    	    }
    mais comme je m'y attendais, ma syntaxe doit comporter de grosses lacunes puisque la requête me renvoie ... 0 résultat.

    Voilà

    J'espère avoir synthétisé au mieux

    Merki

  10. #30
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Je crois qu'en faisant une jointure à gauche (LEFT OUTER JOIN) tu vas pouvoir récupérer le nombre de commentaires pour chaque news même pour celles qui n'en ont pas.
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  11. #31
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    La solution de JWhite peut effectivement résoudre ton soucis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $search = mysql_query("SELECT * FROM news LEFT OUTER JOIN commentaire ON news.id = commentaire.sid WHERE news.hid='$hid' ORDER BY news.date DESC LIMIT 0, 100") or die ("ERROR:" . mysql_error());
    $num = mysql_num_rows($search);
    Il n'empêche que je me demande si l'architecture de ta BDD est correcte . J'ai l'impression qu'il y a des problèmes de redondance de données. (Même si je connais pas forcément l'utilisation de tous les champs)

  12. #32
    Membre régulier Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Points : 70
    Points
    70
    Par défaut
    Oki ça à l'air de fonctionner merki

    mais comment je fais maintenant pour récupérer le nombre de commentaires par news (ex : commentaires(5) )

    avec ma première requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $search = mysql_query("SELECT news.id,news.nom,news.titre,news.spec,news.photoarticle,news.visu,news.date,count( * ) AS nombre FROM news JOIN commentaire WHERE news.id = commentaire.sid AND news.hid='$hid' AND news.visu='oui' GROUP BY news.id ORDER BY news.date") or die ("ERROR:" . mysql_error());
    		$num = mysql_num_rows($search);
            $nombre = $row['nombre'];
    où $nombre = le nombre de commentaires


  13. #33
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Dans ce cas là effectivement tu ne pourras pas avoir facilement le nombre de commentaire sans effectué un test après. Donc tu peux garder la requête avec la jointure externe et ajouter une nouvelle requête dans ton while qui comptera le nombre de requête avec un WHERE portant sur le l'id de la news

  14. #34
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT news.id,news.nom,news.titre,news.spec,news.photoarticle,news.visu,news.date,count( * ) AS nombre FROM news LEFT OUTER JOIN commentaire ON news.id = commentaire.sid WHERE news.hid='$hid' AND news.visu='oui' GROUP BY news.id ORDER BY news.date
    Je sais pas si ça marche mais ça peut être l'idée.

    Edit : vu le post de Kerod j'ai comme un vieux doute là d'un coup
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  15. #35
    Membre régulier Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Points : 70
    Points
    70
    Par défaut
    Effectivement JWhite jai le message d'erreur suivant :

    ERROR: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 'news.id,news.nom,news.titre,news.spec,news.photoarticle,news.vi

  16. #36
    Membre régulier Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Points : 70
    Points
    70
    Par défaut
    Une requête dans ce genre là alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $result = mysql_query("SELECT count( * ) AS nombre FROM commentaire JOIN news WHERE commentaire.sid = news.id");
    		$num = mysql_num_rows($result);
    		$nombre = $row['nombre'];
    Sinon qu'entendez vous par ajouter une requête dans mon while ?

    ajouter une nouvelle requête dans ton while qui comptera le nombre de requête avec un WHERE portant sur le l'id de la news

  17. #37
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $search = mysql_query("SELECT * FROM news LEFT OUTER JOIN commentaire ON news.id = commentaire.sid WHERE news.hid='$hid' ORDER BY news.date DESC LIMIT 0, 100") or die ("ERROR:" . mysql_error());
    $num = mysql_num_rows($search);
    while($result = mysql_fetch_assoc($search))
    {
        
    $search = mysql_query("SELECT count(*) FROM commentaire WHERE sid='a mettre la récupération de l'id de la news'") or die ("ERROR:" . mysql_error());
    
    }
    Quelque chose de ce style

  18. #38
    Membre régulier Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Points : 70
    Points
    70
    Par défaut
    Voilà l'ensemble de mon 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
     
    $hid = $_POST['hid'];
     
    $search = mysql_query("SELECT news.id,news.nom,news.titre,news.spec,news.photoarticle,news.date FROM news LEFT OUTER JOIN commentaire ON news.id = commentaire.sid WHERE news.hid='$hid' ORDER BY news.date DESC LIMIT 0, 100") or die ("ERROR:" . mysql_error());
    $num = mysql_num_rows($search);
     
    $recup = $row[0];
     
    while($result = mysql_fetch_assoc($search))
    {
     
    $search = mysql_query("SELECT count(*) FROM commentaire WHERE sid='$recup'") or die ("ERROR:" . mysql_error());
     
    }
     
    if ($num == 0) {
     
    			echo "Il y a <b>$num</b> article(s) associées à la catégorie : </b>";
     
    			echo "Pas d'article!";
     
     
    		} else {
     
     
     
    			echo "Il y a <b>$num</b> news associées à la catégorie";
     
    			while ($row = mysql_fetch_array($search)) {
     
     
     
    echo'<a href="commentaire.php?sid='.$row[0].'">commentaires ('.$row['nombre'].')</a>';
     
    }
    mais celui-ci semble "tourner" dans le vide...

  19. #39
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $search = mysql_query("SELECT news.id,news.nom,news.titre,news.spec,news.photoarticle,news.date FROM news LEFT OUTER JOIN commentaire ON news.id = commentaire.sid WHERE news.hid='$hid' ORDER BY news.date DESC LIMIT 0, 100") or die ("ERROR:" . mysql_error());
    $num = mysql_num_rows($search);
     
    while($result = mysql_fetch_assoc($search))
    {
        
    $search = mysql_query("SELECT count(*) as total FROM commentaire WHERE sid='".$result['id']."'") or die ("ERROR:" . mysql_error());
    ..... 
    }
    Et tout le traitement de récupération des commentaires se fait dans la boucle et non à l'extérieur.

  20. #40
    Membre régulier Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Points : 70
    Points
    70
    Par défaut
    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
     
     
    $hid = $_POST['hid'];
     
     
    $search = mysql_query("SELECT news.id,news.nom,news.titre,news.spec,news.photoarticle,news.date FROM news LEFT OUTER JOIN commentaire ON news.id = commentaire.sid WHERE news.hid='$hid' ORDER BY news.date DESC LIMIT 0, 100") or die ("ERROR:" . mysql_error());
    $num = mysql_num_rows($search);
     
    while($result = mysql_fetch_assoc($search))
    {
     
    $search = mysql_query("SELECT count(*) as total FROM commentaire WHERE sid='".$result['id']."'") or die ("ERROR:" . mysql_error());
     
    if ($num == 0) {
     
    			echo "Il y a <b>$num</b> article(s) associées à la catégorie : </b>";
     
    			echo "Pas d'article!";
     
     
    		} else {
     
     
     
    			echo "Il y a <b>$num</b> news associées à la catégorie";
     
     
     
     
    echo'<a href="commentaire.php?sid='.$row[0].'">commentaires ('.$row['total'].')</a>';
     
    }
    }
    Comme ceci ? Vraisemblablement pas puisque ma requête "tourne" sans interruption ...

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. [AJAX] Menu déroulant sans redirection
    Par clementdevelop dans le forum AJAX
    Réponses: 11
    Dernier message: 28/05/2013, 09h54
  2. Dimensions d'un Menu déroulant
    Par polo-j dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/02/2005, 14h26
  3. Menu déroulant valeur par défaut
    Par Gourouni dans le forum ASP
    Réponses: 11
    Dernier message: 06/12/2004, 16h31
  4. Menu déroulant suite au passage sur un TMenuItem
    Par James_ dans le forum C++Builder
    Réponses: 2
    Dernier message: 05/05/2004, 14h31

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