2011-11-19 62 views
3

從另一個PHP腳本中提取嵌入在php腳本中的html下拉列表的選定選項時,出現一個奇怪的問題。如果選項值的詞語用空格分隔。 PHP只回顯所選選項值的第一個字。我在這裏做錯了什麼?提取html表單選項值,其中包含空格

list.php 

<body> 
<form action="extract.php" method="post"> 
<?php 


$one = "one one"; 
$two = "two two"; 
$three = "three three"; 

echo '<select name="selected_item">'; 
echo '<option value='.$one.'>'.$one.'</option>'; 
echo '<option value='.$two.'>'.$two.'</option>'; 
echo '<option value='.$three.'>'.$three.'</option>'; 
echo '</select>'; 


?> 
<input type="submit" class="button" value="submit" name="submit" /> 

</form> 
</body> 
</html> 



    extract.php 

    <?php 

     if (isset($_POST['submit'])) { 

     $item_name = $_POST['selected_item']; 
     echo $item_name; 

     }else{ 
     echo "item not selected"; 
     } 

    ?> 

如果我在列表中選擇「三個三」PHP回聲只有「三」。這是爲什麼?

+0

錯誤一件事你的表單動作說tp.php作爲目標,而你在例子中列出extract.php ...你認爲這可能會給你造成麻煩嗎? tp.php可能有一個錯誤嗎? :) –

+0

檢查我的答案@sheng老兄,.. – K6t

+0

@Ahamed。那是一個錯誤。更正爲表單動作=「extract.php」 – sheng

回答

7

這是因爲你沒有引用你的HTML屬性。當你有這樣的代碼:

$three = "three three"; 
echo '<option value='.$three.'>'.$three.'</option>'; 

這會出來爲HTML:

<option value=three three>three three</option> 

的PHP字符串引號都不見了輸出。只有第一個three將成爲屬性值。另一個只是尾隨的垃圾。

你需要一個更好的回聲:

echo '<option value="'.$three.'">'.$three.'</option>'; 

更妙的是可能會在這種情況下,一個HEREDOC string。對於非靜態內容,請不要忘記htmlspecialchars()

+0

是的,這個作品非常感謝 – sheng

+0

這幫了我「',三美元。'」我正在用這個'。三美元'。謝謝 –

3

如果我在列表中選擇「三個三」PHP回聲只有「三個」。這是爲什麼?

這是因爲HTML包含的信息"three"爲所述選擇的元素值:

<option value=three three> 

實施例:一個選項標籤與value=threethree(沒有值)屬性。

然後瀏覽器將"three"發送到服務器。 PHP只獲取瀏覽器發送的內容。

這很可能是您在HTML表單輸出中發生了錯誤。附上HTML標籤屬性在引號值,那麼你的瀏覽器將提交"three three"作爲值,因爲引號會保護你的期權價值的內部空間:

<option value="three three"> 

例子:一個選項標籤與一個value="three three"屬性。

這就是HTML的工作原理,瀏覽器需要解析標籤,它是屬性和屬性值。這很容易在HTML 2中解釋如何工作:http://www.w3.org/MarkUp/html-spec/html-spec_3.html#SEC3.2.4

此外,請確保您使用htmlspecialchars正確編碼HTML的值。下面的示例代碼使用數組的所有選項,使代碼更模塊化:

$options = array("one one", "two two", "three three"); 

echo '<select name="selected_item">'; 
foreach ($options as $option) 
{ 
    printf('<option value="%1$s">%1$s</option>', htmlspecialchars($option)); 
} 
echo '</select>'; 
+0

非常informative.thanks – sheng

-1

這就是報價是。

事實上,你的問題與PHP無關。
你的代碼只與基本的HTML有關係。

養成看你的PHP生成的實際HTML代碼的習慣。
大部分時間你都可以自己發現問題。或者至少更精確地解決它。 (在你的情況下,HTML的問題,不是PHP)

0

你@sheng只有一個校正不使用直接使用空間,而不是Html_entity空間,,

重置變量及其enaugh ...

<?php 
    $one = "one&nbsp;one"; 
    $two = "two&nbsp;two"; 
    $three = "three&nbsp;three"; 
    ?> 

U get你的期望輸出

+0

告訴我下來的選民的原因.... – K6t

+1

我猜用戶有一個簡單的空間,而不是一個非休息空間,所以這個建議有點不對。改爲嘗試' '。 – hakre