Bir Eksik Nesnesi ile PHP Session

4 Cevap php

Ben biraz yardım alabilir eğer öyleyse ben merak düzeltmek için nasıl bilmiyorum bir hata alıyorum.

Bu hata

Fatal error: process_form() [<a href='function.process-form'>function.process-form</a>]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition &quot;Template&quot; of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in /home/twinmeddev/html/template_add.php on line 44

Ben process_form () fonksiyonu bu hatayı alıyorum. Peki ben bu çıkmak onun düşünme ben şablon için sınıf yük yoktu, yani. Hangi aslında ben en üstünde yaptım. 'Inc / item.class.php' arasında; Ben işlevi yeniden dahil etmek var mı?

Burada hata ile belirli bir sayfa için kod. Sen bunu olması gerektiği gibi her şey dahil olması görebilirsiniz. Nerede yanlış yaptık?

<?php
include 'inc/prep.php';
include 'inc/header.class.php';
include 'inc/item.class.php';
include 'inc/template.class.php';
include 'inc/formhelper.class.php';
include 'inc/formvalidator.class.php';
include_once( 'inc/config/config.php' ) ;
include_once( 'inc/DBE.class.php' ) ;
include_once( 'inc/GenFuncs.php' ) ;
include_once( 'inc/Search.class.php' ) ;

session_start();	

//Verify that user is logged in.
VerifyLogin($_SERVER['PHP_SELF'] . "?" . $_SERVER['QUERY_STRING']);

if(array_key_exists('_submit',$_POST)) {
	if($fv_errors = validate_form()) {
		show_form($fv_errors);
	} else {
		process_form();
	}
}
else {
	// The form wasn't submitted or preview was selected, so display
	show_form();
}

function validate_form(){
}

function process_form(){
	global $mysqli;

	echo var_dump($_SESSION);

	$Template = $_SESSION['template'];
	$Template->name = $_POST['name'];
	$Template->descript = $_POST['descript'];
	$Template->user = $_SESSION['User'];
	$Template->customer = $_SESSION['CustID'];
	$Template->status = $_POST['status'];
	$Template->insert();

	//header("Location: template.php");
}

4 Cevap

Bu şablon sınıfı serialize / unserialize eksik.

Bir working example ben senin başka bir soru üzerine verdiği için buraya bir göz atın.

Örneğin, muhtemelen bu istiyorum:

<?php
  $_SESSION['template'] = serialize($template);
?>

ve

<?php
  $template = unserialize($_SESSION['template']);
?>

Edit:

üst kısmına taşınmış hakkında yorum okuduktan bir ipucu verir.

The automatic serialization/unserialization occurs when you call session_start().
That means the order in which you include your files ve call the session_start() is very important.

Örneğin:

Bu yanlış olur:

<?php
session_start();
include 'inc/template.class.php';
?>

Bu doğru olurdu da:

<?php
include 'inc/template.class.php';
session_start();
?>

Şimdi, ben DOĞRU sırayla olduğunu sizin örnekte görmek, ama aynı zamanda diğer birçok template.class.php dahil etmeden önce içerir fark ettin

Would it be possible that one of those includes (perhaps prep.php or header.class.php) does call start_session() too?
If yes, that was your issue (session_start() being called before your template.class.php).

Eğer oturumda koyarak nesneler ne kadar büyük? Benim nesnelerin, php.ini dosyasında oturum için ayrılan vardı boşluk daha büyük iken ben bir kez benzer bir hata var. Nesne çok büyük olsaydı, o olmalıydı değil ne zaman boş olarak geri gelirdi.

Bundan sonra, ben sadece Oturumunda nesnenin PK depolanması ve yerine tüm nesnenin kendisi etrafında taşıma bunu gerekirse o kadar aramaya başladılar.

Ayrıca INI dosyasında oturum boyutunu artırmak ve bir fark yapar olmadığını görebiliyordu.

ben de oturum değişkeni nesneleri depolamak için çalıştı. ve evet ben MackDaddy gibi aynı sorunu yaşadı. ve birinci sınıf içerir hareket çözüldü.

bu yüzden ..

require_once("class.someclass.php");
require_once("display.php");

işlenmiş

fakat ...

require_once("display.php");
require_once("class.someclass.php");

hmm ... nedir rasyonel acaba? ve ne 2 veya daha fazla farklı nesneler varsa? Hangisi önce gelir?

Eğer php $ _SESSION dizi () session_start zaman gelen nesneler ile doldurulur. Bu, tüm arayüzleri (gerektiren) kullanılabilir olması gerektiği anlamına gelir. Zaten oturum arayüzleri üzerinde hiçbir görüş vardı başka bir komut (örneğin çerçeve) tarafından daha önce başlamış ise, $ _SESSION eksik olacak nesneleri ve oturumu zaten başlatılmış çünkü yine session_start işe yaramaz yok. Olası bir çözüm $ _SESSION doldurmak tekrar başlar yöntemi "session_write_close ()", daha sonra session_start () kullanmak için, ama interfacee görebilmelerini, böylece $ _SESSION nesne iyi olacak ..