2011-10-06 27 views
-1

我試圖將結果添加到HTML下拉菜單中。
PHP的作品,如果我把它的HTML表單以外的:它顯示的結果,但我需要它的形式在側面的HTML下拉菜單選擇

<form><form method="post" action="selldo.php"> 
<label><br /><br /><br /><br />What slot do you want to Sell?</label> 
<select name="pokeSLOT" id="pokeSLOT" style="width:150px;padding-left:5px;"> 
<option value=""></option> 
<?php 
$result = mysql_query("SELECT * FROM user_pokemon 
         WHERE belongsto='$_SESSION[username]'"); 

while($row = mysql_fetch_array($result)) 
{ 
    echo $row['id'] . " " . $row['pokemon']; 
    echo "<br />"; 
} 
?> 

</select><br/><br/> 
<label>Price You Would Like For The Pokemon?</label> 
<input type="int" name="cost" id="cost" maxlength="30"/><br/><br/> 
<button name="submit" type="submit" id="Submit_But">Sell</button> 
<p>&nbsp;</p><p>&nbsp;</p> 
</form> 

裏面當我看到在下拉菜單中並沒有什麼,但如果它使SQL出形式的它張貼結果的頁面,以便它工作正常,我只需要它在側下拉HTML表單

PS我有連接ontop的頁面

回答

2

您需要echo掉HTML option元素:

while($row = mysql_fetch_array($result)) { 
    echo "<option>" . $row['id'] . " " . $row['pokemon'] . "</option>"; 
} 

您可能會想要給option元素value,以便在提交表單時正確地傳遞選定的選項。

+1

謝謝修復它再次感謝 –

+1

如果你這樣做,你將有問題存儲所選選項的ID。如果您需要這樣做,請參閱我的答案。 – markus

+1

@詹姆斯,XSS安全漏洞呢?我建議用'htmlentities($ row ['pokemon'])''同上'id'(儘管'intval($ row ['id'])''''可以更容易_(提供)來替換'$ row ['pokemon']'它實際上是一個int)_) – Johan

-2

這應該做的伎倆:

<select name="pokeSLOT" id="pokeSLOT" style="width:150px;padding-left:5px;"> 
<?php 
$result = mysql_query("SELECT * FROM user_pokemon WHERE belongsto = '$_SESSION[username]'"); 
while($row = mysql_fetch_array($result)) {  
echo "<option value=\"\">" . $row['id'] . " " . $row['pokemon'] . "</option> 
?> 
</select> 
+1

-1,您不能將SQL注入留在答案中。因爲這使得它成爲危險的答案,這比不起作用的東西更糟糕。 – Johan

+0

@Johan,感謝您指出並提供解決問題的更好答案。我每天都在學習! – Carlito

0

你不是創建一個選擇!你需要的是​​3210標籤,而不僅僅是回聲出你的結果...

<select name="pokeSLOT" id="pokeSLOT" style="width:150px;padding-left:5px;"> 
<option value=""></option> 
<?php 
$username = mysql_real_escape_string($_SESSION['username']); 
$result = mysql_query("SELECT * FROM user_pokemon WHERE belongsto='$username'"); 
while($row = mysql_fetch_array($result)) : ?> 
<option value="<?php echo htmlentities($row['id']);?>"><?php echo htmlentities($row['pokemon']);?></option> 
<?php endwhile;?> 
</select> 
+2

-1,你不能在答案中留下空洞的SQL注入和XSS漏洞。 – Johan

+0

@johan謝謝,我只是假設$ _SESSION已經逃脫了,但你對XSS問題是正確的。我修改了我的代碼 –

1

難道你看這個代碼生成的來源? 你會發現你的選項都在那裏,但只是在void的某處,沒有被任何html標籤包裹。你會看到類似這樣的:

<form> 
<select> 
<option></option> 
your first option 
your second option 
your third option 
your n'th option 
</select> 
</form> 

但是你真正需要的,用於標記是正確的,是這樣的:

<option>your first option</option> 
<option>your second options</option> 

如此反覆......這應該爲你足以修正它!如果不是......

echo '<option value="' . $row['id'] . '">' . $row['pokemon'] . '</option>'; 
1

您有一個SQL注入孔和可能的XSS安全漏洞:

糾正這種通過改變PHP代碼:

<?php 
$username = mysql_real_escape_string($_SESSION['username']); 
$result = mysql_query("SELECT * FROM user_pokemon 
         WHERE belongsto = '$username' "); 

while($row = mysql_fetch_array($result)) 
{ 
    $id = htmlentities($row['id']); 
    $pokemon = htmlentities($row['pokemon']); 
    echo '<option value = "$id"> $pokemon </option>'; 
} 
?> 

參見:What are the best practices for avoiding xss attacks in a PHP site
How does the SQL injection from the "Bobby Tables" XKCD comic work?