php smarty真的需要帮助

时间:2011-05-21 16:46:06

标签: php sql session smarty

嘿伙计我不知道为什么这不会工作......它似乎不想拿起POST值....我无法弄明白

这是登录框

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

这只是我嵌入到索引模板中的一个框。

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

登录时提交到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 ...但是在此之前我正在测试我是否能获得UserName而我不能......

    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个月左右。

1 个答案:

答案 0 :(得分: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()   向浏览器输出任何内容。

尝试删除行echo $UserName;

HTH。

P.S。看你是初学者,请注意你的processlogin函数容易受到SQL注入攻击。