2017-04-09 88 views
0

我已經看過這個答案enter link description here在PHP中得到SELECT選項值變量從HTML

,但我不能讓我的代碼工作,這是我在我的selectcategory.php文件。我想在這個文件中設置這個變量$ selectedcategory。底部的回聲命令僅用於測試目的。

我的代碼:

<?php 
include_once('config.php'); 
$query1 = mysqli_query($query, "SELECT category FROM `events` GROUP BY category"); 
echo "<select name'selectedcategory'>";  
while ($row = mysqli_fetch_assoc($query1)){ 
    echo "<option value='".$row['category']."'>".$row['category']."</option>"; 
} 
echo "</select>"; 

$selectedcategory=$_POST['selectedcategory']; 
echo $selectedcategory; 
?> 

哪裏出錯?在其他文件中,我通過此INPUT或SELECT元素的POST方法使用給定名稱進行了變量處理。在這個文件中錯誤是第10行 - UNDEFINIED VARIABLE,所以我在哪裏弄錯了嗎? 謝謝你,如果需要更多的澄清,請詢問。

ps:我知道我的代碼有錯誤,但請僅專注於獲取變量。在這個論壇的其他問題上,人們只是評論說我的代碼對於注射而言很脆弱,但對問題本身沒有新的信息,或者爲了防止這種注入(問題由評論者識別),我想阻止這種情況發生。 通過評論者識別問題是一種很好的學習方式,但請提供一些論據,說明問題的原因或與問題相關的某些鏈接。

+0

嘗試執行Google搜索?此外,你剛剛給出了你的問題的重複 – Akintunde007

+0

你在這裏有一個錯字:'' – aperpen

+0

@Akin(你看到我的PS筆記? :D)ofcourse,多數民衆贊成我是如何回到這個論壇。我也嘗試了一些變化,之後我提交了這個問題。 – Brano

回答

0

直到提交表單後,表單字段/值才存儲在$ _POST數組中。

您需要將您的選擇字段包裝在<form method="POST"></form>中,並提供一個提交按鈕,以便開始使用此過程。

開始閱讀:https://www.w3schools.com/tags/att_form_method.asp

如果您提交相同的頁面,您可能希望使用這樣的事:

include_once('config.php'); // labeling your connection '$query' doesn't seem like good practice and may trip you up in the future. 
$result=mysqli_query($db,"SELECT category FROM `events` GROUP BY category"); 
if(isset($_POST['selectedcategory'])){ 
    $selected=$_POST['selectedcategory']; 
}else{ 
    $selected=""; 
} 
echo "<form action=\"\" method=\"POST\">"; 
    echo "<select name=\"selectedcategory\">"; 
     echo "<option></option>"; 
     if($result){ 
      while($row=mysqli_fetch_assoc($result)){ 
       echo "<option value=\"{$row['category']}\"",($selected==$row['category']?" selected":""),">{$row['category']}</option>"; 
      } 
     } 
    echo "</select>"; 
    echo "<input type=\"submit\" value=\"Submit\">"; 
echo "</form>"; 
.... 

我明白,人新的PHP,內嵌條件語句很難閱讀。

這裏是什麼樣子多行:

echo "<option value=\"{$row['category']}\""; 
if($selected==$row['category']){ 
    echo " selected"; // only mark this option as "selected" if values match 
}else{ 
    echo ""; // otherwise, do not mark it with "selected" 
} 
echo ">{$row['category']}</option>"; 

如果有人曾經設法職位,不符合在迴路中的任何數據庫值的值,則沒有<option> S的會獲得select屬性,並且<select>默認情況下將顯示第一個/頂部<option>

+0

@Brano我提供了一些示例代碼給你一些一般的良好做法。我希望你能提供我的答案綠色標記爲有幫助。 – mickmackusa

+0

非常感謝,你的代碼已經給我提供了錯誤(語法錯誤,意外'{'in ...在你的代碼片段中的第3行)。謝謝你的支票靈感(是的,在沒有提交任何內容之前)。另外你說得對我的連接標記爲「查詢」是正確的。我從教程中學到了,我需要開始稱它爲「conn」,因爲這是它的目的。 – Brano

+0

@Brano通知我建議您將$ query更改爲$ db,因爲這是一個糟糕的變量名稱選擇。當你測試它時,只需把它切換回$ query ...但是你應該把它改成'$ db'或'$ conn'或者'config.php'。 – mickmackusa