【问题标题】:Undefined Variable on this tutorial on PHP with Bootstrap使用 Bootstrap 的 PHP 教程中的未定义变量
【发布时间】:2015-06-13 16:49:50
【问题描述】:

请帮我修复这个未定义的变量,我将这段代码复制并粘贴到我的 create.php 中,当我点击主页上的创建按钮时,我得到了这个:

注意:未定义的变量:fnameError in C:\xampp\htdocs\TestCRUD\create.php 在第 70 行

注意:未定义的变量:lnameError in C:\xampp\htdocs\TestCRUD\create.php 在第 75 行

注意:未定义变量:ageError in C:\xampp\htdocs\TestCRUD\create.php 在第 80 行

注意:未定义变量:第 89 行 C:\xampp\htdocs\TestCRUD\create.php 中的 genderError

<?php
if ( !empty($_POST)) {
    require 'db.php';
    // validation errors
    $fnameError     = null;
    $lnameError     = null;
    $ageError       = null;
    $genderError    = null;

    // post values
    $fname  = $_POST['fname'];
    $lname  = $_POST['lname'];
    $age    = $_POST['age'];
    $gender = $_POST['gender'];

    // validate input
    $valid = true;
    if(empty($fname)) {
        $fnameError = 'Please enter First Name';
        $valid = false;
    }

    if(empty($lname)) {
        $lnameError = 'Please enter Last Name';
        $valid = false;
    }

    if(empty($age)) {
        $ageError = 'Please enter Age';
        $valid = false;
    }

    if(empty($gender)) {
        $genderError = 'Please select Gender';
        $valid = false;
    }

    // insert data
    if ($valid) {
        $PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql = "INSERT INTO users (fname,lname,age,gender) values(?, ?, ?, ?)";
        $stmt = $PDO->prepare($sql);
        $stmt->execute(array($fname,$lname,$age,$gender));
        $PDO = null;
        header("Location: index.php");
    }
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<link   href="css/bootstrap.min.css" rel="stylesheet">
<script src="js/bootstrap.min.js"></script>
</head>

<body>
<div class="container">

                <div class="row">
                <div class="row">
                    <h3>Create a User</h3>
                </div>

                <form method="POST" action="">
<div class="form-group <?php echo !empty($fnameError)?'has-error':'';?>">
    <label for="inputFName">First Name</label>
    <input type="text" class="form-control" required="required" id="inputFName" value="<?php echo !empty($fname)?$fname:'';?>" name="fname" placeholder="First Name">
    <span class="help-block"><?php echo $fnameError;?></span>
</div>
<div class="form-group <?php echo !empty($lnameError)?'has-error':'';?>">
    <label for="inputLName">Last Name</label>
    <input type="text" class="form-control" required="required" id="inputLName" value="<?php echo !empty($lname)?$lname:'';?>" name="lname" placeholder="Last Name">
    <span class="help-block"><?php echo $lnameError;?></span>
</div>
<div class="form-group <?php echo !empty($ageError)?'has-error':'';?>">
    <label for="inputAge">Age</label>
    <input type="number" required="required" class="form-control" id="inputAge" value="<?php echo !empty($age)?$age:'';?>" name="age" placeholder="Age">
    <span class="help-block"><?php echo $ageError;?></span>
</div>
<div class="form-group <?php echo !empty($genderError)?'has-error':'';?>">
    <label for="inputGender">Gender</label>
    <select class="form-control" required="required" id="inputGender" name="gender" >
    <option></option>
    <option value="male" <?php echo $gender == 'male'?'selected':'';?>>Male</option>
    <option value="female" <?php echo $gender == 'female'?'selected':'';?>>Female</option>
    </select>
<span class="help-block"><?php echo $genderError;?></span>

</div>

<div class="form-actions">
    <button type="submit" class="btn btn-success">Create</button>
    <a class="btn btn-default" href="index.php">Back</a>
</div>
</form>

</div> <!-- /row -->
</div> <!-- /container -->
</body>
</html>

【问题讨论】:

    标签: php html twitter-bootstrap


    【解决方案1】:

    即使尚未设置变量,您也会显示错误。这带来了你看到的通知。您可以通过检查它们是否首先使用issetempty 设置来避免它们

    <?= isset($someError) ? $someError : '' ?>
    

    【讨论】:

    • 你能帮我修改这段代码吗,我对 bootstrap、pdo 和 php 还是新手。所以我要修改span标签?
    • 在你的span 中你有&lt;?php echo $fnameError;?&gt; - 用&lt;?php echo isset($fnameError) ? $fnameError : '';?&gt; 替换那些
    • 明白了,我终于明白了问题的本质,非常感谢:)
    【解决方案2】:

    使用isset();

    // post values
        $fname  = isset($_POST['fname']);
        $lname  = isset($_POST['lname']);
        $age    = isset($_POST['age']);
        $gender = isset($_POST['gender']);
    

    【讨论】:

      【解决方案3】:

      在下面这样的行中,您需要在尝试使用变量之前检查变量是否具有值。所以下面的代码...

      &lt;span class="help-block"&gt;&lt;? echo $fnameError; ?&gt;&lt;/span&gt;

      ...应该改成这样:

      &lt;span class="help-block"&gt;&lt;?= isset($fnameError) ? $fnameError : ''; ?&gt;&lt;/span&gt;

      为了防止这些错误被拾取和显示,您还可以关闭 PHP 错误报告,但最好修复问题:

      <?php
      error_reporting('off');
      ini_set('display_errors', 'off');
      

      【讨论】:

      • 让它工作终于明白了这个问题,所以我不断地打印错误消息,而不检查错误变量是否有值。你是最好的人!非常感谢
      【解决方案4】:

      您可以在发送参数后为表单添加隐藏类型输入:

      PHP:

      <?php
      if (isset($_POST['h'])) {
      ....//your process
      }
      ?>
      

      HTML:

      <form action="" method="POST">
      .....<!--your input-->
      <input type="hidden" name="h" value="true">
      <button type="submit"> submit </button>
      </form>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-24
        • 2019-10-16
        • 2016-04-07
        • 2015-11-17
        • 2012-03-04
        • 2012-04-12
        相关资源
        最近更新 更多