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 :

Filtrer des éléments d'une liste selon plusieures valeurs d'un champ d'une table bdd [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur web amateur
    Inscrit en
    Août 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur web amateur
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2012
    Messages : 84
    Points : 43
    Points
    43
    Par défaut Filtrer des éléments d'une liste selon plusieures valeurs d'un champ d'une table bdd
    Bonjour,
    M'inspirant de ce site:http://annuaire.lenouveleconomiste.f...20&ParPage=10&,
    je voudrais donner aux utilisateurs le choix de filtrer une liste d'évènements selon leurs centres d'intérêts.
    Description de mon module simplifié :
    Par défaut, Dans la zone de gauche, la page affiche tous les évents par date décroissante.
    et dans la zone droite, un formulaire avec des checkboxes correspondant aux différentes valeurs du genre (nature) de l'event. Selon les cases cochées , la page se recharge et ne liste que les évents dont le (ou les) genre(s) est (sont) coché(s).
    Je ne sais pas comment m'y prendre, et je sollicite votre aide pour m'indiquer le principe de fonctionnement, les étapes ou les grandes lignes. À moi de faire le reste en cherchant d'après vos indications.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE IF NOT EXISTS `events` (
      `id` int(4) NOT NULL AUTO_INCREMENT,
      `titreEvent` varchar(255) NOT NULL,
      `genreEvent` varchar(255) NOT NULL,
      `yearEvent` varchar(4) NOT NULL,
      `dateEvent` date NOT NULL,
      PRIMARY KEY (`id`)
    )
    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
    <body>
    	<section id="leftside" style="width:640px;float:left;">
    		<?php
    		$sql = 'SELECT * FROM events WHER year="2015" ORDER BY dateEvent DESC';
    		$resultat = mysql_query($sql);
    		?>
    		<ul>
    			<?php
    			while ( $donnee = mysql_fetch_assoc($resultat) ) {
    			?>
    				<li><?php echo $donnee['genreEvent']; ?><br />
    				</li><?php echo $donnee['titreEvent']; ?>
    				<hr>
    			<?php
    			}
    			?>
    		</ul>
     
     
    	</section>
    	<section id="rightside" style="width:330px;float:right;" >
    		<form id="trier" method="post" action="index.php" style="width:300px;">
    		<p>
    			<input type="checkbox" name="sort[]" id="tous" value="Tous" /><label>Tous</label><br />
    			<input type="checkbox" name="sort[]" id="salon" value="Salon" /><label>Salon</label><br />
    			<input type="checkbox" name="sort[]" id="expo" value="Exposition" /><label>Exposition</label><br />
    			<input type="checkbox" name="sort[]" id="foire" value="Foire" /><label>Foire</label><br />
    			<input type="checkbox" name="sort[]" id="jpo" value="Journées Portes Ouvertes" /><label>Journées Portes Ouvertes</label><br />
    			<input type="checkbox" name="sort[]" id="inaug" value="Inauguration" /><label>Inauguration</label><br />
    			<input type="checkbox" name="sort[]" id="conf" value="Conférence" /><label>Conférence</label><br />
    			<input type="checkbox" name="sort[]" id="debat" value="Débat" /><label>Débat</label><br />
    			<input type="checkbox" name="sort[]" id="congr" value="Congrès" /><label>Congrès</label><br />
    			<input type="checkbox" name="sort[]" id="semin" value="Séminaire" /><label>Séminaire</label><br />
    			<input type="checkbox" name="sort[]" id="forma" value="Formation" /><label>Formation</label><br />
    			<input type="checkbox" name="sort[]" id="jurid" value="Juridique" /><label>Juridique</label><br />
    			<input type="checkbox" name="sort[]" id="fisc" value="Fiscal" /><label>Fiscal</label><br />
    			<input type="checkbox" name="sort[]" id="autre" value="Autre" /><label>Autre</label><br />
     
    			<input type="submit" value="Filtrer"/>
    		</p>
    		</form>
    		<?php
    			$sorting = $_POST["sort"];
    			echo "<b>Vous avez choisi </b><br />";
    			for ($i=0; $i<count($sorting); $i++) {
    				echo $sorting[$i]."<br />";
    			}
    		?>
    	</section>
    </body>
    Merci.

  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
    Il y a tellement peu à écrire du côté PHP que c'est difficile de t'aider sans te le faire.
    Tu ajoutes seulement dans ta requête les données cochées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $sql = 'SELECT * FROM events WHERE year=2015';
    if (!empty($_POST['sort'])) {
        $sql .= ' AND event_type IN (' . explode(',' array_map('intval', $_POST['sort'])) . ')';
    }
    $sql .= ' ORDER BY dateEvent DESC';
    $resultat = mysql_query($sql);
    Il faut par contre evidemment que
    - le type d’événement soit inscrit dans ta table (ici j'ai mis event_type par défaut)
    - les valeurs de tes cases à cocher correspondent aux valeurs de ta bdd ; idéalement tu as dans ta bdd une table référençant ces types et tes cases à cocher sont inscrites à partir de cette table.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur web amateur
    Inscrit en
    Août 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur web amateur
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2012
    Messages : 84
    Points : 43
    Points
    43
    Par défaut
    Je ne savais pas qu'on peut couper une requête sql par du php. Merci
    Mon champ est libellé "genreEvent" dans la table "events".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    			$sql = 'SELECT * FROM events WHERE year="2015" ';
    			if (!empty($_POST['sort'])) {
    				$sql .= ' AND genreEvent IN ('.explode(', ' array_map('intval', $_POST['sort'])).')';
    			}
    			$sql .= ' ORDER BY dateEvent DESC';
    Votre code me retourne:
    Parse error: syntax error, unexpected T_STRING in C:\wamp\www\14ghostphpsql\agenda\events-list.php on line 48
    c'est à dire à ce niveau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql .= ' AND genreEvent IN ('.explode(', ' array_map('intval', $_POST['sort'])).')';
    N'y a-t-il pas qq part une erreur de concaténation? Excusez-moi.

  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
    Une requête SQL ce n'est rien de plus qu'une chaine de caractère, donc on en fait ce qu'on veut.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur web amateur
    Inscrit en
    Août 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur web amateur
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2012
    Messages : 84
    Points : 43
    Points
    43
    Par défaut
    N'y a-t-til pas une erreur de concaténation à ce niveau de votre code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql .= ' AND genreEvent IN ('.explode(', ' array_map('intval', $_POST['sort'])).')';
    car ça me retourne : " Parse error: syntax error, unexpected T_STRING in C:\wamp\www\14ghostphpsql\agenda\events-list.php on line 48" ?

  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
    Avec moi tout est possible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql .= ' AND genreEvent IN ('.implode(', ',  array_map('intval', $_POST['sort'])).')';
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur web amateur
    Inscrit en
    Août 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur web amateur
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2012
    Messages : 84
    Points : 43
    Points
    43
    Par défaut
    C'est pas que je veux tout sans aucun effort pour comprendre, et pour preuve depuis une heure que je cherche, mais j'ai un problème:
    quand je mets ma requête comme ceci:
    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
    		<?php
    		$sql = 'SELECT * FROM events WHERE year="2015" ';
    		if (!empty($_POST['sort'])) {
    			$sql .= ' AND genreEvent IN ('.implode(',',  array_map('intval', $_POST['sort'])).')';
    		}
    		$sql .= ' ORDER BY dateEvent DESC';
    		$resultat = mysql_query($sql);
    		?>
    		<ul>
    			<?php
    			while ( $donnee = mysql_fetch_assoc($resultat) ) {
    			?>
    				<li>
    					<?php echo $donnee['genreEvent']; ?><br />
    					<?php echo $donnee['titreEvent']; ?>
    				</li>
    				<hr>
    			<?php
    			}
    			?>
    		</ul>
    ça me retourne: Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\wamp\www\dvlppz-sorting\index.php on line 24

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur web amateur
    Inscrit en
    Août 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur web amateur
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2012
    Messages : 84
    Points : 43
    Points
    43
    Par défaut
    Je n'ai plus ce pb de warning fetch_assoc, mais si je coche des checkboxes et je soumets ,je reçois la liste intégrale des events de 2015, sans filtrage.
    En plus, les checkboxes cochées avant submit se décochent ( à part celle de "Salon" car elle est checked)

  9. #9
    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
    Tu as mis les valeurs au checkbox ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre du Club
    Homme Profil pro
    Développeur web amateur
    Inscrit en
    Août 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur web amateur
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2012
    Messages : 84
    Points : 43
    Points
    43
    Par défaut
    Bonjour,
    Pour répondre à votre dernière question, oui: j'ai mis des values aux checkboxes. D'ailleurs, pour se remettre à jour, je re-poste le code complet:
    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
    <body>
    	<section id="leftside" style="width:640px;float:left;">
    		<?php
    		$sql = 'SELECT * FROM events WHERE yearEvent="2015" ';
    		if (!empty($_POST['sort'])) {
    			$sql .= ' AND genreEvent IN ('.implode(', ',  array_map('intval', $_POST['sort'])).')';
    		}
    		$sql .= ' ORDER BY dateEvent ASC';
    		$resultat = mysql_query($sql);
    		?>
    		<ul style="list-style:none;">
    			<?php
    			while ( $donnee = mysql_fetch_assoc($resultat) ) {
    			?>
    				<li>
    					<?php echo $donnee['genreEvent']; ?><br />
    					<?php echo $donnee['titreEvent']; ?>
    				</li>
    				<hr>
    			<?php
    			}
    			?>
    		</ul>
    	</section>
    	<section id="rightside" style="width:330px;float:right;" >
    		<form id="trier" method="post" action="index.php" style="width:300px;">
    		<p>
    			<!--<input type="checkbox" name="sort[]" id="tous" value="Tous" /><label>Tous</label><br />-->
    			<input type="checkbox" name="sort[]" id="salon" value="Salon" /><label>Salon</label><br />
    			<input type="checkbox" name="sort[]" id="expo" value="Exposition" /><label>Exposition</label><br />
    			<input type="checkbox" name="sort[]" id="foire" value="Foire" /><label>Foire</label><br />
    			<input type="checkbox" name="sort[]" id="jpo" value="Journées Portes Ouvertes" /><label>Journées Portes Ouvertes</label><br />
    			<input type="checkbox" name="sort[]" id="inaug" value="Inauguration" /><label>Inauguration</label><br />
    			<input type="checkbox" name="sort[]" id="conf" value="Conférence" /><label>Conférence</label><br />
    			<input type="checkbox" name="sort[]" id="debat" value="Débat" /><label>Débat</label><br />
    			<input type="checkbox" name="sort[]" id="congr" value="Congrès" /><label>Congrès</label><br />
    			<input type="checkbox" name="sort[]" id="semin" value="Séminaire" /><label>Séminaire</label><br />
    			<input type="checkbox" name="sort[]" id="forma" value="Formation" /><label>Formation</label><br />
    			<input type="checkbox" name="sort[]" id="jurid" value="Juridique" /><label>Juridique</label><br />
    			<input type="checkbox" name="sort[]" id="fisc" value="Fiscal" /><label>Fiscal</label><br />
    			<input type="checkbox" name="sort[]" id="autre" value="Autre" /><label>Autre</label><br />
    			<input type="submit" value="Filtrer"/>
    		</p>
    		</form>
    		<?php
    			/*$sorting = $_POST["sort"];
    			echo "<b>Vous avez choisi </b><br />";
    			for ($i=0; $i<count($sorting); $i++) {
    				echo $sorting[$i]."<br />";
    			}*/
    		?>
    	</section>
    </body>
    Nom : events.PNG
Affichages : 1201
Taille : 66,9 Ko
    Maintenant, si je coche des cases, ça me retourne tous les events sans filtrage , et ces cases cochées se sont décochées.

  11. #11
    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
    Comme je te l'ai dit, fait une table de reference pour les types
    id, libelle
    1, Salon
    2, Exposition
    3, Foire
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  12. #12
    Membre du Club
    Homme Profil pro
    Développeur web amateur
    Inscrit en
    Août 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur web amateur
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2012
    Messages : 84
    Points : 43
    Points
    43
    Par défaut
    Excuse-moi Sabotage, mais ils est très important que j'arrive à faire ce module.
    Je refonds tout dans un nouveau code, et je te prie de ne plus tenir compte des données précédentes.

    Voici mes tables:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    CREATE TABLE IF NOT EXISTS `events` (
      `id_event` int(11) NOT NULL AUTO_INCREMENT,
      `titre_event` varchar(255) DEFAULT NULL,
      `year_event` varchar(4) DEFAULT NULL,
      `id_genre` int(11) NOT NULL,
      `dateEvent` date NOT NULL,
      PRIMARY KEY (`id_event`),
      KEY `id_genre` (`id_genre`)
    );
    INSERT INTO `events` (`id_event`, `titre_event`, `year_event`, `id_genre`, `dateEvent`) VALUES
    (1, 'Titre Un', '2015', 3, '2015-02-06'),
    (2, 'Titre Deux', '2015', 1, '2015-02-10'),
    (3, 'Titre Trois', '2015', 2, '2015-02-21'),
    (4, 'Titre Quatre', '2015', 1, '2015-03-11'),
    (5, 'Titre Cinq', '2015', 2, '2015-04-16');
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE IF NOT EXISTS `eventgenre` (
      `id_genre` int(11) NOT NULL AUTO_INCREMENT,
      `libelle` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id_genre`)
    );
    INSERT INTO `eventgenre` (`id_genre`, `libelle`) VALUES
    (1, 'salon'),
    (2, 'exposition'),
    (3, 'foire');
    page index.php:
    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
    <body>
    	<section id="leftside" style="width:640px;float:left;">
    		<?php
    		$sql = 'SELECT * FROM events INNER JOIN eventgenre ON libelle.eventgenre = ';
    		if (!empty($_POST['sort'])) {
    			$sql .= ' "('.implode(', ',  array_map('intval', $_POST['sort'])).')" ';
    		}
     
    		$sql .= 'WHERE year_event="2015" ORDER BY dateEvent ASC';
    		//echo $sql;
    		$resultat = mysql_query($sql);
    		?>
    		<ul style="list-style:none;">
    			<?php
    			while ( $donnee = mysql_fetch_assoc($resultat) ) {
    				?><li>
    					<?php echo $donnee['libelle']; ?><br />
    					<?php echo $donnee['titre_event']; ?>
    				</li><hr><?php
    			}
    			?>
    		</ul>
    	</section>
    	<section id="rightside" style="width:330px;float:right;" >
    		<form id="trier" method="post" action="index.php" style="width:300px;">
    			<input type="checkbox" name="sort[]" id="salon" value="Salon" /><label>Salon</label><br />
    			<input type="checkbox" name="sort[]" id="expo" value="Exposition" /><label>Exposition</label><br />
    			<input type="checkbox" name="sort[]" id="foire" value="Foire" /><label>Foire</label><br />
    			<input type="submit" value="Filtrer"/>
    		</form>
    	</section>
    </body>
    Si je fais un echo variable sql, au démarrage (1er affichage), j'ai 2 résultats :
    1)
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM events INNER JOIN eventgenre ON libelle.eventgenre = WHERE year_event="2015" ORDER BY dateEvent ASC
    2)
    Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\wamp\www\dvlppz-sorting\index.php on line 26

    Si je coche par exemple les cases "salon" et "exposition" :
    1) echo variable sql:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM events INNER JOIN eventgenre ON libelle.eventgenre = "(0, 0)" WHERE year_event="2015" ORDER BY dateEvent ASC
    2)
    Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\wamp\www\dvlppz-sorting\index.php on line 26

    J'ai cherché en vain à comprendre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array_map('intval', $_POST['sort'])
    Pourrais-tu , stp, prendre le sujet en main ?

  13. #13
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par amdawb Voir le message
    Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\wamp\www\dvlppz-sorting\index.php on line 26
    le message ci-dessus veut dire que ta requête n'a retourné aucune ressource (que tu essaies pourtant d'exploiter sans avoir contrôlé qu'elle existe)
    Citation Envoyé par amdawb Voir le message
    J'ai cherché en vain à comprendre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array_map('intval', $_POST['sort'])
    Et t'as cherché sur le manuel pour array_map() ?
    Ici on applique la fonction intval() sour tous les éléments du tableau $_POST['sort']

  14. #14
    Membre du Club
    Homme Profil pro
    Développeur web amateur
    Inscrit en
    Août 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur web amateur
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2012
    Messages : 84
    Points : 43
    Points
    43
    Par défaut
    Bien sûr que j'y ai cherché, et pour faire avancer un tant soit peu ce sujet, ne serais pas là d'où provient l'erreur, vu qu'un echo (variable) sql de chaque submit me retourne des (0,0) selon le nombre de case cochées comme expliqué en haut.

  15. #15
    Membre du Club
    Homme Profil pro
    Développeur web amateur
    Inscrit en
    Août 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur web amateur
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2012
    Messages : 84
    Points : 43
    Points
    43
    Par défaut
    Je m'explique, et je ne cherche qu'à comprendre:
    _ en faisant un array_map, on applique une fonction de callback (laquelle?) aux éléments du tableau variable_POST['sort'].

    _ pourquoi vouloir une valeur entière (intval) au lieu de la chaîne de caractères, par exemple si je check "Foire" et je fais un print_r(['sort']) j'obtiens [0]=> Foire. Donc array_map('intval',variable_POST['sort']) devait me retourner la valeur en string ( Foire ) et non son index 0. (Array to string conversion)

    le message ci-dessus veut dire que ta requête n'a retourné aucune ressource (que tu essaies pourtant d'exploiter sans avoir contrôlé qu'elle existe)
    _ var_dump(array_map('intval', s_POST['sort']));------->array 0 => int 0
    Donc je n'ai aucune valeur ,d'où le warning.Comment contrôler si elle existe et comment la récupérer ?

    _ Enfin si quelqu'un a une solution , elle est la bienvenue car je m'y perds complètement.

  16. #16
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Supprime le array_map pour voir... mais dans ce cas il faudrait utiliser ton ancien code.

    Et puis tu as déjà préparé le débug pour visualiser ta requête (avec echo $sql) donc utilise cette ligne pour voir si ta requête est bien construite.


    EDIT Avec le nouveau code il faudrait aussi modifier ton formulaire et dans ce cas les valeurs pourraient être castées en entier.

  17. #17
    Membre du Club
    Homme Profil pro
    Développeur web amateur
    Inscrit en
    Août 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur web amateur
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2012
    Messages : 84
    Points : 43
    Points
    43
    Par défaut
    En faisant ceci:
    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
    		<?php
    		$sql = 'SELECT * FROM events INNER JOIN libelle.eventgenre = ';
    		/*if (!empty($_POST['sort'])) {
    				$sql .= ' ('.implode(', ',  array_map('intval', $_POST['sort'])).') ';
    		}
    		$sql .= ' WHERE year_event="2015" ORDER BY dateEvent ASC';*/
    		if (!empty($_POST['sort'])) {
    				$sql .= ' ('.implode(', ', $_POST['sort']).') ';
    		}
    		$sql .= ' WHERE year_event="2015" ORDER BY dateEvent ASC';
    		echo $sql;
    		//var_dump(array_map('intval', $_POST['sort']));
    		var_dump($_POST['sort']);
    		$resultat = mysql_query($sql);
    		?>
    		<ul style="list-style:none;">
    			<?php
    			while ( $donnee = mysql_fetch_assoc($resultat) ) {
    				?><li>
    					<?php echo $donnee['libelle']; ?><br />
    					<?php echo $donnee['titre_event']; ?>
    				</li><hr><?php
    			}
    			?>
    		</ul>
    Voilà ce que j'obtiens:
    Nom : warning.PNG
Affichages : 1197
Taille : 15,5 Ko

  18. #18
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Le implode c'est pour construire la clause du IN qu'il y avait dans tes précédentes requêtes. Pourquoi l'avoir supprimée ?

    Regarde la structure des jointures inner joint ici. Tu vois bien dans l'echo de ta requête qu'elle ne ressemble à rien de tout cela.

  19. #19
    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 WHERE n'est pas au bon endroit c'est tout
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $sql = 'SELECT * FROM events INNER JOIN eventgenre ON libelle.id_genre=event.id_genre WHERE ';
    		if (!empty($_POST['sort'])) {
    			$sql .= 'event.id_genre IN ('.implode(', ',  array_map('intval', $_POST['sort'])).') AND ';
    		}
     
    		$sql .= ' year_event=2015 ORDER BY dateEvent ASC';
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  20. #20
    Membre du Club
    Homme Profil pro
    Développeur web amateur
    Inscrit en
    Août 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur web amateur
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2012
    Messages : 84
    Points : 43
    Points
    43
    Par défaut
    Bonjour,
    Désolé Sabotage, mais ta requête ne marche pas.
    echo Ssql donne:
    SELECT * FROM events INNER JOIN eventgenre ON libelle.id_genre=event.id_genre WHERE event.id_genre IN (0) AND year_event="2015" ORDER BY dateEvent ASC.
    C'est toujours au niveau du array_map qui ne récupère pas de string.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 5
    Dernier message: 29/01/2010, 14h22
  2. Réponses: 2
    Dernier message: 30/11/2007, 17h54
  3. Afficher Une Liste Selon La Valeur D'une Cellule
    Par Kevin_18 dans le forum Excel
    Réponses: 10
    Dernier message: 02/07/2007, 19h22
  4. Réponses: 4
    Dernier message: 23/04/2007, 14h01
  5. Réponses: 5
    Dernier message: 28/08/2006, 18h11

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