2016-02-16 2 views
1

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

У меня возникли проблемы с заявлением else, может ли кто-нибудь помочь мне с этой проблемой?

Это сценарий ...

function SignIn() 
{ 
session_start(); //starting the session for user profile page 
if(!empty($_POST['userName'])) 
{ 
    $query = mysql_query("SELECT * FROM users where userName = '$_POST[userName]' AND createPassword = '$_POST[createPassword]'") or die(mysql_error()); 
    $row = mysql_fetch_array($query) or die(mysql_error()); 
    if(!empty($row['userName']) AND !empty($row['createPassword'])) 
    { 
    $_SESSION['userName'] = $row['createPassword']; 
    echo "<script>window.location = 'index.php'</script>"; 

    } 
    else 
    { 

    echo "<script>window.location = 'signUp.php'</script>"; 
    } 
} 
} 
if(isset($_POST['submit'])) 
{ 
    SignIn(); 
} 

?> 

EDIT: Привет спасибо за ваши отзывы, я изменил запрос и редактирует эхо. Спасибо за советы по безопасности, но в этом скрипте безопасность не является проблемой. Мне нужно только его, чтобы направить вас к индексу, если вы зарегистрировались и зарегистрировались, если вы этого не сделали. Я все еще не могу получить страницу для перенаправления на страницу регистрации, если вход в систему и пропущенное слово неверны.

Если оно правильно, оно приведет вас к индексу, если оно неверно, это страница php, на которой этот скрипт включен.

Это моя текущая попытка

function SignIn() 
{ 
session_start(); 
if(!empty($_POST['userName'])) 
{ 
    $query = mysql_query("SELECT * FROM users where userName = '{$_POST['userName']}' AND createPassword = '{$_POST['createPassword']}'") or die(mysql_error()); 
    $row = mysql_fetch_array($query) or die(mysql_error()); 

    if(!empty($row['userName']) AND !empty($row['createPassword'])) 
    { 
    $_SESSION['userName'] = $row['createPassword']; 
    header("Location:http://localhost/waves/index.php"); 
    } 
    else if (!empty($row['userName']) AND !empty($row['createPassword'])) 
    { 
    $_SESSION['userName'] != $row['createPassword']; 
    header("Location:http://localhost/waves/signUp.php"); 

    } 
} 

} 
if(isset($_POST['submit'])) 
{ 
    SignIn(); 
} 

?> 
+2

Что именно происходит не так? Разве это никогда не достигает выражения else или просто не перенаправляется? – Max

+0

Это очень уязвимо для SQL-инъекций, поэтому вы не должны использовать защиту таким образом, используйте подготовленные инструкции, чтобы начать с – Firewizz

+0

@alan smith. Вы используете два одинаковых условия 'if'. Вам нужно только одно условие 'if', а другое будет' else' не 'else if'. –

ответ

3

1) Исправьте запрос:

"SELECT * FROM users where userName = '{$_POST['userName']}' AND createPassword = '{$_POST['createPassword']}'" 

2) Зачем вам нужен JS для перенаправления? Вы можете использовать для этого header.

header("Location:http://localhost/signUp.php"); 

3) Не используйте mysql_*. Он устарел и удален из PHP 7. Используйте mysqli_* или PDO.

4) Ваш запрос небезопасен. Прочтите это How can I prevent SQL injection in PHP?.

2

Не пытайтесь перенаправить это с выходом Javascript. Вместо этого вам нужно использовать перенаправление PHP header(). С помощью этой функции вы должны убедиться, что на экран не был отправлен «вывод»; это очень важно. Переадресация заголовка не будет работать, если вы повторите что-то в браузере перед его выполнением.

header('Location: http://www.yoursite.com/signUp.php'); 
exit; 
+0

См. Комментарии г-на Инженера по другим вопросам. – jjwdesign

2

mysql_query устарели и скоро будут удалены. это также небезопасно. поэтому используйте PDO.

Это говорит о том, как вы используете ключи массива в строке.

$sql = "SELECT * FROM users where userName = '{$_POST['userName']}' AND createPassword = '{$_POST['createPassword]'}'"; 

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

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