2009-07-28 5 views
1

Хорошо, у меня есть форма входа, выглядит следующим образом:Html форма LogIn не работает

<form id="loginForm" name="loginForm" method="post" action="login-exec.php"> 
<table width="300" border="0" align="center" cellpadding="2" cellspacing="0"> 
<tr> 
    <td width="112"><b>Login</b></td> 
    <td width="188"><input name="login" type="text" class="textfield" id="login" /></td> 
</tr> 
<tr> 
    <td><b>Password</b></td> 
    <td><input name="password" type="password" class="textfield" id="password" /></td> 
</tr> 
<tr> 
    <td>&nbsp;</td> 
    <td><input type="submit" name="Submit" value="Login" /></td> 
</tr> 
</table> 
</form> 

Теперь эта форма на странице в директории под названием членов. Когда я помещаю его на страницу в домашнем каталоге и меняю действие на «members/login-exec.php» Когда я пытаюсь войти в систему, он просто обновляет страницу, но имя страницы в браузере изменяется на действия, выполняемые место в форме.

Любые идеи по созданию этой работы ребята?

EDIT, Heres код Логин-exec.php:

<?php 
//Start session 
session_start(); 

//Include database connection details 
require_once('config.php'); 

//Array to store validation errors 
$errmsg_arr = array(); 

//Validation error flag 
$errflag = false; 

//Connect to mysql server 
$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD); 
if(!$link) { 
    die('Failed to connect to server: ' . mysql_error()); 
} 

//Select database 
$db = mysql_select_db(DB_DATABASE); 
if(!$db) { 
    die("Unable to select database"); 
} 

//Function to sanitize values received from the form. Prevents SQL injection 
function clean($str) { 
    $str = @trim($str); 
    if(get_magic_quotes_gpc()) { 
     $str = stripslashes($str); 
    } 
    return mysql_real_escape_string($str); 
} 

//Sanitize the POST values 
$login = clean($_POST['login']); 
$password = clean($_POST['password']); 

//Input Validations 
if($login == '') { 
    $errmsg_arr[] = 'Login ID missing'; 
    $errflag = true; 
} 
if($password == '') { 
    $errmsg_arr[] = 'Password missing'; 
    $errflag = true; 
} 

//If there are input validations, redirect back to the login form 
if($errflag) { 
    $_SESSION['ERRMSG_ARR'] = $errmsg_arr; 
    session_write_close(); 
    header("location: login-form.php"); 
    exit(); 
} 

//Create query 
$qry="SELECT * FROM members WHERE login='$login' AND passwd='".md5($_POST['password'])."'"; 
$result=mysql_query($qry); 

//Check whether the query was successful or not 
if($result) { 
    if(mysql_num_rows($result) == 1) { 
     //Login Successful 
     session_regenerate_id(); 
     $member = mysql_fetch_assoc($result); 
     $_SESSION['SESS_MEMBER_ID'] = $member['member_id']; 
     $_SESSION['SESS_FIRST_NAME'] = $member['firstname']; 
     $_SESSION['SESS_LAST_NAME'] = $member['lastname']; 
     session_write_close(); 
     header("location: members.php"); 
     exit(); 
      }else { 
     //Login failed 
     header("location: login-failed.php"); 
     exit(); 
      } 
       }else { 
      die("Query failed"); 
       } 
        ?> 
+0

Нужно будет увидеть код PHP, чтобы узнать, не установлено ли что-то. – Petrogad

+0

Не могли бы вы показать нам, что находится внутри файла login-exec.php? –

+0

@ Христиан Тома, я просто задал свой вопрос. –

ответ

2

Во-первых, вот ваша форма, но без таблиц. Это должно быть немного легче для отладки и более семантическое:

<form id="loginForm" name="loginForm" method="post" action="members/login-exec.php"> 
    <fieldset id="login_fields"> 
    <label for="login">Login</label> 
      <input name="login" type="text" class="textfield" id="login" /> 
    <label for="password">Password</label> 
      <input name="password" type="password" class="textfield" id="password" /> 
    <input type="submit" name="Submit" value="Login" /> 
    </fieldset> 
</form> 

Так хитрая часть выяснить, если ошибка происходит с формой или сценария. Я всегда предполагал сценарий, но он освежает, что странно.

Попросите сценарий сделать что-то глупое, вместо того, чтобы проверять переменные сообщения. Подобно тому, как сценарий выводит имя пользователя, или просто «Я твой скрипт». Нажав «submit», вы попали сюда ».

Если сценарий выводит все, что вы используете, это означает, что форма в порядке (я думаю).

Вы обновили скрипт для части заголовка ("Location: members.php"), чтобы перенаправить на относительное расположение скрипта members.php?

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

action="/members/login-exec.php" 

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

И сделать то же самое для сценария проверки Логин:

header("Location: /members/members.php") 

Или вы можете даже использовать полный путь, если вы знакомы с этим.


Пара других вещей:

One: Вы можете также использовать полный URL-адрес для действия/место. Я бы подумал об этом, по крайней мере, для заголовка Location. Поскольку форма, кажется, куда-то идет и что-то делает, часть действия, вероятно, прекрасна. Но заголовок местоположения, вероятно, немного более терпимый.

Во-вторых: Мне интересно, почему сценарий делает что-то странное, потому что PHP пытается угадать, где находятся файлы. PHP по умолчанию будет искать включенный файл, если он не там, где он должен быть (что делает PHP чрезвычайно доступным, к сожалению). Может быть, он делает то же самое для заголовков местоположения? Я действительно сомневаюсь в этом, но это может быть связано в другой момент, о котором я не замечаю.

1

Это звучит для меня, как у вас есть код в логин-exec.php, который не работает правильно. Посмотрите, можете ли вы проследить эту страницу, чтобы увидеть 1. если она вызывается; 2. В какой момент это происходит.

Я предполагаю, что перенаправление в login-exec.php считает, что он запущен в неправильном каталоге.

+0

Хорошо сделаю. –

+0

Я не нашел ошибок. –

+0

Тогда, возможно, я не понимаю проблему. Я думал, вы сказали, что нажимаете кнопку входа в систему, и единственное, что меняется, это URL-адрес в панели браузера. Если это так, то что-то происходит с кодом login-exec. – NotMe

1

Вы пытаетесь выполнить перенаправление заголовка в файле login-exec.php? Если да, используете ли вы относительный или абсолютный путь? Проблема может быть там, поскольку это должен быть абсолютный путь.

+0

Просто заметил, что вы добавили PHP-скрипт к вопросу. Попытайтесь изменить следующее, чтобы быть абсолютными URL-адресами (т. Е. «Http://www.yoursite.com/members.php») header («location: members.php»); header ("location: login-failed.php"); –

+0

Для уточнения, url shoudl включает http: // www. части - stackoverflow удалили их из моего примера. –

0

Похоже, вы попали в первую переадресацию. Чтобы отладить, можете ли вы попробовать поставить оператор die() как раз перед header("location: login-form.php");?

Пример:

die('Found error. Session: ' . var_export($_SESSION, true)); 
header("location: login-form.php"); 

Отклик об абсолютных путях находится на правильном пути, - но до тех пор, как вы передаете действительный логин, вы должны быть хорошо. Я предполагаю, что members.php хранится в каталоге members?

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

Обновление: После проверки вашего сайта, похоже, проблема заключается в незакрытой теге <form> перед формой входа в систему. Если вы закрываете этот тег или перемещаете форму входа из этой другой формы, вы должны быть в порядке. Первый тег формы не указывает action или method, поэтому просто выполняет запрос GET на ту же страницу, помещая ваши данные в URL-адрес.

+0

Кроме того, что именно вы подразумеваете под: «но имя страницы в браузере изменяется на действия, происходящие в форме». – pix0r

+0

Я имею в виду, что это показывает это после того, как я попытаюсь войти в панель браузера: http://wmsmesa.org/?login=anthonyc&password=chesus&Submit=Login –

+0

@ pix0r, просто зайдите в wmsmesa.org и login with anthonyc/chesus, затем посмотрите на панель браузера –

0

Вы используете переадресацию заголовков в login-exec.php с использованием относительных URL-адресов, вы должны использовать абсолютный путь.

0

Если ни одно из вышеперечисленных не работает, единственное, что я могу придумать, это то, что это может быть путь в вашем «действии». Вы пробовали ./members/login-exec.php (в отличие от пользователей/login-exec.php)?

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