我正在尝试为变量inviteCode创建一个由字母和数字组成的随机10长度字符串,然后将inviteCode变量发送到数据库,似乎php代码没有为它发送10位数代码,或它确实但没有被发送。我成功发送了电子邮件。
Invite.php
php:
<?php
if(isset($_POST['submit'])){
$email = $_POST['email']; }
$length = 10;
$inviteCode = "";
$characters = "0123456789abcdefghijklmnopqrstuvwxyz";
for ($p = 0; $p < $length; $p++) {
$inviteCode .= $characters[mt_rand(10, strlen($characters))];
}
?>
HTML:
<form action="save.php" method="POST">
<div class="form-email">
<input type="text" placeholder="Email" name="email" />
</div>
<div class="submit3">
<input type="submit" value="Invite" name="Login" />
</div>
</form>
save.php:
$email = $_POST['email']; //Gets email from form
mysql_query("INSERT INTO referrals (email, inviteCode)
Values ('$email', '$inviteCode') ")
此外,在将信息成功发送到数据库之后,我如何将用户从save.php重定向回invite.php?
我是php的新手,所以任何反馈,评论或帮助都非常感谢,谢谢(Y)
答案 0 :(得分:6)
因为这个
if(isset($_POST['submit'])){
您的提交按钮被调用/命名为Login
而不是submit
<input type="submit" value="Invite" name="Login" />
并且条件语句及其中的所有内容都因为它而失败。
因此,$email = $_POST['email'];
不会作为值传递。
将其更改为
if(isset($_POST['Login'])){
在打开<?php
标记后立即将错误报告添加到文件顶部:
error_reporting(E_ALL);
ini_set('display_errors', 1);
表示发现任何错误。
&#34;我怎样才能将用户从save.php重定向回invite.php&#34;
添加header()
:
即:
header("Location: http://www.yoursite.com/invite.php");
exit;
并确保您之前没有输出。
如果发生这种情况,请参阅有关SO的文章:
添加备注,当用户被重定向到invite.php
或最初访问您的页面时,您的代码生成器将会执行,因此最好将所有内容都包含在提交内容中按钮的条件声明。
例如:
if(isset($_POST['Login'])){
$email = $_POST['email'];
$length = 10;
$inviteCode = "";
$characters = "0123456789abcdefghijklmnopqrstuvwxyz";
for ($p = 0; $p < $length; $p++) {
$inviteCode .= $characters[mt_rand(10, strlen($characters))];
}
} // end brace for if(isset($_POST['Login']))
由您自行决定是否希望代码以您的方式运行。
修改强>
我无法理解你为何以及为何使用三页来解决所有这些问题。
您可以这样设置(HTML表单,然后是PHP):
<?php
if(isset($_POST['Login'])){
$email = $_POST['email'];
$length = 10;
$inviteCode = "";
$characters = "0123456789abcdefghijklmnopqrstuvwxyz";
for ($p = 0; $p < $length; $p++) {
$inviteCode .= $characters[mt_rand(10, strlen($characters))];
}
// execute SQL codes here
// if query is successful, redirect
// i.e.
// if($query){ header("Location: http://www.yoursite.com/invite.php"); exit; }
} // end brace for if(isset($_POST['Login']))
?>
mysqli_
方法示例:
Nota:确保inviteCode
是实际的列名,而不是invitecode
。它们区分大小写。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$DB_HOST = "xxx"; // replace
$DB_NAME = "xxx"; // replace
$DB_USER = "xxx"; // replace
$DB_PASS = "xxx"; // replace
$conn = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if($conn->connect_errno > 0) {
die('Connection failed [' . $conn->connect_error . ']');
}
if(isset($_POST['Login'])){
$email = mysqli_real_escape_string($conn,$_POST['email']);
$length = 10;
$inviteCode = "";
$characters = "0123456789abcdefghijklmnopqrstuvwxyz";
for ($p = 0; $p < $length; $p++) {
$inviteCode .= $characters[mt_rand(10, strlen($characters))];
}
$query = mysqli_query($conn, "INSERT INTO `referrals` (`email`, `inviteCode`)
VALUES ('$email', '$inviteCode') ");
if($query){
echo "Success";
// or redirect with header, but remove the echo above if using header
}
else{
// echo "Sorry";
die('Error querying database. ' . mysqli_error($conn));
}
} // end brace for if(isset($_POST['Login']))
答案 1 :(得分:0)
您的代码工作正常,但可能的索引超出范围问题。
$inviteCode .= $characters[mt_rand(10, strlen($characters))];
在上面的代码中,你需要在strlen()函数之后添加-1作为数组中的索引,字符串从0开始。像这样:
$inviteCode .= $characters[mt_rand(10, strlen($characters)-1)];
尝试修复,看看是否有效。至于重定向,请使用PHP中的header()函数:
header('Location: http://127.0.0.1/invite.php');
exit;
请确保您之前没有发送任何输出。