Автор |
Сообщение |
alexcom Медвед-шатун Предупреждений : 2
|
|
Собственно вопрос знающим php.
Есть некий скрипт который в результате своей работы делает post запрос вида
Код: |
mode=blabla&db_ratio=blabla&freq=blabla&message=blabla&utc_time=blabla&dt_shift=blabla |
Ну тобишь название параметра = значение и разделённое &. Это дело надо раскладывать в базу данных (sqlite например) для последующего просмотра в табличном виде.
КАК? |
|
|
|
|
Richard Ferlow Гуру Предупреждений : 2
|
|
А как ты решил, что это POST запрос?
Так обычно записывают GET запрос, доступ к переменным(с POST так же будет):
$_GET['mode']
$_GET['db_ratio'] и т.д.
А почему sqlite? в связке с php обычно mysql используют, тут уже небольшой скрипт нужно будет писать, создавать перед этим таблицу. |
|
|
|
|
ДобрыйФей Мечтатель Предупреждений : 5
|
|
|
|
|
alexcom Медвед-шатун Предупреждений : 2
|
|
Richard Ferlow писал(а): |
А как ты решил, что это POST запрос? |
В коде скрипта делающего запрос, именно post. Сниффер говорит тоже самое.
Richard Ferlow писал(а): |
А почему sqlite |
На самом деле без разницы какую базу, хоть текстовый файл. Главное что бы данные потом можно было отобразить в табличном виде... |
|
|
|
|
Richard Ferlow Гуру Предупреждений : 2
|
|
Тут от объема данных зависит. если их не дофига, то можно действительно в текстовый файл запись вести
создаешь в excel файл, где колонки называешь так, как у тебя переменные названы
т.е.
mode db_ratio и т.д.
вернее это не колонка, а первая строка будет. сохраняешь этот файл как csv файл разделителя запятые(если правильно помню), смотришь внутри что через блокнот - там будут данные в формате
mode;db_ratio;....
дальше делаем так (при обращении к скрипту дописывает новую строку в конце...
Код: |
<?php
$filename = 'test.txt';
$somecontent = $_POST['mode'].';'.$_POST['db_ratio'].';'."\n";
// Вначале давайте убедимся, что файл существует и доступен для записи.
if (is_writable($filename)) {
// В нашем примере мы открываем $filename в режиме "дописать в конец".
// Таким образом, смещение установлено в конец файла и
// наш $somecontent допишется в конец при использовании fwrite().
if (!$handle = fopen($filename, 'a')) {
echo "Не могу открыть файл ($filename)";
exit;
}
// Записываем $somecontent в наш открытый файл.
if (fwrite($handle, $somecontent) === FALSE) {
echo "Не могу произвести запись в файл ($filename)";
exit;
}
echo "Ура! Записали ($somecontent) в файл ($filename)";
fclose($handle);
} else {
echo "Файл $filename недоступен для записи";
}
?> |
файл потом через excel можно смотреть |
|
|
|
|
alexcom Медвед-шатун Предупреждений : 2
|
|
В таком случае можно вообще писать сразу html файл готовый к просмотру в браузере... Вопрос в том, что на web сервере разрешать запись в файл из php плохая идея. |
|
|
|
|
Richard Ferlow Гуру Предупреждений : 2
|
|
alexcom
ну как...тут проверки уже надо делать разные чтобы никто левый не писал. а то так и в базу запись бы шла, там тоже простор для манипуляций)))
можно и в html, тут как угодно, просто тогда к этим данным html Тэги прибавятся и в случае чего массивом данных оперировать значительно сложнее станет + размер файла увеличится.
csv можно потом в базу данных экспортировать и все.
права на запись на тестовом файле только будут же. |
|
|
|
|
Aprelle Гуру |
|
так и делай, пример на PHP+PDO и MySQL
Код: |
// PDO
try
{
# MySQL через PDO_MYSQL
$cn = new PDO("mysql:host=$host;dbname=$db", $user, $pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
$cn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
}
catch(PDOException $e)
{
echo $e->getMessage();
}
// Парсим входные данные
$pid = $_POST['pid'];
$sid = $_POST['sid'];
$grp = $_POST['grp'];
// PDO
try
{
$data = array( 'pid' => $pid, 'sid' => $sid, 'grp' => $grp);
$q = $cn->prepare("INSERT INTO result (p_id, s_id, grp) VALUES(:pid, :sid, :grp)");
$q->execute($data);
}
catch(PDOException $e) {
echo $e->getMessage();
} |
|
|
|
|
|
k0stE Гуру |
|
Я потерял нить, надо то ли сразу печатать, то ли в базу, то ли в файл
Печатает все аргументы и их значения с переносом строки.
Код: |
<?php
$agent = $_SERVER['HTTP_USER_AGENT'];
foreach($_POST as $k=>$v) {
if (preg_match('/curl/i', $agent)) {
echo $k . "=" . $v . "\n";
}
else {
echo $k . "=" . $v . "<br>";
}
}
?> |
Цитата: |
[k0ste@WorkStation ~]$ curl -d "alex=com&richard=ferlow" php.execute.com/example.php
alex=com
richard=ferlow
[k0ste@WorkStation ~]$
|
|
|
|
|
|
icemind Гуру Предупреждений : 2
|
|
Так проблема распарсить или записать?
Код: |
РАСПАРСИТЬ:
$post='mode=blabla&db_ratio=blabla&freq=blabla&message=blabla&utc_time=blabla&dt_shift=blabla';
$parcearr=explode('&',$post);
if(count($parcearr)>0)
{
foreach($parcearr as $str)
{
$paramarr=explode('=', $str);
$param=$paramarr[0];
$val=$paramarr[1];
ЗАПИСАТЬ:
'Здесь пишем код для записи в базу данных параметров и их значений'
}
} |
UPD: исправил багиПоследний раз редактировалось: icemind (Пт 17-06-16 : 13-55), всего редактировалось 1 раз |
|
|
|
|
Richard Ferlow Гуру Предупреждений : 2
|
|
icemind
ну и написали...
post данные так не выглядят и получать их нужно иначе.
у explode порядок аргументов перепутан...дальше тоже что-то непонятное |
|
|
|
|
icemind Гуру Предупреждений : 2
|
|
Richard Ferlow писал(а): |
post данные так не выглядят и получать их нужно иначе. |
как я понял он получает данные в виде такой строки(типа $_POST[stroka]='mode=blabla&db_ratio=blabla&freq=blabla&message=blabla&utc_time=blabla&dt_shift=blabla')
Richard Ferlow писал(а): |
у explode порядок аргументов перепутан |
explode подправил
Richard Ferlow писал(а): |
дальше тоже что-то непонятное |
дальше разбиваем опять каждую пару и уже с каждым элементом пары делаем что хотим.
ЗЫ: единстенное условие, нужно на стороне клиента проверять, чтобы в значениях не было символов & и = |
|
|
|
|
Richard Ferlow Гуру Предупреждений : 2
|
|
icemind
если бы строкой было, то лучше сделать так
Код: |
$post='mode=blabla&db_ratio=blabla&freq=blabla&message=blabla&utc_time=blabla&dt_shift=blabla';
parse_str($post, $output); |
Код: |
Array ( [mode] => blabla [db_ratio] => blabla [freq] => blabla [message] => blabla [utc_time] => blabla [dt_shift] => blabla ) |
|
|
|
|
|
icemind Гуру Предупреждений : 2
|
|
Richard Ferlow писал(а): |
если бы строкой было, то лучше сделать так |
согласен, если только у него разделители всегда & и = |
|
|
|
|
|