2017-02-24 102 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."'";