首先
一些背景。我有一个项目,需要用php来完成,我想做一个从数据库中删除的功能,我想做的方式是让用户选择他想删除的表,然后,向他展示该表中所有主键的值,他可以从那里删除。由于我不想让他输入任何表名或不存在的主键,所以我使用一个下拉列表来实现这两个功能。下一步是得到每个表的主键,并在下拉列表中显示出来供用户选择。
这里的问题是。 获取其中一个表的主键可以正常工作,但其他表就不行了。
echo $_SESSION['table'];
$sql = "SHOW KEYS FROM " . $_SESSION['table'];
$result = mysqli_query($conn, $sql);
$keys = mysqli_fetch_assoc($result);
print_r($keys);
这个工作正常,它得到了我在前一页中按下的表的名称。
echo $_SESSION['table'];
不过
print_r($keys);
印花
Array ( [Table] => KATI [Non_unique] => 0 [Key_name] => PRIMARY [Seq_in_index] => 1 [Column_name] => NAME [整理] => A [Cardinality] => 4 [Sub_part] => [Packed] => [Null] => [Index_type] => BTREE [Comment] => [Index_comment] => )
就像我希望它对一个名为KATI的表一样,但对其他表没有任何作用。
EDIT:
以下是我用来选择我想选择的表的下拉列表的代码。PHP(忽略动作变量,它与问题无关)
include('connection.php');
$sql = "show tables";
$result = mysqli_query($conn, $sql);
$tables = mysqli_fetch_all($result, MYSQLI_ASSOC);
mysqli_free_result($result);
mysqli_close($conn);
if (isset($_SESSION['action'])) {
if (isset($_POST['submit'])) {
$location = $_SESSION['action'] . ".php";
echo $location;
$_SESSION['table'] = $_POST['table'];
header("Location: $location");
}
}
HTML (&php)
<select name="table" class="browser-default waves-effect waves-light btn">
<option value="" disabled="" selected="">Choose a table</option>
<?php foreach ($tables as $table) { ?>
<option value=<?php echo $table['Tables_in_SuperMarket'] ?>>
<?php echo $table['Tables_in_SuperMarket'] ?>
</option>
<?php } ?>
</select>
可能是其他的表有特殊的名字或保留的名字。
试着把它们的名字放在背标中。
$sql = "SHOW KEYS FROM `{$_SESSION['table']}`";
另外,请验证你的输入 - 你不希望随机的人能够肆意删除。