2011-02-10 6 views
4
$sql = "SELECT DISTINCT Branch FROM student_main"; 
    $result = mysql_query($sql); 
    $row_num = mysql_num_rows($result); 
    $rows = mysql_fetch_array($result); 
    echo "<select name='Branch'>"; 
    for($i=0;$i<=$row_num-1;$i++){ 
     echo "<option value='".$rows[$i]."'>".$rows[$i]."</option>"; 

    } 
    echo "</select>"; 
    echo "<input type='submit' Value='submit' />"; 
    echo "</form>"; 

J'essaie de créer une liste déroulante en utilisant le code ci-dessus pour mon formulaire. Mais ça ne marche pas. Il y a 3 valeurs distinctes dans la colonne Branche, mais dans la liste déroulante, elle affiche seulement une valeur (la première) et les deux suivantes comme des valeurs vides.mysql sélectionnez requête distincte en PHP

Cependant, quand echo $ row_num, il montre 3.
Cela signifie qu'il récupère les trois lignes, mais alors pourquoi ne pas apparaître dans la liste déroulante.

Si j'exécute la même requête dans phpmyadmin, il affiche la réponse correcte et renvoie 3 valeurs de branches distinctes.

Répondre

5

Vous devriez faire quelque chose comme ceci:

$sql = "SELECT DISTINCT Branch FROM student_main"; 
$result = mysql_query($sql); 

echo "<select name='Branch'>"; 
while ($row = mysql_fetch_array($result)) { 
    echo "<option value='".$row[0]."'>".$row[0]."</option>"; 
} 
echo "</select>"; 

echo "<input type='submit' Value='submit' />"; 
echo "</form>"; 
+0

Merci, cela a fonctionné. – hsinxh

6

vous devez mysql_fetch_array() pour chaque ligne. That function renvoie un tableau associatif pour un uniquement. il suffit de l'inclure dans votre boucle for juste au-dessus de votre déclaration d'écho.

éditer: mysql_fetch_array() retourne effectivement un tableau (par défaut) qui a des indices associatifs et indices numérotés. Vous pouvez continuer à l'utiliser de la même manière, cependant.

+0

Je pensais qu'il va chercher gamme complète à la fois. Ai-je tort ? Pouvez-vous s'il vous plaît expliquer un peu. Merci – hsinxh

+0

il va chercher une rangée à la fois. vous devez l'appeler à nouveau pour obtenir une autre rangée. –

7

Vous devez faire une boucle par votre requête en utilisant les éléments suivants:

$sql = "SELECT DISTINCT Branch FROM student_main"; 
    $result = mysql_query($sql); 
    echo "<select name='Branch'>"; 
    while($rows = mysql_fetch_array($result)){ // should probably use mysql_fetch_assoc() 
     echo "<option value='".$rows['Branch']."'>".$rows['Branch']."</option>"; 
    } 
    echo "</select>"; 
    echo "<input type='submit' Value='submit' />"; 
    echo "</form>"; 
+0

Comment pouvons-nous modifier la commande sql ici si nous voulons obtenir plusieurs valeurs DISTINCT où certaines conditions sont satisfaites. (comme mark = 50 et grade = b) – Matthew

3

mysql_fetch_array renvoie uniquement le jeu de données en cours comme un tableau, et déplace le pointeur interne avant. Vous devez appeler à plusieurs reprises mysql_fetch_array pour obtenir tous les résultats.

while ($row = mysql_fetch_array($result)) { 
    echo "<option value='".$row['Branch']."'>".$row['Branch']."</option>"; 
} 
+0

'$ rows [$ i]' est incorrect, je suppose que vous l'avez manqué. – Prisoner

+0

@Prisoner Merci, cela se produit lorsque vous copiez et collez :) –

2

Il y a un problème dans la boucle en utilisant une boucle while:

while($rows=mysql_fetch_array($result)){ 

echo "<option value='".$rows[$i]."'>".$rows[$i]."</option>"; 

} 

Essayez cette

1

mysql_fetch_array ne retourneront la première rangée ...

voir here pour plus de détails :)

2

Ce dont vous avez vraiment besoin est d'apprendre à utiliser des modèles.
Mais il semble que Stackoverflow ne soit définitivement pas l'endroit où l'on peut apprendre des manières professionnelles de développer un site web.

obtenir d'abord vos données

$select = $array(); 
$sql = "SELECT DISTINCT Branch FROM student_main"; 
$res = mysql_query($sql) or trigger_error(mysql_error().$sql); 
while($row = mysql_fetch_array($res)) $select = $row[]; 

Et utilisez-le dans le modèle

<form> 
<select name='Branch'> 
<? foreach($select as $row): ?>  
    <option value="<?=htmlspecialchars($row['Branch'])?>"> 
    <?=htmlspecialchars($row['Branch'])?> 
    </option> 
<? endforeach ?>  
</select> 
<input type='submit' Value='submit' /> 
</form> 
+0

Je suis très nouveau à la programmation, c'est pourquoi mon code est complet de la merde. Mais j'apprends.Merci pour vos conseils cependant. – hsinxh

+0

vous recommandons d'utiliser et non Drewdin

+0

@Drewdin oui, je le fais. Il semble soigné, n'est-ce pas? –