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 :

Récupérer les champs d'une requête dans une URL


Sujet :

PHP & Base de données

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Analyste programmeur
    Inscrit en
    Avril 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Récupérer les champs d'une requête dans une URL
    Bonjour,

    Je me tourne vers vous car cela fait plus d'une semaine que je cherche une solution à mon problème sans rien trouver...

    Je voudrais, à partir d'une requête SQL dans un fichier PHP, afficher les champs sélectionnés dans la dite-requête dans une URL, pour sortir un fichier XLS.
    L'utilisateur sélectionne ses paramètres (société et/ou centre et/ou service et une date). La requête affiche sur la page PHP un tableau contenant le nombre de documents initiés pour une société, un centre et un service. Je voudrais récupérer ces champs (SOCIETE_EXC, MAGASIN_EXC, SERVICE_EXC) qui sont donc affichés dans le tableau et pouvoir récupérer un fichier XLS qui liste les numéros des documents concernés.
    Sauf que lorsque je clique sur le lien "détail" dans le tableau de ma page PHP, j'ai une erreur : soit pour lui la requête est vide, soit le lien n'est pas correct. Il doit y avoir une erreur d’interprétation, mais je ne vois pas laquelle.
    J'ai essayé avec et sans les ', avec et sans les \, avec et sans les ||, mais rien ne fonctionne.

    Voici le code en question :

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
     
    <?php
    set_time_limit(300);
     
    	//Appel de Fonctions
    	require('../fonctions_affichage.php');
     
    if($_REQUEST['action'] == 'submitted' and $_REQUEST['submit2'] == 'Export dans un tableur'){
    	require('../config.php');
    	require('../fonctions_login.php');
    	}
    else
    	{
    		include('../header.php');
    		initiation_formulaire_php();
     
    ?>
    <!-- Panneau de sélection des parametres  -->
    <div id="parametres">
     
    <?php include("../js/calendrier.php"); ?>
     
    <span class="titre_choix">Sélectionnez vos paramètres :</span>
     
    <table CLASS="parametres">
     
    	<tr>
    		<td><span class="lib_para">Société - Centre exec. :	</span></td>
    		<td>
    			<input type="text" name="P_SOC" size="3" maxlength= "3" value="<?php echo (isset($_REQUEST['P_SOC']))? $_REQUEST['P_SOC']: '' ;?>" >
    			<input type="text" name="P_MAG" size="3" maxlength= "3" value="<?php echo (isset($_REQUEST['P_MAG']))? $_REQUEST['P_MAG']: '' ;?>">
    		</td>
    	</tr>
     
    	<tr>
    		<td><span class="lib_para">Lieu. exec.</span></td>
    		<td><input type="text" name="P_OELIEU" size="6" MAXLENGTH="5" value="<?php echo (isset($_REQUEST['P_OELIEU']))? $_REQUEST['P_OELIEU']: '' ;?>"></td>
    	</tr>
     
    	<tr>
    		<td><span class="lib_para">Date exécution OE, du :</span></td>
    		<td>
    			<?php affiche_calendrier("P_JOURDEB","P_JOURFIN",'dd/MM/yyyy');?>
    			<span class="lib_para"> au :</span>
    		</td>
    		<td><?php affiche_calendrier("P_JOURFIN","P_SOC",'dd/MM/yyyy');?></td>
    	</tr>
     
    </table>
    <?php
    cloture_formulaire_php('h');
     
    }
     
    //Prise en compte des parametre souhaité par l'utilisateur
    if ($_REQUEST['action'] == 'submitted') {
    // DEBUT DE REQUETE SQL PERSONNALISEE
     
        $datedeb = substr($_REQUEST['P_JOURDEB'],6,4)."-".substr($_REQUEST['P_JOURDEB'],3,2)."-".substr($_REQUEST['P_JOURDEB'],0,2);
        $datefin = substr($_REQUEST['P_JOURFIN'],6,4)."-".substr($_REQUEST['P_JOURFIN'],3,2)."-".substr($_REQUEST['P_JOURFIN'],0,2);
     
    	// Lien pour fichier XLS
    	$url = "'<a href=\"detail.php?P_SOC=\'||SOCIETE_EXC||\'&P_MAG=\'||MAGASIN_EXC||\'&P_OELIEU=\'||SERVICE_EXC||\'&P_JOURDEB=date_deb&P_JOURFIN=date_fin\">Détail</a>' AS DETAIL";
     
    	// Restriction
    		// Gestion date complète
    		$restrictions = " date(DATE_OE) between '".$datedeb."' and '".$datefin."' ";
    		// Gestion soc
    		if ($_REQUEST['P_SOC'] != "")  {$restrictions .= " and SOCIETE_EXC = '".strtoupper($_REQUEST['P_SOC'])."' ";}
    		// Gestion magasin
    		if ($_REQUEST['P_MAG'] != "")  {$restrictions .= " and MAGASIN_EXC = '".strtoupper($_REQUEST['P_MAG'])."' ";}
    		// Gestion lieu
    		if ($_REQUEST['P_OELIEU'] != "")  {$restrictions .= " and SERVICE_EXC = '".strtoupper($_REQUEST['P_OELIEU'])."' ";}
     
    	// Requête
    	$requete = str_replace('date_fin', $_REQUEST['P_JOURFIN'], 
    				str_replace('date_deb', $_REQUEST['P_JOURDEB'],  str_replace("<URL>", $url, str_replace("<RESTRICTIONS>", $restrictions, 
    				'SELECT
    					SOCIETE_EXC
    					, MAGASIN_EXC
    					, SERVICE_EXC
    					, SERVICE_LIB   
    					, NBOE
    					, <URL>
    
    				FROM 
    				(
    					SELECT 
    		  				SOCIETE_EXC
    						, MAGASIN_EXC
    						, SERVICE_EXC
    						, SERVICE_LIB  
    						, COUNT(DISTINCT NUMERO_OE) AS NBOE
    	
    					FROM NB_DOC
    
    					WHERE <RESTRICTIONS>
    
    					GROUP BY SOCIETE_EXC, MAGASIN_EXC, SERVICE_EXC, SERVICE_LIB 
    					ORDER BY SOCIETE_EXC, MAGASIN_EXC, SERVICE_EXC
    				) as SYNTHESE 
    
    				ORDER BY SOCIETE_EXC, MAGASIN_EXC, SERVICE_EXC', fread ($handle, filesize ($filename))))));
     
    	 echo $requete;
     
    	// Initialisation des en-têtes de colonnes
    	$nom_field = array("Soc. exec.", "Cent. exec.", "Service exec.", "Libellé service exec.", "Nb OE", "Info");
     
    // FIN DE REQUETE SQL PERSONNALISEE
     
     
    //Execution de la requete
    $connect = connexion($_MYSQL);
    $result = mysql_query($requete) or die(mysql_error());
     
    //Format de sortie
    include('../format_sortie.php');
    }
     
    include("../footer.php");
    ?>
    La page PHP est de cette forme :
    Nom : Tableau.JPG
Affichages : 553
Taille : 25,3 Ko

    Lorsque je clique sur "détail", l'url qui s'affiche est la suivante :
    http://site_php/a_valider/detail.php...FIN=31/03/2014

  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
    Pourquoi tu mets des || dans l'url ?

    Sinon ce que tu fais avec tes str_replace c'est une horreur.
    Utilise PDO ou mysqli et une requête préparée avec des arguments.

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Analyste programmeur
    Inscrit en
    Avril 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse, sabotage !!

    J'ai repris un exemple de code qu'un de mes collègues avait déjà fait, et il utilisait des || dans son lien, qui fonctionnait très bien pour lui, mais qui ne marche pas avec mon code.

    Si tu dis que c'est une horreur je ne peux que te croire... je suis débutante dans le PHP et j'apprends sur le tas. Je vais essayer avec du mysqli, mais je garantis pas que ça marche avec la version de SQL qu'on utilise.

  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
    La question n'est pas vraiment de savoir si ça marche ou pas mais à quoi servent ces || ? dans quel but sont-ils la ?

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Analyste programmeur
    Inscrit en
    Avril 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    A l'origine, ce rapport à trois fichiers : deux PHP (un pour le tableau et un pour le fichier détail.xls) et un SQL qui contient la requête et l'url. Le fichier SQL est présenté ainsi, avec les || dans l'url :

    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
    16
    17
    SELECT
    	SOCIETE_EXC
    	, MAGASIN_EXC
    	, SERVICE_EXC
    	, SERVICE_LIB   
    	, NBOE
    	, '<a href=\"detail.php?P_SOC='||SOCIETE_EXC||'&P_MAG='||MAGASIN_EXC||'&P_OELIEU='||SERVICE_EXC||'&P_JOURDEB=date_deb&P_JOURFIN=date_fin\">Détail</a>' AS DETAIL
     
    FROM (
    		SELECT 
    			SOCIETE_EXC
    			, MAGASIN_EXC
    			, SERVICE_EXC
    			, SERVICE_LIB  
    			, COUNT(DISTINCT NUMERO_OE) AS NBOE
    		FROM NB_DOC
    		WHERE

    Sans les ||, je n'aurais pas le retour des champs sélectionnés dans la requête.

  6. #6
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 275
    Points
    3 275
    Par défaut
    Ce n'est pas la bonne méthode, il existe des méthodes simples et propres de passer un tableau dans une url : http://cyberzoide.developpez.com/php4/url/#LII-D

Discussions similaires

  1. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  2. Réutiliser des données d'une requête dans une requête
    Par mims1664 dans le forum Requêtes
    Réponses: 12
    Dernier message: 06/02/2009, 14h12
  3. Récupérer les champs d'un formulaire dans une jsp
    Par lalyly dans le forum Struts 1
    Réponses: 1
    Dernier message: 19/04/2007, 10h50
  4. Réponses: 2
    Dernier message: 02/06/2006, 11h26
  5. Réponses: 4
    Dernier message: 01/12/2005, 14h36

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