Skip to content

Instantly share code, notes, and snippets.

@phpfiddle
Created January 9, 2020 02:45
Show Gist options
  • Save phpfiddle/37d64821545f44beafb2bd16be710fa7 to your computer and use it in GitHub Desktop.
Save phpfiddle/37d64821545f44beafb2bd16be710fa7 to your computer and use it in GitHub Desktop.
<?php
session_start();
/*вспомогательный класс для отрисовки таблицы */
class Table
{
static $tr = [];
// собирает таблицу
public static function render()
{
array_unshift(self::$tr, '<table>');
self::$tr[] = '</table>';
return implode(PHP_EOL, self::$tr);
}
//render
// добавляет строку в таблице
public static function tr($tds, $attrs = '')
{
self::$tr[] = '<tr' . (mb_strlen($attrs) ? ' ' . $attrs : '') . '>';
foreach ($tds as $i)
if (is_array($i))
self::td($i[0], $i[1], 'd');
else
self::td($i);
self::$tr[] = '</tr>';
}
//tr
// добавляет заголовок
public static function header()
{
$arg = func_get_args();
self::$tr[] = '<tr>';
foreach ($arg as $i)
if (is_array($i))
self::td($i[0], $i[1], $i, 'h');
else
self::td($i, null, 'h');
self::$tr[] = '</tr>';
}
//render
// добавляет столбец
public static function td($str, $attrs = '', $h = 'd')
{
self::$tr[] = '<t' . $h . ($attrs ? ' ' . $attrs : '') . '>' . $str;
self::$tr[] = '</t' . $h . '>';
}
}
//class
// функция создает поле ввода
function input($name, $default = null, $attrs = null)
{
return '<input name="' . $name .
'" value="' .
(isset($_REQUEST[$name]) ? $_REQUEST[$name] : $default) .
'"' . $attrs . '/>';
}
// функция проверяет есть ли такой ключ в массиве если массив не задан ищет в $_REQUEST
function get($key, $arr = null, $default = null)
{
$arr = is_null($arr) ? $_REQUEST : $arr;
return (isset($arr[$key]) ? $arr[$key] : $default);
}
// редирект + выход
function away($string)
{
header($string);
exit();
}
// рисует элемент select
function select($array, $name)
{
$sel[] = '<select name="' . $name . '">';
foreach ($array as $v) {
$checked = get($name);
$checked = $checked == $v ? ' selected="selected"' : '';
$sel[] = '<option value="' . $v . '"' . $checked . '>' . $v . '</option>';
}
$sel[] = '</select>';
//var_dump($_REQUEST);
return implode(PHP_EOL, $sel);
}
$result = '';
$types = ["boolean", "bool",
"integer", "int",
"float", "double",
"string",
"array",
"object",
"null"];
$default = ['1', 1, 0.1, pi(), 'str'];
$_SESSION['new'] = $_SESSION['new'] ? $_SESSION['new'] : [];/*то что ввел пользователь*/
$highlight = get('highlight');/*индекс элемента в таблице который нужно подсветить*/
// если нажали отпавить на форме
if (get('send')) {
$type = get('type');/* тип к которому приводить введеное пользователем значение*/
$val = get('int');/*само значение*/
if ($type)
settype($val, $type);// изменяет тип введеного значения иначе он всегда будет string
$_SESSION['new'][] = $val;// сохраняем значение в сессию
away('Location:' . $_SERVER['PHP_SELF'] . '?highlight=' . (count($_SESSION['new']) - 1)); // и редиректим на страницу с подсвеченным новым значением из сессии
}
if (get('clear')) {// если нажали сбросить
// s e s s i o n _ d e s t r o y();// сносим сессию
echo 'You input disabled function(s) by PhpFiddle : s e s s i o n _ d e s t r o y ()';
away('Location:' . $_SERVER['PHP_SELF']);// обновляем страницу
}
//var_dump(get_defined_vars());
$array = array_merge([], $_SESSION['new'], $default);// сливаем пустой массив введеное значение и значения по умолчанию
Table::header('пример', 'is_int', 'is_numeric', 'to int', 'gettype');// рисуем таблицу это первая строчка выделеная жирным
foreach ($array as $index => $i) {// перебираем строки
if ($highlight && ($highlight == $index)) {//если нужно подсвечивать
Table::tr([
var_export($i, 1),
var_export(is_int($i), 1),
var_export(is_numeric($i), 1),
var_export((int)$i, 1),
var_export(gettype($i), 1)], 'class="highlight"'
);
} else {
Table::tr([
var_export($i, 1),
var_export(is_int($i), 1),
var_export(is_numeric($i), 1),
var_export((int)$i, 1),
var_export(gettype($i), 1)
]
);
}
}
die('<p>страница позволяет ввести значение и посмотреть как оно обработается функциями <code> \'is_int\', \'is_numeric\', \'to int\', \'gettype\'</code></p><p>можно указать тип в который преобразовывать значение иначе оно всегда будет <code>string</code></p><p>добавленное значение появится в таблице с зеленой подсветкой </p> <p>там нету обработки ошибок проверок на не заполненные поля и т д по этому если пишет ошибку значит что то не заполнили, выбрали кривое преобразование типоров и т д в этом случае попробуйте нажать <code>сбросить</code> - оно удаляет ранее веденыфе значения из сессии и выставляет значения по умолчанию - с которыми во время тестов ошибок не возникало</p><p>скрипт написан так что легко позволяет добавлять другие функции для проверки просто вставьте их после <code>127</code> и <code>135</code> й строки </p> <p>практически каждая строчка в скрипте прокоментирована</p><form>' . input('int') . ' ' . select($types, 'type') . input('send', 'проверить', 'type="submit" ') . '<button onclick="location.href=\'?clear=1\';return false;">сбросить</button>' . '</form><style>.highlight{background-color:lightgreen}</style>' . Table::render());
/*дальше уже не нужный код т к переписал то же самое на класс Table - получилось больше кода ))
$tr[] = '<table border=1>';
$tr[] = '<tr>';
$tr[] = '<td>пример';
$tr[] = '</td>';
$tr[] = '<td>функция';
$tr[] = '</td>';
$tr[] = '<td>';
$tr[] = '</td>';
$tr[] = '</tr>';
foreach (['1', 1, 0.1, 'str'] as $i) {
$tr[] = '<tr>';
$tr[] = '<td>' . $i;
$tr[] = '</td>';
$tr[] = '<td>' . var_export(is_int($i), 1);
$tr[] = '</td>';
$tr[] = '</tr>';
}
$tr[] = '</table>';
echo implode(PHP_EOL, $tr);*/
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment