• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Smarty

  • Автор темы nws
  • Дата начала
N

nws

Взял код гостевой книги из "PHP5 В Подлиннике [Котеров Д. В.] [2006]"

index.html

Код:
##Title = Добавить сообщение
##Text
<style>
.error{color:red; font-weight: bold; display: block;}
</style>
<!---FORMA VVODA NOVOI ZAPISI-->
{t_component src="Test_Gbook_Add" name="error" book="test"}
<form method="post">
<table width="80%">
<tr valign="top">
<td width="10%">Ваше имя:</td>
<td><input type="text" name="=new[name]" style="width:100%">
{if @$error.name}<span class="error">Не указано имя</span>
{/if}
</td>
</tr>
<tr valign="top">
<td width="10%">Профессия:</td>
<td>
<select name="new[occupation]" style="width:100%">
<option>Программист</option>
<option>Web-дизайнер</option>
<option>Директор</option>
<option>Другое</option>
</select>
{if @$error.occupation}
<span class="error">Не указанa профессия</span>
{/if}
</td>
</tr>
<tr valign="top">
<td>Комментарий:</td>
<td>
<textarea name="new[text]" cols="60" rows="5" style="width:100%"></textarea>
{if @$error.text}
<span class="error">Слишком короткий текст сообщения</span>
{/if}
</td>
</tr>
<tr valign="top">
<td></td>
<td align="center">
<input style="width=:100%" type="submit" name="doAdd" value="Добавить">
{if $error}
<span class="error">Ощибка! Сооющение ие добавлено!</span>
{/if}
</td>
</tr>
</table>
</form>
{/t_component}
<!---/FORMA VVODA NOVOI ZAPISI-->
<!---VIVOD ZAPISEY GOSTEVUHI-->
{t_component src="Test_Gbook_Show" name="book" book="test"}
{foreach from "$book" key="id" item="e"}
<table width="100%" bgcolor="{cycle values="#DDDDDD,#CCCCCC"}">
<tr>
<td colspan="2">
{$e.stamp|date_format:"%Y-%m-%d %H:%M"}
<a href="mailto:{$e.email|htmlspecialchars}">{$e.name|htmlspecialchars}</a>
</td>
</tr>
<tr>
<td width="1%"></td>
<td>{$e.text|htmlspecialchars}</td>
</tr>
</table>
{/foreach}
{/t_component}
<!---/VIVOD ZAPISEY GOSTEVUHI-->

add.php

Код:
<?php

require_once "Test/Gbook/Model.php";

class Test_Gbook_Add extends Subsys_Templier_Component
{
var $NEW_ELEMENT = "new";

function main($params, &$templier)
{
$name = isset($params['book']) ? $params['book']:null;
if (!$name)
{
$this->croak("parameter 'book' is not specifed");
return false;
}


if (!empty($_REQUEST['doAdd']))
{
$new = $_REQUEST[$this->NEW_ELEMENT];
$new['stamp'] = time();

$errors = $this->validate($new);
if ($errors)
return $errors;

$Book = Test_Gbook_Model::load($name);
$Book = array(time() => $new) + $Book;
Test_Gbook_Model::save($name, $book);

unset($new['text']);
unset($new['stamp']);
setcookie("gbook", serialize($new), time() + 3600 * 24 * 365, "/");
header("Location:" . "http://{$_SERVER['HTTP_HOST']}{$_SERVER['SCRIPT_NAME']}" .
"?" . TIME());
exit();
}
else
{
$data = @unserialize($_COOKIE['gbook']);
$_POST[$this->NEW_ELEMENT] = $data;
}
return array();
}

function validate(&$new)
{
$errors = array();

if (!trim($new['name']))
{
$errors['name'] = true;
}
if (!trim($new['email']))
{
$errors['email'] = true;
}
if (!trim($new['occupation']))
{
$errors['occupation'] = true;
}
if (!trim($new['text']))
{
$errors['text'] = true;
}
return $errors;
}
}
?>

model.php

Код:
<?php

class Test_Gbook_Model
{
function load($name)
{
$fname = "data/$name.dat";
@mkdir(dirname($fname));
if (!file_exists($fname))
return array();
$Book = unserialize(file_get_contents($fname));
return $Book;
}

function save($name,$Book){
$fname = "data/$name.dat";
$f = fopen($fname,"w");
fwrite($f,serialize($Book));
fclose($f);
}
}

?>

show.php

Код:
<?php

require_once "Test/Gbook/Model.php";

class Test_Gbook_Show extends Subsys_Templier_Component
{

function main($params, &$templier)
{
$name = isset($params['book']) ? $params['book']:null;
if (!$name)
{
$this->croak("parameter 'book' is not specifed");
return false;
}
$Book = Test_Gbook_Model::load($name);
return $Book;

}
}
?>

Но я не вижу где они подключают Smarty, а в браузере у меня не читается код, а просто выводится как простые слова. Что делать ? :)
 
J

j_man

тут видимо не хвататет како-го-нибудь обработчика запросов, где все это и подключается.
А вообще - тут все понятно и на русском там и читай. весь смарти за пару часовмона освоить и протестить большинство функционала по этому мануалу.
 
P

PenelopeGutierre

Thats cool. I agree, that was a good post! but i m not agree to you to.
it is very difficult to follow them, well according to me, one should try .
Yes its possible to do naturaly, but it will surely help the casue lot.
You will find here a nice collection of free
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!