创建邀请代码以发送到数据库

时间:2014-07-23 16:32:37

标签: php html mysql

我正在尝试为变量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)

2 个答案:

答案 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;

请确保您之前没有发送任何输出。