#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 только начал работать… Я ничего не менял, и внезапно это сработало.