PHP Сессии

eof2007

Новичок
Доброго времени суток!

Прошу подсказать в чем ошибка.
Делаю регистрацию с сохранением заполненных полей через сессии, к примеру для поля логин сделано так:

PHP:
<?PHP
    session_start ();
    if (isset($_POST['send'])) {
...
   $login = htmlspecialchars ($_POST['login']);
   $_SESSION['login'] = $login;

        If (strlen($login) < 5) {
            $error_login = 'Введите логин';
            $error = true;
        }
...
    }
?>

<input type='text' name='login' id='login' placeholder='Логин' value="<?=$_SESSION['login']?>">
<span style='color:red'><?=$error_login?></span>

И с логином все работает как надо, но с полем выбора пола не получается, при обновлении страницы сбрасывается заначение и появляется ошибка:
PHP:
<?PHP
    session_start ();
    if (isset($_POST['send'])) {
...
        if ($_POST['male'] == true) $sex = 1;
        if ($_POST['female'] == true) $sex = 2;
        $_SESSION['male'] = $sex;
        $_SESSION['female'] = $sex;

        If ($sex == false) {
            $error_sex = 'Укажите пол';
            $error = true;
        }
...
    }
?>

<span>
<label>Мужской</label><input type='radio' name='sex' id='male' value="<?=$_SESSION['male']?>">
<label>Женский</label><input type='radio' name='sex' id='female' value="<?=$_SESSION['female']?>">
</span>
<span style='color:red'><?=$error_sex?></span>
 
Последнее редактирование:

Vano

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

eof2007

Новичок
PHP:
<span style='color:red'><?=$error_sex?></span>
Поле не выбрано, идет подсветка поля по стилю CSS. В коде нет никакой ошибки, ошибка является логическая, код не работает как запланировано.
 

Andkorol

Новичок
У тебя radio buttons имеют атрибут name="sex" – соответственно, в обработчике формы ты должен работать с этим элементом через $_POST['sex'], никаких там «male-female» и в помине нет.
Насчет value="<?=$_SESSION['male']?>" и value="<?=$_SESSION['female']?>" – это вообще полная хрень, задавай значения явно: 1 и 2.
 

eof2007

Новичок
Спасибо за ответ, но что-то не получается все-равно...
PHP:
<?PHP
    session_start ();
    if (isset($_POST['send'])) {
        $login = htmlspecialchars ($_POST['login']);
        $password = htmlspecialchars ($_POST['password']);
        $repassword = htmlspecialchars ($_POST['repassword']);
        $email = htmlspecialchars ($_POST['email']);
        $dob = $_POST['dob'];
        $sex = $_POST['sex'];
        $_SESSION['login'] = $login;
        $_SESSION['password'] = $password;
        $_SESSION['repassword'] = $repassword;
        $_SESSION['email'] = $email;
        $_SESSION['dob'] = $dob;
        $_SESSION['sex'] = $sex;
        $error = false;
        If (strlen($login) < 5) {
            $error_login = 'Введите логин';
            $error = true;
        }
        If (strlen($password) < 5) {
            $error_password = 'Введите пароль';
            $error = true;
        }
        If ($repassword == '' || $password != $repassword) {
            $error_repassword = 'Пароли не совпадают!';
            $error = true;
        }
        If ($email == '' || !preg_match ('/@/', $email)) {
            $error_email = 'Введите корректный email';
            $error = true;
        }
        If (strtotime($dob.' '.'00:00:00') > time () || $dob == false) {
            $error_date = 'Введите корректную дату';
            $error = true;
        }
        If ($sex == false) {
            $error_sex = 'Укажите пол';
            $error = true;
        }       
        if ($error == false) {
            $mysqli = new mysqli ('localhost', 'root', '', 'users');
            $mysqli->query ("SET NAMES 'utf8'");
            $mysqli->query ("INSERT INTO 'users' ('reg_data', 'login', 'password', 'email', 'dob', 'sex') VALUE ('".time()."', '$login', '".md5($password)."', '$email', '$dob', '$sex')");
            $mysqli->close ();
            header ('Location: index.php');
            exit;
        }
    }
?>

HTML:
                        <form name='authorization' action='' method='post'>
                            <table>
                                <tr>
                                    <td>
                                        <label>Логин:</label>
                                    </td>
                                    <td>
                                        <input type='text' name='login' id='login' placeholder='Логин' value="<?=$_SESSION['login']?>">
                                        <span style='color:red'><?=$error_login?></span>
                                    </td>
                                </tr>
                                <tr>
                                    <td>
                                        <label>Пароль:</label>
                                    </td>
                                    <td>
                                        <input type='password' name='password' id='password' placeholder='Пароль' value="<?=$_SESSION['password']?>">
                                        <span style='color:red'><?=$error_password?></span>
                                    </td>
                                </tr>
                                <tr>
                                    <td>
                                        <label>Подтверждение пароля:</label>
                                    </td>
                                    <td>
                                        <input type ='password' name='repassword' id='repassword' placeholder='Пароль' value="<?=$_SESSION['repassword']?>">
                                        <span style='color:red'><?=$error_repassword?></span>
                                    </td>
                                </tr>
                                <tr>
                                    <td>
                                        <label>Почтовый ящик:</label>
                                    </td>
                                    <td>
                                        <input type ='email' name='email' id='email' placeholder='Email' value="<?=$_SESSION['email']?>">
                                        <span style='color:red'><?=$error_email?></span>
                                    </td>
                                </tr>
                                <tr>
                                    <td>
                                        <label>Возраст:</label>
                                    </td>
                                    <td>
                                        <input type ='date' name='dob' id='dob' value="<?=$_SESSION['dob']?>">
                                        <span style='color:red'><?=$error_date?></span>
                                    </td>
                                </tr>
                                <tr>
                                    <td>
                                        <label>Пол:</label>
                                    </td>
                                    <td>
                                        <span>
                                            <label>Мужской</label><input type='radio' name='sex' id='male' value="<?=$_SESSION['sex'] = 1?>">
                                            <label>Женский</label><input type='radio' name='sex' id='female' value="<?=$_SESSION['sex'] = 2?>">
                                        </span>
                                        <span style='color:red'><?=$error_sex?></span>
                                    </td>
                                </tr>
                                <tr>
                                    <td>
                                        <input type='submit' name='send' id='send' value='Отправить'>
                                    </td>
                                </tr>
                            </table>
                        </form>
[
/spoiler]
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@eof2007, а можно вопрос не по теме, зачем вам везде htmlspecialchars?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Да, правда? А при чем тут безопасность? И что такое php запрос?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@eof2007, я ничего не пытаюсь, я хочу, чтобы ты больше не читал тех книг, где учат писать такой убогий код ;) К безопасности он не имеет ни малейшего отношения, честно. @Фанат не даст соврать.

PS: я вот могу отправить такую форму, где вообще поля с полом не будет. Как твой код будет тогда работать?

PPS: if ($_POST['male'] == true) - очень хреновый путь. У тебя из формы обычно приходят строки, зачем ты пытаешься сравнить поле и булевым типом.
 

eof2007

Новичок
Спасибо, немного разобрался.
PHP:
If ($sex != 1 && $sex != 2)
Подсветка сейчас работает корректно, через echo выводится либо 1 либо 2 в зависимости от выбранной кнопки radio.
Но запоминание все-равно не работает, при обновлении страницы кнопка сбрасывается.
 
Сверху