【问题标题】:How to send a mysql query from a php form?如何从 php 表单发送 mysql 查询?
【发布时间】:2015-09-29 01:55:27
【问题描述】:

我正在创建一个 php 网页,我需要发送一个带有表单参数的 mysql 查询。 我需要发送的查询:

INSERT INTO News (Titolo_news,Contenuto_news) VALUES
         ('*title from form*','*content from form*');

这是我的实际代码:

<?php
...

<form class="action="#" method='POST'>

  <p>Title:<input name="title" required id="title" /></p>
  <p>Content:<input name="content" required id="content" /></p>
  <button class="login-button" type="submit" title="Confirm" onclick="

        QUERY HERE, RIGHT?

  ">Confirm</button>

</form>

...
?>

【问题讨论】:

  • 不要将表单数据发送到脚本,然后该脚本将对您的数据库进行查询。
  • 这里很少,虽然这是标记为 php,但您的脚本中没有 php,只有一个 sql 查询和一些 html。我建议阅读一些教程

标签: php mysql forms


【解决方案1】:

你可以使用它

if(isset($_POST['submit']))
{
     $title = $_POST['title'];
$content = $_POST['content'];
INSERT INTO News (Titolo_news,Contenuto_news) VALUES ('$title', '$content');
}

【讨论】:

  • 好的,但我希望在按下表单按钮时发送查询
  • 由于我的 html 代码在 echo 中,我收到此错误:注意:未定义索引:提交
  • 输入名称 type="submit" to name="submit"
  • @priya786,您的答案有点令人困惑,因为它在语法上不正确。您可以对其进行编辑以改进它。
【解决方案2】:

不应该在 html/javascript 的前端公开查询。有时您可以这样做,但这是不好的做法。例如,发送表单的客户端可以更改查询。他们可以找到您的所有数据库并将它们全部删除。

您应该做的是传递您想要查询的值并清理您收到的数据。

您的表单发送标题和内容的值,您的服务器端代码接收数据,确保它们可以存储、正确的数据类型等,然后运行插入数据的查询。在 php 中,您可以使用 PDOMySQLi 通过使用准备好的语句来帮助解决此问题。

这里是一个粗略的例子,不可靠,更多用于说明:

<?php
// configuration
$dbhost     = "localhost";
$dbname     = "test";
$dbuser     = "root";
$dbpass     = "admin";

// database connection
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);

// form was submitted
if(isset($_POST['title']) && isset($_POST['content'])) {
    $title = $_POST['title'];
    $content = $_POST['content'];

    // add more validation and sanitising if required

    // query using prepared statements
    $sql = "INSERT INTO News (Titolo_news,Contenuto_news) VALUES
     (:title, :content)";
    $q = $conn->prepare($sql);
    $q->execute(array(':title'=>$title,
                  ':content'=>$content));
?>

<p>Thanks for submitting the form</p>

<?php
} else {
    // form not submitted so show the form
?>

<form class="" action="#" method='POST'>
  <label>Title</label><input name="title" required id="title" />
  <label>Content:</label><input name="content" required id="content" />
  <button class="login-button" type="submit" title="Confirm">Confirm</button>
</form>
<?php 
}
?>

【讨论】:

  • 在非对象上调用成员函数 execute()
  • 我没有使用您的查询,所以我只是编辑了它。你能再试一次吗,我怀疑是这个问题。
  • 仍然:致命错误:在非对象上调用成员函数 execute()
  • 我不确定它为什么会完全失败。你知道它在哪一行有错误吗?正如我所说,这不是一个可靠的示例,它缺少所有错误检查。你能试试运行SHOW COLUMNS FROM News吗?
【解决方案3】:

这是理论,首先是问题。

  • 您正在使用执行 JavaScript 而不是 PHP 代码的 onclick 事件处理程序,您需要发送请求服务器端来实现这一点。为此,请使用提交按钮而不仅仅是按钮,即 &lt;input type="submit" value="Confirm" name="confirmation"&gt;。请注意,我添加了 value 和 name 属性,这些是发送到后端进行进一步处理的属性。根据表单提交的类型,您可以使用 GET、POST 或 REQUEST 访问它们。这是更多信息的链接http://php.net/manual/en/reserved.variables.get.php
  • 查询到哪里去了?它不会成为表单的一部分,从逻辑上讲,当有人提交表单时,您希望处理请求,然后在表单上方/之前显示某种消息。这意味着您希望在表单上方而不是下方进行查询处理。
  • 我们需要确保页面是否被呈现它不处理该查询,因为表单没有提交。为此,您必须放置一个封装查询语句的条件。这是if(isset... 声明。

由于您使用 PHP 运行查询,您将无法编写原始查询,即INSERT INTO...,您需要使用数据库驱动程序连接到它然后运行查询。如果使用 MySQL,请使用以下链接获取更多信息。 http://www.w3schools.com/php/php_mysql_connect.asp

所以最后你的表格会是这样的:

<?php

if(isset($_POST['confirmation'])) {
  // Connect to database
  // Run the query
  // Display a message that it was successful or not
}

<form class="action="#" method='POST'>

    <p>Title:<input name="title" required id="title" /></p>
    <p>Content:<input name="content" required id="content" /></p>
    <button class="login-button" type="submit" title="Confirm">Confirm</button>

</form>

...
?>

【讨论】:

    【解决方案4】:

    不清楚你想做什么。无论如何,如果我理解正确,您可以使用使用隐藏输入的 Zakaria Acharki 解决方案或使用 AJAX 将该查询传递给 php 文件,让我们使用隐藏输入,因为我认为您对 AJAX 一无所知。 这里的代码,我也做了一些更正:

    <script>
    myfunc() {
       var title = document.getElementById('title').value;
       var content = document.getElementById('content').value;
       var query = 'INSERT INTO News (Titolo_news,Contenuto_news) VALUES
         (title, content);';
       document.getElementsById("query")[0].setAttribute("value", query);
    }
    </script>
    
    <form action="#" method='POST'>
    
      <p>Title:<input name="title" required id="title" /></p>
      <p>Content:<input name="content" required id="content" /></p>
      <input class="login-button" type="submit" value="Confirm" onclick="myfunc()" />
      <input type='hidden' id='query' name="query" value="" />
    
    </form>
    
    <?php
     $query = $_POST['query'];
    ?>
    

    我最后给你的建议是多学习,不要做你认为应该在你还没有学习的时候做的事情。 要了解为什么您想要做的事情是完全错误的,请阅读 Ad Proc 的答案,这在我看来相当详尽。

    【讨论】:

      猜你喜欢
      • 2013-11-26
      • 2013-01-04
      • 1970-01-01
      • 1970-01-01
      • 2019-11-23
      • 1970-01-01
      • 2021-08-24
      • 2018-10-22
      • 1970-01-01
      相关资源
      最近更新 更多