【问题标题】:Return value from SQL as button name, display text after clicking the button从 SQL 返回值作为按钮名称,单击按钮后显示文本
【发布时间】:2016-04-06 04:29:34
【问题描述】:

我正在做一个使用 php 和 MySQL 的项目。我对php真的很陌生,我已经搜索了很多但仍然没有找到一个干净的解决方案。

问题是,首先用户输入关键字并将搜索到的值(表名)返回给变量。

echo '<h2> Search Result: </h2>';
$searchSQL = "select distinct table_name from information_schema.columns where lower(column_name) like lower('%$search%') and table_schema='university'";
$result = $conn->query($searchSQL);
if ($result->num_rows > 0) {
   // output data of each row
   while($row = $result->fetch_assoc()) {
   $table_name = $row['table_name'];
   echo "<input type='submit' name=$table_name value=$table_name>"."<br />";
 }

现在按钮已创建。如果用户单击任何按钮,它应该更进一步并返回每个表的列名。我不知道如何处理非静态按钮。

【问题讨论】:

  • 使用form标签,和普通表单一样处理,获取提交按钮的值,然后使用DESCRIBE

标签: php html mysql mysqli


【解决方案1】:

首先,不要忘记设置实际的&lt;form&gt;。把它们都包起来。

其次,我建议,只需在提交按钮中使用相同的名称属性:

name="table_name"

所以它现在应该是这样的:

echo '<h2> Search Result: </h2>';
$searchSQL = "
SELECT DISTINCT table_name FROM information_schema.columns 
WHERE LOWER(column_name) LIKE LOWER('%$search%') AND table_schema = 'university'
";

$result = $conn->query($searchSQL);

echo '<form method="POST" action="show_colums.php">'; // opening form tag

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
    $table_name = $row['table_name'];
    echo "<input type='submit' name='table_name' value='$table_name' /> <br/>";
                              //     ^ don use the $table_name in the name attribute
}

echo '</form>'; // closing form tag

别忘了在表单标签中添加action="" 属性。只需将其指向将执行表单处理的任何 PHP 脚本。对于这个例子,只需使用show_columns.php

现在,只需在将处理所选按钮的 PHP 文件中应用 DESCRIBE

内部show_columns.php

if(!empty($_POST['table_name'])) {
    $table_name = $_POST['table_name']; // get input
    $sql = "DESCRIBE {$table_name}"; // use DESCRIBE
    $query = $conn->query($sql); // execute query
    while($row = $query->fetch_assoc()) { // fetch rows
        // do whatver you need to do, table or whatever you like
        echo $row['Field']; // field name
    }
}

编辑:或者您可以在第一个表单上使用准备好的语句更安全:

echo '<h2> Search Result: </h2>';
$searchSQL = "
    SELECT DISTINCT table_name FROM information_schema.columns 
    WHERE LOWER(column_name) LIKE LOWER(?) AND table_schema = 'university'
    ";
$stmt = $conn->prepare($searchSQL);
$search = '%' . $search . '%';
$stmt->bind_param('s', $search);
$stmt->execute();
$stmt->bind_result($table_name);
echo '<form method="POST" action="show_columns.php">';
while($stmt->fetch()) {
    echo "<input type='submit' name='table_name' value='$table_name' /><br/>";
}
echo '</form>';

【讨论】:

  • 你的脚本会创建多个同名的提交按钮,那么你如何区分呢?
  • @DipanwitaKundu 这就是为什么我建议使用相同的name="" 属性,这样,您可以使用$_POST['table_name'] 来获取选定的值,反正只需要一个值
【解决方案2】:

而不是创建提交按钮创建按钮type='button' 使用 javascript/jquery 或使用 html 属性调用将返回表详细信息的页面:

echo "<input type='button' name='" . $table_name . "' value='" . $table_name .
     "' onclick=\"location.href='http://yourwebsite.com?tbl=" . $table_name."'\"><br />";

你也可以调用一些 js 函数来做同样的事情。

【讨论】:

    猜你喜欢
    • 2017-12-09
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 2013-04-11
    相关资源
    最近更新 更多