2013-10-24 7 views
0

Я пытаюсь добраться до точки, где у меня будет страница входа и страница регистрации, используя тот же файл контроллера php. Когда сайт site.com/?login вводится, отображается страница входа в систему (это делается), а затем, когда пользователь отправляет страницу входа в систему только сейчас, я хочу, чтобы она отображала «доступ предоставлен/отклонен». То же самое относится и к странице регистрации (site.com/?registeration переходит на страницу регистрации, и отправка печатает, была ли она успешной или нет). Я сталкиваюсь с проблемой, когда при отправке любой страницы она не показывает результат, который я ожидаю.простая страница PHP не работает должным образом

<?php 
include $_SERVER['DOCUMENT_ROOT'] . 'includes/db_connection.php'; 

/*********************Registration page code***************************/ 
if (isset($_GET['register'])) 
{ 
    $action = 'register_form'; 
    include 'register.html.php'; 
    exit(); 
} 

if (isset($_POST['action']) and $_POST['action'] == 'register_form') { 
    $username = mysqli_real_escape_string($connection, $_POST['username']); 
    $email = mysqli_real_escape_string($connection, $_POST['email']); 
    $password = mysqli_real_escape_string($connection, $_POST['password']); 

    $output = 'Username: ' . $username . ' Email: ' . $email . ' Password: ' . $password; 

    $sql = 'INSERT INTO user (username,email,password) VALUES 
      ("'. $username .'","'. $email .'","'. $password .'")'; 

    if (!mysqli_query($connection, $sql)) 
    { 
     $error = 'Error registering user: ' . mysqli_error($connection); 
     include 'output.html.php'; 
     exit(); 
    } 

    include 'output.html.php'; 
    exit(); 
} 
/*************************************************************************/ 

if (isset($_GET['login'])) 
{ 
    $action = 'login_form'; 
    include 'login.html.php'; 
    exit(); 
} 

if (isset($_POST['action']) and $_POST['action'] == 'login_form') 
{ 
    $username = mysqli_real_escape_string($connection, $_POST['username']); 
    $password = mysqli_real_escape_string($connection, $_POST['password']); 

    $output = 'Username: ' . $username . ' Password: ' . $password; 

    $sql = 'SELECT COUNT(*) FROM user WHERE username="'.$username.'" AND password="'.$password.'"'; 
    $result = mysqli_query($link, $sql); 
    if (!$result) 
    { 
     $error = 'Error seeing if user exists in the DB.'; 
     include 'output.html.php'; 
     exit(); 
    } 

    $num = mysqli_num_rows($result); 
if($num > 0) { 
     $output .= '\nAccess Granted!'; 
    } else { 
     $output .= '\nAccess Denied! Please register first...'; 
    } 

    include 'output.html.php'; 
    exit(); 
} 

$output = 'Database connection established.<br/>Server root: ' . $_SERVER['DOCUMENT_ROOT']; 
include 'output.html.php'; 
?> 

Код ниже моя страница регистрации (страница Логин очень похожи):

<?php include_once $_SERVER['DOCUMENT_ROOT'] . 
     '/includes/helpers.inc.php'; ?> 
<!DOCTYPE html> 
<html> 
    <head> 
     <title>Registration</title> 
     <!--link type="text/css" rel="stylesheet" href="stylesheet.css"/--> 
    </head> 
    <body> 
     <div id="content"> 
      <form id="registration_form" method="POST" action="?<?php htmlout($action); ?>"> 

       <label for="username-id">Username:</label> 
       <input id="username-id" type="text" name="username" autofocus="autofocus" /><br/><br/> 

       <label for="email-id">Email:</label> 
       <input id="email-id" type="email" name="email" /><br/><br/> 

       <label for="password1-id">Password:</label> 
       <input id="password1-id" class="text-input" type="password" name="password" /><br/><br/> 

       <label for="password2-id">Retype Password:</label> 
       <input id="password2-id" class="text-input" type="password" name="password_repeat" /><br/><br/> 

       <input type="submit" value="Register"/> 
      </form> 
     </div> 
    </body> 
</html> 

output.html.php страница это простая страница, которая эхо в $ вывода и $ ошибок.

Любые идеи о том, что я делаю неправильно? Я довольно новичок в PHP. Большинство этого кода следовали за книгой. Создайте собственный веб-сайт, управляемый базой данных, используя PHP & MySQL.

+0

'он не показывает вывод, который я ожидаю' Что он показывает и что вы ожидаете от него? –

+0

Возможно, 'output.html.php' должен также вывести' $ error' ... –

+0

@u_mulder показывает, что установлено соединение с базой данных. Корень сервера: C:/wamp/www/'в основном, что находится внизу контроллера. И если я вхожу в систему, я ожидаю, что он покажет доступ к приему или доступ запрещен – Nick

ответ

2

Что такое action мишени для ваших форм представления? Если он содержит строку запроса, код не будет работать, как вы хотите, чтобы:

<form method="post" action="?login">...</form> 

Это происходит потому, что PHP всегда будет анализировать строки запроса (все в URL следующего ?), даже если запрос фактически использует глагол POST.

Следовательно, вы не можете полагаться на $_GET быть пустым в POST запросе.
(Вы можете сделать это с if(isset($_GET['login'])))

Вы можете, однако, использовать поле другого суперглобальном, чтобы получить метод запроса:

if($_SERVER['REQUEST_METHOD'] == 'POST') { 
    // Form has been submitted 
} else { 
    // Not a POST request, proabably GET 
} 

документации можно найти на PHP.net


Edit 1

Кроме того, nick bonn et.
Вы не можете получить доступ к атрибуту элемента формы action (или любому другому атрибуту) до $_GET или $_POST.

Те содержат только разобранную строку запроса ($_GET) и - для POST запроса - разобранное тело запроса ($_POST; который построен в браузере с помощью name и value атрибутов form «s детей)


Edit 2

предложение, как я бы структурировать это "приложение" (сохраняя формат ?xy URL):

<?php 

/* DB connection and bootstrapping code goes here */ 

if(isset($_GET['login'])) { 
    if('POST' == $_SERVER['REQUEST_METHOD']) { 
     // FORM HAS BEEN SUBMITTED, 
     // process user input (login credentials) and display a message 
    } else { 
     // Assume GET or HEAD, 
     // display login form 
    } 
} 
elseif (isset($_GET['registration'])) { 
    if('POST' == $_SERVER['REQUEST_METHOD']) { 
     // FORM HAS BEEN SUBMITTED, 
     // process user input (registration data) and display a message 
    } else { 
     // Assume GET or HEAD, 
     // display registration form 
    } 
} 
else { 
    // No page found 
    include '404.html.php'; 
} 

?> 

Форма и представления формы теперь разделяют один и тот же URL-адрес (или ?login?registration) и отличаются по методу запроса (GET для формы, POST для subission).

+0

Я не уверен, что понимаю, как применять то, что вы говорите, чтобы исправить мою проблему. Если бы вы могли объяснить еще кое-что или изменить (очень ясно для начала), которые очень помогли бы, спасибо. – Nick

+0

Хорошо, я понимаю, что вы сейчас имеете в виду. Мне это нравится, меньше работы и легко ремонтируется. Хорошая работа, спасибо! – Nick

0

Потому что вы проверяете для

and $_POST['action'] == 'register_form') 

, но на самом деле с

<form id="registration_form" method="POST" action="?<?php htmlout($action); ?>"> 

вы отправляете его

$_GET['action'] 

Вам нужно добавить

<input type="hidden" name="action" value="register_form" /> 
состояние 210

или изменения

and isset($_GET['register_form']) 
+0

Быстрое примечание: 'method =" POST "', а не '' GET '' – Izkata

+0

Прочтите внимательно! 'method =" POST "' – idmean

+0

@Izkata Все, что вы ввели в действие = "" формы, представлено как GET независимо от метода, чтобы отправить поле $ _POST, вы должны иметь . –

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