【问题标题】:php smarty really need helpphp smarty 真的需要帮助
【发布时间】:2011-05-21 16:46:05
【问题描述】:

嘿,伙计们,我不知道为什么这不起作用...它似乎不想获取 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 个月左右。

【问题讨论】:

    标签: php sql session smarty


    【解决方案1】:

    从您发布的内容来看,您正在通过回显调试信息来阻止会话正常启动:

    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 手册是这样说的:

    要使用基于 cookie 的会话, session_start() 必须在之前调用 向浏览器输出任何内容。

    尝试删除echo $UserName;这一行

    HTH。

    附言鉴于您是初学者,请注意您的 processlogin 函数容易受到 SQL 注入攻击。

    【讨论】:

    • 其实关于 SQL 注入攻击的部分是错误的——对不起!
    • 它仍然无法正常工作。我认为从表单中获取变量的地方存在问题。因为即使在进程登录运行之前它应该显示用户名的回声......我删除了错误检查并且回声它仍然不起作用。出现的是“traddde”,这是我的说法,如果登录 == false。
    • 我修复了它...但我不知道如何...它刚刚开始工作...我什么也没做,突然它工作了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    相关资源
    最近更新 更多