【问题标题】:PHP Contact form connects but does not submitPHP联系表单连接但不提交
【发布时间】:2016-07-04 12:25:51
【问题描述】:

大家好,这是我的 PHP 联系表格。它成功连接,因为我在各个点运行了一些测试以查看它是否有效,但它似乎没有提交到数据库。谁能帮帮我?

<?php

define('DB_NAME', 'x');
define('DB_USER', 'x');
define('DB_PASSWORD', 'x');
define('DB_HOST', 'localhost');

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);

if (!link) {
    die('Could not connect: ' . mysql_error());
}

$db_selected = mysql_select_db(DB_NAME, $link);

if (!$db_selected) {
    die('Can\'t use' . DB_NAME . ': ' . mysql_error());
}

$value = $_POST['UserName'];
$value1 = $_POST['UserEmail'];
$value2 = $_POST['UserMessage'];

$sql = "INSERT INTO ContactUs (UserName, UserEmail, UserMessage) VALUES ('$value', '$value1', '$value2')";


if (!mysql_query($sql)) {
    die('Error: ' . mysql_error());
}

mysql_close();

我还附上了联系表单的实际 sn-p 代码(在模态框中):

<div class = "modal fade" id = "contact" role="dialog">
<div class = "modal-dialog">
<div class = "modal-content">
<div class = "modal-header">
<h4>Contact form</h4>
</div>
<div class = "modal-body">
<p>HELLO HELLO HELLO HELLO</p>
</div>
   <div class="form-group">
<form action="ContactUs.php" method="post">

 <div class="form-group">
 <label for="UserEmail">Email address</label>
 <input type="text" class="form-control" id="UserEmail" name="UserEmail" placeholder="What is your E-Mail">
 </div>
 <div class="form-group">
 <label for="UserName">Name</label>
 <input type="text" class="form-control" id="UserName" name="UserName" placeholder="What is your name?">
 </div>
 <div class="form-group">
 <label for="UserMessage">Message</label>
 <input type="text" class="form-control" id="UserMessage" name="UserMessage" placeholder="What would you like to say?">
 </div>
 <input type="Submit" value="Submit" class="btn btn-default">Submit</button>

</form>
</div>

<div class = "modal-footer">
<a class = "btn btn-default" data-dismiss = "modal">Close</a>
<a class = "btn btn-primary" data-dismiss = "modal">Close</a>
</div>
</div>
</div>
</div>
</div>

看到这是一个联系表,我只是希望将信息发送到我的电子邮件,如果有人能告诉我这是否合适,那就太好了[如果不是如何调整它以使其如此]。我使用了一个视频教程[链接如下],但他只提到了如何存储到数据库中。

https://www.youtube.com/watch?v=wp6Ngpk5XiY

【问题讨论】:

  • 您有错字:if (!link) ? - 除了那个错字并且不使用 MySQLi 而不是已弃用的 MySQL 之外,您的脚本在语法上没有任何问题。
  • 另外,我强烈建议您停止使用 mysql 并查看 mysqli 或 PDO,mysql 已弃用
  • 您是否遇到任何错误?或任何输出?
  • 给你的提交起个名字,然后删除那个不知怎么迷路的孤儿按钮标签。然后检查 isset($_POST[submit_name])
  • 这也容易受到 SQL 注入的影响。 mysql_* 函数已弃用。改用 MySQLi!

标签: php forms


【解决方案1】:

您在检查 if (!link) 时出现拼写错误,但此外,您应该使用更新、更安全的 MySQLi 功能。试试这个:

<?php
define('DB_NAME', 'x');
define('DB_USER', 'x');
define('DB_PASSWORD', 'x');
define('DB_HOST', 'localhost');

$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if ($mysqli->connect_errno)
{
    die("Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error);
}

$userName = $_POST['UserName'];
$userEmail = $_POST['UserEmail'];
$userMessage = $_POST['UserMessage'];

if (!($stmt = $mysqli->prepare("INSERT INTO ContactUs (UserName, UserEmail, UserMessage) VALUES (?, ?, ?)")))
{
    die("Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error);
}

$stmt->bind_param("sss", $userName, $userEmail, $userMessage);
if (!$stmt->execute())
{
    die("INSERT failed: (" . $stmt->errno . ") " . $stmt->error);
}

$mysqli->close();

这使用Prepared Statements,出于所有意图和目的,它将准备好的语句定义中的? 标记替换为您绑定到该语句的变量的转义值。这有助于防止 SQL 注入。

【讨论】:

  • 我已经添加了这个并添加了 ?, ?, ?正如您在下面看到的那样。现在,当我尝试直接访问 www.gemcode.co.uk/ContactUs.php 时,它会在数据库中创建一个空字段,但是当我尝试在联系表单本身中输入内容时,它不起作用。 if (!($st​​mt = $mysqli->prepare("INSERT INTO ContactUs (UserName, UserEmail, UserMessage) VALUES ('$UserName', '$UserEmail', '$UserMessage')"))
  • 不不,你不能用任何东西替换? 标记。这段代码应该是正确的。在不改变任何东西的情况下试一试。
  • 另外,如果它不起作用,请尝试在查询前添加var_dump($_POST['UserName'], $_POST['UserEmail'], $_POST['UserMessage']); 以查看将哪些数据发布到您的ContactUs.php
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-30
  • 2012-04-28
  • 2013-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多