2011-05-21 53 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