【问题标题】:How to insert to database using php?如何使用php插入数据库?
【发布时间】:2013-12-11 00:53:03
【问题描述】:

我对 php 很陌生,我真的很想学习它。我正在向 w3school 学习,但我无法做到这一点(保存到数据库)......我还尝试在 .php 中指定值并设法不出错,但它没有保存在数据库中。请告诉我这有什么问题。

<form action="submit.php" method="POST">
    <p>Name:<input type="text" name="name"/></p>
    <p>Email:<input type="text" name="email"/></p>
    <p>Message:<textarea rows="3" cols="1" name="message"></textarea></p>
    <a href="submit.php">Submit</a>
</form>

PHP 文件

<?php 
$con = mysqli_connect("localhost","root","","kellywood");

if (mysqli_connect_errno()) {
    echo "Failed to connect to Database";
} else {
    echo "Connected";
}

$sql = "INSERT INTO kellywood (messages.name, messages.email, messages.message) VALUES ('$_POST[name]','$_POST[email]','$_POST[message]')");

if (!mysqli_query($con,$sql)) {
    die('Error: ' . mysqli_error($con));
}

mysqli_close($con);
?>

没有错误,我指定了值但它没有保存在数据库中。

<?php 
$con = mysqli_connect("localhost","root","","kellywood");

if (mysqli_connect_errno()) {
    echo "Failed to connect to Database";
} else {
    echo "Connected";
}

mysqli_query($con,"INSERT INTO kellywood(messages.name, messages.email, messages.message) VALUES ('Peter', 'Griffin',35)");


mysqli_close($con);
?>

抱歉这个菜鸟问题,但我是 php 新手...请帮助

【问题讨论】:

  • 我建议不要使用 w3school 来学习。这不是很好。如果您真的有兴趣,请查看 PDO 准备好的语句,因为它更安全,而且您最好先开始使用它,而不是学习以后必须改正的坏习惯。
  • 把这个messages.name, messages.email, messages.message改成这个name, email, message我猜你的桌子kellywood在你的insert语句上只有这个字段
  • @Niketa 使用 PDO 并不能保护一个人远离坏习惯。 Mysqli 非常好。我已经看到使用 PDO 创建的准备好的语句的一些真正糟糕的用途。
  • @jorge,仍然错误,“解析错误:语法错误,意外 ')' 在 C:\wamp\www\For Allied Web\submit.php 第 10 行”
  • 试试这个: $sql = "INSERT INTO kellywood (name, email, message) VALUES ('" .$_POST['name'] . "','" . $_POST['email' ] . "','" . $_POST['message']"')";

标签: php forms insert mysqli


【解决方案1】:

有几处不正确。

第一:

<a href="submit.php">Submit</a>

应该是按钮而不是链接:

<input type="submit" name="submit" value="Submit">

并且基于做出的评论:“数据库是 kellywood,消息是表。”

这个:

mysqli_query($con,"INSERT INTO kellywood(messages.name, messages.email, messages.message)
VALUES ('Peter', 'Griffin',35)");

应该是:

mysqli_query($con,"INSERT INTO messages (name, email, message) 
VALUES ('Peter', 'Griffin',35)");

然而根据您的输入变量,它应该更像这样:

mysqli_query($con,"INSERT INTO messages (name, email, message) 
VALUES ('" . $name . "', '" . $email . "', '" . $message . "')");

在分配输入变量时,例如:

$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];

重写:

<?php 
$con = mysqli_connect("localhost","root","","kellywood");

if (mysqli_connect_errno()) {
    echo "Failed to connect to Database";
} else {
    echo "Connected";
}

$name = $con->real_escape_string($_POST['name']);
$email = $con->real_escape_string($_POST['email']);
$message = $con->real_escape_string($_POST['message']);

mysqli_query($con,"INSERT INTO messages (name, email, message) 
VALUES ('" . $name . "', '" . $email . "', '" . $message . "')");

mysqli_close($con);
?>

或者你可以使用:

<?php 
$con = mysqli_connect("localhost","root","","kellywood");

if (mysqli_connect_errno()) {
    echo "Failed to connect to Database";
} else {
    echo "Connected";
}

$name = $con->real_escape_string($_POST['name']);
$email = $con->real_escape_string($_POST['email']);
$message = $con->real_escape_string($_POST['message']);

$sql = "INSERT INTO messages (name, email, message) 
VALUES ('" . $name . "', '" . $email . "', '" . $message . "')";

if (!mysqli_query($con,$sql)) {
    die('Error: ' . mysqli_error($con));
}

else {
echo "SUCCESS!";
}

mysqli_close($con);
?>

HTML 表单

<form action="submit.php" method="POST">
    <p>Name:<input type="text" name="name"/></p>
    <p>Email:<input type="text" name="email"/></p>
    <p>Message:<textarea rows="3" cols="20" name="message"></textarea></p>
    <input type="submit" name="submit" value="Submit">
</form>

以上两个都在我的服务器上工作,对所有 3 列使用 VARCHAR(255)。

列:name - email - message

【讨论】:

    【解决方案2】:

    尝试使用按钮 type="submit",而不是 href 标记。

    【讨论】:

    • 我试过了,出现了一个新的错误,“SCREAM:错误抑制被忽略了”
    • 这表示某处存在编码错误。如果 HTML 代码在 PHP 代码中起作用,我已经看到了。你能发布你的新代码示例吗?
    • 您的 PHO 还需要更多错误检查,例如将插入代码包装在:“if (isset($_POST['submit']) { ///sql stuff here }
    • 只是为了澄清...kellywood 是数据库和表的名称?如果是的话也没关系,只要确保这不是一个错误。
    • 用这个替换你的 sql 行: $name = $con->real_escape_string($_POST['name']); $email = $con->real_escape_string($_POST['email']); $message = $con->real_escape_string($_POST['message']); $result = $con->query("INSERT INTO messages (name, email, message) VALUES ('$name', '$email', '$message'") or die (mysqli_error());
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多