关于这个话题,我是初学者。我已经按照这个tutorial将一个表单连接到一个数据库,它运行良好。现在我想添加另一个表单,我的问题是:
另一种表格是联系表格。
connection.php:
<?php
function Connect()
{
$dbhost = "localhost";
$dbuser = "root";
$dbpass = "root";
$dbname = "responses";
// Create connection
$conn = new mysqli($dbhost, $dbuser, $dbpass, $dbname) or die($conn->connect_error);
return $conn;
}
?>
thankyou.php
<?php
require 'connection.php';
$conn = Connect();
$email = $conn->real_escape_string($_POST['u_email']);
$query = "INSERT into newsletter (email) VALUES('" . $email . "')";
$success = $conn->query($query);
if (!$success) {
die("Couldn't enter data: ".$conn->error);
}
echo $_GET["form"];
echo "Thank you for subscribing to our newsletter. <br>";
$conn->close();
?>
第二种形式如下:
$name = $conn->real_escape_string($_POST['name']);
$email = $conn->real_escape_string($_POST['email']);
$message = $conn->real_escape_string($_POST['message']);
$query = "INSERT into contactForm (name,email,message) VALUES('" . $name . "','" . $email . "','" . $message . "')";
$success = $conn->query($query);
我创建了两个表:newsletter和contactForm。现在,如何将表单输入指向右表?
答案 0 :(得分:0)
1 - 你可以&#34;要求&#34; /&#34;包括&#34;相同的connection.php适合你/需要它
2 - 您可以在同一个数据库中创建一个新表,并在查询示例上对此新表执行操作:
$query = "INSERT into newsletter (email) VALUES('" . $email . "')";
$success = $conn->query($query);
$query = "INSERT into newsletter_schedule (email,schedule_date) VALUES('" . $email . "', NOW())";
$success = $conn->query($query);
或者您可以在不同的数据库中创建并更改连接的数据库名称(更复杂但有时需要) 3 - 您可以在单独的静态文件中执行并重定向到使用(PHP函数)
header("location: tankyou.html");//put your file name/must be the first output, even a space before can throw a error
如果不是您要找的那个,请留下关于第3个的更多细节
答案 1 :(得分:0)
不幸的是,你的问题是“我怎么......?”在这种情况下有点宽泛。有很多方法。了解这些事情的唯一真正方法是尝试多次。你可能会失败,但这是学习最多的地方。
您的具体问题:
我在connection.php中创建单独的函数吗?
取决于您的需求。我可能包含'CloseConnection'或'TearDown'函数,但在PHP中这样做并不是绝对必要的。 (PHP最好关闭并停止使用脚本末尾仍然打开的任何资源。)
但是,如果你想要更好地实践,那么现在就养成总是清理自己的习惯。你在幼儿园学到的东西适用:如果你打开它,关闭它。如果您创建了它,请将其丢弃。如果您已分配它,请取消分配。等
在同一个数据库中创建一个单独的表吗?
是。这个问题与模式设计有关,同样,您只需要尝试一下,看看哪些对您的情况和思维过程有效。当逻辑变得非常复杂时,你会知道事情是不。但是,知道 除了体验之外别无其他。
如何生成单独的感谢信息?
与生成任何其他HTML的方式相同。某些版本的echo
,print
或include
/ require
。鉴于您当前的设置,我可能为此逻辑创建一个单独的函数。
有一件事不是你要求的,但我觉得有必要指出:严重考虑你的SQL的预备语句,而不是字符串插值。那是......
BAD:
$query = "INSERT into newsletter (email) VALUES('" . $email . "')";
$success = $conn->query($query);
更好/ GOOD:
$sql = "INSERT INTO newsletter (email) VALUE ( ? )";
$statement = $conn->prepare( $sql );
$statement->bind_param('s', $email);
$statement->execute();
这可能稍微复杂一点,但也排除了像real_escape_string
那样的消毒需求。
有关详情,read the documentation和Google prepared statements,但要点是:出于安全原因,以及稍后的更高性能。通过告诉数据库将要发生什么,您可以排除injecting something you didn't expect or want的人。