запись в файл, преобразование переменных, контроль ввода данных

Stinger-I

Guest
запись в файл, преобразование переменных, контроль ввода данных

Проблемы у меня две. Первая, как сделать так, что бы переменные, которые на английском, при выводе на экран была на русском (calamar = кальмар, carb = краб и т. д.). Код приведён ниже (врезка 1). И ещё одно, в процессе отладки обнаружил, что в файл записывается только последнее значение (т.е. последний по списку - address). Подскажите, что не так?
Сразу скажу, что что-то подобное (врезка 2) не подойдёт, т. к. пунктов будет в лучшем случае штук 50.
И ещё одна маленькая просьбочка – как проследить, что пользователь ввёл именно e-mail?
Текст формы во врезке 3.
Пожалуйста, ответьте (работа ГОРИТ!).

Врезка 1

<?php

define("calamar", Кальмар);
$total_goods = $calamar + $crab + $keta;
if ($total_goods == 0)
echo "Вы ничего не выбрали или Вы не ввели свой e-mail.";
else
{
echo "Ваш заказ был принят в ";
echo date("H:i, jS F");
echo "<br><br>";
echo "<b>Ваш адрес:</b> ".$address;
echo "<br><br>";
echo "<b>Ваш заказ:</b> ";
echo "<br>";
foreach ($HTTP_POST_VARS as $key=>$value)
{
if ($value>0)
print "$key - <b>$value</b><br>";
}
}

$fn = "zakaz.txt";
$fp = fopen("$fn","a") or die("Не могу открыть $fn");
flock($fp, 2);
fwrite($fp, $value);
flock($fp, 3);
fclose($fp);

?>


Врезка 2

if ($calamar>0)
echo "Кальмар - "."<b>$calamar</b>";
echo "<br>";
if ($crab>0)
echo "Дальневосточный краб - "."<b>$crab</b>";
echo "<br>";
if ($keta>0)
echo "Кета - "."<b>$keta</b>";
echo "<br>";
echo "Ваш адрес: ".$address;


Врезка 3

<form action="zakaz.php" method="post">
<table width=489 class="text" border=0 cellspacing=0 cellpadding=0><!--price_start-->
<tr><!--1_level_start-->
<td height=1 class="line" colspan=7></td>
</tr>
<tr height=20 id="header">
<td width=1 class="line" rowspan=7></td>
<td width=20 class="number"></td>
<td width=1 class="line" rowspan=7></td>
<td width=407>Товар</td>
<td width=1 class="line" rowspan=7></td>
<td width=58>Кол-во</td>
<td width=1 class="line" rowspan=7></td>
</tr>
<tr>
<td height=1 class="line" colspan=7></td>
</tr><!--1_level_end-->
<tr height=20><!--2_level_start-->
<td id="number">1</td>
<td id="osn">Кальмар</td>
<td><input type="text" name="calamar" size=6 maxlength=3></td>
</tr>
<tr>
<td height=1 class="line" colspan=7></td>
</tr><!--2_level_end-->
<tr height=20><!--3_level_start-->
<td id="number">2</td>
<td id="osn">Дальневосточный краб</td>
<td><input type="text" name="crab" size=6 maxlength=3></td>
</tr>
<tr>
<td height=1 class="line" colspan=7></td>
</tr><!--3_level_end-->
<tr height=20><!--4_level_start-->
<td id="number">3</td>
<td id="osn">Кета</td>
<td><input type="text" name="keta" size=6 maxlength=3></td>
</tr>
<tr>
<td height=1 class="line" colspan=7></td>
</tr><!--4_level_end-->
<tr height=40 id="header">
<td colspan=7>Ваш e-mail:<input type="text" name="address"></td>
</tr>
<tr>
<td height=40 id="header" colspan=7><input type="submit" value="Сделать заказ" size=60 maxlength=60></td>
</tr>
</td>
</tr>
</table><!--price_end-->
</form>
 

iliah

Новичок
$HTTP_POST_VARS -> $_POST !
и этот массив надо проверять, т.к. там может быть все что угодно

> в файл записывается только последнее значение (т.е. последний по списку - address)

>foreach ($HTTP_POST_VARS as $key=>$value)
> {
> if ($value>0)
> print "$key - <b>$value</b><br>";
> }
> }
вот здесь и пиши в файл

> define("calamar", Кальмар);
я бы использовал $trans = array("calamar" => "Кальмар"); // etc
а затем после проверки - вместо $key - $trans[key]

а проверка мэйла обсуждалась неоднократно - поищи на форуме
 

Fedor33

Guest
так, что бы переменные, которые на английском, при выводе на экран была на русском (calamar = кальмар, carb = краб и т. д.).
значения переменных ты имел ввиду?
мне все равно не очень ясно. что там у тебя за define("calamar", "Кальмар");

как проследить, что пользователь ввёл именно e-mail
Если ты пишешь что-то типа инет-магазина, то для регистрации в нем сделай отсылку на введенный емейл регистрационного кода.

И вообще - мне кажется использовать БД будет проще в данном случае.
 

Stinger-I

Guest
Насчёт записи в файл, огромное СПАСИБО. А вот насчёт переменных, увы, не сработало. Может я, что-то ни так сделал? Привожу код файла php:

PHP:
<?php

$trans = array("calamar" => " Кальмар ",
		"crab" => "Дальневосточный краб",
		"keta" => "Кета");
$total_goods = $calamar + $crab + $keta;
if ($total_goods != 0 || empty($address))
{
echo "Ваш заказ был принят в ";
echo date("H:i, jS F");
echo "<br><br>";
echo "<b>Ваш адрес:</b> ".$address;
echo "<br><br>";
echo "<b>Ваш заказ:</b><br> ";
foreach ($HTTP_POST_VARS as $trans[key] => $value)
	{
	if ($value>0)
	print "$trans[key] - <b>$value</b><br>";
	$fn = "zakaz.txt";
	$fp = fopen("$fn","a") or die("Не могу открыть $fn");
	flock($fp, 2);
	fwrite($fp, $trans[key]);
	fwrite($fp, -$value);
	flock($fp, 3);
	fclose($fp);
	}
}
else
print "Вы ничего не выбрали или Вы не ввели свой e-mail.";

?>
Ещё одна маленькая проблема, которую я никак не могу решить: при записи в файл необходимо данные расположить в виде столбца, а это как-то не очень смотрится:


calamar0crab-5keta0address0calamar0crab-8keta0address0calamar0crab-8keta0address0calamar-66crab0keta0address0calamar-66crab0keta0address0calamar-66crab0keta0address0calamar-66crab0keta0address0calamar-66crab0keta0address0calamar0crab-45keta0address0


-~{}~ 29.09.04 07:05:

Автор оригинала: Fedor33
значения переменных ты имел ввиду?
мне все равно не очень ясно. что там у тебя за define("calamar", "Кальмар");
Fedor33, define("calamar", "Кальмар"); - это константа. А смысл заключается в следующем: клиент вносит данные в форму, php-файл её обрабатывает и выдаёт результат (что было выбрано и сколько). Только дело в том, что в результате, который виден на экране, наименование товара == переменной (что логично), но мне надо, что бы клиент видел что-то типа:

Ваш заказ:
Кальмар – 5
Кета – 8

Если ты пишешь что-то типа инет-магазина, то для регистрации в нем сделай отсылку на введенный емейл регистрационного кода.
Второе, мне как таковой интернет-магазин не нужен. Надо, чтобы клиент просто забронировал необходимые ему продукты. И если не трудно, расскажи поподробнее про вариант с БД.
 

Roman_N

Guest
$HTTP_POST_VARS[] - массив и обращаться к нему нужно как к массиву.

Насчёт записи в файл, огромное СПАСИБО. А вот насчёт переменных, увы, не сработало. Может я, что-то ни так сделал?
foreach ($trans as $trans[key] => $value)
 

Stinger-I

Guest
Спасибо всем, кто ответил мне (причём оперативно). С заменой переменных я разобрался, с проверкой данных тоже. Осталась только одна проблема – при записи в файл, переменные (calamar, crab, keta) записываются на английском, а как их перевести на русский, чтобы выглядело как во врезке 1, не знаю. Врезка 2 – запись в файл.
PS: на странице, где показывается какой товар выбран все товары на русском.
PHP:
<?php
$fn = "zakaz.txt";
$trans = array("calamar" => "Кальмар",
		"crab" => "Дальневосточный краб",
		"keta" => "Кета");
$total_goods = $calamar + $crab + $keta;
if ($total_goods != 0)
{
echo "Ваш заказ был принят в ";
echo date("H:i, jS F");
echo "<br><br>";
echo "<b>Ваш адрес:</b> ".$address;
echo "<br><br>";
echo "<b>Ваш заказ:</b><br> ";

foreach ($HTTP_POST_VARS as $key => $value)
	{
	if ($value>0)
	{
	foreach ($trans as $k => $v)
	if ($k == $key)
	print "$v"." - <b>$value</b><br>";
	}
	$fp = fopen("$fn","a") or die("Не могу открыть $fn");
	flock($fp, 2);
	fwrite($fp, $key);
	fwrite($fp, -$value);
	flock($fp, 3);
	fclose($fp);
	}
}

?>
Врезка 1


Ваш заказ был принят в 02:18, 3rd October

Ваш адрес: [email protected]

Ваш заказ:
Кальмар - 89
Дальневосточный краб - 87
Кета – 77


Врезка 2


calamar-89
crab-87
keta-77
address0
 

lucas

Guest
PHP:
fwrite($fp, $key);    ==> fwrite($fp,$v) ;
fwrite($fp, -$value); ==> fwrite($fp,'-' . $value) ;
 

Stinger-I

Guest
При обработке запроса сервер выдаёт предупреждение:

Warning: fopen(zakaz.txt): failed to open stream: Permission denied in /www/.../zakaz.php on line 28
Не могу открыть zakaz.txt

а вот эта строка:
PHP:
$fn = "zakaz.txt";
$fp = fopen("$fn","a") or die("Не могу открыть $fn");
У меня на компе стоит APACHE (PHP4_2004-04-21_4.3.6) и там всё нормально работает, а вот на хостинге fatal.ru (PHP 4.3.8) выдаёт предупреждение.
Может кто-нибудь знает, как решить эту проблему?
 

iliah

Новичок
1) перевести Permission denied и почесать репу
2) скормить гуглю (с)
3) поставить-таки соответствующий chmod
 
Сверху