|
|
|
| помогите пожалуйста разобратся с кодом:
есть текстовый фаил с масивом: 1¦2¦3¦
<?php
extract($HTTP_POST_VARS);
extract($HTTP_GET_VARS);
### Type 1
if($name)
{
@$results=file($name.'.txt') or exit('<b>Не найден фаил</b>');
$count=count($results);
echo ('<br> Число выборов:'.$count);
if ($count == 3)
{
for($n=0;$n<$count;$n++)
{
$temp= explode('¦',$results[$n]);
$vname[$n]=$temp[0];
if ($vname[$n] == 1)
{
echo ('<br>'.$vname[$n].$data1);
}
elseif ($vname[$n] == 2)
{
echo ('<br>'.$vname[$n].$data2);
}
elseif ($vname[$n] == 3)
{
echo ('<br>'.$vname[$n].$data3);
}
}
}
else echo('<b><br>Вы не выбрали 3 пункта!</b>');
}
else echo('<b>Не задано имя</b>');
?>
как сделать так, что бы мне этот скрипт выбирал из масива только "1" и приписывал к ней "some data", далее выбирал "2" и приписывал к ней другие данные. так же с 3-ойкой.
1: ....some data....
2: ....another data...
3: ....any data... | |
|
|
|
|
|
|
|
для: Lin-san
(28.09.2008 в 13:44)
| | возможно ли такое сравнение???
if ($vname[$n] == 3) | |
|
|
|
|
|
|
|
для: Lin-san
(28.09.2008 в 13:44)
| | 2 Замечания:
Код написан под РНР3 ?
Не используйте extract - это огромная дыра в безопасности ваших скриптов | |
|
|
|
|
|
|
|
для: mihdan
(28.09.2008 в 14:19)
| | чем его заменить? оО | |
|
|
|
|
|
|
|
для: Lin-san
(28.09.2008 в 14:32)
| | extract или код? | |
|
|
|
|
|
|
|
для: mihdan
(28.09.2008 в 14:47)
| | и экстракт и код)
...а в коде у меня не работает оператор IF
не делает он сравнение числа из базы и числа, который который я задаю. | |
|
|
|
|
|
|
|
для: Lin-san
(28.09.2008 в 14:52)
| | код заработал. | |
|
|
|
|
|
|
|
для: Lin-san
(28.09.2008 в 14:52)
| | переменные
$name
$data1
$data2
$data3
у Вас должны быть получены из массива $_POST или из $_GET
получаете их вначале скрипта ,
почти стандартные способы:
<?
$name = @$_GET['name'] || $name = '';
// не очень правильный но работающий способ
// здесь @ заглушает предупреждение, если $_GET['name'] совсем небыло установлено,
// или присваиваете $name пустую строку (пустая строка установится даже если передавалось значение '0')
$name = (isset($_GET['name'])) ? $_GET['name']: '';
// способ лучше
// проверяется установленна-ли переменная $_GET['name']
// и взависимости от результата устанавливается $name
// аналогично делаете с каждой нужной переменной из массивов $_POST или из $_GET
$data1 = (isset($_POST['data1'])) ? $_POST['data1']: '';
?>
даже можно сразу защититься от того что в эти data1, data2 и data3
напихают html-тегов, и они Вам весь дизайн странички испортют :)<?
//т.к. они нужны только в echo то их можно сразу htmlspecialchars();
$data2 = (isset($_POST['data2'])) ?htmlspecialchars($_POST['data2']) : '' ;
// ....................
|
Разбираетесь с этой $name ,
у Вас она используется в скрипте в качестве начала имени файла , file($name.'.txt')
и следовательно можно заставить скрипт читать любой файл с '.txt'
,только например перейдя по адресу вашего скрипта с строкой запроса adres?name=http://.....без .txt
или не адрес а путь по любым вашим папкам.
Непонятно что за файл Вы хотите считать в массив,
может у вас он всего один
, и можно просто тупо проверить $name сравнив с именем файла ,
, может лучше вообще избежать передачи имени , и передавать , только цифру
, может нужно проверить $name на соответствие шаблону if (preg_match('#[a-z]+#',$name)) ............
об этом история умалчивает.
и потом как только его прочитаете этот файл , чисто для себя, выведите структуру получившегося массива $results
добавив пару строк сразу после вызова функции file()
например такие
var_dump($results);
exit;
|
и посмотрите получилось-ли прочитать файл
p/s
такое-же var_dump() можно применить к любой переменной :)
upd//
долго сочинял ;)) | |
|
|
|
|
|
|
|
для: xx77
(28.09.2008 в 17:53)
| | если заработал с extract(),
то учитывайте то что обращение типа адрес.php?_SERVER[REMOTE_ADDR]=555.555.555.555
extract($_GET);
echo $_SERVER['REMOTE_ADDR'];
print_r($_SERVER);
опустошит Вам весь суперглобальный массив $_SERVER и подменит любую из переменных окружения | |
|
|
|
|
|
|
|
для: xx77
(28.09.2008 в 17:58)
| | ухх)) спасибо большое)) ...можно сразу в манула)
только вот не допонял:
мне надо просто:
extract($HTTP_POST_VARS);
extract($HTTP_GET_VARS);
заменить на:
$name = (isset($_GET['name'])) ? $_GET['name']: '';
$data1 = (isset($_POST['data1'])) ? $_POST['data1']: '';
и так с каждой датой.
...а скрипт выглядит так (который я привел это 2-ой этап)
1-этап: пользователь заходит на страничку:
вводит имя - создается фаил txt : имя.txt
#тут можно как то закодировать, но как? через другую переменную.
так же на этой страничке он выбирает из 11-ти позиции 3-ри.
эти позиции записываются в фаил: имя.txt
теперь у нас есть текстовый фаил с масивом: 6¦2¦3¦
2-ой этап: я привел пример скрипта тут:
мы получаем из файла имя.тхт нужные нам позиции.
далее приписываем к тим позициям "наши" значения (например цену).
далее нам надо сохранить в файле имя.тхт новый ряд ввиде:
6-500¦2-200¦3-700¦
3-ий этап: показать пользовотелю после того как он выберет 3 позиции:
6 - 500
2 - 200
3 - 700
вот такая вот у мну была задачка))
сейчас думаю над пунктом 2 - как записать в фаил цены. | |
|
|
|
|
|
|
|
для: Lin-san
(28.09.2008 в 20:00)
| | Вы что магазин на файлах делаете, или это корзина пользователя? У вас что к базе нет доступа? | |
|
|
|
|
|
|
|
для: xx77
(28.09.2008 в 17:53)
| | >даже можно сразу защититься от того что в эти data1, data2 и data3
>напихают html-тегов, и они Вам весь дизайн странички испортют :)
Сразу - не стоит. | |
|
|
|
|
|
|
|
для: Trianon
(28.09.2008 в 20:12)
| | как закрыть файлы "имя.тхт" которые хранятся на сайте, от пользователей, что бы они не просматривали так:
директория/имя.тхт
?? | |
|
|
|
|
|
|
|
|
для: mehelson
(29.09.2008 в 04:21)
| | спасибо. | |
|
|
|
|
|
|
|
для: Lin-san
(29.09.2008 в 12:18)
| | Для такой простой задачи , я-бы присмотрелся к суперглобальгому массиву $_SESSION
Можно вкратце ознакомиться с сессиями тут
http://softtime.ru/bookphp/gl8_1.php
но учитывая что $HTTP_SESSION_VARS это уже устаревающее имя этого массива
И для передачи между страницами достаточно строки
session_start()
и присваивать и читать значения из $_SESSION.
Только есть минус -
у пользователей должны быть включены cookies
или это придётся обходить передавая идентификатор сессии в адресе.
p/s
из слов Trianon'а ,о том что применение htmlspecialchars() сходу не лучший вариант,
увидел только намёк на то что пользователь сможет вставить в эти переменные текст максимального размера,
и эта функция будет всё это безобразие обрабатывать :)
Но по сути ,в памяти сервера и так уже будет вся эта поместившаяся туда строка,
Следовательно первым делом можно применять что-то типа
unpack() или substr() или sscanf() или sprintf(), или что-то другое
, что сможет загрузить в переменную ровно столько нужно ,и облегчит работу скрипта избавлением от переработки лишних данных :)
Но могу ошибаться или недопонимать в своих предположениях смысла этих слов :)
upd//
немного подумал и понял ещё один возможный смысл слов
ещё, и даже в первую очередь, наверное подразумевалась одна в последнее время постоянно-включенная опция
которая экранирует кавычки находимые в данных передаваемых пользователями посредством
GET POST и COOKIE
имя ей magic_quotes_gpc
она прячетс в недрах файла php.ini
и иногда заставляет честных кодеров бороться с её проявлениями , применяя stripslashes()
предварительно проверяя
if ( get_magic_quotes_gpc() )
Извиняюсь за многословие )) | |
|
|
|