Код не работает. PHP / HTML

#php #html

#php #HTML

Вопрос:

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

Здесь, чтобы сформировать часть:

 <form action="check_login.php" name="form1" method="post">
        <ul data-role="listview" data-inset="true">
            <li data-role="list-divider" role="heading" tabindex="0">Member login</li>
            <li><input type="text" name="myusername" id="myusername" value="Email" /></li>
            <li><input type="password" name="mypassword" id="mypassword" value="Password" /></li>
            <li><button type="submit" name="login-submit" id="login-submit" data-icon="arrow-r" data-iconpos="right">LOG ON</button></li>
        </ul>
    </form>
  

И вот часть 2 (проверяет логин … похоже, сюда не попадает.

 <?php
$host="localhost"; // Host name
$username="usernamehere"; // Mysql username
$password="passwordhere"; // Mysql password
$db_name="dbnamehere"; // Database name
$tbl_name="members"; // Table name

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or

die("cannot connect");

mysql_select_db("$db_name")or die("cannot select DB");

// username and password sent from form
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and 

password='$mypassword'";

$result=mysql_query($sql);

$count=mysql_num_rows($result);

if($count==1){
session_register("myusername");
session_register("mypassword");
//header("location:login_success.php");
echo 'login success';
}
else {
echo "Wrong Username or Password";
}
?>
  

Для получения дополнительной информации о части кода, касающейся входа, пожалуйста, посмотрите здесь:

 http://devlup.com/programming/php/toa-simple-php-login-form-mysql/200/
  

Любые вопросы, пожалуйста, задавайте.

Спасибо.

Комментарии:

1. что вы имеете в виду, когда говорите, что, похоже, сюда не попадает? может быть, что-то повторить в верхней части этого файла, чтобы вы знали, что этот скрипт определенно выполняется при отправке формы. это может быть проблема с путем в форме отправки. попробуйте добавить к URL ведущее /

2. Прежде всего, пожалуйста, не храните незашифрованные пароли! Всегда извлекайте столбец пароля с помощью: выберите пароль у пользователей, где user = $user, а затем сравните этот пароль с md5($_POST[‘password’]).

3. Как это форматируется? Это все в одном файле? Называется ли PHP, который вы разместили в отдельном файле check_login.php ?

4. Привет, Марчин, спасибо за твой совет. Да, это отдельный файл. Я получаю часть входа с этого URL: devlup.com/programming/php/toa-simple-php-login-form-mysql/200

5. Вы получаете какой-либо вывод вообще?

Ответ №1:

Окончательное обновление

Для будущих посетителей, я предполагаю, что это ответ, который в конечном итоге решил проблему:

Относительные пути, подобные тому, который используется в действии формы, всегда начинаются с поиска в текущем каталоге. В исходном вопросе форма отправлялась в action="check_login.php" Это означает, что браузер отправит данные в http://www.domain.tl/wherever/theform/was/check_login.php.

Если вам нужно отправить формы в другие места, вам нужно либо указать абсолютные пути (http://www.domain.tl/handler.php ) или вам нужно разобраться в обходе каталога и указать правильный путь (../ ../handler.php ).

Обновить

Какова ваша файловая структура? Находится ли форма html в том же месте, что и обработчик php?

Чтобы было понятно, это должно быть /{parent}/form.html и /{parent}/check_login.php . Так ли это? Вы сказали, что не получаете никаких данных в $ _POST. Означает ли это, что он добирается ДО check_login.php , но не работает, или вообще не добирается до него?

Оригинал

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

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

 <?php
$host="localhost"; // Host name
$username="usernamehere"; // Mysql username
$password="passwordhere"; // Mysql password
$db_name="dbnamehere"; // Database name
$tbl_name="members"; // Table name

//Ideally, your database information is stored in another file, and you include it here.
//Mostly, it's just so you're not having to change it in multiple places if it changes
//but there could be a small security benefit, too

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or

die("cannot connect");

mysql_select_db("$db_name")or die("cannot select DB");

// username and password sent from form

//What if the $_POST vars don't exist?
//$myusername=$_POST['myusername'];
//$mypassword=$_POST['mypassword'];
//Try:
$myusername = isset($_POST['myusername']) ? $_POST['myusername'] : null;
$mypassword= isset($_POST['mypassword']) ? $_POST['mypassword'] : null;

//then you should check if the variables exist
if( $myusername == null || $myusername == "" || $mypassword == null || $mypassword == "" )
{
    echo "You need to fill in both fields.";
}


// To protect MySQL injection (more detail about MySQL injection)

//why are you forcing php to write to that variable twice?
//$myusername = stripslashes($myusername);
//$mypassword = stripslashes($mypassword);
//$myusername = mysql_real_escape_string($myusername);
//$mypassword = mysql_real_escape_string($mypassword);
//Try:
$myusername = mysql_real_escape_string(stripslashes($myusername));
$mypassword = mysql_real_escape_string(stripslashes($mypassword));

//As another person said, you desperately need to store hashed passwords
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
//This is a terrible idea.

$result=mysql_query($sql);

$count=mysql_num_rows($result);

if($count==1){
    //from @Jimmy Sawczuk
    //This is deprecated, since a while ago.
    //session_register("myusername");
    //session_register("mypassword");
    //Try:
    $_SESSION['myusername'] = $myusername;
    $_SESSION['mypassword'] = $mypassword;
    //header("location:login_success.php");
    echo 'login success';
}
else {
    echo "Wrong Username or Password";
}
?>
  

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

Комментарии:

1. Кроме того, согласно документам PHP: использование $ _SESSION является предпочтительным, начиная с PHP 4.1.0 ( php.net/manual/en/function.session-register.php )

2. Фу, я даже этого не заметил. Я никогда раньше не использовал session_register, поэтому я просто подумал, что он делает что-то особенное / пользовательское.

3. Должен признать, мне тоже пришлось посмотреть, что он делает. Но я подумал, что это не то, чего он хотел.

Ответ №2:

Не уверен, связано ли это, но элемент button вызывает проблемы в IE:

http://www.sitepoint.com/forums/html-xhtml-52/button-submit-input-submit-better-598656.html

Кроме того, попробуйте

 print_r($_POST);
  

прежде чем вы сделаете что-нибудь еще, посмотрите, получаете ли вы что-нибудь.

Комментарии:

1. Я добавил print_r ($ _POST); и не получил возврата