Created
January 9, 2020 02:45
-
-
Save phpfiddle/37d64821545f44beafb2bd16be710fa7 to your computer and use it in GitHub Desktop.
[ Posted by [email protected] ] https://otvet.mail.ru/question/218029501
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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