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


Автор: griker 29.11.2006, 15:32
Здравствуйте, я столкнулся со следующей проблемой:

Есть форма с двумя полями: для имени файла и для содержимого данного файла и соответсвтенно кнопка для обработки формы. В обработчике создаётся файл с именем и содержимым соответсвущими вводимым в полях формы

Задача заключается в том чтобы после создания файла на этой же странице обработчика сразуже открывлся созданный файл

Вот код обработчика:
Код

<?php
  if(empty($_POST['name']))
      {
        echo "<div style='color: red'>*Не указано имя файла</div><br>";
        include("create.html");
      }
  elseif(empty($_POST['textarea']))
      {
        echo "<div style='color: red'>*Содержимое файла отсутсвует</div><br>";
        include("create.html");
      }
  else
      {
        $fh=fopen($_POST['name'], "a");
        fwrite($fh, $_POST['textarea']);
        fclose($fh);
      }
?>

Автор: NightmareZ 29.11.2006, 15:41
Что значит "на этой же странице обработчика сразуже открывлся созданный файл"?

Автор: griker 29.11.2006, 15:53
NightmareZ, при нажатии на кнопку - содержимое формы отправляется обработчику формы, соответсенно открывается новый файл(обработчик) записывающий данный в файл. После записи мне сразуже нужно открыть созданный файл в этом же окне smile 

Автор: NightmareZ 29.11.2006, 16:11
Цитата(griker @  29.11.2006,  15:53 Найти цитируемый пост)
NightmareZ, при нажатии на кнопку - содержимое формы отправляется обработчику формы, соответсенно открывается новый файл(обработчик) записывающий данный в файл. После записи мне сразуже нужно открыть созданный файл в этом же окне  smile  

Если без перезагрузки страницы, то, например, вот можно заюзать ajax.
Я б написал так (сопру часть кода из соседнего поста smile http://forum.vingrad.ru/topic-120992.html ):
Код

var reqResultsId = new Array();
var req = new Array();

function onReadyStateChange()
{
    if (req.length > 0)
    {
        var i;
        for (i = 0; i < req.length; i++)
            if (req[i])
                if ((req[i].readyState == 4) && (req[i].status == 200))
                {
                    if (reqResultsId[i])
                    {
                        reqResultsId[i].innerHTML = req[i].responseText;
                        req[i] = false;
                        reqResultsId[i] = false;
                    }
                }
    }
}

function createReq()
{
    var newReq = false;

    try
    {
        newReq = new XMLHttpRequest();
    }
    catch(e)
    {
        try
        {
            newReq = new ActiveXObject('Msxml2.XMLHTTP');
        }
        catch(e1)
        {
            try
            {
                newReq = new ActiveXObject('Microsoft.XMLHTTP');
            }
            catch(e2)
            {
             newReq = false;
            }
        }
    }

    return newReq;
}

function FindAndDelActive(resultId)
{
    if (req.length > 0)
        for (i = 0; i < req.length; i++)
            if (reqResultsId[i] == resultId)
            {
                req[i].abort();
                req[i] = false;
                reqResultsId[i] = false;
            }
}

function newRequest(serv, data, resultId)
{
    var reqId = 0;

    FindAndDelActive();

    if (req.length > 0)
    {
        var i;
        for (i = 0; i < req.length; i++)
            if (req[i] === false)
            {
                reqId = i;
                break;
            }

        if (reqId == 0)
            reqId = req.length;
    }

    req[reqId] = createReq();

    if (req[reqId])
    {
        reqResultsId[reqId] = resultId;
        req[reqId].open('POST', serv, true);
        req[reqId].onreadystatechange = onReadyStateChange;
        req[reqId].setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=windows-1251");
        req[reqId].send(data);
    }
}

function SendMe()
{
  var resId = document.getElementById("mypage");
  resId.innerHTML = "Загрузка....";
  newRequest("myscript.php", "name=" + document.getElementById("name").value + "&textarea=" + document.getElementById("textarea").value, resId);
}

Это будет у нас менеджер запросов.
Далее, допустим, страничка будет выглядеть вот так:
Код

<div id="mypage">
<input type="text" id="name"><br>
<input type="text" id="textarea"><br>
<input type="button" onclick="SendMe();">
</div>


А в php код добавляем вот чего: 
Код

<?php
  if(empty($_POST['name']))
      {
        echo "<div style='color: red'>*Не указано имя файла</div><br>";
        include("create.html");
      }
  elseif(empty($_POST['textarea']))
      {
        echo "<div style='color: red'>*Содержимое файла отсутсвует</div><br>";
        include("create.html");
      }
  else
      {
        $fh=fopen($_POST['name'], "a");
        fwrite($fh, $_POST['textarea']);
        fclose($fh);

        $x = file('a.txt');
    foreach($x as $value)
        echo($value.'<br>');
      }
?>


Надеюсь, ошибок не наделал smile

Добавлено @ 16:15 
Если же забить, что страница перезагрузится, то просто допиши:
Код

$x = file('a.txt');
foreach($x as $value)
echo($value.'<br>');

 smile 

Автор: bondarenko_a 29.11.2006, 17:15
Может я как то не так поняла, но притакой постановке задачи, я бы обшлась одной строкой:
Код

header("Location: ".$_POST['name']);

если в обработчике ничего до этого не выводится, то должно сработать

Автор: NightmareZ 29.11.2006, 17:38
Цитата(bondarenko_a @  29.11.2006,  17:15 Найти цитируемый пост)
если в обработчике ничего до этого не выводится, то должно сработать

Объясни, plz.

Автор: bondarenko_a 29.11.2006, 18:01
NightmareZ, 

Если вопрос по поводу header() , то цитирую мануал:
Помните, что header() обязана вызываться до отправки любого вывода: нормальными ли тэгами HTML, пустыми строками в файле, или из PHP. Очень частой ошибкой является чтение кода функциями include() или require(), или другой функцией доступа к файлу, и наличие пробелов или пустых строк, которые выводятся до вызова header(). Та же проблема возникает при использовании единого PHP/HTML-файла.

Автор: griker 29.11.2006, 18:07
bondarenko_a, а для чего интересно нужен обработчик в котором ничего не обрабатывается smile 

NightmareZ, огромное вам спасибо +++ smile 

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