2008-10-15 7 views
2

J'ai besoin que les valeurs des entrées de formulaire soient remplies par la base de données sql. Mon code fonctionne très bien pour toutes les entrées de texte et de textarea mais je n'arrive pas à comprendre comment affecter la valeur de la base de données aux listes déroulantes, par exemple. «Type de propriété» ci-dessous. Il s'articule autour de l'obtention de l'option sélectionnée pour représenter la valeur contenue dans la base de données.Comment remplir la liste des listes déroulantes avec les données Mysql?

Voici mon code:

$result = $db->sql_query("SELECT * FROM ".$prefix."_users WHERE userid='$userid'");  
$row = $db->sql_fetchrow($result); 

echo "<center><font class=\"title\">"._CHANGE_MY_INFORMATION."</font></center><br>\n"; 
echo "<center>".All." ".fields." ".must." ".be." ".filled." 
<form name=\"EditMyInfoForm\" method=\"POST\" action=\"users.php\" enctype=\"multipart/form-data\">   
    <table align=\"center\" border=\"0\" width=\"720\" id=\"table1\" cellpadding=\"2\" bordercolor=\"#C0C0C0\">   
    <tr>     
     <td align=\"right\">".Telephone." :</td>     
     <td> 
     <input type=\"text\" name=\"telephone\" size=\"27\" value=\"$row[telephone]\"> Inc. dialing codes 
     </td>   
    </tr>   
    <tr>     
     <td align=\"right\">".Type." ".of." ".property." ".required." :</td>           
     <td>Select from list: 
     <select name=\"req_type\" value=\"$row[req_type]\">     
      <option>House</option>     
      <option>Bungalow</option>     
      <option>Flat/Apartment</option>     
      <option>Studio</option>     
      <option>Villa</option>     
      <option>Any</option>     
     </select> 
     </td>   
     </tr> 
.... 
+0

double possible de [Alimenter déroulante, sélectionnez à partir d'une table de base de données] (http://stackoverflow.com/questions/199597/populate-select-drop-down-from-a-database-table) – user1937198

Répondre

5

en utilisant votre code actuel:

<?php 
    $options = array('House', 'Bungalow', 'Flat/Apartment', 'Studio', 'Villa', 'Any'); 

    foreach($options as $option) { 
    if ($option == $row['req_type']) { 
     print '<option selected="selected">'.$option.'</option>'."\n"; 
    } else { 
     print '<option>'.$option.'</option>'."\n"; 
    } 
    } 
?> 

est une $row['req_type'] en supposant des valeurs $options. Je vous suggère fortement de citer vos éléments de tableau (c.-à-$row['req_type'] au lieu de $row[req_type]. cette dernière méthode génère des erreurs sous error_reporting(E_ALL)

vous aussi voudrez peut-être regarder des ressources telles que phpbuilder.com. certains articles sont assez pas à jour, mais vous fournir quelques notions de base sur la façon de mieux structurer votre code (par exemple, en séparant votre code HTML à partir de votre code PHP woulud aide readiability dans cette sitaution un lot)

modifier:.. selon les commentaires, les informations affichées doivent être correctement échappée (voir htmlentities() par exemple)

+0

I pense que vous devriez échapper à tout ce que vous produisez –

+0

définitivement, même si en regardant le code de l'OP fourni, il semble qu'il y a beaucoup de choses à améliorer sur – Owen

-1

Voici une autre façon de procéder.

<?php 
$query = "SELECT * FROM ".$prefix."_users WHERE userid='$userid'"; 
$result = mysql_query($query); ?> 
$options = array('House', 'Bungalow', 'Flat/Apartment', 'Studio', 'Villa', 'Any'); 
<select name="venue"> 
<?php 
    while($row = mysql_fetch_array($result)) { 
     print '<option value="'.$option.'"'; 
     if($row['req_type'] == $option) { 
      print 'selected'; 
     } 
     print '>'.$option.'</option>'; 
    } 
?> 
</select> 
+0

Salut Brad. Merci, mais vous ne lister les options nulle part? Les options ne sont pas conservées dans la base de données, seulement la valeur sélectionnée. –

+0

Merci pour la clarification. Je me demandais d'où venaient les options. J'ai une table dans un de mes sites Web qui stocke tous les différents éléments, qui seront automatiquement chargés dans une liste déroulante, ce qui est bien parce que je me réfère également à cette table pour faire d'autres fonctions. – Brad

+0

Merci encore Brad. J'ai dû supprimer les guillemets simples sur req_type pour arrêter l'erreur d'espace et ajouter \ slashes avant les guillemets doubles. Mais, cela fait, je reçois la liste des options distribuées en dehors de la liste déroulante et à l'intérieur de la liste déroulante »;}? –

0

ne peut pas être efficace, mais il est simple & fait le travail.

$dropdown = str_replace("<option value=\"".$row[column]."\">","<option value=\"".$row[column]."\" selected>",$dropdown); 
0

Merci Owen. Votre code semble parfait mais a donné beaucoup d'erreurs php. Je l'ai simplifié à cela, mais simplement obtenir des espaces, comme les options:

<td>Select from list: <select name=\"req_type\">   

$option = array('House', 'Bungalow', 'Flat/Apartment', 'Studio', 'Villa', 'Any'); 

foreach($option as $option) { 
if ($option == $row[req_type]) {  
    <option selected>$option</option>} 
else {  
<option>$option</option>}}; 
</select></td> 
+0

Je suis allé sur mon code et corrigé une erreur que j'ai trouvé, s'il vous plaît comparer le résultat. s'il vous plaît noter que vous ne pouvez pas mélanger HTML/PHP, si vous êtes en PHP, vous devez être dans tags (je les ai ajoutés à mon exemple). notez les différences entre le code que vous avez posté (je viens de le nettoyer) et le mien. – Owen

+0

Je suis confus maintenant, qui est le code mis à jour Owen? –

+0

Probablement le code que vous voyez dans sa réponse. Il l'a édité. –

0
 <?php 
      $result = $db->sql_query("SELECT * FROM ".$prefix."_users WHERE userid='$userid'");  
      $row = $db->sql_fetchrow($result); 

      // options defined here 
      $options = array('House', 'Bungalow', 'Flat/Apartment', 'Studio', 'Villa', 'Any'); 

     ?>  
      <center><font class="title"><?php echo _CHANGE_MY_INFORMATION; ?></font></center><br /> 

      <center> All fields must be filled </center> 
      <form name="EditMyInfoForm" method="POST" action="users.php" enctype="multipart/form-data">   
       <table align="center" border="0" width="720" id="table1" cellpadding="2" bordercolor="#C0C0C0">   
       <tr>     
        <td align="right">Telephone :</td>     
        <td> 
        <input type="text" name="telephone" size="27" value="<?php echo htmlentities($row['telephone']); ?>" /> Inc. dialing codes 
        </td>   
       </tr>   
       <tr>     
        <td align="right">Type of property required :</td>           
        <td>Select from list: 
        <select name="req_type"> 
        <?php foreach($options as $option): ?>  
         <option value="<?php echo $option; ?>" <?php if($row['req_type'] == $option) echo 'selected="selected"'; ?>><?php echo $option; ?></option>     
        <?php endforeach; ?> 
        </select> 
        </td>   
        </tr> 

... 

oups .. un peu trop emporté.

+0

Salut Andy. Merci. Afin d'arrêter les erreurs php, j'ai dû modifier votre code en supprimant les guillemets sigle dans ($ row ['req_type'] et ajouter/slash avant les guillemets doubles.Cela fait, tout ce que j'ai dans la liste déroulante était un ' > 'Y a-t-il du code que je peux ajouter à chaque option plutôt que d'utiliser un tableau? Nigel –

+0

Je sais que je devrais séparer le HTML du PHP mais comme je n'ai pas encore tout le site, pourrais-tu recommander des options qui fonctionneraient sans la séparation ? Aussi, je sais que je devrais utiliser HTMLENTITIES mais quand je fais je reçois le mot HTMLENTITIES dans la valeur dispayed? Je sais, je suis un peu un cancre Nigel –

0

Merci à tous pour votre aide. Bien que je n'ai pas eu de réponse au travail, cela m'a donné des idées et j'ai accompli le travail! J'ai fini par y aller d'une manière longue mais hey-ho si ce n'est pas cassé ne le répare pas.

if ($row[$req_type]=='House'){ 
    $sel_req_type1='selected'; 
} 
else if ($row[$req_type]=='Bugalow'){ 
    $sel_req_type2='selected'; 
} 

etc., etc., etc.

Et dans le tableau:

<option $sel_req_type1>House</option> 
<option $sel_req_type2>Bulgalow</option> 

etc., etc., etc.

J'ai encore d'autres problèmes à surmonter pour le dire htmlentities champs de texte et en citant les éléments du tableau (c'est-à-dire $row['req_type'] au lieu de $row[req_type]) Mais je vais poser cette question sur une autre question Merci encore

1

Nigel,

Voir la réponse avec la coche à côté d'elle. Ça me va commencer à résoudre mon problème. D'abord je sélectionne mes données de la table, puis je sélectionne les données que je veux afficher dans mon menu déroulant.Si les données de la table primaire correspondent aux données de la liste déroulante, la table sélectionnée est renvoyée en écho.

$query9 = "SELECT * 
     FROM vehicles 
     WHERE VID = '".$VID."' 
     "; 

$result9=mysql_query($query9); 
while($row9 = mysql_fetch_array($result9)){ 
    $vdate=$row9['DateBid']; 
    $vmodelid=$row9['ModelID']; 
    $vMileage=$row9['Mileage']; 
    $vHighBid=$row9['HighBid']; 
    $vPurchased=$row9['Purchased']; 
    $vDamage=$row9['Damage']; 
    $vNotes=$row9['Notes']; 
    $vKBBH=$row9['KBBH']; 
    $vKBBM=$row9['KBBM']; 
    $vKBBL=$row9['KBBL']; 
    $vKBBR=$row9['KBBR']; 
    $vYID=$row9['YID']; 
    $vMID=$row9['MID']; 
    $vModelID=$row9['ModelID']; 
    $vELID=$row9['ELID']; 
    $vECID=$row9['ECID']; 
    $vEFID=$row9['EFID']; 
    $vColorID=$row9['ColorID']; 
    $vRID=$row9['RID']; 
    $vFID=$row9['FID']; 
    $vDID=$row9['DID']; 
    $vTID=$row9['TID']; 
} 

$query1 = "SELECT * FROM year ORDER BY Year ASC"; 
$result1=mysql_query($query1); 
echo "<select name='Year'>"; 
while($row1 = mysql_fetch_array($result1)){ 
    echo "<option value = '{$row1['YID']}'"; 
    if ($vYID == $row1['YID']) 
     echo "selected = 'selected'"; 
    echo ">{$row1['Year']}</option>"; 
} 
echo "</select>"; 
Questions connexes