Php 创建要发送到数据库的邀请代码

Php 创建要发送到数据库的邀请代码,php,html,mysql,Php,Html,Mysql,我试图为变量inviteCode创建一个由字母和数字组成的随机10位字符串,然后将inviteCode变量发送到数据库,似乎php代码没有为它创建要发送的10位代码,或者它创建了但没有被发送。然而,我已经成功地发送了电子邮件 这是一个推荐邀请系统 Invite.php php: <?php if(isset($_POST['submit'])){ $email = $_POST['email']; } $length = 10; $inviteCode = ""; $char

我试图为变量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))];
}  
?>
另外,在信息成功发送到数据库后,如何将用户从save.php重定向回invite.php


我是php新手,因此非常感谢您的任何反馈、评论或帮助,谢谢(Y)

您的代码运行良好,但可能存在索引超出范围的问题

$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;

不过,请确保在此之前未发送任何输出。

您的代码工作正常,但可能存在索引超出范围的问题

$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;
不过,请确保在此之前没有发送任何输出。

这就是原因

if(isset($_POST['submit'])){
您的提交按钮被调用/命名为
Login
,而不是
submit

<input type="submit" value="Invite" name="Login" />

打开
后立即将错误报告添加到文件的顶部,这是因为

if(isset($_POST['submit'])){
您的提交按钮被调用/命名为
Login
,而不是
submit

<input type="submit" value="Invite" name="Login" />


打开
后立即将错误报告添加到文件顶部。它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。如果您选择PDO,.您的邮件代码在哪里?@esqew我还没有创建邮件代码,因为我认为我应该将inviteCode和电子邮件变量发送到数据库,然后从中创建邮件代码(应该在URL末尾使用该inviteCode,这样只有被邀请的人才能访问注册页面)。。它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。如果您选择PDO,.您的邮件代码在哪里?@esqew我还没有创建邮件代码,因为我认为应该将inviteCode和电子邮件变量发送到数据库,然后从中创建邮件代码(应该在URL末尾使用该inviteCode,这样只有被邀请的人才能访问注册页面).我开始怀疑OP是否在这里发布了完整的真实代码。他的例子中有不匹配的花括号。正因为如此,我开始认为这可能是一个可变范围的问题。@esqew我测试了OP的角色创建代码,它工作得很好。我在5.4.12上,谢谢您的时间,但是我在save.php“save.php中未定义变量inviteCode”中收到一个错误。我以为我已经在invite.php中创建了变量,可能save.php没有从invite.php接收inviteCode变量。@JSK不客气。我已编辑了我的答案,请参见“编辑”下的,该部分可能会回答此问题。请参阅注释
//此处执行SQL代码
@JSK我还认为您收到的错误可能与SQL有关。确保你的专栏确实被称为
inviteCode
,而不是用小写的
c
来称呼
inviteCode
。我开始怀疑OP是否在这里发布了完整的、真实的代码。他的例子中有不匹配的花括号。正因为如此,我开始认为这可能是一个可变范围的问题。@esqew我测试了OP的角色创建代码,它工作得很好。我在5.4.12上,谢谢您的时间,但是我在save.php“save.php中未定义变量inviteCode”中收到一个错误。我以为我已经在invite.php中创建了变量,可能save.php没有从invite.php接收inviteCode变量。@JSK不客气。我已编辑了我的答案,请参见“编辑”下的,该部分可能会回答此问题。请参阅注释
//此处执行SQL代码
@JSK我还认为您收到的错误可能与SQL有关。确保您的列确实被称为
inviteCode
,而不是使用小写的
c
error_reporting(E_ALL);
ini_set('display_errors', 1);
header("Location: http://www.yoursite.com/invite.php");
  exit;
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']))
<?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']))
?>
<?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']))