【问题标题】:Variables don't pass to second php变量不传递给第二个 php
【发布时间】:2014-10-24 23:00:31
【问题描述】:

我有 3 个 php 文件:第一个带有表单及其验证,第二个将这些值存储在 db 中,第三个包含域等。我已经尝试了所有方法来将这些变量值从第一个传递到第二个php 例如:$_POST$_Getisset() 显示在 Save.php 中。

但是这些值是“”或null(空),因为我在Save.php 中回显它们并且什么都没有出现。只是给我每个变量的消息如下 - Notice: Undefined index: lname in C:\xampp\blablabla\Save.php on line 5

连接正常,查询正常,验证正常,表单正常。唯一的问题是当我打电话时

if($valid)
{
    header('Location: Save.php');
    exit();
}

ma​​in.php

 <?php
 $nombreErr = "";
 $nombre = "";
 $apellidoErr = "";
 $apellido = "";
 $motivosErr = "";
 $motivos = "";
 $idEstudianteErr = "";
 $idEstudiante = "";
 $segundoAppellidoErr = "";
 $segundoAppellido = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") 
{
    $valid = true;
    if (empty($_POST["fname"])) //Nombre Requerido y Solo letras y espacios en blanco
    {
        $nombreErr = "Nombre requerido"; 
        $valid = false;
    } 
    else 
    {
        $nombre = test_input($_POST["fname"]);
        if (!preg_match("/^[a-zA-Z ]*$/",$nombre)) 
        {
            $nombreErr = "Solo letras y espacios en blanco"; 
            $valid = false;
        }
    }

    if (empty($_POST["lname"])) //Apellido Requerido y Solo letras y espacios en blanco
    {
        $apellidoErr = "Apellido Requerido";
        $valid = false;
    }
    else 
    {

        $apellido = test_input($_POST["lname"]);
        if (!preg_match("/^[a-zA-Z ]*$/",$apellido)) 
        {
            $nombreErr = "Solo letras y espacios en blanco"; 
            $valid = false;
        }

    }

    if (empty($_POST["Slname"])) //Segundo apellido solo letras y espacios en blanco
    {
        $segundoAppellido = "";
        $valid = false;
    } 
    else 
    {
        $segundoAppellido = test_input($_POST["Slname"]);
        if (!preg_match("/^[a-zA-Z ]*$/",$segundoAppellido)) 
        {
            $segundoAppellidoErr = "Solo letras y espacios en blanco"; 
            $valid = false;
        }
    }

    if (empty($_POST["studentId"])) //Numero estudiante solo numeros y rayas
    {
        $idEstudianteErr= "";
        $valid = false;
    } 
    else 
    {
        $idEstudiante = test_input($_POST["studentId"]);
        if (!preg_match("/^[0-9-]*$/",$idEstudiante)) 
        {
            $idEstudianteErr = "Solo numeros y \"-\""; 
            $valid = false;
        }
    }

    if (empty($_POST["Motive"])) //Motivos Requeridos
    {
        $motivosErr = "Motivo(s) Requerido(s)";
        $valid = false;
    } 
    if($valid)
    {
        header('Location: Save.php');
        exit();
    }
}
 function test_input($data) {
 $data = trim($data);
 $data = stripslashes($data);
 $data = htmlspecialchars($data);
 return $data;
 }
 ?>

 <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>">

            <input type="hidden" name="depName" value="Admisiones">
            <input type="hidden" name="personStat" value="Espera">

            <class="input1">FirstName :<input type="text" name="fname" value="<?php echo $nombre;?>">
            <span class="error">* <?php echo $nombreErr;?></span> <br>

            <class="input2">LastName :<input type="text" name="lname" value="<?php echo $apellido;?>">
            <span class="error">* <?php echo $apellidoErr;?></span> <br>

            <class="input3">Second LastName :<input type="text" name="Slname" value="<?php echo $segundoAppellido; ?>"> 
            <span class="error"><?php echo $segundoAppellidoErr; ?></span> <br>

            <class="input4">Student Id :<input type="text" name="studentId" value="<?php echo $idEstudiante;?>">
            <span class="error"><?php echo $idEstudianteErr; ?></span> <br>


            <select name="Motive[]" multiple="MULTIPLE">

                <?php 
                    $sql1="SELECT categoryName, estimationTime FROM Category where depName='Asistencia Economica'";

                    $result1=mysqli_query($con, $sql1);

                    while($row1 = mysqli_fetch_array($result1)) 
                    {
                        echo"<option value=".str_replace(" ", "_", $row1['categoryName']) .":". $row1['estimationTime'].">".$row1['categoryName']."</option>";
                    }
                ?>
            </select>
            <span class="error">* <?php echo $motivosErr;?></span> <br>

            <input class="button" type="submit" value="Registrate">

        </form> 

保存.php

 <?php
 include('Connection.php');

 $firstname = isset($_POST['fname']);
 $lastname = mysqli_real_escape_string($con,  $_POST['lname']);
 $secondLastName = mysqli_real_escape_string($con, $_POST['Slname']);
 $studentId =mysqli_real_escape_string($con, $_POST['studentId']);
 $depNum= mysqli_real_escape_string($con, $_POST['depName']);
 $status= $_POST['personStat'];
 $mymotives= $_GET['Motive'];
 $motivestring= "";
 $motiveTime= 0;
 echo $firstname . "where are you";
 echo $lastname;
 echo $secondLastName;
 echo $studentId;
 echo $depNum;
 echo $status;
 echo $mymotives;
 if (!$con) {
 die("Connection failed: " . mysqli_connect_error());
 }

$sql ="INSERT INTO List (depName, personName, personLast, secondLast, stuId, personStatus, manyMotive, categoryTime) 
VALUES ('$depNum','$firstname','$lastname', '$secondLastName','$studentId', '$status', '$motivestring', '$motiveTime')";

 if (mysqli_query($con, $sql)) {
 echo "New record created successfully";
 } else {
 echo "Error: " . $sql . "<br>" . mysqli_error($con);
 }

 mysqli_close($con);

 ?>

【问题讨论】:

    标签: php


    【解决方案1】:

    这是它不起作用的地方:

    Header('Location: Save.php');
    

    在这里您将控制权传递给 Save.php,但您不传递任何数据...直接。由于它不起作用,我猜你根本没有通过它。

    您可以执行以下操作之一:

    • 如果到目前为止执行的文件没有产生任何输出,那么你可以简单地include文件Save.php:

      包括“Save.php”

    • 如果你想直接传数据,而且量不大,可以放在GET字符串中,但要注意,地址栏会清晰显示

      Header("位置:Save.php?name=Vitruvio&surname=Pietrisco&age=67");

    • 如果你想传递更多的数据,你可以使用sessions

      在第一个文件中:

      session_start(); // 第一行

      ...

      $_SESSION['Hello'] = "世界";

      在第二个文件(Save.php)中:

      session_start();

      回显“你说过”。 $_SESSION['Hello'];

      会回显“你说世界”。

    更新:通常,您会将验证放在执行保存的同一文件中。或者,如果您想解耦源,您可以将所有信息包装在一个数组中,并将其传递给一个名为 Save() 的函数。此函数可能是 Save.php 文件中的唯一函数。现在你可以这样做了:

    $data['firstname'] = $_POST['fname'];
    $data['lastname']  = $_POST['lname'];
    
    // Now you could even put $_SESSION['data'] = $data;
    // and have it all in the session!
    
    ...and also simplify the use of mysql escaping with a cycle:
    
    foreach ($data as $field => $content) {
        $data[$field] = mysql_real_escape_string($con, $content);
    }
    // By the way: IMPORTANT!. mysql_* functions are DEPRECATED and will be REMOVED
    // (maybe soon). Use PDO instead! It takes a bit to adapt, but it's worth it.
    
    if ($valid) {
        // The file is only included if it is necessary, if data are $valid.
        include "Save.php";
        save($data);
    }
    

    【讨论】:

    • 我使用了它说的包含:致命错误:无法重新声明 test_input()(之前在第 108 行的 C:\xampp\blablal 中声明。第二个选项不安全(个人信息)。第三...我不知道如何使用会话你能帮我吗?
    • @MikeAngel 你只能在一个页面上声明你的function test_input(),所以如果你在第一页上包含它,那么在包含的页面上,你只需从第二个包含的页面中删除它. test_input($data) 仍然可以使用,只是不能再次声明。
    • 不理解重新声明错误。如果我发布我的方法可以吗?并没有太大的不同,我将省略 PDO 部分。
    • 我认为如果你发布一个更好的方法来做这件事,你可能会帮助他们很多,最好是使用 cmets,这样他们就知道你在做什么以及为什么要做你正在做的事情......
    • 现在我担心我的代码,因为 mysql ......它是我唯一知道我是 php 的新手。我正在尝试验证一个人输入的信息,然后如果可以将其保存到数据库中。我不知道把我只是猜测的东西放在哪里。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 2020-01-24
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多