【问题标题】:Variables are empty (php) [duplicate]变量为空(php)[重复]
【发布时间】:2017-09-06 14:02:57
【问题描述】:

我已经开始学习 php,但我被 php 中的“输入”困住了。我即将建立一个注册。

这是我的“输入”代码(signup.php)的引述:

    <?php
    include_once 'header.php'
    ?>

    <section class="main-container">
        <div class="main-wrapper">
            <h2>Sign up</h2>
            <form class="signup-form" action="includes/signup.inc.php" method="POST">
                <input type="text" name="first" placeholder="First Name">
                <input type="text" name="last" placeholder="Last Name">
                <input type="text" name="e-mail" placeholder="e-mail">
                <input type="text" name="uid" placeholder="Username">
                <input type="password" name="pwd" placeholder="Password">
                <button type="submit" name="submit">
                    Sign up
                </button>
            </form>
        </div>
    </section>

    <?php
    include_once 'footer.php'
?>

这是我要开始的代码(signup.inc.php):

<?php

if (isset($_POST['submit'])) {

    include_once 'dbh.inc.php';

    $first = mysqli_real_escape_string($conn, $_POST['first']);
    $last = mysqli_real_escape_string($conn, $_POST['last']);
    $email = mysqli_real_escape_string($conn, $_POST['email']);
    $uid = mysqli_real_escape_string($conn, $_POST['uid']);
    $pwd = mysqli_real_escape_string($conn, $_POST['pwd']);

    //Error handlers
    //Check for empty fields
    if (empty($first) || empty($last) || empty($email) || empty($uid) || empty($pwd)) {
        header("Location: ../signup.php?signup=empty");
        exit();
    } else {...

这是我的连接代码(dbh.inc.php):

<?php

$user="root";
$password="";
$conn=mysqli_connect("localhost",$user,$password);

如果我访问我的网站,单击注册按钮并填写输入框,我会立即收到“signup.php?signup=empty”消息。 为什么我的变量是空的?

【问题讨论】:

  • 不要再假设因为点击了提交就认为所有字段都已设置并存在,请在分配变量之前使用issetempty始终验证/清理您的用户输入并使用准备好的语句。如果uid 是非字符串,那么你为什么要转义它?是否启用错误报告?是否显示/记录了任何错误?你在散列你的pwd 字段吗?如果您还没有这样做,请使用password_hash
  • 你没有选择数据库
  • 提示:始终使用 var_dump($var) 来记录应用程序!
  • 不要依赖mysqli_real_escape_string()来防止SQL注入,it alone is not sufficient。您应该通过mysqliPDO 驱动程序使用带有绑定参数的预处理语句。 This post 有一些很好的例子。
  • 它不会运行,因为你的 没有设置,所以空,这就是你被重定向到空页面的原因。将 $email = mysqli_real_escape_string($conn, $_POST['email']); 更改为 $email = mysqli_real_escape_string($conn, $_POST['e-mail']); 就可以了。

标签: php html xampp


【解决方案1】:

乍一看,$_POST['email'] 似乎返回空,因为那里有一个错字。它应该是$_POST['e-mail'],因为它在 HTML 中的名称是 e-mail

【讨论】:

  • 是的,这就是问题所在。真的谢谢你!
【解决方案2】:

试试这个连接数据库如下 (dbh.inc.php)

$servername = "localhost";
$username = "root";
$password = "";
$Dbconnect = "db_Name";

// Create connection
$conn = new mysqli($servername, $username, $password, $Dbconnect);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

在您的 php 中然后执行以下操作

include ('dbh.inc.php');
$first = $_POST['first'];
$last = $_POST['last'];
$email = $_POST['e-mail']
$uid = $_POST['uid'];
$pwd = $POST['pwd'];

if (empty($first) || empty($last) || empty($email) || empty($uid) || empty($pwd)) {
        header("Location: ../signup.php?signup=empty");
        exit();
    } else {...

你还有一个错字电子邮件应该是$email = $_POST['e-mail']

【讨论】:

  • 这会抛出一个错误。
  • 它适用于我的网站。
  • 只连接一次”是什么意思?为什么要删除转义(如果您改用准备好的语句,那就太好了)?
  • @Qirel 抱歉,我输入的内容与我的想法不同。
  • 为什么 OP 应该尝试这个?它试图解决什么问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-24
  • 1970-01-01
相关资源
最近更新 更多