php войти в форму с сообщениями и датой и временем - PullRequest
2 голосов
/ 27 июня 2011

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

Если вы не видите из кода, я пытаюсь создать (ложную) форму входа в систему, которая запрашивает имя пользователя и пароль.

  • Я хочу, чтобы любое пустое текстовое поле показывало красное сообщение справа от текстового поля. (у меня есть красное сообщение об ошибке, но я не могу получить его слева от коробки)

  • Мне нужна липкая форма, которая сохраняет любое поле, если оно заполнено (опять же, я думаю, что я настроил это, но не думаю, что оно работает полностью)

  • Я бы хотел, чтобы человек, который вводит имя пользователя: пользователь и пароль: abc123 , видел приветственное сообщение. Если вы не используете эту комбинацию имени пользователя и пароля, я хочу получить сообщение о том, что они не авторизованы. (Это то, что я действительно не знаю, как это сделать)

  • Я хочу все это в редуксе (также думаю, что у меня это работает, но не уверен на 100%)

Любая помощь будет принята с благодарностью!

А вот и мой код:

<?php

define('TITLE', 'LOG IN');

// CSS
print '<style type="text/css" media="screen">
.error { color: red; }
    </style>';

    // Checking
    if ( isset($_POST['submitted']) ) {

$problem = FALSE;

// Each value

if (empty($_POST['email'])) {
    $problem = TRUE;
    print '<p class="error">Please enter the username!</p>';
}

if (empty($_POST['password1'])) {
    $problem = TRUE;
    print '<p class="error">Please enter the password!</p>';
}


if (!$problem) { //No problem

    // Printing the log in message
    print '<p>Thank you for logging in!</p>';

    $_POST = array();

} else {

    print '<p class="error">No entry!</p>';

       }

    }

    ?>
    <form action="login.php" method="post">

    <p>"Username": <input type="text" name="username" size="20" value="<?php if (isset($_POST['username'])) { print htmlspecialchars($_POST['username']); } ?>" /></p>
    <p>Password: <input type="password" name="password1" size="20" /></p>
    <p><input type="submit" name="submit" value="Log in" /></p>
    <input type="hidden" name="submitted" value="true" />
    </form>

Ответы [ 2 ]

3 голосов
/ 27 июня 2011

Хорошо, вот простой логин, который не предназначен для реального использования. Пожалуйста, прочитайте комментарии, включенные в код, чтобы увидеть, что я должен сказать о каждом. Выполнение входа в систему довольно сложно по ряду причин, поэтому этот пример предназначен не для демонстрации реальной работающей кодовой базы, а для очень простой проверки имени пользователя / пароля.

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

Дайте мне знать, если у вас есть какие-либо вопросы. Чтобы увидеть форму в действии, проверьте:

http://jfcoder.com/test/simplelogin.php

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

http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc.

<html>
<head>
<style type="text/css">
.error {
    color: red;
}
</style>
</head>
<body>
<?php 

// Note, in most cases you will set a SESSION variable
// of $_SESSION['loggedin'], which would require you to
// use session_start() before you access any session
// variables.

// Note, this defaults to false.
$loggedin = false;

// If I get an error, I will put it in this variable.
$error = '';

// If the username is provided, run the code. Otherwise,
// act as if the login form was not submitted. This makes
// a hidden `submitted` value superfluous, and guarantees
// your users at least provide a username.
if ($_POST['username']) {
    // NOTE!!! In mose cases, you're querying a database
    // for a username/password match. In PHP, this often 
    // means a MySQL query. DO NOT USE THE BELOW IF YOU
    // ARE DOING SO!!! This will allow what's called a
    // SQL injection. You MUST wash your data with something
    // like mysql_real_escape_string() for the $_POST
    // values (NEVER trust submitted data, always validate
    // and escape as necessary), or use the PHP PDO library.
    // In this example, though, I use a switch to check the
    // values for exact matches, which means I do not need 
    // to escape (and mysql_real_escape_string() requires
    // a database connection to use).
    $username = $_POST['username'];
    $password = $_POST['password'];

    // Here, I check if the username and password match.
    // This is, of course, hardcoded, but to match your 
    // attempt, I chose to keep the form, although you
    // rarely see this in use in the real world.    
    switch ($username) {
        // My one case. For each additional user, you
        // would need to add a new entry with password
        // check. And I set my error text according to
        // the result of the code.
        case 'user':
            if ($password === 'abc123') {
                $loggedin = true;
            } else {
                $error = 'Username/Password did not match.';
            }
            break;
        default:
            // Note, I don't give a descriptive error
            // here. If someone reports this error, I
            // know what may have gone wrong, but the
            // user is not told the username does not
            // exist.
            $error = 'Unknown error. Try again.';
    }
}

// I will only show the welcome message if the user has
// successfully logged in.
if ($loggedin === true) {
    echo <<<HTML
<h1>Welcome!</h1>
<p>Thank you for logging in $username</p>
HTML;
} else {
    // If an error text is set, display that error.
    if ($error != '') {
        $error = "<h4>Login error</h4><p class='error'>$error</p>";
    }
    // Here's my form, only shown if the user has not
    // successfully logged in (note, this is only a one-
    // time check when the POST data is submitted; I
    // would need to use sessions to "remember" the requestor
    // had logged in across page accesses.
    echo <<<FORM
<h1>Login Form</h1>
<form action="simplelogin.php" method="POST">
$error
<p><label>Username: <input type="text" name="username"/></label></p>
<p><label>Password: <input type="password" name="password"/></label></p>
<p><input type="submit" value="Login"/> <input type="reset"/></p>
</form>
FORM;
}

?>
</body>
</html>
1 голос
/ 27 июня 2011

Вот мой полный код.Я в значительной степени переписал все это, поэтому извиняюсь, если стиль кодирования слишком сильно отличается:

<?php
// Output our CSS code
echo    '<style type="text/css" media="screen">
            .error
            {
                color: red;
            }
        </style>';

// Define our variable      
$problem = false;

// Check if the form has been submitted
if (isset($_POST['submitted']))
{
    // If either user or password are empty, we have a problem
    if (empty($_POST['username']) || empty($_POST['password']))
    {
        $problem = TRUE;
    }

    // If there is no problem, username is user, and password is abc123, we're good
    if (!$problem && $_POST['username']=='user' && $_POST['password']=='abc123') {

        // Print our login message
        echo 'Thank you for logging in!<br />';
    }
    // Ok, there's either a problem or the username or password is wrong, so no entry for them
    else
    {
        echo '<p class="error">No entry!</p>';
    }

}

    ?>
    <form action="login.php" method="post">
    Username: <input type="text" name="username" size="20" value="<?php
        if (isset($_POST['submitted']) && !empty($_POST['username']))
        {
            echo $_POST['username'];
        } ?>" />
    <?php
        if (isset($_POST['submitted']) && empty($_POST['username']))
        {
            echo '<span class="error">Please enter a username!</span>';
        }
    ?>
    <br />Password: <input type="password" name="password" size="20" value="<?php
        if (isset($_POST['submitted']) && !empty($_POST['password']))
        {
            echo $_POST['password'];
        } ?>" />
    <?php
        if (isset($_POST['submitted']) && empty($_POST['password']))
        {
            echo '<span class="error">Please enter the password!</span>';
        }
    ?>
    <br /><input type="submit" value="Log in" />
    <br /><input type="hidden" name="submitted" value="true" />
</form>
...