Strict Standards: Resource ID#34 used as offset, casting to integer (34) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#36 used as offset, casting to integer (36) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#37 used as offset, casting to integer (37) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Версия для печати :: Проверка имени и создание .txt файла на php
ТвойWeb » WebMaster класс » PHP/Perl » Проверка имени и создание .txt файла на php

Страниц (1): [1]
 

1. Termit1987 - 25 Февраля, 2008 - 07:05:13 - перейти к сообщению
Привет всем. Я с недавних пор начал интересоваться языками php и html, но пока познания в этом ооочень малы. И вот у меня возник к Вам вопрос. Мне необходимо сделать следующее: разработать форму, позволяющую вводить название файла. При помощи регулярных выражений проверить имя файла, если корректно, то создать файл с указанным именем, иначе – выделить недопустимые символы. Имя файла не должно превышать 255 символов и содержать \ / : * ? " < > |.

Я сделал html шаблон но когда дело дошло до проверки, я застрял. И также я немогу создать файл при помощи php. Не могли бы Вы помочь новичку?

Пример моего html кода


CODE:
<html>
<form action="lab2.php">
<table align="center" width="610" height="80" border="1">

<tr>


Введите имя файла: <input type="text" name="imya" size="70" maxlength="255" value=""><br><br>


<FONT COLOR="red">Внимание:</FONT> имя файла не должно превышать <FONT COLOR="red">255</FONT> символов и содержать знаки <FONT COLOR="red"> \ / : * ? " < > </FONT>
<br><br>

<center><input type="submit" name="create" value="Создать файл">
</td></tr>
</form>
</html>


php-код
CODE:
$fp = fopen ("@$Imya.txt","w");
fclose($f);


Буду всем признателен за помощь!
2. Furax - 25 Февраля, 2008 - 08:07:14 - перейти к сообщению
CODE:
$name = $_GET['imya']; //Регистр важен!

$symbols = array("\\", '/', '"', '?', ':', '*', '<', '>', '|');
foreach ($symbols as $symbol)
if (strpos($name)!==FALSE)
$name = str_replace($symbol, '<font color=red><b>'.htmlSpecialChars($symbol).'</b></font>', $name);

if ($name != $_GET['imya'])
{
echo "Неверное имя файла! Плохие символы выделены: $name";
}
else
{
$f = fopen($name, 'w');
fclose($f);
}
Кстати, список плохих символов, как я понял, составлен применимо к Windows-правилам именования? Если на хостинге линукс, возможно, следует его несколько изменить; точнее не скажу, ищите по правилам именования файлов в UNIX.
3. Termit1987 - 25 Февраля, 2008 - 08:49:04 - перейти к сообщению
Большое спасибо за то, что так быстро ответил.
Насколько я понял, все должно выглядить так:
CODE:

<html>
<form action="proba.php">
<table align="center" width="610" height="80" border="1">

<tr>


Введите имя файла: <input type="text" name="imya" size="70" maxlength="255" value=""><br><br>


<FONT COLOR="red">Внимание:</FONT> имя файла не должно превышать <FONT COLOR="red">255</FONT> символов и содержать

знаки <FONT COLOR="red"> \ / : * ? " < > </FONT>
<br><br>

<center><input type="submit" name="create" value="Создать файл">
</td></tr>

<?
{
$name = $_GET['imya'];
$symbols = array("\\", '/', '"', '?', ':', '*', '<', '>', '|');
foreach ($symbols as $symbol)
if (strpos($name)!==FALSE)
$name = str_replace($symbol, '<font color=red><b>'.htmlSpecialChars($symbol).'</b></font>', $name);

if ($name != $_GET['imya'])
{
echo "Неверное имя файла! Плохие символы выделены: $name";
}
else
{
$f = fopen($name, 'w');
fclose($f);
}
?>
</form>
</html>


Если я использую этот код, то при попытке вызвать страничку (http://localhost/proba.php) Появляется ошибка:

Parse error: parse error, unexpected $end in y:\home\localhost\www\proba.php on line 48

Я так понимаю что он не может найти какую-то переменную $end?

Как можно исправить данную ошибку?

p.s. Не мог кто-нибудь написать ссылки на какие нибудь учебники (методички) по php, так сказать, для чайников?
4. Furax - 25 Февраля, 2008 - 09:23:06 - перейти к сообщению
Насчёт учебников посмотри в соседней ветке.

Что до кода - нет, речь не о переменной. PHP не нашёл закрывающей фигурной скобки к открытой тобой - вот и говорит, что, мол, она ещё не закрыта, а тут уже конец ($end) файла.

Код я бы написал так:
CODE:
<form action="proba.php" method="GET">
<table align="center" width="610" height="80" border="1">

<tr>


Введите имя файла: <input type="text" name="imya" size="70" maxlength="255" value=""><br><br>


<FONT COLOR="red">Внимание:</FONT> имя файла не должно превышать <FONT COLOR="red">255</FONT> символов и содержать

знаки <FONT COLOR="red"> \ / : * ? " < > </FONT>
<br><br>

<center><input type="submit" name="create" value="Создать файл">
</td></tr>

<?php

if (isSet($_GET['imya']))
{
$name = $_GET['imya'];
$symbols = array("\\", '/', '"', '?', ':', '*', '<', '>', '|');
foreach ($symbols as $symbol)
if (strpos($name)!==FALSE)
$name = str_replace($symbol, '<font color=red><b>'.htmlSpecialChars($symbol).'</b></font>', $name);

if ($name != $_GET['imya'])
{
echo "Неверное имя файла! Плохие символы выделены: $name";
}
else
{
$f = fopen($name, 'w');
fclose($f);
echo 'OK!';
}
}
?>
</form>
</html>
5. Termit1987 - 25 Февраля, 2008 - 09:56:55 - перейти к сообщению
И снова спасибо, все работает. Но снова есть вопросы:

1)файл создается без расширения. Можно ли как нибудь сделать что бы расширение было txt

2) после нажатия на кнопку Создать файл, файл создается но в окне браузера появляеться странный код:
CODE:
Warning: Wrong parameter count for strpos() in y:\home\localhost\www\lab2.php on line 25

Warning: Wrong parameter count for strpos() in y:\home\localhost\www\lab2.php on line 25

Warning: Wrong parameter count for strpos() in y:\home\localhost\www\lab2.php on line 25

Warning: Wrong parameter count for strpos() in y:\home\localhost\www\lab2.php on line 25

Warning: Wrong parameter count for strpos() in y:\home\localhost\www\lab2.php on line 25

Warning: Wrong parameter count for strpos() in y:\home\localhost\www\lab2.php on line 25

Warning: Wrong parameter count for strpos() in y:\home\localhost\www\lab2.php on line 25

Warning: Wrong parameter count for strpos() in y:\home\localhost\www\lab2.php on line 25

Warning: Wrong parameter count for strpos() in y:\home\localhost\www\lab2.php on line 25
Неверное имя файла! Плохие символы выделены: cvx>><>>font color=red>>><>>b>\>><>>>><>>font color=red>>><>>b>/>><>>/b>>><>>/font>b>>><>>>><>>font color=red>>><>>b>/>><>>/b>>><>>/font>font>

Для наглядночти я приклеил изображения...

Можно ли это как нибудь решить?
6. Termit1987 - 25 Февраля, 2008 - 12:29:44 - перейти к сообщению
Ну так что, никто мне помочь с моей проблемой не сможет? Проблемы
7. ETC - 25 Февраля, 2008 - 13:25:52 - перейти к сообщению
Termit1987
А вы в курсе, что форум не является чатом, что сегодня выходной день, что вообще у людей есть свои дела, что вам ответят, когда захотят, что отвечать вам не обязан никто, что вы не имеете права поднимать тему глупыми вопросами типа «никто мне помочь не сможет?», нет? Вот имейте ввиду.
Когда будет у людей время, вам помогут. Сидите и молча ждите.
8. Termit1987 - 25 Февраля, 2008 - 15:01:43 - перейти к сообщению
Так, немного поковырявшись в справочниках, с расширением разобрался. Но вот ошибка все-же остается для меня тайной.

Ошибка по прежнему осталась. Несмотря на эту ошибку программа работает правильно (то есть ошибка на ход выполнения программы не влияет), но все-же она портит внешний вид. Кроме того коректно не отображается следующее условие: "При помощи регулярных выражений проверить имя файла, если корректно, то создать файл с указанным именем, иначе – выделить недопустимые символы."
Вот именно неправильные символы как то странно выделяються:
CODE:
"cvx>><>>font color=red>>><>>b>\>><>>>><>>font color=red>>><>>b>/>><>>/b>>><>>/font>b>>><>>>><>>font color=red>>><>>b>/>><>>/b>>><>>/font>font>"

И как это исправить, с моими познаниями в области php, я пока не знаю. Так что помогите, пожалуйста, кто чем сможет...

ETC Извини, если я что то сделал не правильно. В дальнейшем я буду стараться избегать подобных сообщений... Улыбка
9. Furax - 25 Февраля, 2008 - 21:29:50 - перейти к сообщению
Termit1987
Виноват - я не учёл, что при выделении тегами сами теги могут также содержать "плохие" символы. Нужно заменить вот этот цикл:
CODE:
foreach ($symbols as $symbol)
if (strpos($name)!==FALSE)
$name = str_replace($symbol, '<font color=red><b>'.htmlSpecialChars($symbol).'</b></font>', $name);
на
CODE:
$smb = array();
foreach ($symbols as $s) $smb[$s] = '<font color=red><b>' . htmlSpecialChars($s) . '</b></font>';
$name = strtr($name, $smb);
10. Termit1987 - 26 Февраля, 2008 - 01:11:53 - перейти к сообщению
Furax Огромное тебе спасибо. Все работает. Вот теперь сижу и пытаюсь разобраться в коде)))

Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0385]     [ Gzipped ]