PDA

View Full Version : منظور از این ارور



olampiad
شنبه 05 اردیبهشت 1394, 15:48 عصر
سلام و خسته نباشید
منظور از این ارور چیه؟
Notice: unserialize(): Error at offset 6 of 10 bytes in C:\xampp\htdocs\res\controllers\five.php on line 34
چ طوری میتونم این ارور رو رفع کنم.
خیلی ممنون

Vahid2016
شنبه 05 اردیبهشت 1394, 18:06 عصر
سلام و خسته نباشید
منظور از این ارور چیه؟
Notice: unserialize(): Error at offset 6 of 10 bytes in C:\xampp\htdocs\res\controllers\five.php on line 34
چ طوری میتونم این ارور رو رفع کنم.
خیلی ممنون



سلام ـ لطف نموده کد را هم قرار دهید

olampiad
شنبه 05 اردیبهشت 1394, 20:55 عصر
سلام


$sme=unserialize($_POST['sme']);
$tkj=unserialize($_POST['tkj']);
$tpsh=unserialize($_POST['tpsh']);


من آرایه هارو با serialis تبدیل کردم و داخل فیلد ها ریختم.
حالا میخوام داده هارو از فیلد ها دریافت کنم و به آرایه تبدیل کنم.
خیلی ممنون.

به این کد ی نگا بندازید.


echo $_POST['sme'];


این کد رو زدنی مقدار پایین رو میاره.
a:5:{i:0;a:3:{s:2:

خیلی ممنون

-سیّد-
شنبه 05 اردیبهشت 1394, 22:51 عصر
سلام
منظور از این پیغام خطا اینه که داده‌ای که به تابع unserialize دادید، درست serialize نشده و در نتیجه نمی‌تونه برش گردونه.


Notice: unserialize(): Error at offset 6 of 10 bytes in C:\xampp\htdocs\res\controllers\five.php on line 34

یعنی یه داده‌ی ۱۰ بایتی بهش دادید، موقعی که داشته unserialize می‌کرده، توی کاراکتر ۶ به مشکل برخورد کرده و نتونسته جلوتر بره.

حالا همین مثالی که زدید رو اگه بررسی کنیم:



a:5:{i:0;a:3:{s:2:

می‌بینیم که ناقص هست. اولش که گفته a:5 یعنی یه آرایه‌ی ۵ خونه‌ای داریم. بعدش یه آکولاد باز کرده که می‌بینیم در ادامه بسته نشده. همچنین کلاً یه خونه از این آرایه‌ی ۵ خونه‌ای بیشتر نیومده. نتیجه‌گیری اخلاقی: دیتاتون ناقص اومده سمت سرور.
مثلاً این دیتا کامل هست:

a:1:{i:0;s:2:"ab";}
اینطوری می‌تونید تستش کنید:

var_dump(unserialize('a:1:{i:0;s:2:"ab";}'));

olampiad
یک شنبه 06 اردیبهشت 1394, 00:22 صبح
من داده هام رو اینطوری تو فیلد میریزم.
آیا این االان مشکلی داری.


<input type="hidden" name="sme" value="a:5:{i:0;a:3:{s:2:"sd";s:2:"sd";s:3:"sad";s:3:"sad";s:3:"asd";s:3:"asd";}i:1;a:1:{s:3:"asd";s:3:"asd";}i:2;a:1:{s:3:"asd";s:3:"asd";}i:3;a:2:{s:3:"asd";s:3:"asd";s:3:"sad";s:3:"sad";}i:4;a:1:{s:3:"asd";s:3:"asd";}}">

olampiad
یک شنبه 06 اردیبهشت 1394, 01:42 صبح
سلام خسته نباشید
بزارید من کل کاری که انجام میدم رو توضیح بدم.
من دارم اطلاعات فیلد هارو به آرایه تبدیل میکنم و بعد میخوام این آرایه هارو توی چند تا صفحه جابه جا کنم.(یعنی دارم یه ثبت نام انجام میدم که دارای سه تا صفحه هستش: تو صفحه ی اول اطلاعات رو از کاربر مبگبرم و اونا رو به آرایه تبدیل میکنم)
حالا
این آرایه هارو با تابع serializ به کد تبدیل میکنم در داخل input قرار میدم تا در صفحه ی بعد اونا رو بگیرم.
به همبن ترتیب داده هارو در سه صفحه به هم پاس میدم تا در صفحه ی آخر تو دیتابیس ذخیرشون کنم.
ولی وقتی میام که از حالت serializ به unserializ تبدیل کنم ارور بالارو میده.
دقیقا نمدونم مشکل از کجاست.
شما به این تصویر یه نگا بندازید.
http://s6.picofile.com/file/8184862426/Capture.PNG
من به کدی که تابع serializ درست میکنه دست نمیزنم و مستقیم داخل input قرار میدم ولی نمدوونم چرا بازم ارور میده.
به نظرتون مشکل از کجاست؟
مرسی

اینم از کد های من



$sme=serialize(array($me,$semat,$shsh,$te,$tozih)) ;




$me=array();
$info =$_POST['me'];
if($info!=null){
foreach ($info as $k => $v) {
if(!empty($info[$k])){
$me[]=$info[$k];
}
}
}


$semat=array();
$info =$_POST['semat'];
if($info!=null){
foreach ($info as $k => $v) {
if(!empty($info[$k])){
$semat[]=$info[$k];
}
}
}


$shsh=array();
$info =$_POST['shsh'];
if($info!=null){
foreach ($info as $k => $v) {
if(!empty($info[$k])){
$shsh[]=$info[$k];
}
}
}


$te=array();
$info =$_POST['te'];
if($info!=null){
foreach ($info as $k => $v) {
if(!empty($info[$k])){
$te[]=$info[$k];
}
}
}

-سیّد-
یک شنبه 06 اردیبهشت 1394, 09:07 صبح
من داده هام رو اینطوری تو فیلد میریزم.
آیا این االان مشکلی داری.


<input type="hidden" name="sme" value="a:5:{i:0;a:3:{s:2:"sd";s:2:"sd";s:3:"sad";s:3:"sad";s:3:"asd";s:3:"asd";}i:1;a:1:{s:3:"asd";s:3:"asd";}i:2;a:1:{s:3:"asd";s:3:"asd";}i:3;a:2:{s:3:"asd";s:3:"asd";s:3:"sad";s:3:"sad";}i:4;a:1:{s:3:"asd";s:3:"asd";}}">
اولین مشکل اینجا دیده می‌شه. توی داده‌ی شما، علامت کوتیشن هست که باعث می‌شه توی value مشکل پیش بیاد. شما باید اون کوتیشن‌ها رو موقع گذاشتن توی صفحه escape کنید (مثلاً با htmlentities).


سلام خسته نباشید
بزارید من کل کاری که انجام میدم رو توضیح بدم.
من دارم اطلاعات فیلد هارو به آرایه تبدیل میکنم و بعد میخوام این آرایه هارو توی چند تا صفحه جابه جا کنم.(یعنی دارم یه ثبت نام انجام میدم که دارای سه تا صفحه هستش: تو صفحه ی اول اطلاعات رو از کاربر مبگبرم و اونا رو به آرایه تبدیل میکنم)
حالا
این آرایه هارو با تابع serializ به کد تبدیل میکنم در داخل input قرار میدم تا در صفحه ی بعد اونا رو بگیرم.
به همبن ترتیب داده هارو در سه صفحه به هم پاس میدم تا در صفحه ی آخر تو دیتابیس ذخیرشون کنم.
ولی وقتی میام که از حالت serializ به unserializ تبدیل کنم ارور بالارو میده.
دقیقا نمدونم مشکل از کجاست.
شما به این تصویر یه نگا بندازید.
http://s6.picofile.com/file/8184862426/Capture.PNG
من به کدی که تابع serializ درست میکنه دست نمیزنم و مستقیم داخل input قرار میدم ولی نمدوونم چرا بازم ارور میده.
به نظرتون مشکل از کجاست؟
مرسی
[/PHP]
خوب اشکال ماجرا رو که گفتم چیه.
فقط می‌مونه این که روشی که انتخاب کردید خیلی جالب نیست. بهتر اینه که اطلاعات هر مرحله رو توی session ذخیره کنید و در مرحله‌ی بعد از session بازیابی کنید.
این کاری که الان می‌کنید چند تا اشکال داره. اولیش اینه که داده رو دارید می‌دید دست client. هم این که دارید بار پردازشی رو به طرز نامردانه‌ای (!) بر دوش client می‌ذارید! هم این که ممکنه دیتایی که نباید بره دست client، بره و امنیت دچار مشکل بشه (اینجا ۲ تا مسئله هست: یکی این که شما دارید کل دیتا رو می‌دید به client که ممکنه توش دیتای مهمی باشه، دوم این که توی مرحله‌ی بعد کل دیتا رو از client تحویل می‌گیرید که خیلی راحت می‌تونه دستکاریش کنه و به شما تحویل بده).
مشکل دوم همین مسائلی هست که باهاش درگیر شدید. شما اگه از session استفاده کنید اصلاً درگیر این مسائل نمی‌شید.

olampiad
یک شنبه 06 اردیبهشت 1394, 09:09 صبح
خیلی ممنون
عالی بود
مرسی

olampiad
یک شنبه 06 اردیبهشت 1394, 09:15 صبح
فقط ی مشکلی که اینجا پیش میاد
زمان سوختن سشن خیلی پایینه.
مثلا اگه کاربر بخواد با حوصله فیلد های منو پر کنه شاید هر صفحه 16 دقیقه طول بکشه در این صورت اطلاعات موجود در سشن از بین میره.(تا اونجایی که میدونم سشن از هر ده دقیقه که تو سرور مطهرک نباشی از کار می افته).
برای رفع این مشکل چیکار کنم.
آیا کوکی رو پیشنهاد میکنید.
مرسی

MMSHFE
یک شنبه 06 اردیبهشت 1394, 09:53 صبح
میتونید با کمک دستور session_set_cookie_params طول عمر کوکی مربوط به سشن رو افزایش بدین. یک راه دیگه هم اینه که اطلاعاتی که میخواین توی فیلدها بگذارین رو با base64_encode کد گذاری کنید و موقع خوندن هم دوباره از این وضعیت در بیارین. مثال:

echo '<input name="semat" value="' . base64_encode(serialize($_POST['semat'])) . '" />';
$semat = unserialize(base64_decode($_POST['semat']));

-سیّد-
یک شنبه 06 اردیبهشت 1394, 10:07 صبح
فقط ی مشکلی که اینجا پیش میاد
زمان سوختن سشن خیلی پایینه.
مثلا اگه کاربر بخواد با حوصله فیلد های منو پر کنه شاید هر صفحه 16 دقیقه طول بکشه در این صورت اطلاعات موجود در سشن از بین میره.(تا اونجایی که میدونم سشن از هر ده دقیقه که تو سرور مطهرک نباشی از کار می افته).
برای رفع این مشکل چیکار کنم.
آیا کوکی رو پیشنهاد میکنید.
مرسی
اولاً که کوکی برای رد و بدل کردن اطلاعات کوچیک هست، نه فیلدهای یه فرم. از session هم که استفاده می‌کنید، به طور معمول id مربوط به session کاربر از طریق کوکی رد و بدل می‌شه. بنابراین کار جالبی نیست که بخواین از کوکی برای ذخیره کردن این اطلاعات استفاده کنید.
اما در مورد session timeout:
مقدار session timeout قابل تنظیمه. توی php.ini مقدار session.gc_maxlifetime رو تنظیم کنید (یا با استفاده از ini_set).
اینها رو هم ببینید:
http://stackoverflow.com/questions/3476538/php-sessions-timing-out-too-quickly
http://stackoverflow.com/questions/8311320/how-to-change-the-session-timeout-in-php

j_naroogha@yahoo.com
یک شنبه 06 اردیبهشت 1394, 10:51 صبح
اگه داده هت قابلیت ذخیره سازی توی دیتابیس دارن میتونی موقتی توی دیتابیست ذخیره کنی......
بعد ازشون استفاده کنی و پاکشون کنی.
البته این روش باید سرعتش پایین باشه .
(صرفا یه راه حله دیگه:لبخندساده:)