php smarty действительно нужна помощь

#php #sql #session #smarty

#php #sql #сессия #smarty

Вопрос:

Эй, ребята, я понятия не имею, почему это не используется work…It похоже, не хочет получать значения POST….Я не могу понять это

Это 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>amp;nbsp;</td>
            <td><input type="submit" value="Login" /></td>
        </tr>
        <tr>
            <td>amp;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:

Судя по тому, что вы опубликовали, вы останавливаете запуск вашего сеанса должным образом, повторяя информацию об отладке:

 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-инъекций.

Комментарии:

1. На самом деле, часть об атаках с использованием SQL-инъекций неверна — извините!

2. Это все еще не работает. Я думаю, что где-то есть проблемы с получением переменных из формы. Потому что еще до запуска процесса login он должен показывать эхо имени пользователя… Я удаляю проверку ошибок и echo, она по-прежнему не работает. Появляется «traddde», что является моим способом сказать, если loggedin == false.

3. Я исправил это … но я понятия не имею how…it только начал работать… Я ничего не менял, и внезапно это сработало.