|
|
|
| Два фрейма. В одном html форма. В другом аякс обращающийся к файлу data.xml.
В форме вводится фраза (name='text') после отправки в обработчик add.php фраза возвращается в переменную $text. Эту переменную я стараюсь запихать в файл data.txt следующим образом:
<?php
$text=$_POST['text'];
$login=$_POST['login'];
$file=fopen('datal.xml','w');
$ff=fwrite($dfile,'<?xml version="1.0" encoding="windows-1251"?><root><data>'.$text.'</data></root>');
header("Location:send.php?login=".$login.);
?>
|
Если файла data.xml не существует, то он нормально создается и $text туда вносится.
Если файл существует, то возникает проблема - файл не может быть открыт и перезаписан. Понятно почему так происходит, потомучто к нему обращается аякс во втором фрейме.
Скажите, как всётаки его перезаписать? Если это невозможно, то какие есть обходные пути? | |
|
|
|
|
|
|
|
для: Rembrant
(08.05.2007 в 23:27)
| | ты открываешь файл и заносишь дескриптор $file, а пишешь в $dfile + не надо присваивать чему то функцию fwrite, она ниче не возвращает | |
|
|
|
|
|
|
|
для: bronenos
(08.05.2007 в 23:40)
| | dfile - это описка | |
|
|
|
|
|
|
|
для: Rembrant
(08.05.2007 в 23:42)
| | так data.txt или data.xml | |
|
|
|
|
|
|
|
для: bronenos
(08.05.2007 в 23:44)
| | data.xml | |
|
|
|
|
|
|
|
для: Rembrant
(08.05.2007 в 23:46)
| | если написать например data2.xml то создает, при повторной отправке фразы опять перестает записывать | |
|
|
|
|
|
|
|
для: Rembrant
(08.05.2007 в 23:48)
| | Ниужели никто при написании чата на аякс с таким не сталкивался????? | |
|
|
|
|
|
|
|
для: Rembrant
(08.05.2007 в 23:42)
| |
<?php
$text=$_POST['text'];
$login=$_POST['login'];
$file=fopen('data.xml','w');
fwrite($file,'<?xml version="1.0" encoding="windows-1251"?><root><data>'.$text.'</data></root>');
header("Location:send.php?login=".$login.);
?>
|
переписал вот так, не работает | |
|
|
|
|
|
|
|
для: Rembrant
(08.05.2007 в 23:44)
| | У вас лишняя точка в функции header(), после переменной $login. В результате, скрипт обрабатывающий аякс запрос выдает ошибку и файл не записывается.
<?
header("Location:send.php?login=".$login);
?>
|
| |
|
|
|
|
|
|
|
для: Rembrant
(08.05.2007 в 23:44)
| | скажи-ка... что должен делать этот скрипт?
записывать в виде xml одно единственное сообщение? | |
|
|
|
|
|
|
|
для: bronenos
(08.05.2007 в 23:40)
| | >не надо присваивать чему то функцию fwrite, она ниче не возвращает
Вообще-то, возвращает.
fwrite() возвращает количество записанных байтов или FALSE в случае ошибки.
|
http://www.php.net/manual/ru/function.fwrite.php | |
|
|
|
|
|
|
|
для: Drago
(09.05.2007 в 01:14)
| | ну я имел в виду в данном контексте к данной задаче: ничего полезного | |
|
|
|
|
|
|
|
для: bronenos
(09.05.2007 в 03:11)
| | Ну почему же? Можно поставить проверку. Если функция fwite возвращает false, то вывести на экран сообщение об ошибке записи в файл.
Хотя, конечно, понятие полезности, несколько относительное. :) | |
|
|
|
|
|
|
|
для: Drago
(09.05.2007 в 12:48)
| | to bronenos! Да. Этот скрипт зарисывает в xml файл одно сообщение. Я в конце написал еще fclose и стал записывать. А вот аякс не хочет читать эти сообщения, кроме самого превого. | |
|
|
|
|
|
|
|
для: Rembrant
(09.05.2007 в 13:16)
| | Если нужно, то могу скинуть исходники. | |
|
|
|
|
|
|
|
для: Rembrant
(09.05.2007 в 13:23)
| | зачем тебе этот XML нужен?
в асю кинь исходные | |
|
|
|
|
|
|
|
для: bronenos
(09.05.2007 в 13:32)
| | Войди в асе в сеть. У меня 719 контактов. Если ты невидим то мне тебя час придется искать =) | |
|
|
|
|
|
|
|
для: Rembrant
(09.05.2007 в 13:47)
| | Нижний фрейм send.php
<HTML>
<HEAD>
</HEAD>
<BODY>
<FORM NAME="sendform" action="add.php" method="post">
<?
error_reporting(0);
$login=$_GET['login'];
?>
<INPUT TYPE="hidden" VALUE="<? echo $login;?>" NAME="login">
<INPUT TYPE="text" NAME="who">
<INPUT TYPE="text" NAME="text">
<TD WIDTH="15%"><INPUT TYPE="submit" VALUE="Сказать">
</FORM>
<FORM ACTION="del.php" METHOD="get" NAME="closeform" TARGET="_parent">
<TD WIDTH="20%">
<INPUT TYPE="hidden" NAME="login" VALUE="<? echo $login;?>">
<INPUT TYPE="submit" VALUE="Выход">
</FORM>
</BODY>
</HTML>
|
Обработчик сообщений add.php:
<?php
$text=$_POST['text'];
$who=$_POST['who'];
$login=$_POST['login'];
$file=fopen('chat.txt','r');
fwrite($file,"\n <B>".$login." => ".$who."</B> : ".$text."<small> (".date("H:i:s").") </small>");//пишу лог
fclose($file);
$myfile=fopen('data.xml','w');
fwrite($myfile,'<?xml version="1.0" encoding="windows-1251"?><root><data>'.$text.'</data></root>');//сообщение
fclose($dfile);
header("Location:send.php?login=".$login."&who=".$who."&text=".$text);
?>
|
Фрейм сообщений text.php:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<script type="text/javascript">
function ajaxRead(file){
var xmlObj = null;
if(window.XMLHttpRequest){
xmlObj = new XMLHttpRequest();
} else if(window.ActiveXObject){
xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
} else {
return;
}
xmlObj.onreadystatechange = function(){
if(xmlObj.readyState == 4){
updateObj('xmlObj', xmlObj.responseXML.getElementsByTagName('data')[0].firstChild.data);
}
}
xmlObj.open ('GET', file, true);
xmlObj.send ('');
}
function updateObj(obj, data){
document.getElementById(obj).firstChild.data = data;
}
</script>
</head>
<body>
<h1>мой чат</h1>
<p>Здесь ссылкой определяю изменился ли файл data.xml</p>
<p id="xmlObj">
Это данные по умолчанию. <a href='data.xml' title="Обзор данных XML файла." onclick="ajaxRead('data.xml');
this.style.display='none'; return false">Обзор введенного сообщения в xml файл</a>
</p>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: Rembrant
(09.05.2007 в 14:18)
| | 1. не очень хорошо передавать ник через GET
2. посоветовал бы применять htmlspecialchars()
3. чтоб записать сообщение открывай файл в режиме a, а не r
4. закрываеш $dfile, которого не открывал | |
|
|
|
|
|
|
|
для: bronenos
(09.05.2007 в 15:43)
| | да причина не в этом, жаль что в нете нет нигде сайта где бы можно было узнать всё об ajax и как он применяется в написании чатов | |
|
|
|
|
|
|
|
для: Rembrant
(09.05.2007 в 16:20)
| | я тебе свои дам участки | |
|
|
|
|
|
|
|
для: bronenos
(09.05.2007 в 16:50)
| | После избавления от xml:
send.php
<HTML>
<HEAD>
</HEAD>
<BODY>
<FORM NAME="sendform" action="add.php" method="post">
<?
error_reporting(0);
$login=$_GET['login'];
?>
<INPUT TYPE="hidden" VALUE="<? echo $login;?>" NAME="login">
<INPUT TYPE="text" NAME="who" STYLE="width:15%">
<INPUT TYPE="text" NAME="text" STYLE="width:75%" >
<INPUT TYPE="submit" VALUE="Сказать">
</FORM>
<FORM ACTION="del.php" METHOD="get" NAME="closeform" TARGET="_parent">
<INPUT TYPE="hidden" NAME="login" VALUE="<? echo $login;?>">
<INPUT TYPE="submit" VALUE="Выход">
</FORM>
</HTML>
|
add.php
<?php
$text=$_POST['text'];
$who=$_POST['who'];
$login=$_POST['login'];
$file=fopen('chat.txt','r');
fwrite($file,"\n <B>".$login." => ".$who."</B> : ".$text."<small> (".date("H:i:s").") </small>");
fclose($file);
header("Location:send.php?login=".$login."&who=".$who."&text=".$text);
?>
|
text.php
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<script type="text/javascript"><!--
function ajaxRead(file){
var Obj = null;
if(window.XMLHttpRequest){
Obj = new XMLHttpRequest();
} else if(window.ActiveXObject){
Obj = new ActiveXObject("Microsoft.XMLHTTP");
} else {
return;
}
Obj.onreadystatechange = function(){
if(Obj.readyState == 4){
updateObj('Obj', Obj.responseText);
}
}
Obj.open ('GET', file, true);
Obj.send ('');
}
function updateObj(object, data){
document.getElementById(object).firstChild.data = data;
setTimeout("ajaxRead('chat.txt')",1000);
}
</script>
</head>
<body onload="ajaxRead('chat.txt')">
<p id="Obj">
=
</p>
</body>
</html>
|
выводит только один раз после загрузки то что есть в файле | |
|
|
|
|
|
|
|
для: Blizard
(09.05.2007 в 20:29)
| | повторяю...
1. проводи текст через htmlspecialchars от некоторых хитрецов
2. chat.txt открывай через режим a (add), а не r (read)
насчет списка сейчас посмотрю | |
|
|
|
|
|
|
|
для: Blizard
(09.05.2007 в 20:29)
| | зачем трудности
document.getElementById(object).innerHTML = data;
еще в том файле поставь там где запрос шлеш в методе open вместо file - file+'?'+Math.random() | |
|
|
|
|
|
|
|
для: bronenos
(09.05.2007 в 20:45)
| | bronenos!!! Огромнейшее тебе СПАСИБО! Вывод сообщений без рефрэша сделан! | |
|
|
|