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ération variable depuis une requête pour en déclencher une autre [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 132
    Points : 69
    Points
    69
    Par défaut récupération variable depuis une requête pour en déclencher une autre
    Bonjour, j'ai une liste contenant le nom de serveurs. Je veux qu'en sélectionnant et en soumettant via un bouton de validation que la seconde requête s'exécute. Or pour l'instant la seconde requête ne me renvoit que les infos du premier serveur de la liste, si j'en choisi un autre, le nom du serveur contenu dans la variable ne change pas. voici 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
    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
     
    <?php
    echo 'Historique checkFS par serveur<br />';
     
    include ('inc.php');
    $connexion =mysql_connect("$host","$user","$password")
    or die ("Impossible d'établir de connexion"); $data= mysql_select_db($db,$connexion) or die ("Sélection impossible");
    echo '<form name="choix" method="POST" action="frame.php"><select>';
     
    $SQL = "SELECT DISTINCT Hostname FROM checkfs order by Hostname";
    $res = mysql_query($SQL);
    while($val=mysql_fetch_array($res)) {
    	$Host="$val[Hostname]";
       echo "<option value=\"$val[Hostname]\">$Host</option>\n";
    }
    echo '</select>';
    echo '<input type="submit" name="soumission" value="soumettre">';
    echo '</form>';
     
    <div class="bbcode_container">
    	<div class="bbcode_quote">
    		<div class="quote_container">
    			<div class="bbcode_quote_container"></div>
     
    				j'aimerai que la valeur $Host soit transmise à la requête ci-dessous
    			
    		</div>
    	</div>
    </div>
    echo "<span class='texte2'></span>";
    echo"<br />";
    echo "<span class='texte'>";
    $requete ="SELECT * FROM checkfs WHERE Hostname='$Host' ORDER BY Date DESC";
    $resultat = mysql_query($requete) or die ("Exécution impossible");
    $nblignes = mysql_num_rows($resultat);
    echo"<table class='tableau'>";
    echo"<tr class='texte2'><td>Date</td><td>Vol</td><td>Label</td><td>Size*</td><td>Free*</td><td>%</td></tr>";
    for ($i=0; $i<$nblignes; $i++){
    $n= $i+1;
    $ligne = mysql_fetch_array($resultat);
    extract($ligne);
    
    $Size= STR_replace(' GB', '', $Size);
    $Frees= STR_replace(' GB', '', $Frees);
    echo "
    <tr class='texte'>
    <td>$Date</td>
    <td>$Volume</td>
    <td>$Label</td>
    <td>$Size</td>
    <td>$Frees</td>";
    $Freep= STR_replace('%', '', $Freep);
    
    if ($Freep == Seuil){
    	echo "<td><b>$Freep</b></td>";
    	}
    else if ($Freep < Seuil){
    	echo "<td class='rouge'>$Freep</td>";	}
    
    
    echo "</tr>\n";
    }
    echo "</table>\n";
    ?>
    merci d'avance pour votre aide

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Bonjour,

    Pour cela, il faudrait que la 2e requête reçoive la valeur soumise par le formulaire.

    Donc, récupère la valeur du select dans $_POST, et injecte-le dans la requête.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 132
    Points : 69
    Points
    69
    Par défaut donc
    en fait je devrais écrire ça?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $requete ="SELECT * FROM checkfs WHERE Hostname=$_Post['$Host'] ORDER BY Date DESC";

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Houla !
    C'est l'esprit, mais il ne faut jamais insérer une donnée brute issu d'un POST / GET dans une requête SQL, tu risques des injections dangrereuses sinon (voir l'article sur les injections SQL sur developpez.com).
    1- tu mets un name à ton select
    2- l'utilisateur soumets le formulaire en appuyant sur le bouton.
    3- tu récupères la valeur du choix dans $_POST
    4- tu nettoyes $choix
    5- tu lances la requête.
    J'ai repris ton code de départ ici, et l'ai légèrement réécrit. Ton choix des guillements simples ou doubles est douteux, il y a des endroits où il faudrait que tu refermes le code php par un ?>, et il y a d'autres endroits où des problèmes se posent.
    Ceci devrait marcher:
    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
     
    <?php
     
    if(isset($_POST['soumission']))
    	$choix = $_POST['choix'];
     
    echo 'Historique checkFS par serveur<br />';
     
    include ('inc.php');
    $connexion =mysql_connect("$host","$user","$password")
    or die ("Impossible d'établir de connexion");
    $data= mysql_select_db($db,$connexion) or die ("Sélection impossible");
    echo "<form name='choix' method='POST' action='frame.php'><select name ='choix'>";
     
    $SQL = "SELECT DISTINCT Hostname FROM checkfs order by Hostname";
    $res = mysql_query($SQL);
    while($val=mysql_fetch_array($res)) {
    	$Host=$val['user_name'];
       echo "<option value=".$val['user_name'].">".$Host."</option>\n";
    }
    echo '</select>';
    echo '<input type="submit" name="soumission" value="soumettre">';
    echo '</form>';
    ?> 
    <!-- BEGIN TEMPLATE: bbcode_quote -->
    <div style="margin:20px; margin-top:5px; ">
    	<div class="smallfont" style="margin-bottom:2px">Citation:</div>
    	<table cellpadding="6" cellspacing="0" border="0" width="100%">
    	<tr>
    		<td class="alt2" style="border:1px inset">
     
     
     
    		</td>
    	</tr>
    	</table>
    </div>
    <!-- END TEMPLATE: bbcode_quote -->
    <?php
    echo "<span class='texte2'></span>";
    echo"<br />";
    echo "<span class='texte'>";
     
    //échappement de $choix pour protéger la requête. C'est juste une protection minimale.
    $choix = mysql_real_escape_string($choix);
    $requete ="SELECT * FROM checkfs WHERE Hostname='$choix' ORDER BY Date DESC";
     
    $resultat = mysql_query($requete) or die ("Exécution impossible");
    $nblignes = mysql_num_rows($resultat);
    echo"<table class='tableau'>";
    echo"<tr class='texte2'><td>Date</td><td>Vol</td><td>Label</td><td>Size*</td><td>Free*</td><td>%</td></tr>";
    for ($i=0; $i<$nblignes; $i++){
    $n= $i+1;
    $ligne = mysql_fetch_array($resultat);
    extract($ligne);
     
    $Size= STR_replace(' GB', '', $Size);
    $Frees= STR_replace(' GB', '', $Frees);
    echo "
    <tr class='texte'>
    <td>$Date</td>
    <td>$Volume</td>
    <td>$Label</td>
    <td>$Size</td>
    <td>$Frees</td>";
    $Freep= STR_replace('%', '', $Freep);
     
    if ($Freep == Seuil){
    	echo "<td><b>$Freep</b></td>";
    	}
    else if ($Freep < Seuil){
    	echo "<td class='rouge'>$Freep</td>";	}
     
     
    echo "</tr>\n";
    }
    echo "</table>\n";
    ?>
    Si tu veux que tout se fasse sans rechargement de la page, tu peux utiliser Ajax. Il y a des très bons tutoriels sur developpez.com.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/09/2013, 14h55
  2. [AC-2010] Problème à l'exécution d'une requête suppression basée sur une requête sélection
    Par Philippe1975 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 14/06/2013, 23h21
  3. Réponses: 9
    Dernier message: 19/12/2011, 18h11
  4. Réponses: 2
    Dernier message: 21/10/2010, 11h15
  5. passer d'une requêtes SGL directe en une requête normale
    Par jenniferIUP dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 04/02/2009, 09h26

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