Отправляет email-рассылки с помощью сервиса Sendsay

PHP

Здравствуйте,
подскажите, пожалуйста, по какой причине ниже приведённый код
не работает после закачки файлов на сервер, но замечательно работает в Денвере?

<? switch ($rubr)
{ case 1: $opn='01divan.txt';break;
case 2: $opn='02stoyki.txt';break;
case 3: $opn='03korpus.txt';break;
case 4: $opn='04gurnal.txt';break; } //проверяем переменную
$rubr

$count = 1;
$sub = fopen ("catalog/$opn","r"); //в зависимости от
её значения, открываем разные файлы
while ($data = fgetcsv ($sub, 1000, "|"))
{
$num = count ($data);
$count++;
for ($i=0; $i < $num; $i++)
{ print "<table width='100%' border='0' cellpadding='0'><tr><td class='f4'><img
src='img/cupboards/$data[$i].gif' width='120' height='120' align='left' hspace='10'
vspace='12'><br>";
$i++;
print "<strong>$data[$i]</strong><br>";
$i++;
print "$data[$i]<br>";
$i++;
print "$data[$i]<br>";
$i++;
print "<a href='http://$data[$i]'>$data[$i]</a><br>";
print "</td></tr></table>"; // отображаем информацию
в браузере
}
}
fclose ( $sub );

Ответить   Fri, 13 Apr 2007 21:07:21 +0400 (#656736)

 

Ответы:

Здравствуйте,

Выяснилось, что не определяется значение переменной
$rubr. Присвоение ей значения производится при переходе по ссылке:
http://test1.ru/catalog.php?rubr=1

В этом случае Денвер присвивает ей значение 1.
Но этого почему-то не происходит при закачке файла на сервер.
Подскажите, пожалуйста, в чём причина и как исправить ситуацию.

заранее благодарен,
Дмитрий

от

vspace='12'>><br>";

информацию




библиотекa сайтостроительства http://www.i2r.ru/static/244/

Ответить   Sat, 14 Apr 2007 07:01:31 +0400 (#656816)

 

не используйте глобальные переменные - это не хорошо.
Вместо этого писать:

switch ($_POST['rubr']) {
.....
}
Ибо при аплоаде данные передаются по POST

Ответить   Sat, 14 Apr 2007 06:49:59 +0200 (#656818)

 

На сервере отключено register_globals
http://ru.php.net/results.php?q=register_globals&l=ru&p=wholesite

И это правильно (почему - написано там же).

Решение в-тупую:
получать это значение внутри php из $_REQUEST[...]

Правильное решение:
написать класс-оболочку массива $_REQUEST, управляющую допустимыми
значениями, что-нибудь вроде этого:

class FRequest
{

private $R;
private $filters;

function __construct($Request=array())
{
$this->R=$Request;
}

function addFilter($param,$filter_string)
{
$this->filters[$param]=$filter_string;
}

function get($param)
{
return preg_replace($this->filters[$param],'',$this->R[$param]);
}

}

и использовать:

$FRequest=new FRequest($_REQUEST);
$FRequest->addFilter('rubr','[^(0-9)]'); // параметр rubr может быть только
числовым
$rubr=$FRequest->get('rubr');

Надеюсь, что вышеприведенные решения Вам помогут, поэтому позволю себе
пару слов о философии :-)

Конечно, это решение написано из головы (т.е. не проверялось), так как
оно слишком простое, работает только с плоским массивом, и годится
только для программы из 10 строчек. Суть - в самой идее. Использовать
переменные и массивы годится только для институтской лабы: сдал и
забыл. В коммерческом программировании надо понимать, что любое
значение (число, строка, массив, ...) является объектом языка
(и объектом бизнес-модели) со своими методами доступа.

Денвер развращает. Программиста, использующего денвер, я бы даже
не пригласил на собеседование.

Ответить   Sat, 14 Apr 2007 12:48:59 +0400 (#656875)