2014-09-02 5 views
0

В файле home.html у меня есть div, который, когда он будет нажат, отобразит форму входа, которая будет заполнена пользователем, который хочет войти в систему. После заполнения формы конфиг формы должен направить его обратно в файл home.html.Конфигурация config.php не работает

Проблема, с которой я столкнулся, заключается в том, что, когда я попытался заполнить форму поля имени пользователя и пароля и отправить ее, браузер просто остановится в файле config-haslogin.php, а не перенаправит его обратно в файл home.html.

Результат такой же, когда я пытался заполнить его неправильным именем пользователя и паролем.

конфиг-haslogin.php

<?php @session_start(); 
$_SESSION['id']= 0; 
?> 


<?php 
error_reporting(E_ALL^E_NOTICE);  
mysql_connect("mysql.com","usename","password") or die("cannot connect"); 
mysql_select_db("mytable") or die("Fail"); 

$myemail= $_POST['email']; 
$mypassword= $_POST['password']; 

$sql= "SELECT * FROM user WHERE email='".$myemail."' and password='".$mypassword."'"; 
$result=mysql_query($sql); 
$count=mysql_num_rows($result); 
if($count==1) 
{ 
echo "Login successful"; 
echo '<script>window.location="index.html";</script>'; 
} 
?> 
+0

Если вы получаете пустую страницу, всегда включайте отчет об ошибках. Кроме того, просмотрите журналы ошибок вашего веб-сервера. –

+0

Ошибка подавления и устаревших расширений, о мой! – Phil

+0

О, хорошо. Функции 'mysql_ *' становятся устаревшими и будут удалены из будущих версий PHP. Не используйте вместо них новый код, вместо этого используйте mysqli_ * или PDO. –

ответ

1

Это неправильно:

echo "Login successful"; 
'<script>window.location="index.html";</script>'; 

Вы пропускаете эхо заявление там:

echo "Login successful"; 
echo '<script>window.location="index.html";</script>'; 

Больше, но не как тяжелое , проблемные части вашего кода:

@session_start(); 

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

error_reporting(E_ALL^E_NOTICE); 

Это только половина аренды. Он определяет только уровни ошибок, которые должны отображаться, а не если они вообще отображаются. Если сообщение об ошибке отключено вашим хостером, вам также нужно сделать ini_set("display_errors", true);, иначе вы ничего не увидите.

Ваш SQL-код уязвим для SQL-инъекций. Я могу просто ввести «[email protected]» - «в поле электронной почты и войти в систему, не зная пароля. Вы должны переключиться на mysqli_* или PDO и использовать подготовленные statemens для своих запросов.

Использовать надлежащую отчетность об ошибках. Не просто использовать это:

or die("cannot connect"); 

Вместо реле фактического сообщения об ошибке, так что вы знаете, почему он не работает:

or die("Connection error: " . mysql_error()); 

Используйте это после запросов, а поэтому вы знаете, почему запрос не :

if ($result == false) echo "Query failed: " . mysql_error(); 

PDO и MySQLi имеют аналогичные функции отчетности об ошибках. Используй их.

echo '<script>window.location="index.html";</script>'; 

Вы не должны использовать JavaScript для перенаправления. Вы никогда не знаете, включен ли клиент JavaScript или даже способен на него. Правильный способ сделать редирект это header() функция:

header("Location: index.html"); 
exit(); 

Обратите внимание, что header() будет работать только тогда, когда есть абсолютно НЕТ выход перед ним. Даже пробелы, символы новой строки или другие пробелы.

+0

Хороший пикап. Также было бы полезно заменить запятую запятой. – Phil

+0

Это было бы, но это было бы труднее понять начинающему. –

+1

Принципиально плохой код должен быть объяснен новичкам, есть много других причин, почему этот код не должен быть написан так, как он есть. –

Смежные вопросы