簡體   English   中英

使用會話在PHP頁面之間進行數據傳輸

[英]Data transfer between php pages using sessions

我正在嘗試使用會話在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:

<?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]  ";
} 

?>

名稱和年齡顯示在最后一頁(page2.php)。 該主題不會傳遞到下一頁。 我在這里犯什么錯誤?

任何幫助,將不勝感激!!!

您提供的代碼存在一些問題,因此我重寫了您的代碼,您可以嘗試以下代碼:

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');
        }
    }

說明

您希望用戶提交表單選擇一個主題,並在用戶無法檢查主題時對其進行定義(第33行)。當用戶無法定義變量時,您可以繼續操作-但有錯誤-這就是我得到的內容我嘗試了您的代碼。

所以我要做的是以下步驟:

  1. 發送帶有姓名和年齡的第一個表格
  2. 定義名為“詳細信息”的$_SESSION變量(作為包含所需信息的數組)
  3. 如果存在此變量-則允許用戶選擇一個主題。

然后,當您選擇一個(或多個)主題時,它們也會在會話中保存:

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');
    }

page2.php我檢查是否設置了詳細信息。 如果是,那么我們可以繼續檢查主題是否也已設置。 如果未設置詳細信息,則連接將終止並顯示錯誤消息。 如果您沒有設置主題,您也會收到一條有關此主題的消息。

重要的提示:

  • 您的代碼以及此代碼也很容易受到攻擊。 除非您注意XSS保護,否則請勿在服務器中使用它們。 您可以轉義字符並使用正則表達式對輸入內容進行“清理”。

您可以用此代碼替換當前代碼。

希望對您有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM