Html Giriş formu çalışmıyor

7 Cevap php

Tamam, ben bu gibi görünen bir giriş formu var:

<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>

Şimdi, Bu form üyeleri adlı bir dizinde bir sayfada. I ev dizininde bir sayfa üzerine koydu ve ben sadece sayfayı yeniler giriş çalıştığınızda için "üye / giriş-exec.php" eylemi değiştirmek, ancak tarayıcıda sayfa adını alarak eylemler değiştirdiğinde şeklinde yerleştirin.

Bu iş çocuklar yapma konusunda herhangi bir fikir?

DÜZENLEME, heres giriş-exec.php kodu:

<?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");
                }
                    ?>

7 Cevap

Öncelikle, burada form ama tablolar olmadan bulunuyor. Bu hata ayıklama için biraz daha kolay olmalı ve daha anlamsal olduğunu:

 <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>

Hata form veya komut ile oluyor Yani zor kısmı sergiyi olduğunu. Garip olan, ben her zaman senaryoyu kabul olur, ama ferahlatıcı.

Komut yerine sonrası değişkenleri kontrol aptalca şeyler var. Gibi kullanıcı adı girilen, ya da sadece komut çıkışı "Ben senin komut duyuyorum. Tıklamak göndermek var burada."

Eğer kullanmak ne olursa olsun komut çıktıları, yani eğer formu (bence) gayet iyi.

Members.php script göreceli bir konuma yeniden yönlendirmek kısmı: Eğer başlık için komut dosyası ("members.php Location") güncelleme mi?

Göreli yeri sorunları önlemek için, her zaman tam yolunu kullanın, böylece eylem yapabilir:

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

ve bu onu koymak olursa olsun çalışacaktır.

Ve oturum açma doğrulama komut dosyası için aynı şeyi:

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

O rahat olup olmadığını ya da hatta tam yolunu kullanabilirsiniz.


Başka şeyler çift:

Bir: Ayrıca aksiyon / konumu için tam URL'yi kullanabilirsiniz. Ben en azından Location başlığı için bu yapıyor düşünün. Form yere gidip bir şeyler yapmak gibi görünüyor bu yana, aksiyon bölümü muhtemelen iyidir. Ama yeri başlık muhtemelen biraz daha asabi.

İkincisi: PHP dosyaları nerede tahmin etmeye çalışıyor, çünkü komut dosyası garip bir şey yapıyor nedeni olup olmadığını merak ediyorum. Varsayılan PHP (ne yazık ki, PHP son derece işletilebilir kılan) olması gerekiyordu nerede değilse dahil bir dosyayı ararlar. Belki Yer başlıkları için aynı şeyi yapar? Ben gerçekten şüpheliyim, ama ben fark etmiyorum başka bir noktada ilişkili olabilir.

Eğer doğru çalışmıyor giriş-exec.php bazı kod var gibi bana geliyor. Eğer 1 görmek için bu sayfa üzerinden takip edebilirsiniz görmek çağrılan eğer.; 2.. Hangi noktada o tahliyelidir.

Benim tahminim giriş-exec.php içinde yönlendirme o yanlış dizinde çalışan inanıyor olmasıdır.

Eğer bir başlık açma-exec.php dosyasına yönlendirmek gerçekleştirmek için çalışıyorsunuz? Eğer öyleyse, göreli veya mutlak yol kullanıyorsunuz? Bu mutlak bir yol olması gerektiği gibi bir sorun olabilir.

Bkz: http://www.webloginproject.com/login-project/php/

Eğer ücretsiz kodunu kullanmak istemiyorsanız, en azından sağlam ve güvenli bir sistem yazılmış görebilirsiniz.

Sen başlığını kullanarak göreceli adresler kullanarak giriş-exec.php yönlendirmelerin, sen mutlak yolunu kullanmanız gerekir.

Yukarıdakilerin hiçbiri çalıştı varsa, aklıma tek şey bu "eylem" in yol olabilir olmasıdır. (Aksine members/login-exec.php) Eğer ./members/login-exec.php denediniz mi?

Eğer ilk yönlendirmeyi vuruyorlar gibi geliyor. Için hata ayıklama, sadece daha önce bir die() deyimi koyarak deneyebilirsiniz header("location: login-form.php");?

Örnek:

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

Mutlak yollar hakkında tepkisi doğru yolda olduğunu - ama sürece bir valid giriş kaynağı olarak, ince olmalıdır. I members.php members dizini altında saklanır olduğunu varsayarak yaşıyorum?

Her zaman ne olursa olsun ihtiyaç olup olmadığı, yönlendirmeler mutlak yolları kullanmak için iyi bir uygulamadır.

Update: sorun giriş formuna önce kapanmamış <form> etiketi gibi sitenizi kontrol ettikten sonra, o görünüyor. Eğer bu etiketi kapatın, ya da başka bir biçimde dışarı giriş formunu taşırsanız, ince olmalıdır. İlk form etiketi action belirtmeyen veya method yüzden sadece URL verilerinizi koyarak, aynı sayfaya bir GET isteğini yapıyor.