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 :

PHP, MySQL & $_GET


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 22
    Par défaut PHP, MySQL & $_GET
    Bonjour à tous, je cherche a recenser tous les employés de mon entreprise, pour cela j'ai créé une base de donnée mysql pour me permettre de visualiser les informations de chaque employé sur une page web, en passant par php.
    J'ai un fichier liste.php auquel je voudrai assigner plusieurs taches en fonction de l'url qui lui est associée. Je m'explique si l'url termine par /liste.php, je souhaite qu'il affiche toute la liste, sinon si l'url est le résultat d'une recherche par un formulaire et qu'elle se termine par /liste.php?nom=Dupont&prenom= je souhaite que la liste affiche tous ceux dont le nom est Dupont.
    Pour se faire j'ai réalisé ce petit bout de 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
    <div id="struct">
    	<h1>Liste des employés</h1>
    	<p>
    	<?php
    		$db = mysql_connect('localhost','root');
    		mysql_select_db('employes',$db);
     
    		// on crée la requête SQL
    		if ( $_GET['prenom'] != NULL ) { $prenom = $_GET['prenom']; }
    		elseif ( $_GET['nom'] != NULL ) { $nom = $_GET['nom']; }
     
    		if ( $prenom != NULL ) {
    			if ( $nom != NULL ) { $sql = "SELECT * FROM employes WHERE prenom='$prenom' AND nom='$nom' ORDER by nom ASC"; }
    			else { $sql = "SELECT * FROM employes WHERE prenom='$prenom' ORDER by nom ASC"; }
    		}
    		elseif ( $nom != NULL ) {
    			if ( $prenom != NULL ) { $sql = "SELECT * FROM employes WHERE prenom='$prenom' AND nom='$nom' ORDER by nom ASC"; }
    			else { $sql = "SELECT * FROM employes WHERE nom='$nom' ORDER by nom ASC"; }
    		}
    		else { $sql = "SELECT * FROM employes ORDER by nom ASC"; }
     
    		$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
    		while($data = mysql_fetch_assoc($req))
    		{
    			// on affiche les informations de l'enregistrement en cours
    			echo '<a href=employe.php?id=' .$data['id']. '>' .$data['nom'].' '.$data['prenom'].')</a><br />';
    		}
     
    		mysql_close();
    		?> 
    	</p>
    </div>
    cependant, cela ne marche qu'a moitié, en effet lorsque ?prenom=XXX&nom=YYY , le cela fonctionne, mais lorsqu'ils n'existent pas, j'obtiens:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Notice: Undefined index: prenom in \www\employes\liste.php on line 33
    Notice: Undefined index: nom in \www\employes\liste.php on line 34
    Notice: Undefined variable: prenom in \www\employes\liste.php on line 36
    Notice: Undefined variable: nom in \www\employes\liste.php on line 40
    Il semblerait que la détection de l'existence ou non de ?prenom=XXX&nom=YYY ne se fasse pas comme ci dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		if ( $_GET['prenom'] != NULL ) { $prenom = $_GET['prenom']; }
    		elseif ( $_GET['nom'] != NULL ) { $nom = $_GET['nom']; }
    Quelqu'un aurait-il une idée?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 206
    Par défaut
    Bonjour,

    et avec ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (isset( $_GET['prenom'] ) )
     { $prenom = $_GET['prenom']; }
    elseif ( isset($_GET['nom'])) 
    { $nom = $_GET['nom']; }
    Tu teste ainsi l'existence de la variable ...

  3. #3
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut

    Tu peux tester la "non nullité" de la valeur en plus en utilisant empty au lieu de isset.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 22
    Par défaut
    ah bah très bien ça marche nickel, merci a vous!!
    par contre j'ai une autre petite question ^^
    Je souhaite également effectuer des recherche en fonction des domaines d'activité de chacun de mes employés (Service juridique, technique...)

    J'ai réussi pour le nom et prenom:
    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
    		// on crée la requête SQL
    		if (isset($_POST['prenom'])) {
    			$prenom = $_POST['prenom'];
    		}
    		if (isset($_POST['nom'])) {
    			$nom = $_POST['nom'];
    		}
     
    		if (isset($prenom) && isset($nom)) {
    			if ( $prenom != '' ) {
    				if ( $nom != '' ) { $sql = "SELECT * FROM employes WHERE prenom LIKE '%$prenom%' AND nom LIKE '%$nom%' ORDER BY nom ASC"; }
    				else { $sql = "SELECT * FROM employes WHERE prenom LIKE '%$prenom%' ORDER BY nom ASC"; }
    			}
     
    			elseif ( $nom != '' ) {
    				if ( $prenom != '' ) { $sql = "SELECT * FROM employes WHERE prenom LIKE '%$prenom%' AND nom LIKE '%$nom%' ORDER BY nom ASC"; }
    				else { $sql = "SELECT * FROM employes WHERE nom LIKE '%$nom%' ORDER BY nom ASC"; }
    			}
    		}
    		else { $sql = "SELECT * FROM employes ORDER BY nom ASC"; }
    Je suis obligé de tester si l'un des 2 champs est null et modifier la requête sql en fonction de la nullité ou non de ces 2 champs, ce qui ne semble pas être une approche optimisé du code ^^

    J'ai a présent une formulaire avec des checkboxes, juridique, economique, technique. Cependant, la requete sql risque d'être différente selon chaque recherche effectuée. Je m'explique, si je coche juridique et economique
    la requete sera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM employes WHERE jur=1 AND eco=1 ORDER BY nom ASC"
    si je coche juridique et technique j'aurai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM employes WHERE jur=1 AND tech=1 ORDER BY nom ASC"
    si je coche economique et technique j'aurai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM employes WHERE tech=1 AND eco=1 ORDER BY nom ASC"
    je peux également ne rien cocher.. comment modifier cette requete sql en fonction des checkboxes ?

  5. #5
    Membre éclairé Avatar de Sekigawa
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    432
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 432
    Par défaut
    Avec une condition genre if...elseif...else !!

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 22
    Par défaut
    hmm, du coup comme j'ai fait avec les noms et prenoms plus haut?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 206
    Par défaut
    Une fois que tu as coché tes checkbox et que tu as valider ton formulaire (donc envoie des données par $_POST ou$_GET), tu les récupères et tu construit ta condition where.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $requete = "select * from employe";
    $condition="";
    $tri = "ORDER BY nom ASC";
    Tu teste ensuite si tu récupère bien tes checkbox (avec isset)
    Si elles sont cochées, tu t'en sert pour faire ta condition where

    $condition=...

    et une fois que c'est fini tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $requete .= $condition.$tri;

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 22
    Par défaut
    oui, seulement je ne vois pas comment construire le Where a partir de mes checkboxes,

    j'ai ça pour l'instant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	<form method="post" action="liste.php">
    		<div id="corps-droit">
    			<p>Domaines d\'activité :<br />
    			<input type="checkbox" name="choix8" id="finance" /> <label for="finance">Finance</label><br />
    			<input type="checkbox" name="choix9" id="immo" /> <label for="immo">Immobilier</label><br />
    			<input type="checkbox" name="choix10" id="reseaux" /> <label for="reseaux">Réseaux</label><br />
    			<input type="checkbox" name="choix11" id="robotique" /> <label for="robotique">Robotique</label><br />
    			<input type="checkbox" name="choix12" id="dev" /> <label for="dev">Développement</label><br />
    			<input type="checkbox" name="choix13" id="bdd" /> <label for="bdd">Bases de données</label><br />
    			<input type="checkbox" name="choix14" id="env" /> <label for="env">Environnement</label><br />	
    			</p>
    		</div>
    			<p style="text-align:center"><input type="submit" value="Envoyer"/> <input type="reset" value="Effacer" /></p>
    	</form>
    Je dois donc récupérer dans liste les cases cochées ou non. j'ai essayé ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?
     $where = 'WHERE';
     if(!empty($_POST['choix'.$i])) {
     $where = $where.' '.$_POST['choix'.$i].'=1 AND';
    } ?>
    quelque chose comme ça ?

Discussions similaires

  1. [MySQL] Optimisation de scripts PHP/MySQL
    Par DgG dans le forum PHP & Base de données
    Réponses: 368
    Dernier message: 20/11/2013, 18h59
  2. [MySQL] [Script]Optimisation de scripts Php/MySQL (2)
    Par copy dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 27/08/2004, 08h33
  3. [php / mysql] pb if ( mysql_query() )
    Par dkmatt dans le forum Requêtes
    Réponses: 5
    Dernier message: 12/01/2004, 20h07

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