2016-05-01 22 views
1

私はドロップボックスの数が1〜5のフォームを持っています。私はこのコードを使用してドロップダウンを設定することができますが、どうにかしてdbに一度しか呼び出しを行うことはできますが、同じ番号を使用するすべてのドロップダウンに値を設定できますか?同じmysqlクエリを使用して複数のドロップダウンを設定する

<?php       

    $sql = "SELECT * FROM riskNumDrop"; 
    $result = $conn->query($sql); 
    if (!$conn->query($sql)) { 
    echo "query failed: (" . $mysqli->errno . ") " . $mysqli->error; 
    } 
    echo '<select class="assess" name="precontcons" style="width:4em">' ; 
    while($row = $result->fetch_assoc()){echo '<option value='. $row['riskNumDrop'] .'>'.$row['riskNumDrop'].'</option>';} 
    ?> </select> 

したがって、出力を1回生成し、複数回再利用します。私は配列を推測しています($結果は既にあります)が、どのように私はそれからドロップダウンを移入するのですか? TIA

+0

あなたのコードでクエリを2回実行しています。あなたがそれを行うための特別な理由がないなら、間違いなくそれをするべきです。 –

+0

あなたがコードが2回実行されていると言うと、私は@DawidFerenczyに従います。同じ情報を複数回呼び出すと、上記のコードまたはスクリプトで意味しますか?私はあなたがscroptで意味するかどうかを理解していますが、あなたは上記のコードで意味する場合、あなたはどのように説明できますか?私は配列$ resultに置かれている2行目の実行を見ることができますが、別の場所で再度実行されているのを見失っています。私がコードクリーナーを手に入れたので、間違っていると証明されてうれしいです。 –

+0

あなたは '$ conn-> query($ sql)'を2回呼び出すことはありませんか?それは2つの連続した行でさえあります。最初にクエリを実行し、戻り値を変数 '$ result'に代入すると、同じクエリを2回実行し、条件に代入することなく戻り値をテストするだけです。 –

答えて

1

文字列として保存すると、同じ出力を複数回生成する同じデータをループ処理する必要がなくなります。これがあなたの望むものなら、あなたは次のことができます。

は交換してください:

echo '<select class="assess" name="precontcons" style="width:4em">' ; 
while($row = $result->fetch_assoc()){echo '<option value='. $row['riskNumDrop'] .'>'.$row['riskNumDrop'].'</option>';} 
?> </select> 

で:

$drop = '<select class="assess" name="precontcons" style="width:4em">' ; 
while($row = $result->fetch_assoc()){ 
    drop .= '<option value='. $row['riskNumDrop'].'>'.$row['riskNumDrop'].'</option>'; 
} 
$drop .= '</select>'; 

が次にあなたが echo $drop何回かは、あなたが望むことができるかどうか。


何らかの理由であなたが別の属性を選択したい場合は、単にオプションのリストを保存し、その周りの選択を印刷し、このようなことができます:

$dropOptions = ""; 
while($row = $result->fetch_assoc()){ 
    $dropOptions .= '<option value='. $row['riskNumDrop'].'>'.$row['riskNumDrop'].'</option>'; 
} 

それからちょうどecho '<select class="foo" name="bar">'.$dropOptions.'</select'>

+0

これは、彼が2つの同じ*ドロップダウンを出力するだけで、同じデータを使って2つのドロップダウンを出力することはできません。 –

+0

私は彼が望んでいるかわからないし、私はそれを推測しようとしているが、彼はちょうど違いを理解する必要があります。 –

+0

とにかく、私は彼がそのようなフォーム(同じ名前の/特定されたフォーム要素を持つ)を持つ目的が何であるかわからないので、彼は同じドロップダウンを望んでいないと思う。しかし、私はそれが彼のものであると書いていますが、私は彼にそれを理解させるのを手伝っています。 –

0

データを配列に格納し、配列を列挙してデータを印刷することができます。

$risks = array(); 

// Load values into array. 
while ($row = $result->fetch_assoc()) { 
    array_push($row['riskNumDrop']); 
} 


// Drop down #1 
echo '<select>'; 
foreach ($risks as $risk) { 
    echo '<option value='. $risk .'>'. $risk .'</option>'; 
} 
echo '</select>'; 

// Drop down #2 
echo '<select>'; 
foreach ($risks as $risk) { 
    echo '<option value='. $risk .'>'. $risk .'</option>'; 
} 
echo '</select>'; 
-1

単に取得します結果はfetch_allメソッドを使用して配列に格納されます。結果セットからすべての行を連想配列または数値配列に戻します。あなたはそのような配列であなたが望むものを何でもすることができます:

$result = $conn->query('SELECT * FROM riskNumDrop'); 
if (!$result) { 
    echo "query failed: (" . $mysqli->errno . ") " . $mysqli->error; 
    exit; // fetch_* functions cannot be called on error (sice $result is false) 
} 

// get all rows from the result 
$rows = $result->fetch_all(MYSQLI_ASSOC); 

// output first dropdown... 
echo '<select name="dropdown_1">'; 
foreach ($rows as $row) { 
    // options for the first dropdown (same as you did before) 
} 
echo '</select>'; 

// output second dropdown... 
echo '<select name="dropdown_2">'; 
foreach ($rows as $row) { 
    // options for the second dropdown 
} 
echo '</select>'; 
関連する問題