2017-02-24 11 views
0

私はスタックオーバーフローサイトを掘り下げて、質問/回答された同様の質問のほとんどを試しましたが、残念ながら今までのところ解決策はありませんでした。私は(作業中の)SQLデータベースによって作成されているリストを作成しようとしています。そしてアイテムを選択し、 "生成"ボタンを押してテーブルからデータを取得し、選択したデータのみをテーブルに投稿します。以前は、テーブルのどこに武器リストのすべてのデータが入力されているかという問題がありました。私が行番号107と仮定しているところでは、「未知の列(私が選択した武器名)」というエラーが表示されています。リストから武器を選択しようとするデータベースからリストを移入からフォーム。不明なカラム 'in' 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 [ '選びだし']'は値がなるようにチェックしていないようです。そして、次のように変更してください:-'FROM weapon_types_martial WHERE weapon_types_martial.weapon_name = $ selected_weapon; " –

+0

これまでにありがとうございました。私は何を見つけることができるか見ていきます。これは私が噛み合うのが少し難しいですが、私は努力しています。あなたが今働いていて、うまくいきませんでしたが、新しいエラーが現れています。 (本質的には、私が何かを照会する直前にChoosenが未確認のインデックスであると言っています。) – Leo

+0

@Anantあなたのコードを貼り付けたときにエラーが発生しました[index](http://imgur.com/YAyuzEn) – Leo

答えて

1

1)あなたは$ _POSTにデータを取得することはありません[「選びだし」:

は、クエリが'に包まする必要がありますので、あなたは、文字列を渡すためにしようとしていることは言うまでもありません]ドロップダウンに値を渡していないとして(選択)

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 = '';' weapon_name、type、damageのためです。 [新しいエラー](http://imgur.com/ajzlC22) – Leo

+0

あなたのクエリは成功を実行しました。私の編集した答えを確認してください。クエリから 'weapon_types_martial.'を削除しました。@ Leo –

+0

まだ同じ結果です。上記の画像のように、 '警告:不正な文字列オフセット 'weapon_name'をC:\ xampp \ htdocs \ apptest \ weapons.phpの117行目、' type'、そしてテーブル全体を通して取得します。 @Leo。 – 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 . "'"; 

Wordは、このクエリは非常に安全ではありません。私はデータベースクエリのためのフレームワークまたはライブラリを使用することをお勧めします。あなたのselect要素で

+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."'"; 
関連する問題