Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: проблемы с текстом из textarea
 
 автор: MIchail1982   (15.02.2009 в 20:56)   письмо автору
 
 

есть код... если в 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);
}
?>

  Ответить  
 
 автор: Trianon   (15.02.2009 в 21:03)   письмо автору
 
   для: MIchail1982   (15.02.2009 в 20:56)
 

почему fgetss а не fgets ?

  Ответить  
 
 автор: MIchail1982   (15.02.2009 в 21:09)   письмо автору
 
   для: Trianon   (15.02.2009 в 21:03)
 

ошибся, исправил в коде - то-же самое :(

  Ответить  
 
 автор: BinLaden   (15.02.2009 в 21:53)   письмо автору
 
   для: MIchail1982   (15.02.2009 в 21:09)
 

trim() тоже уберите -- не нужно.

  Ответить  
 
 автор: MIchail1982   (15.02.2009 в 22:01)   письмо автору
 
   для: BinLaden   (15.02.2009 в 21:53)
 

нет, не вышло...
проблема насколько я понял в неправильной записи в файл..
a:2:{s:4:"name";s:3:"qwe";s:9:"post_text";s:48:"Введите текст сообщения
Введите текст сообщения";}

  Ответить  
 
 автор: Trianon   (15.02.2009 в 22:26)   письмо автору
 
   для: MIchail1982   (15.02.2009 в 22:01)
 

проще написать
$unserial = file_get_contents('file.dat');


serial превращает массив в строку байт, но никто не обещал, что это будет одна строка печатных символов.
Если хочется такого эффекта, придется смириться с некоторыми накладными расходами.
Например, завернуть строку в base64

  Ответить  
 
 автор: BinLaden   (15.02.2009 в 22:29)   письмо автору
 
   для: 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); 

?>

У меня прекрасно работает.

  Ответить  
 
 автор: MIchail1982   (15.02.2009 в 22:40)   письмо автору
 
   для: BinLaden   (15.02.2009 в 22:29)
 

возникает ошибка уровня нотайс
Notice: unserialize() [function.unserialize]: Error at offset 5 of 82 bytes in ,,,
и print_r($data); не выдаёт ничего

  Ответить  
 
 автор: BinLaden   (15.02.2009 в 22:49)   письмо автору
 
   для: MIchail1982   (15.02.2009 в 22:40)
 

Сделайте следующее:

1. Добейтесь ошибочного результата вроде того, что Вы получили сейчас
2. Выполните код:
<?php
echo bin2hex(file_get_contents('file.dat'));
?>

3. Покажите его тут.

  Ответить  
 
 автор: MIchail1982   (15.02.2009 в 23:08)   письмо автору
 
   для: BinLaden   (15.02.2009 в 22:49)
 

613a323a7b733a343a5c226e616d655c223 b733a333a5c227177655c223b733a393a5c 22706f73745f746578745c223b733a34383 a5c22c2e2e5e4e8f2e520f2e5eaf1f220f1 eeeee1f9e5ede8ff0d0ac2e2e5e4e8f2e52 0f2e5eaf1f220f1eeeee1f9e5ede8ff5c22 3b7d

  Ответить  
 
 автор: BinLaden   (15.02.2009 в 23:16)   письмо автору
 
   для: MIchail1982   (15.02.2009 в 23:08)
 

Вам следует отключить режим magic_quotes, включая magic_quotes_runtime. Я думаю, проблема как раз с последним.

P.S. Отредактируйте, пожалуйста, своё сообщение, убрав тег [code] из сообщения.
P.P.S. И как это у Вас с одной строкой-то работало -- загадка...

  Ответить  
 
 автор: MIchail1982   (15.02.2009 в 23:31)   письмо автору
 
   для: BinLaden   (15.02.2009 в 23:16)
 

спасибо, попробую.. завтра :)
PS к сожалению не могу отредактировать..на сообщение был ответ.. :(

  Ответить  
 
 автор: BinLaden   (15.02.2009 в 23:38)   письмо автору
 
   для: MIchail1982   (15.02.2009 в 23:31)
 

> к сожалению не могу отредактировать..на сообщение был ответ.. :(

Я Вам дал ссылку на редактирование.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования