Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Запись и воспроизведение данных в документ из форм


Автор: C5oLoJ 5.1.2008, 14:42
Здравствуйте! 
Я хотел сделать скрипт бесплатного показа баннеров на странице, для этого будет служить табличка с формой отправки данных но чет не получается то данные не хотят записываться то есче че нить не так! Вобщем помогите кто чем может.
Я не хочю отображать баннеры по очереди данные дулжны переписываться и банер будет отображаться пока его не заменят!
_______________________________________________________
|                                                                                                            |
|                                                                                                            |
|                                                                                                            |
----------------------------------------------------------------------------------------
| URL баннера:   |_____________________|     _________              |
| URL ссылка:      |_____________________|     | отпраить |             |
|_______________________________________________________

Код

                           <table width=468 border=0>
<form method="post">
                           <tr>
                           <td width=468 colspan="2" height="60">

<?php
$text = fopen ("base.txt","r");
$bufer=fread($text, filesize(base.txt));
fclose($text);
echo "{$bufer}";
?>
                    
                           </td>
                           </tr>
                           <tr>
                           <td width=106><font color=red><sup>*</sup></font>URL ссылка:</td>
                           <td align=left width="352">
        <input type="text" name="site" maxlength="50" size="49"></td>
                           </tr>
                           <tr>
                           <td width=106><font color=red><sup>*</sup></font>URL баннера:</td>
                           <td align=left width="352">
        <input type="text" name="baner" maxlength="50" size="49"></td>
                           </tr>
                           <tr>
        <td width=106><input type="submit" value="Заменить"></td>
                           <td align=left width="352">
                           <p align="left"><font color=red><sup>*</sup></font> - поля, обязательные для заполнения</td>
                           </tr>
                           </form>
                           </table>

<?php

$files = "base.txt";

if ($site != " && $baner != ")

{

$zapis = "<a href=\"$site\"><img src=\"$baner\" border=\"0\"></a>\n" 

$fp = fopen($files, "w");

$fw = fwrite($fp, $zapis);

fclose($fp); } 

?>


Но этот скрипт не работает ПОМОГИТЕ ИСПРАВИТЬ или напишите пожалуйста ваш варинт. Из книг нечего понять не могу, вроде все делаю правельно но почему то не работает.  smile 

Автор: onsql 5.1.2008, 17:13
Сначала модификация твоего кода до рабочего состояния:
Код

<?php

$files = "base.txt";

if ((strtoupper($_SERVER['REQUEST_METHOD'])=='POST') && isset($_POST['site']) && isset($_POST['baner']))
{

  $site = $_POST['site'];
  $baner = $_POST['baner'];

  $zapis = "<a href=\"$site\"><img src=\"$baner\" border=\"0\"></a>\n";

  $fp = fopen($files, "w");
  if (!$fp)
    die('error');

  $fw = fwrite($fp, $zapis);

  fclose($fp); 
 } 

?>

                           <table width=468 border=0>
<form method="post">
                           <tr>
                           <td width=468 colspan="2" height="60">

<?php
$text = fopen ($files,"r");
$bufer=fread($text, filesize($files));
fclose($text);
echo $bufer;
?>
                    
                           </td>
                           </tr>
                           <tr>
                           <td width=106><font color=red><sup>*</sup></font>URL ссылка:</td>
                           <td align=left width="352">
        <input type="text" name="site" maxlength="128" size="49"></td>
                           </tr>
                           <tr>
                           <td width=106><font color=red><sup>*</sup></font>URL баннера:</td>
                           <td align=left width="352">
        <input type="text" name="baner" maxlength="128" size="49"></td>
                           </tr>
                           <tr>
        <td width=106><input type="submit" value="Заменить"></td>
                           <td align=left width="352">
                           <p align="left"><font color=red><sup>*</sup></font> - поля, обязательные для заполнения</td>
                           </tr>
                           </form>
                           </table>


В том что ты привел помимо синтаксических ошибок, типа пропущенной точки с запятой (может при копировании в форум потерялось?) существенно следующее:
Во-первых ты закладываешься на то что опция register_globals включена. Это просто преступно! Большинство хостеров её отключают, поэтому бери переменные из глобальных массивов $_POST либо $_GET.
Во-вторых текстовые константы всегда бери в кавычки. Иначе вот в этой строке:
Код

filesize(base.txt) 

Символ "." будет интерпретироваться как объединение двух строк base и txt. И, следовательно, ты проверяешь длину файла 'basetxt' а не 'base.txt'

Ну и циничные ограничения полей ввода в форме на 50 символов (maxlength). Весьма мало, я вот три раза пытался баннер поставить "http://forum.vingrad.ru/style_images/2/menu/menu_forum.gif" пока не понял в чем дело smile)

Ну а когда будешь далее развивать этот код - обрати внимание на проверку вводимых пользователем данных. Выводить на страницу без проверки пользовательские данные весьма опасно, в твоем случае практически готовая XSS уязвимость.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)