|
|
|
| есть код... если в textarea ввести 1 строчку, всё ок...
а если несколько - ошибка unserialize :(
подскажите, как исправить
<form id="posting" method="post">
<input name="Name" type="hidden" value="qwe">
<textarea name="post_text" rows=5 cols=50>Введите текст сообщения</textarea><br />
<input type="submit" value="Добавить">
</form>
<?php
if($_SERVER['REQUEST_METHOD']=='POST'){
$post_text = htmlspecialchars($_POST['post_text']);
$name=htmlspecialchars($_POST['Name']);
$array = array('name'=>$name,'post_text'=>$post_text);
$serial = serialize($array);
$file = fopen('file.dat','w');
fputs($file,$serial);
fclose($file);
$file = fopen('file.dat','r');
$unserial = '';
while (!feof($file)){
$unserial .= trim(fgetss($file));
}
//$unserial = fgetss($file);
fclose($file);
$data = unserialize($unserial);
}
?>
|
| |
|
|
|
|
|
|
|
для: MIchail1982
(15.02.2009 в 20:56)
| | почему fgetss а не fgets ? | |
|
|
|
|
|
|
|
для: Trianon
(15.02.2009 в 21:03)
| | ошибся, исправил в коде - то-же самое :( | |
|
|
|
|
|
|
|
для: MIchail1982
(15.02.2009 в 21:09)
| | trim() тоже уберите -- не нужно. | |
|
|
|
|
|
|
|
для: BinLaden
(15.02.2009 в 21:53)
| | нет, не вышло...
проблема насколько я понял в неправильной записи в файл..
a:2:{s:4:"name";s:3:"qwe";s:9:"post_text";s:48:"Введите текст сообщения
Введите текст сообщения";}
|
| |
|
|
|
|
|
|
|
для: MIchail1982
(15.02.2009 в 22:01)
| | проще написать
$unserial = file_get_contents('file.dat');
|
serial превращает массив в строку байт, но никто не обещал, что это будет одна строка печатных символов.
Если хочется такого эффекта, придется смириться с некоторыми накладными расходами.
Например, завернуть строку в base64 | |
|
|
|
|
|
|
|
для: MIchail1982
(15.02.2009 в 22:01)
| | Вот Ваш, исправленный в соответствии с найденными мною и Trianon ошибками, код:
<form id="posting" method="post">
<input name="Name" type="hidden" value="qwe">
<textarea name="post_text" rows=5 cols=50>Введите текст сообщения</textarea><br />
<input type="submit" value="Добавить">
</form>
<?php
if($_SERVER['REQUEST_METHOD']=='POST'){
$post_text = htmlspecialchars($_POST['post_text']);
$name=htmlspecialchars($_POST['Name']);
$array = array('name'=>$name,'post_text'=>$post_text);
$serial = serialize($array);
$file = fopen('file.dat','w');
fputs($file,$serial);
fclose($file);
$file = fopen('file.dat','r');
$unserial = '';
while (!feof($file)){
$unserial .= fgets($file); # Исправлено только тут
}
//$unserial = fgetss($file);
fclose($file);
$data = unserialize($unserial);
}
?>
|
У меня прекрасно работает. | |
|
|
|
|
|
|
|
для: BinLaden
(15.02.2009 в 22:29)
| | возникает ошибка уровня нотайс
Notice: unserialize() [function.unserialize]: Error at offset 5 of 82 bytes in ,,,
и print_r($data); не выдаёт ничего | |
|
|
|
|
|
|
|
для: MIchail1982
(15.02.2009 в 22:40)
| | Сделайте следующее:
1. Добейтесь ошибочного результата вроде того, что Вы получили сейчас
2. Выполните код:
<?php
echo bin2hex(file_get_contents('file.dat'));
?>
|
3. Покажите его тут. | |
|
|
|
|
|
|
|
для: BinLaden
(15.02.2009 в 22:49)
| | 613a323a7b733a343a5c226e616d655c223 b733a333a5c227177655c223b733a393a5c 22706f73745f746578745c223b733a34383 a5c22c2e2e5e4e8f2e520f2e5eaf1f220f1 eeeee1f9e5ede8ff0d0ac2e2e5e4e8f2e52 0f2e5eaf1f220f1eeeee1f9e5ede8ff5c22 3b7d | |
|
|
|
|
|
|
|
для: MIchail1982
(15.02.2009 в 23:08)
| | Вам следует отключить режим magic_quotes, включая magic_quotes_runtime. Я думаю, проблема как раз с последним.
P.S. Отредактируйте, пожалуйста, своё сообщение, убрав тег [code] из сообщения.
P.P.S. И как это у Вас с одной строкой-то работало -- загадка... | |
|
|
|
|
|
|
|
для: BinLaden
(15.02.2009 в 23:16)
| | спасибо, попробую.. завтра :)
PS к сожалению не могу отредактировать..на сообщение был ответ.. :( | |
|
|
|
|
|
|
|
для: MIchail1982
(15.02.2009 в 23:31)
| | > к сожалению не могу отредактировать..на сообщение был ответ.. :(
Я Вам дал ссылку на редактирование. | |
|
|
|