В чем ошибка в этом коде?.. Он всегда идет иначе

Почему этот код не работает?

Он всегда входит в else и устанавливает $_SESSION['wronglogin']=1; это сценарий входа в систему, который вводит идентификатор электронной почты и пароль, а затем проверяет, что если что-то подобное существует, то он должен запускаться $_SESSION['loggedin'], в противном случае $_SESSION['wronglogin']. Я много пробовал, но я просто не понимаю

$_SESSION['login-id']=$loginid;
$_SESSION['loginpassword']=$loginpassword;


$loginid = stripslashes($loginid);
$loginpassword = stripslashes($loginpassword);
$loginid = mysql_real_escape_string($loginid);
$loginpassword = mysql_real_escape_string($loginpassword);

$con = mysql_connect("localhost", "moodabsz_naman", "database") or die(mysql_error());
mysql_select_db("moodabsz_database",$con) or die(mysql_error());

$sql="SELECT * 
FROM  user 
WHERE  `email_id` =  '$loginid'
AND  `password` =  '$loginpassword'";
$result=mysql_query($sql);

$count=mysql_num_rows($result);
if($count==1){
    $_SESSION['loggedin']=1;


    mysql_close($con);

    header('location: index.php');

}
else {

    $_SESSION['wronglogin']=1;
    echo "Wrong Username or Password";

    mysql_close($con);

    header('Location: index.php');
}

person user1901478    schedule 13.12.2012    source источник
comment
Выведите запрос и попробуйте запустить его вручную. Вероятно, в вашей базе данных нет соответствующей записи.   -  person Sirko    schedule 13.12.2012
comment
Вы изначально проверяли значения, которые вы сохраняете в сеансе? $_SESSION['логин-идентификатор']=$логин; $_SESSION['логинпароль']=$логинпароль;   -  person Rainer.R    schedule 13.12.2012
comment
он пытался это по крайней мере 10 раз мой друг   -  person user1901478    schedule 13.12.2012
comment
либо это, либо переменные $_SESSION не заполнены. Я нигде не вижу session_start()   -  person Cfreak    schedule 13.12.2012
comment
Также вам не следует использовать функции mysql_*, поскольку они устарели. Используйте PDO (php.net/PDO) и параматизированные запросы. Ваш код подвержен уязвимостям SQL Injection.   -  person Cfreak    schedule 13.12.2012
comment
Вы уверены, что из вашего SQL-запроса возвращена только одна строка?   -  person sdespont    schedule 13.12.2012
comment
помимо комментария об использовании PDO и о том, что вы не храните свой пароль в открытом виде, пытались ли вы выполнить запрос в mysql? Или, когда вы используете x-debug, проверяли ли вы запрос, который действительно выполняется?   -  person dmaij    schedule 13.12.2012
comment
session_start()? может помочь. Также не используйте mysql_*, потому что использование этого расширения не рекомендуется. Также обратите внимание, что вы проверяете 2 раза. Вы можете сделать это сразу, как if(mysql_query("SELECT * FROM user WHERE email_id = '$loginid' AND password = '$loginpassword' LIMIT 1")) echo 'I have data so i may pass';   -  person Ron van der Heijden    schedule 13.12.2012
comment
вы также можете использовать var_dump($_SESSION); чтобы увидеть, что содержится в массиве сеанса. тогда вы увидите любые значения   -  person ashley    schedule 13.12.2012
comment
session_start был объявлен в моем коде @Bondye   -  person user1901478    schedule 13.12.2012
comment
@dmaij пытался запустить в моем sql, он работал   -  person user1901478    schedule 13.12.2012
comment
Проблема, безусловно, либо в ваших переменных _SESSION, либо в вашем запросе. Проверьте mysql_error после вызова mysql_query()   -  person Cfreak    schedule 13.12.2012
comment
возможно, попробуйте if($count›0) { помогает?   -  person dmaij    schedule 13.12.2012
comment
У вас, вероятно, есть несколько строк, они будут идти в другом, потому что вы проверяете $count==1. Добавьте LIMIT 1 к запросу.   -  person MrCode    schedule 13.12.2012
comment
@Bondye, это сработало, сэр, спасибо, но с этим проблема   -  person user1901478    schedule 13.12.2012
comment
Нет Несколько строк для Sure deff.@dmaij,@MrCode   -  person user1901478    schedule 13.12.2012
comment
@Bondye, код в вашем комментарии имеет серьезную проблему, вы должны удалить его.   -  person MrCode    schedule 13.12.2012
comment
Нет, это просто сработало для meif(SELECT * FROM user WHERE email_id = '$loginid' AND password = '$loginpassword'){ $_SESSION['loggedin']=1; @MrCode   -  person user1901478    schedule 13.12.2012
comment
@MrCode Критика подструктуры. Этот фрагмент кода является примером, никогда не копируйте код вслепую, но сначала попытайтесь понять его.   -  person Ron van der Heijden    schedule 13.12.2012
comment
@Bondye, ваш код не проверяет адрес электронной почты и пароль, он позволяет ВСЕМ войти в систему без необходимости записи в таблице. Я бы сказал, что это довольно серьезно. Вы также можете заменить свой код на if(true), потому что это, по сути, то, что он делает.   -  person MrCode    schedule 13.12.2012
comment
@MrCode Проверьте еще раз. Он проверит, найдена ли комбинация «пользователь + пароль». Если это приводит к истине, пользователь действительно существует. Здесь нет ничего плохого.   -  person Ron van der Heijden    schedule 13.12.2012
comment
@mrCode прав, я hv jst проверил, что он полностью прав, он делает то же самое, позволяя всем войти в систему   -  person user1901478    schedule 13.12.2012
comment
@MrCode, я перепробовал все, что вы сказали, электронная почта существует в базе данных, а также попытался установить лимит, но та же проблема не устранена.   -  person user1901478    schedule 13.12.2012
comment
@Bondey Я только что понял, на самом деле дело в вашем коде, он выполняет оператор, и если оператор (который всегда будет) выполняется, он примет его как ИСТИНА   -  person user1901478    schedule 13.12.2012
comment
@ user1901478, вы можете добавить die($sql) перед запросом, затем скопировать точный результат в phpMyAdmin или напрямую в MySQL и сообщить нам, есть ли строки и сколько.   -  person MrCode    schedule 13.12.2012
comment
die($sql) перед всем запросом или просто mysql @MrCode   -  person user1901478    schedule 13.12.2012
comment
@ user1901478 это не исправлять, а отлаживать. Вам нужно увидеть, как выглядит запрос, и вам нужно запустить его прямо в БД, чтобы увидеть, сколько строк и есть ли какие-либо ошибки.   -  person MrCode    schedule 13.12.2012
comment
@MrCode в phpMy admin отображает результат   -  person user1901478    schedule 13.12.2012
comment
@user1901478 user1901478 удалите die($sql), затем измените на $result=mysql_query($sql) or die('error: ' . mysql_error());, затем запустите свой код и сообщите нам, что он выводит   -  person MrCode    schedule 13.12.2012
comment
@MrCode это довольно удивительно, он все тот же, что означает, что он читает данные, я думаю   -  person user1901478    schedule 13.12.2012
comment
Это просто некрасиво. Вам, ребята, стоит обсудить это в чате, если вы собираетесь вот так ходить туда-сюда. И @ user1901478 вам действительно нужно прочитать несколько руководств о том, как это делается. Это очень распространено, и вы звучите так, как будто у вас еще нет хорошей основы для этого. Ваш текущий код очень плохо написан и имеет несколько недостатков безопасности.   -  person lifo    schedule 13.12.2012
comment
@mrcode любые дальнейшие решения   -  person user1901478    schedule 13.12.2012
comment
@user1901478 user1901478 с чего ты взял, что это еще? Вы видите Wrong Username or Password на странице?   -  person MrCode    schedule 13.12.2012
comment
@mrcode да, я установил так, что if (isset ($_SESSION ['wronglogin'])) {echo $_SESSION ['login-id']; сеанс_unset(); echo Неверное имя пользователя или пароль; }   -  person user1901478    schedule 13.12.2012
comment
Это в другом? Проверьте свой журнал ошибок на наличие ошибок и покажите, как извлекаются имя пользователя и пароль, $_POST?   -  person MrCode    schedule 13.12.2012
comment
да на самом деле if (isset($_POST['submit']) && $_POST['submit'] == Войти){ $loginid = $_POST['email-id']; $loginpassword = $_POST['пароль']; if ($_POST['email-id']!= && $_POST['password']!=) { $_SESSION['login-id']=$loginid; $_SESSION['логинпароль']=$логинпароль; $loginid = полоски($loginid); $loginpassword = полоски ($ loginpassword); $loginid = mysql_real_escape_string($loginid); $loginpassword = mysql_real_escape_string($loginpassword);   -  person user1901478    schedule 13.12.2012
comment
@MrCode на самом деле да, если (isset($_POST['submit']) && $_POST['submit'] == Войти){ $loginid = $_POST['email-id']; $loginpassword = $_POST['пароль']; if ($_POST['email-id']!= && $_POST['password']!=) { $_SESSION['login-id']=$loginid; $_SESSION['логинпароль']=$логинпароль; $loginid = полоски($loginid); $loginpassword = полоски ($ loginpassword); $loginid = mysql_real_escape_string($loginid); $loginpassword = mysql_real_escape_string($loginpassword);   -  person user1901478    schedule 13.12.2012
comment
@MrCode Я только что столкнулся с проблемой, проблема была создана командами инъекции sql   -  person user1901478    schedule 13.12.2012
comment
@mrcode, но сэр, если я не могу использовать SQL-инъекцию, так что мне делать для защиты от того же   -  person user1901478    schedule 13.12.2012
comment
@ user1901478, как вы решили эту проблему, удалив mysql_real_escape_string()?   -  person MrCode    schedule 13.12.2012
comment
@Mrcode да, но теперь пользователь может создавать злые команды, так что мне делать, чтобы защитить его, что действительно было работой SQL-инъекции   -  person user1901478    schedule 13.12.2012
comment
@user1901478 переключиться на PDO и использовать параметризованный запрос, учебник здесь: wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers   -  person MrCode    schedule 13.12.2012
comment
@MrCode большое спасибо за вашу помощь! это было только потому, что я довольно молод, 15 по сравнению с парнями здесь, так что только начинающий, сэр   -  person user1901478    schedule 13.12.2012


Ответы (2)


можете ли вы скопировать вывод этого,

<?php
$_SESSION['login-id']=$loginid;
$_SESSION['loginpassword']=$loginpassword;


$loginid = stripslashes($loginid);
$loginpassword = stripslashes($loginpassword);
$loginid = mysql_real_escape_string($loginid);
$loginpassword = mysql_real_escape_string($loginpassword);

$con = mysql_connect("localhost", "moodabsz_naman", "database") or die(mysql_error());
mysql_select_db("moodabsz_database",$con) or die(mysql_error());

$sql="SELECT * 
FROM  `user` 
WHERE  `email_id` =  '$loginid'
AND  `password` =  '$loginpassword'";

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

$count=mysql_num_rows($result);

echo 'Debug::Count-'.$count;

if($count==1){
    $_SESSION['loggedin']=1;


    mysql_close($con);

   // header('location: index.php');

}
else {

    $_SESSION['wronglogin']=1;
    echo "Wrong Username or Password";

    mysql_close($con);

    //header('Location: index.php');
}
person Kasun    schedule 13.12.2012

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

<?php
session_start();
/*

The rest of your code

*/
?>
person SaidbakR    schedule 13.12.2012
comment
извините, сэр, на самом деле я уже упоминал, что запускаю его только с этим - person user1901478; 13.12.2012
comment
Извините, я понял, что вы не инициализировали сеанс. - person SaidbakR; 13.12.2012