2017-02-24 74 views
0

我一直在淘洗堆棧溢出網站,並嘗試了大部分已被問及/回答的類似問題,但不幸的是迄今爲止,還沒有任何解決方案對我有效。我想要一個正在填充sql數據庫(正在工作)的列表,然後一旦選擇該項目,點擊「生成」按鈕並從表格中獲取數據並僅將所選數據發佈到表格中。以前我遇到過一個問題,那就是填充武器列表中所有數據的表格。在對它進行處理之後,我現在在第107條(我認爲是我的行號)中出現了「未知列(我選擇哪個武器名稱)」這樣的錯誤。從數據庫填充列表,以試圖從列表中選擇武器形成。''where'子句中的未知列'

<form action="#" method="post"> 
    <table class="table"> 
     <thead> 
      Martial Weapon Name 
     </thead> 
     <tr> 
      <th> 
       <select name="Choosen"> 
        <?php 
        echo'<option>Select Weapon</option>'; 
        //Check if at least one row is found 
        if($result->num_rows >0){ 
         //Loop through results 
         while($row = $result->fetch_assoc()){ 
          //Display weapon info 
          $output = $row['weapon_name']; 
          echo '<option>'.$output.'</option>'; 
         } 
        } 
        ?> 
       </select> 
      </th> 
     </tr> 
    </table> 
    <input class="btn btn-default" type="submit" name="submit" value="Generate"> 
    <h3> 
     Weapon 
    </h3> 
    <table class="table table-striped"> 
     <tr> 
      <th> 
       Weapon Name 
      </th> 
      <th> 
       Weapon Type 
      </th> 
      <th> 
       Damage 
      </th> 
     </tr> 
     <?php 
     if (isset($_POST['submit'])) { 
      $selected_weapon = $_POST['Choosen']; 
      $choose = "SELECT 
      weapon_types_martial.id, 
      weapon_types_martial.weapon_name, 
      weapon_types_martial.weapon_type, 
      weapon_types_martial.weapon_damage 
      FROM weapon_types_martial WHERE weapon_types_martial.weapon_name = " . $selected_weapon; 
      $result = $mysqli->query($choose) or die($mysqli->error . __LINE__); 
      foreach ($result->fetch_assoc() as $item) { 
       //Display weapon 
       $show = '<tr>'; 
       $show .= '<td>' . $item['weapon_name'] . '</td>'; 
       $show .= '<td>' . $item['weapon_type'] . '</td>'; 
       $show .= '<td>' . $item['weapon_damage'] . '</td>'; 
       $show .= '</tr>'; 
       //Echo output 
       echo $show; 
      } 
     } 
     ?> 
    </table> 
</form> 

而且最後這裏是我得到

Clause Error

+0

似乎'$ _ POST [ 'choosen']'沒有任何價值,以便檢查。並且像這樣改變:-'FROM weapon_types_martial WHERE weapon_types_martial.weapon_name = $ selected_weapon;'' –

+0

到目前爲止,大家都非常感謝,我已經開始瞭解我能找到的所有東西。這對我來說有點難以梳理,但我在努力。@Anant我現在正在通過你的工作,但它沒有工作,但是出現了一個新的錯誤,我試圖在發佈(實際上,在我甚至查詢任何東西之前,Choosen就是一個不明身份的索引。) – Leo

+0

@Anant當我粘貼你的代碼,我得到錯誤[索引](http://imgur.com/YAyuzEn) – Leo

回答

1

1)$ _ POST你不會得到數據[「choosen」如你沒有在下拉列表中傳遞值(選擇)

2)在你的數據庫表可以現場weapon_name爲varchar,所以你必須把它傳遞到單引號。

如下更改代碼:

<form action="#" method="post"> 
    <table class="table"> 
     <thead> 
      Martial Weapon Name 
     </thead> 
     <tr> 
      <th> 
       <select name="Choosen"> 
        <?php 
        echo '<option>Select Weapon</option>'; 
        //Check if at least one row is found 
        if($result->num_rows >0){ 
         //Loop through results 
         while($row = $result->fetch_assoc()){ 
          //Display weapon info 
          $output = $row['weapon_name']; 
          echo '<option value="'.$output.'">'.$output.'</option>'; //<--------------change here 
         } 
        } 
        ?> 
       </select> 
      </th> 
     </tr> 
    </table> 
    <input class="btn btn-default" type="submit" name="submit" value="Generate"> 
    <h3> 
     Weapon 
    </h3> 
    <table class="table table-striped"> 
     <tr> 
      <th> 
       Weapon Name 
      </th> 
      <th> 
       Weapon Type 
      </th> 
      <th> 
       Damage 
      </th> 
     </tr> 
     <?php 
     if (isset($_POST['submit'])) { 
      $selected_weapon = $_POST['Choosen']; 
      $choose = "SELECT 
      id, 
      weapon_name, 
      weapon_type, 
      weapon_damage 
      FROM weapon_types_martial WHERE weapon_name = '$selected_weapon'"; //<--------------change here 
      $result = $mysqli->query($choose) or die($mysqli->error . __LINE__); 
      if ($result->num_rows > 0) { 
      while($item = $result->fetch_assoc()) { 
       //Display weapon 
       $show = '<tr>'; 
       $show .= '<td>' . $item['weapon_name'] . '</td>'; 
       $show .= '<td>' . $item['weapon_type'] . '</td>'; 
       $show .= '<td>' . $item['weapon_damage'] . '</td>'; 
       $show .= '</tr>'; 
       //Echo output 
       echo $show; 
      } 
      } 
      else 
      { 
      echo "No data found"; 
      } 
     } 
     ?> 
    </table> 
</form> 
+0

嘗試這個我收到了一個新的錯誤,118-119行都是'$ show ='';'武器名稱,類型和損壞。 [新錯誤](http://imgur.com/ajzlC22) – Leo

+0

好吧,讓你的查詢執行成功。檢查我編輯的答案我已經從查詢中移除了'weapon_types_martial.' @ Leo –

+0

結果仍然相同。在上面發佈的圖像中,獲取警告:非法字符串偏移'weapon_name'在C:\ xampp \ htdocs \ apptest \ weapons.php的第117行,'類型'和整個表格中。 – Leo

0

的你需要給值截圖裏面單引號,

$choose = "SELECT 
    weapon_types_martial.id, 
    weapon_types_martial.weapon_name, 
    weapon_types_martial.weapon_type, 
    weapon_types_martial.weapon_damage 
    FROM weapon_types_martial 
    WHERE weapon_types_martial.weapon_name = '" . $selected_weapon ."'"; 
1

您需要將引號放入SQL查詢。
嘗試:

$choose = "SELECT 
    weapon_types_martial.id, 
    weapon_types_martial.weapon_name, 
    weapon_types_martial.weapon_type, 
    weapon_types_martial.weapon_damage 
    FROM weapon_types_martial WHERE weapon_types_martial.weapon_name = '" . $selected_weapon . "'"; 

建議的字,這個查詢是非常不安全的。我建議使用框架或庫進行數據庫查詢。

+0

不幸的是,這並沒有工作,但因爲我還是很新的SQL可以鏈接框架或庫的東西的一些文檔?我不完全確定你的意思是不安全,但知道這不是一般問題的地方。 – Leo

0
$choose = "SELECT id, weapon_name, weapon_type, weapon_damage FROM weapon_types_martial WHERE weapon_name = '".$selected_weapon."'"; 

$choose = "SELECT weapon_types_martial.id, weapon_types_martial.weapon_name, weapon_types_martial.weapon_type, weapon_types_martial.weapon_damage FROM weapon_types_martial as weapon_types_martial WHERE weapon_types_martial.weapon_name = '" . $selected_weapon ."'"; 
0

在您選擇元素的options沒有value=..屬性,這意味着沒有什麼是出現在您的查詢。

所以$_POST['Choosen']將= ''

更何況,你想傳遞一個字符串,那麼你的查詢需要被包裹在'

$choose = "SELECT id, weapon_name, weapon_type, weapon_damage FROM weapon_types_martial WHERE weapon_name = '".$selected_weapon."'";