Вопрос по mysql, php, sql – Простой скрипт php для входа в систему

0

Здравствуйте, я пытаюсь внедрить PDO в мой сценарий входа в систему, чтобы сделать его более безопасным от инъекции SQL. Но я получаю белую страницу, я думаю, что это потому, что я пытаюсь подсчитать строки, чтобы увидеть, если пользователь реально .....

// Here we inculde the function page
include 'functions/functions.php';
// Here we connect to the db
$db = mysqlconnect();

$password = md5($_POST['mypassword']);
$statement = $db->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$statement->execute(array($_POST['myusername'], $password));


// Replace counting function based on database you are using.
 $count = $statement->rowCount();
// If result matched $myusername and $mypassword, table row must be 1 row

if($count == 1){
  // Register $myusername, $mypassword and redirect to file "login_success.php"

$_SESSION['username'] = $myusername ;


//Test if it is a shared client
if (!empty($_SERVER['HTTP_CLIENT_IP'])){
  $ip=$_SERVER['HTTP_CLIENT_IP'];
//Is it a proxy address
}elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
  $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
  $ip=$_SERVER['REMOTE_ADDR'];
}


$updateinfo=mysql_query("UPDATE `users` SET lastip ='$ip' WHERE `username` = '".$_SESSION['username']."'");
mysql_query("INSERT INTO user_log 
(username, ip) VALUES('".$_SESSION['username']."', '$ip' ) ") 
or die(mysql_error());  





header("Location: home.php");
} else {
  echo "Wrong Username or Password";
}


echo"<p> </p>";

Я не получаю никаких ошибок, просто белая страница.

Также вот моя страница функции, которую я включаю

    function mysqlconnect(){
     global $db;
    $host = 'localhost';
    $port = 3306; // This is the default port for MySQL
    $database = '';
    $username = '';
    $password = '';

    // Construct the DSN, or "Data Source Name".  Really, it's just a fancy name
    // for a string that says what type of server we're connecting to, and how
    // to connect to it.  As long as the above is filled out, this line is all
    // you need :)
    $dsn = "mysql:host=$host;port=$port;dbname=$database";

    // Connect!
    $db = new PDO($dsn, $username, $password);

}
Ты все еще пользуешьсяmysql_query. Что вы пытаетесь достичь? Я вижу, что вы используете PDO для подключения к БД, но затем вы используетеmysql_query вне этого Paul Dessert
Я предлагаю вам прочитать эту тему: Wiki.hashphp.org / PDO_Tutorial_for_MySQL_Developers PeeHaa
Другое чтение будет Php.net / ручной / EN / language.variables.scope.php и я думаю, что просто переживу Php.net / ручной / EN не повредит PeeHaa
Перестань использоватьglobal ключевое слово. И что вы используетеmd5() для? И вы уверены, что включили отчеты об ошибках. PeeHaa
yes сообщение об ошибке включено. И вернуть $ db; Шоу не имеет выбранной базы данных (когда есть файл функции) И я использую MD5, потому что пароли пользователей это MD5 ... user1405062

Ваш Ответ

1   ответ
1

Если ты вставил здесь весь сценарий, то пропалsession_start(). Я не знаю, что у тебя вhome.php, но если генерация контента зависит от значения в $ _SESSION ['username'], этого никогда не произойдет, потому что он будет пустым после перенаправления заголовка.

Взгляни на руководство оsession_start ().

Также, как указано:

Для большинства баз данных PDOStatement :: rowCount () не возвращает количество строк, затронутых оператором SELECT.

Просто, если подумать, упомянуть об этом. Я провел довольно много времени в прошлом, размышляя об этом сам.

Возможно, вы захотите взглянуть на пример №2 в руководстве о ROWCOUNT.

И, конечно, как уже заметил @Paul, не стоит использоватьmysql_query() больше, если перейти на PDO.

у сервера есть сессия session_start, все готово, я помещаю его на страницу, затем получаю сотни сообщений о том, что заголовки ошибок все готовы отправлены ... user1405062
Если вы начинаете беспокоиться о уже отправленных заголовках, это происходит в следующей строке:header("Location: home.php"); У вас должен быть какой-то вывод в браузер где-то до этой строки. budwiser

Похожие вопросы