【问题标题】:Add values to database on button click [closed]单击按钮向数据库添加值[关闭]
【发布时间】:2015-03-05 20:12:01
【问题描述】:

您好,我编写了一个代码将输入文本中的值输入到数据库中,但它在数据库中添加了一个空值

   <html>
<body>
<input type="text" name="value" />
<input type="text" name="value2" />
<input type="text" name="value3" />
<button onclick="myFunction()">Register</button>
<?php
$servername = "";
$username = "root";
$password = "ahmed2001";
$db = "html";
$conn = mysqli_connect($servername, $username, $password, $db);
if(!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
?>
<script>
function myFunction() {
<?php
$user = $_POST['value'];
$pass = $_POST['value2'];
$em = $_POST['value3'];
$sql = "INSERT INTO players (username, password, email)
VALUES ('$value', '$value2', '$value3')";
if (mysqli_query($conn, $sql)) {
    echo "New record created succeddfully !";
} else {
    echo "Error : " . $sql . "<br>" . mysqli_error($conn);
}
mysqli_close($conn);
?>
}
</script>
</body>
</html>

不使用 jQuery 有什么办法吗?

【问题讨论】:

  • 您的代码包含您的根密码。另外,它很容易发生 SQL 注入。
  • 那是因为你引用了错误的变量。在这里,访问php.net/manual/en/function.error-reporting.php 并使用它。它会抛出错误。您也没有带有 post 方法的表单标签。 JS 函数不调用 PHP 函数。
  • 您的myFunction 将包含无效的javascript,因为您正在从PHP 中回显纯文本。您可能需要将 PHP 拆分为单独的脚本,并在单击注册按钮时对其进行异步调用。
  • 代码没有意义,你为什么将 db 查询代码包装在 javascript 函数中。 PHP 和 javascript 在不同的环境和不同的时间运行。每次页面加载时,您都会在不知不觉中创建一个空插入
  • 在其他地方遇到此 SQL 字符串问题:$sql = "INSERT INTO players (username, password, email) VALUES ($_POST['name'], $_POST['password'], $_POST['email'])";。如果您在数组周围放置大括号,您会发现它会起作用,例如:{$_POST['name']}。但是,不要使用它! - 因为这段代码是不安全的。正如其他人指出的那样,它包含一个 SQL 注入,很可能会让你被黑。

标签: javascript php html


【解决方案1】:

您正在混合使用服务器端代码和客户端代码。很多。

当页面被请求时,服务器端代码(本例中为 PHP)在服务器上执行。它完整​​执行,然后显示页面。这是您的服务器端代码:

$servername = "";
$username = "root";
$password = "ahmed2001";
$db = "html";
$conn = mysqli_connect($servername, $username, $password, $db);
if(!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

$user = $_POST['value'];
$pass = $_POST['value2'];
$em = $_POST['value3'];
$sql = "INSERT INTO players (username, password, email)
VALUES ('$value', '$value2', '$value3')";
if (mysqli_query($conn, $sql)) {
    echo "New record created succeddfully !";
} else {
    echo "Error : " . $sql . "<br>" . mysqli_error($conn);
}
mysqli_close($conn);

页面首次加载时,没有$_POST 值。 (即使有,您也没有在 SQL 查询中使用这些值。您使用的是从未定义过的变量。)所以您只是将空字符串插入到数据库中。 (另请注意,此代码有一个SQL injection vulnerability。您需要阅读它。)

然后,在执行此代码后,页面将在浏览器中呈现并执行客户端代码。这是您的客户端代码:

function myFunction() {
    New record created succeddfully !
}

一方面,这不是有效的 JavaScript 代码。另一方面,这个函数不做任何事情。毫无疑问,您在浏览器的控制台中遇到了错误,因此您应该查看一下。但即使你删除了那行非代码,你仍然只有一个空函数。你可以随心所欲地调用该函数,它不会做任何事情。

说实话,您将希望从一些 PHP 的介绍性教程开始。基本上,为了让客户端代码将值发送到服务器端代码,这些值需要以某种请求的形式发布到服务器。它可以是form 帖子,也可以是 AJAX 请求,或者可能是其他东西。但是你不能混合服务端代码和客户端代码。

【讨论】:

  • OP 似乎在同一页面内使用 HTML 表单和 PHP/MySQL。如果是这种情况,那么这将引发未定义的索引通知。最好在 POST 数组上使用 isset()empty()
  • @Fred-ii-:同意。我个人喜欢将两者分开,但我意识到将表单和表单处理程序放在同一个 PHP 文件中并不少见。尽管 OP 的代码还有很多错误。 (例如,没有实际的形式。)关于 PHP 的介绍性教程确实是他最好的选择。一个 Stack Overflow 问题的范围并不会减少它:)
  • 真的大卫,我同意使用单独的文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-19
  • 2020-02-25
相关资源
最近更新 更多