Что я делаю не так с этим телефоном? СЕССИЯ Я пытаюсь распечатать на экране? - PullRequest
0 голосов
/ 15 января 2019

Я тестирую СЕССИЮ, где три предыдущие страницы печатаются до последней страницы. Но мне трудно заставить его работать. Все идет хорошо до последней страницы. Вот код:

<?php
session_start();

if (isset($_POST['submit'])) { 
$_SESSION['name'] = $_POST ['name'];
$_SESSION['email'] = $_POST ['email'];
$_SESSION['age'] = $_POST ['age'];

echo $_SESSION['name'];
echo $_SESSION['email'];
echo $_SESSION['age'];
}
?>

Я получаю пробел или ошибку индекса для переменной сеанса. Может ли кто-нибудь помочь с правильным способом печати введенных пользователем данных сеанса?

Это 1-я, 2-я и 3-я страницы:

<html>
<head>
<title>phpsession</title>
</head>
<body>
<form method="POST" action="test_2_page_1.php">
<input type="text" name="name" placeholder="enter name"></input>
<input type="submit"> next</input>
</form>
<?php
//Set session variables
if (isset($_POST['submit'])) { 
$_SESSION['name'] = $_POST ['name'];
}
?>
</body>
</html>


<?php
session_start();
if (isset($_POST['submit'])) { 
$_SESSION['name'] = $_POST ['name'];
$_SESSION['email'] = $_POST ['email'];
}
?>
<html>
<head>
<title>phpsession</title>
</head>
<body>
<form method="POST" action="test_2_page_2.php">
<input type="text" name="email" placeholder="enter email"></input>
<input type="submit"> next</input>
</form>
<?php
// Set session variables
?>
</body>
</html>


<?php
session_start();
if (isset($_POST['submit'])) { 
$_SESSION['name'] = $_POST ['name'];
$_SESSION['email'] = $_POST ['email'];
$_SESSION['age'] = $_POST ['age'];
}
?>
<html>
<head>
<title>phpsession</title>
</head>
<body>
<form method="POST" action="post_test.php">
<input type="text" name="age" placeholder="enter age"></input>
<input type="submit"> next</input>
</form>
<?php
// Set session variables
?>
</body>
</html>

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Элемент input равен self-closing, поскольку вам не нужно </input> - скорее, тег просто закрывается с помощью />

Чтобы отобразить Next в качестве кнопки отправки, вы должны использовать атрибут value - то есть: <input type='submit' value='Next' />

После того, как переменная сеанса назначена, вам не нужно продолжать пытаться установить ее, и возникнут ошибки, если переменная недоступна в массиве POST - поэтому используйте isset для проверки перед созданием переменной

<?php
    session_start();
    if ( isset( $_POST['submit'], $_POST['name'] ) ) { 
        $_SESSION['name'] = $_POST['name'];
    }   
?>
<html>
    <head>
        <title>phpsession</title>
    </head>
    <body>
        <form method="POST" action="test_2_page_1.php">
            <input type="text" name="name" placeholder="enter name" />
            <input type="submit" name='submit' value='Next'>
        </form>
    </body>
</html>





<?php
    session_start();
    if ( isset( $_POST['submit'], $_POST['email'] ) ) {
        $_SESSION['email'] = $_POST['email'];
    }
?>
<html>
    <head>
        <title>phpsession</title>
    </head>
    <body>
        <form method="POST" action="test_2_page_2.php">
            <input type="text" name="email" placeholder="enter email" />
            <input type="submit" name='submit' value='Next'>
        </form>
    </body>
</html>







<?php
    session_start();
    if( isset( $_POST['submit'],$_POST['age'] ) ) {
        $_SESSION['age'] = $_POST['age'];
    }
?>
<html>
    <head>
        <title>phpsession</title>
    </head>
    <body>
        <form method="POST" action="post_test.php">
            <input type="text" name="age" placeholder="enter age" />
            <input type="submit" name='submit' value='Next'>
        </form>
    </body>
</html>

Чтобы помочь вам в решении ваших проблем, я быстро собрал демонстрационную страницу для получения и настройки переменных сеанса на основе отправленных форм. Надеюсь, это поможет

<code><?php
    session_start();
    #/10538643/chto-ya-delay-ne-tak-s-etim-telefonom-sessiya-ya-pytays-raspechatat-na-ekranecomment95217192_54194890

    if( !empty( $_GET['reset'] ) ){
        unset( $_SESSION['name'] );
        unset( $_SESSION['email'] );
        unset( $_SESSION['age'] );
        header( sprintf('Location: %s', $_SERVER['SCRIPT_NAME'] ) );
    }

    /* 
        as each form only submits two values ( submit being one ) we can
        simply remove it from the POST array and use the remaining field/value
        to generate the session variables using simple array techniques

        The below could easily be replaced with pre-defined variables, such as:
        if( isset( $_POST['name'] ) )$_SESSION['name']=$_POST['name']; etc

    */
    if ( isset( $_POST['submit'] ) ) {
        /* remove the submit button & value from the array */
        unset( $_POST['submit'] );

        /* there will now be one item, with index = 0 */
        $keys=array_keys( $_POST );
        $values=array_values( $_POST );

        /* set the session variable */
        $_SESSION[ $keys[0] ]=$values[0];
    }

?>
<html>
    <head>
        <title>phpsession</title>
    </head>
    <body>
        <form method='POST'>
        <?php
            if( empty( $_SESSION['name'] ) ){
                echo "<input type='text' name='name' placeholder='enter name' />";
            }
            if( !empty( $_SESSION['name'] ) && empty( $_SESSION['email'] ) ){
                echo "<input type='text' name='email' placeholder='enter email address' />";
            }
            if( !empty( $_SESSION['name'] ) && !empty( $_SESSION['email'] ) && empty( $_SESSION['age'] ) ){
                echo "<input type='text' name='age' placeholder='enter your age' />";
            }
            if( empty( $_SESSION['age'] ) ){
                echo "<input type='submit' name='submit' value='Next'>";
            } else {
                if( empty( $_POST['finish'] ) ) echo "<input type='submit' name='finish' value='Finish'>";
            }
            if( isset( $_POST['finish'] ) ){
                /* 
                    Once the user has completed each form, send them off to their final destination?
                    or do something else....
                */
                printf(
                    'Do some interesting stuff now ....
                    <pre>%s
Сброс », print_r ($ _SESSION, true) ); } ?>
0 голосов
/ 15 января 2019

В вашем HTML нет элемента ввода с именем submit, поэтому следующая часть вашего PHP-кода всегда будет иметь значение false:

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

Измените кнопку отправки в вашем HTML на следующую, и строка выше будет иметь значение true, когда форма будет опубликована:

<input name="submit" type="submit"> next</input>

...