2012-03-11 80 views
0

我對PHP很新穎(大多數實際上根本不做Web開發),並且最近已經涉足它。我正在嘗試創建一個登錄頁面,用於在登錄後將用戶重定向到鏈接到用戶的唯一網址。所以我想在數據庫中說4列:id,用戶名,密碼和重定向。在成功登錄後,URL將重定向到存儲用戶URL的數據庫中的重定向列。問題是我一直在努力的代碼。爲了使登錄我不能似乎有它重定向到使用標題(「位置:)行的數據庫列這裏是我的代碼也許你們能好心幫我:PHP:使用標頭從數據庫打開網址

<?php 
$host="sql1om"; // Host name 
$username="b33_1033"; // Mysql username 
$password="b33_1033"; // Mysql password 
$db_name="test"; // Database name 
$tbl_name="members"; // Table name 

// Connect to server and select databse. 
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

// username and password sent from form 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 

// To protect MySQL injection (more detail about MySQL injection) 
$myusername = stripslashes($myusername); 
$mypassword = stripslashes($mypassword); 
$myusername = mysql_real_escape_string($myusername); 
$mypassword = mysql_real_escape_string($mypassword); 

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'"; 
$result=mysql_query($sql); 

// Mysql_num_row is counting table row 
$count=mysql_num_rows($result); 
// If result matched $myusername and $mypassword, table row must be 1 row 

if($count==1){ 
// Register $myusername, $mypassword and redirect to file "login_success.php" 
session_register("myusername"); 
session_register("mypassword"); 
header("location:login_success.php"); 
} 
else { 
echo "Wrong Username or Password"; 
} 
?> 

,所以我不能圖如何分貝列變量中的重定向列在

header("location:login_success.php); 

添加到輸出的URL每次我嘗試在該行沒有任何一個變量發生 任何幫助,將不勝感激。請仔細解釋,我是新手at php。Thank-you!

Here is edited co去把我弄得工作(的幫助):

<?php 
$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password=""; // Mysql password 
$db_name="test"; // Database name 
$tbl_name="members"; // Table name 

// Connect to server and select databse. 
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

// username and password sent from form 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 

// To protect MySQL injection (more detail about MySQL injection) 
$myusername = stripslashes($myusername); 
$mypassword = stripslashes($mypassword); 
$myusername = mysql_real_escape_string($myusername); 
$mypassword = mysql_real_escape_string($mypassword); 
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'"; 
$result=mysql_query($sql); 

// Mysql_num_row is counting table row 
$count=mysql_num_rows($result); 
// If result matched $myusername and $mypassword, table row must be 1 row 
if($count==1){ 
// Register $myusername, $mypassword and redirect to file"login_success.php" 
$_SESSION['username'] = $myusername; 
$_SESSION['password'] = $mypassword; 
$result = mysql_query("SELECT redirect FROM members"); 

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
    header("Location: " . $row['redirect']); 
} 
exit(); 
} 
else { 
echo "Wrong Username or Password"; 
} 
?> 

回答

2

你需要獲取你的結果到一個關聯數組:

$row = mysql_fetch_assoc($result) 

然後只需使用header("Location: $row['redirect']");

  • 括在一個字符串雙引號使您能夠在其中插入一個變量。

  • 或者,您也可以concatentate:header("Location: " . $row['redirect']);

  • 你的SQL結果將被存儲在一個關聯方式排列稱爲$row。要訪問redirect列,請使用$row['redirect']。當然,$row只有在找到一行或多行時纔會被填充。

  • 最後,如果要重定向,最好有一個exit()立即停止腳本執行。

你的代碼是這樣:

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'"; 
$result=mysql_query($sql); 

// Mysql_num_row is counting table row 
$count=mysql_num_rows($result); 

// If result matched $myusername and $mypassword, table row must be 1 row 
if($count==1){ 

    // Register $myusername, $mypassword and redirect to file "login_success.php" 
    $_SESSION['username'] = $myusername; 
    $_SESSION['password'] = $mypassword; 
    $row = mysql_fetch_assoc($result); 
    header("Location: $row['redirect']"); 
    exit(); 
}else { 
    echo "Wrong Username or Password"; 
} 
+0

是,'退出()'是一個很好的建議,也.. – Filkor 2012-03-11 22:46:52

+0

謝謝你的信息回答。我嘗試添加var。在腳本中輸入正確的用戶和密碼後不會發生重定向。除了$ result ['redirect']這行之外,我還需要添加其他任何內容嗎?謝謝 – domsl 2012-03-11 22:51:24

+0

@ user1232264:你使用過'mysql_fetch_assoc()'嗎? '$ result'只指向一個SQL資源。您需要使用'mysql_fetch_assoc()'將值檢索到關聯數組中。 – F21 2012-03-11 22:53:52