2011-05-21 92 views
0

嗨,我不知道爲什麼這不會工作......這似乎並不想拿起POST值....我無法弄清楚PHP Smarty的真正需要幫助的

這是loginbox

<div class="loginbox"> 
<form action="processlogin.php" method="post"> 

    <table width="100%" border="0" cellspacing="0" cellpadding="5"> 
     <tr> 
      <td>Username</td> 
      <td><input type="text" name="UserName" /></td> 
     </tr> 
     <tr> 
      <td>Password</td> 
      <td><input type="text" name="Password" /></td> 
     </tr> 
     <tr> 
      <td>&nbsp;</td> 
      <td><input type="submit" value="Login" /></td> 
     </tr> 
     <tr> 
      <td>&nbsp;</td> 
      <td><span style="font-size:12px;"><a href="adduser.php">Click here to register</a></span></td> 
     </tr> 
    </table> 
</form> 

這只是一個盒子我嵌入我的索引模板。 submited當

<div class="header"> 
    {if loggedin == false} 
     <h1>welcome</h1> 
    {else} 
     {include file="loginbox.tpl"} 
    {/if} 
    </div> 

Loginbox去processlogin.php這是本

<?php 
include '/usr/local/Smarty/libs/Smarty.class.php'; 
require "includes/defs.php"; 
$smarty = new Smarty; 

if ($_SERVER['REQUEST_METHOD'] == 'GET') { 
    // Get any error message 
    $error = @$_GET['error']; 
    } else 
    { 

     $UserName = @$_POST['UserName']; 
     $Password = @$_POST['Password']; 
     echo $UserName; 
    } 
processlogin($UserName, $Password); 

?> 

這調用該函數processlogin ......但即使在此之前,我在測試,看看我甚至可以獲取用戶名和我不能...

function processlogin($UserName, $Password){ 
    echo $UserName; 
session_start(); 
$UserName = mysql_escape_string($UserName); 
$Password = md5($Password); 
echo $UserName; 

    $connection = mysql_open(); 
    $SQL = "SELECT * FROM tblUsers WHERE UserName = '$UserName' AND UserPass = '$Password'"; 

    $Result = @ mysql_query($SQL) 
    or showerror(); 

    if(mysql_num_rows($Result) > 0) 
    { 
     $DATA = mysql_fetch_assoc($Result); 
     $_SESSION['userID'] = $DATA['ID']; 
     $_SESSION['Loggedin'] = "true"; 
     echo 'true'; 
     //header("Location:index.php"); 
    } 
    else 
    { 
     $_SESSION['Loggedin'] = "false"; 
     echo 'trdddde'; 
     //header("Location:index.php"); 
    } 

} 

這是功能...你會看到我只是隨機測試,其中沒有任何意義。我只是試圖讓它顯示一路上的事情,所以我可以找出發生了什麼問題

對不起,我的編碼能力差。我現在只學了2個月左右。

回答

0

由您發佈的內容,你從停止會話的外觀是由呼應調試信息正確啓動:

if ($_SERVER['REQUEST_METHOD'] == 'GET') { 
    // Get any error message 
    $error = @$_GET['error']; 
} else { 

    $UserName = @$_POST['UserName']; 
    $Password = @$_POST['Password']; 
    echo $UserName; 
} 
processlogin($UserName, $Password); 

session_start的調用是在processlogin功能,來後你已經將內容輸出到瀏覽器。這是PHP maunal說什麼:

要使用基於cookie的會話, 在session_start()必須 前outputing什麼瀏覽器調用。

嘗試刪除線echo $UserName;

HTH。

p.s.看到你是初學者,請注意你的processlogin函數容易受到SQL注入攻擊。

+0

實際上,關於SQL注入攻擊的一點是錯誤的 - 對不起! – Robin 2011-05-21 20:20:11

+0

它仍然無法正常工作。我認爲它有問題在某處從表單中獲取變量。因爲甚至在進程登錄運行之前,它應該顯示UserName的回顯...我刪除了錯誤檢查,並且回顯仍然不起作用。 出現什麼是「traddde」這是我的方式說如果登錄== false。 – 2011-05-22 02:24:09

+0

我修好了......但我不知道如何......它剛剛開始工作......我什麼也沒改變,突然它工作。 – 2011-05-22 11:21:07