PHP и HTML - Скрытие <form>при входе пользователя в систему - PullRequest
1 голос
/ 21 февраля 2012

Я задал очень похожий вопрос и одобрил ответ, так как думал, что он выполнил свою работу, но это не так!ради жизни я не могу понять, почему это не сработает!Я хочу, чтобы форма в html исчезала при входе пользователя в систему!Вот мой код!(Я не буду отображать весь код, так как html слишком длинный, но я думаю, что это полезно, пожалуйста, имейте в виду, что я нахожусь на ранней стадии разработки php):

У меня это вверху моей страницы:

    <?php
if (isset($_GET['showerror']))
$errorcode = $_GET['showerror'];
else
$errorcode = 0;
?>

Затем код, чтобы попытаться скрыть форму и отобразить ошибку, если имя пользователя / пароль неверны:

<?php
if ($errorcode == 1)
    {
    echo "<h3>Your login has failed. Try again</h3>";
    }
?>

<?php
session_start();

if (!isset($_SESSION['is_logged_in'])) {
?>

<form id="login" name="login" action="logincheck.php" method="post">
            User Name: 
            <input type="text" name="username"></input>
            Password: 
            <input type="password" name="password"></input>
            <input type="submit" name="submit" value="login"></input>
            <a href="javascript: void(0)" onclick="popup('register.html')" > (Register)</a>
            <br /><br /><br />
        </form>
<?
}
?>

Следующий код - это то, что я написал, чтобы проверить, еслиучетные данные для входа в систему верны, и чтобы вернуть нас на страницу index.html, я назначаю значение errorcode, чтобы отображать сообщение об ошибке, если учетные данные неверны, и присваиваю значение is_logged_in, чтобы скрыть форму, если они правильные,В обоих случаях мы возвращаемся к index.html, но, надеюсь, либо с отображаемой формой и сообщением eroor, либо без формы и без сообщения: (dbconn.php - это мое соединение с базой данных mysql)

    <?php
session_start();
require "dbconn.php";

$username = $_POST['username'];
$password = $_POST['password'];

$sql = "SELECT * FROM person WHERE name ='".$username."' AND password='".$password."'";

$result = mysql_query($sql) or die(mysql_error());

$row = mysql_fetch_array( $result );

if ($row != null)
    {
    $_SESSION['username'] = $row['name'];
        header("Location: index.html?is_logged_in=1?");
    exit();
    }
 else
    {
    header("Location: index.html?showerror=1");
     exit();
    }
?>

но проблема в том, что ни один из двух результатов, я не получаю сообщения об ошибке и не вижу скрытой формы, потому что ничего не происходит, мне трудно определить, где я иду не так!

Спасибооооочень много за любую помощь ... Я потратил целую вечность, настраивая xampp должным образом и приготовившись к многому научиться, но я застрял здесь уже несколько часов!

РЕДАКТИРОВАТЬ: все еще не справился с редактированием кода!часть кода не отображалась, но я думаю, что все готово!

Ответы [ 7 ]

1 голос
/ 21 февраля 2012

Вы не устанавливаете переменную сеанса is_logged_in, ставите

$_SESSION["is_logged_in"] = 1;

в файл входа в систему (в скобках, если $ row! = Null)

0 голосов
/ 21 февраля 2012

Ну, я очень новичок в PHP и все еще учусь сам. Я могу сказать вам одну вещь: вам нужно зашифровать свой пароль. используйте "md5 ($ пароль);" Существует другой алгоритм шифрования, но мне кажется, что наиболее часто используется md5.

Что касается сценария входа в систему, одна вещь, которую я быстро узнал от других программистов, - это использовать $ _GET [], когда это необходимо. Как? Page =,? Viewphoto =, и т. Д. Не сохраняйте состояние «залогинен» в URL. использовать куки! :)

Еще одна вещь, "mysql_real_escape_string ()", вам нужно использовать их !!!!!! или хакеры легко запустят скрипт внедрения Sql. посмотрите на страницы php о том, как их использовать.

Я не говорю, что мой код верен (опять же, очень плохо знаком с php).

if(!count($err))
{
    $_POST['username'] = mysql_real_escape_string($_POST['username']);
    $_POST['password'] = mysql_real_escape_string($_POST['password']);
    $_POST['rememberMe'] = (int)$_POST['rememberMe'];

    // Escaping all input data

    $row = mysql_fetch_assoc(mysql_query("SELECT id,usr FROM {$bd_prefix}Members WHERE usr='{$_POST['username']}' AND pass='".md5($_POST['password'])."'"));

    if($row['usr'])
    {
        // If everything is OK login

        $_SESSION['usr']= $row['usr'];
        $_SESSION['id'] = $row['id'];
        $_SESSION['rememberMe'] = $_POST['rememberMe'];
        $_SESSION['logged'] = true;

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

0 голосов
/ 21 февраля 2012

Попробуйте это:

Важное использование mysql_real_escape_string для всех USER INPUT, или вы можете очень легко взломать СМОТРИТЕ комментарий от Dan Kanze. Но лучше узнать готовые операторы расширения MYSQLI, его проще чище и безопаснее Вот пример. http://mattbango.com/notebook/web-development/prepared-statements-in-php-and-mysqli/

Также этот код не очень безопасен, потому что пользователь может установить $ _GET ['is_logged_in']! == "1" manuell, возможно, вам следует добавить файл cookie для пользователя ПК с уникальным значением, которое пользователь вошел в систему, и это значение соответствует его паре пользователь / пароль, которую вы храните в своей БД.

Просто зайдите в форму безопасного входа в Google php или что-то в этом роде.

 <?php


require "dbconn.php";


if(@$_GET['showerror'] == "1"){
    echo "Your login has failed. Try again";
    exit;
}


if(!empty($_POST['username']){
    $username = mysql_real_escape_string($_POST['username']); 
    $password = mysql_real_escape_string($_POST['password']);
    $sql = "SELECT * FROM person WHERE name ='".$username."' AND password='".$password."'";
    $result = mysql_query($sql) or die(mysql_error());
    $row = mysql_fetch_array( $result );
    if(!empty($row)){
        $_SESSION['username'] = $row['name']; 
        header("Location: index.html?is_logged_in=1?";
        exit(); 
    }else{
        header("Location: index.html?showerror=1"); 
        exit(); 
    }
}

if(@$_GET['is_logged_in'] !== "1"){
    // DISPLAY FORM
}else{
    // DO YOUR STUFF
}

?>
0 голосов
/ 21 февраля 2012

Попробуйте изменить:

if (!isset($_SESSION['is_logged_in']))

На:

if (!empty($_GET['is_logged_in']))

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

www.site.com?is_logged_in=lolhacked
0 голосов
/ 21 февраля 2012

Вы можете использовать стиль, чтобы скрыть свою форму:

.form
{
 display:block;
}

.form error
{
 display:none;
}

используйте небольшую хитрость с jquery. Используйте этот API addClass (), чтобы добавить новый класс для вашей формы, который вы можете скрыть.

Но я предлагаю, когда пользователь вводит неправильный пароль или неправильное имя пользователя, ваша ошибка должна быть помещена рядом с формой, и пользователь может снова ввести имя пользователя и пароль.

0 голосов
/ 21 февраля 2012

Хм,

Я думаю, что вы можете пропустить инструкцию для установки значения $ _SESSION ['is_logged_in'] в вашей логике, которая выполняется после успешной проверки.

Добавление в

$_SESSION['is_logged_in'] = "1";

в ваше условие if ($ row! = Null) должно помочь.=)

Причина этого в том, что вы проверяете переменную Session с именем is_logged_in, но она не существует, так как она не была установлена ​​вашим кодом.

В качестве альтернативы вы можете проверитьвместо "$ _SESSION ['name']" в вашем операторе isset.

В sidenote рекомендуется избегать строки, которую вы собираетесь использовать как часть вашего оператора SQL.Используя PHP, один из простых способов сделать это - встроенная в PHP функция mysql_real_escape_string.Разрешение ввода данных пользователем непосредственно в ваш оператор SQL может привести к атакам SQL Injection , что является очень опасной вещью.= D

0 голосов
/ 21 февраля 2012

Когда вы проверяете сеанс, когда хотите скрыть форму, вы ищете $_SESSION['is_logged_in'], но вы не устанавливаете этот сеанс, когда пользователь входит в систему - просто переменная сеанса для username. Вам нужно добавить что-то вроде:

$_SESSION['is_logged_in'] = 1;
...