简体   繁体   English

使用会话在PHP页面之间进行数据传输

[英]Data transfer between php pages using sessions

I am trying to transfer data between php pages using session. 我正在尝试使用会话在php页面之间传输数据。 My code is as below: 我的代码如下:

check_code.php: check_code.php:

<?php
session_start();
echo "<form action=\"check_code.php\" method=\"post\">";

echo "<h2>Your Name.  *</h2><input type='text' name='user_name'>";
echo "<br><br>";
echo "<h2>Your age.  *</h2><input type='text' name='age'>";
echo "<br><br>";
echo "<br><br><br>";
echo "<div><input type='submit' value='Review'></div>";
echo "</form>";
?>

<?php  
if((empty($_POST['user_name'])) || (empty($_POST['age'])) ) {
    echo "<h2>Please enter your user name and age</h2>";
} else {
    echo "<form action=\"page2.php\" method=\"post\">";
    $user_name = $_POST['user_name'];
    $age = $_POST['age'];
    echo "Below are the details entered:<br>";
    echo "Name: $user_name";
    echo "Age: $age";
    echo "Select any one: ";
    echo '<td bgcolor="#EAEAEA" style="color:#003399"><input type="checkbox" 
      name="subject[]" value="Science">Science</td>';
    echo '<td bgcolor="#EAEAEA" style="color:#003399"><input type="checkbox" 
      name="subject[]" value="Math">Math</td>';
    echo "<br>";

    $_SESSION['user'] = $_POST['user_name'];
    $_SESSION['age'] = $_POST['age'];
    $_SESSION['subject'] = $_POST['subject'];


    echo "<input type=\"submit\" value='Add to DB' >";
    echo "</form>";
}   

?>

page2.php: 使page2.php:

<?php
session_start();
$user_name =  $_SESSION['user'];
$age = $_SESSION['age'];
$subject = $_SESSION['subject'];
echo "<h2>Below are the details entered:</h2><br>";
echo "<h2>Name: </h2>$user_name";
echo "<h2>Age: </h2>$age";
echo "<h2>Subject selected: </h2>";
for ($i=0;$i<sizeof($subject);$i++) {
    echo "  $subject[$i]  ";
} 

?>

The name and age get displayed in the final page (page2.php). 名称和年龄显示在最后一页(page2.php)。 The subject does not get passed to the next page. 该主题不会传递到下一页。 What mistake am I making here? 我在这里犯什么错误?

Any help would be appreciated!!! 任何帮助,将不胜感激!!!

The code you gave had some issues, so I rewrote your code and you might try the one below: 您提供的代码存在一些问题,因此我重写了您的代码,您可以尝试以下代码:

check_code.php file: check_code.php文件:

<?php session_start(); ?>
<form method="POST" action="<?php echo $_SERVER['REQUEST_URI']; ?>">
    <label>Your name</label>
    <input type="text" name="name" />
    <br>
    <label>Your age</label>
    <input type="number" name="age" />
    <hr>
    <button type="submit" name="review">Review</button>
    <?php if(isset($_SESSION['details'])) { ?>
    <button type="submit" name="unset">Unset</button>
    <?php } ?>
</form>
<?php
    if(isset($_SESSION['details'])) {
        if(isset($_POST['unset'])) { // If pressed "unset", remove the session and the values and restart
            unset($_SESSION);
            session_destroy();
        }
    }

    if(isset($_POST['review'])) {
        if(!empty($_POST['name']) && !empty($_POST['age'])) { // If fields are not empty
?>
<p>Your Details:</p>
<table>
    <tr>
        <td>Name<td>
        <td><?php echo $_POST['name']; ?></td>
    </tr>
    <tr>
        <td>Age<td>
        <td><?php echo $_POST['age']; ?></td>
    </tr>
</table>
<?php
            $_SESSION['details'] = array(
                'name' => $_POST['name'],
                'age'  => $_POST['age']
                // Storing them in array as $_SESSION['details'][name/age/whatever]
            );
        }
        else {
            echo 'Please fill in the fields.';
        }
    }

    if(isset($_SESSION['details'])) {
?>
<p><?php echo $_SESSION['details']['name']; /* Stored name in session */ ?>, Please Select Subject:</p>
<form method="POST" action="<?php echo $_SERVER['REQUEST_URI']; ?>">
    <label>Science</label>
    <input type="checkbox" name="subject[]" value="science" />
    <br>
    <label>Math</label>
    <input type="checkbox" name="subject[]" value="math" />
    <hr>
    <button type="submit" name="send">Remember My Choice</button>
</form>
<?php
        if(isset($_POST['send'])) { // If you send the second form, then...
            if(isset($_POST['subject'])) { // If selected subject
                $_SESSION['subject'] = array();
                for($i = 0; $i < count($_POST['subject']); $i++) {
                    $_SESSION['subject'][] = $_POST['subject'][$i]; // store all values of "subject" in the session
                }
            }

            header('location: page2.php');
        }
    }

Explanation : 说明

You wanted the user to choose a subject after submitting the form, and defined it when the user can not check subject - line 33. when the user can not define the variable, you can continue - but with errors - and that's what I got when I tried your code. 您希望用户提交表单选择一个主题,并在用户无法检查主题时对其进行定义(第33行)。当用户无法定义变量时,您可以继续操作-但有错误-这就是我得到的内容我尝试了您的代码。

So what I did was the following steps: 所以我要做的是以下步骤:

  1. Send the first form with the name and the age 发送带有姓名和年龄的第一个表格
  2. Define $_SESSION variable named "details" (as array that held the required information) 定义名为“详细信息”的$_SESSION变量(作为包含所需信息的数组)
  3. If this variable exists - then allow the user to select a subject. 如果存在此变量-则允许用户选择一个主题。

Then, when you choose one (or more) subjects, they're saved too in the session: 然后,当您选择一个(或多个)主题时,它们也会在会话中保存:

page2.php file: page2.php文件:

<?php
    session_start();
    if(isset($_SESSION['details'])) {
?>
<p>Your name is <?php echo $_SESSION['details']['name']; ?> and your age is <?php echo $_SESSION['details']['age']; ?></p>
<?php if(isset($_SESSION['subject'])) { ?>
<p>And your subject(s) are <?php echo implode(', ', $_SESSION['subject']); ?></p>
<?php } else { ?>
<p>You don't have any subject</p>
<?php
        }
    }
    else {
        die('An Error Occurred');
    }

On page2.php I checked if the details are set. page2.php我检查是否设置了详细信息。 if they are, then we can proceed and check if the subject(s) are set too. 如果是,那么我们可以继续检查主题是否也已设置。 In case details are not set, the connection will die and print an error message. 如果未设置详细信息,则连接将终止并显示错误消息。 If you don't set the subject, you'll get a message about it, too. 如果您没有设置主题,您也会收到一条有关此主题的消息。

Important note: 重要的提示:

  • Your code, and this one too are vulnerable. 您的代码以及此代码也很容易受到攻击。 Do not use these in a server, unless you take care about XSS protection. 除非您注意XSS保护,否则请勿在服务器中使用它们。 You may escape characters and use Regular expressions to "Sanitize" the input. 您可以转义字符并使用正则表达式对输入内容进行“清理”。

You can replace your current code with this one. 您可以用此代码替换当前代码。

I hope it will be helpful 希望对您有所帮助

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM