8791 sujets

Développement web côté serveur, CMS

Pages :
Bonjour,

J'ai un problème avec la classe suivante:

class form {
	public $id;
	public $classe;
	public $action;
	public $type;
	public $error;
	
	function __construct($inst,$error){
		list($id,$class,$action,$type)=explode('°',$inst);
		$this->id=$id;
		$this->classe=$class;
		$this->action=$action;
		$this->type=$type;
		$this->error=$error;
	}
	function display(){
		self::__construct;
		$fCorps="<div id='".$this->id."' class='".$this->classe."'>";
			$fCorps.="<form method='post' action='".$this->action."'";
			if($this->type=='upload') $fCorps.=" enctype='multipart/form-data'";
			$fCorps.=">";
				$fCorps.="<h3 class='titre'>".$this->titre."</h3>";
				$fCorps.="<h5 class='error'>".$this->error."</h5>";
				$fCorps.="<p>".$this->corps."</p>";
			  if($this->type!='list') $fCorps.="\n\t<input type='image' name='Envoyer' title='Envoi de formulaire' src='send.png'/>";
			$fCorps.="</form>";
		$fCorps.="</div>";
		echo $fCorps;
	}
}


elle plante tout mon script, je ne vois pas où est l'erreur, je pense juste qu'elle est située sur l'utilisation de __construct :s

elle est appellée par cette fonction:

function getIn($error){
		$fId='access';
		$fClass='';
		$fAction="index.php?part=exh&root=access&branch=getIn";
		$fType='none';
		if(!$error) $error='';
		$fTitre='Connexion';
			$fCorps.="\n<label>Artiste <input type='text' maxlength=20 name='artName'/></label>";
			$fCorps.="\n<label>Code <input type='password' name='psw'/></label>";
		$inst=$fId.'°'.$fClass.'°'.$fAction.'°'.$fType;
		$form=new form($inst,$error);
		$form->display();
	}


cette dernière ne pose aucun problème

Quelqu'un aurait-il une idée?

Cordialement,

Smoke
Modifié par Smoke (09 May 2009 - 18:13)
Salut,

euh... à quoi peut bien servir self::__construct; ? Le constructeur est appelé automatiquement lorsque tu fais new form(...)
Salut toi : o) toujours la forme? Smiley lol

J'l'ai mis suite à une visite sur un topic d'un autre forum qui m'a un peu embrouillé^^ ça devait m'assurer que ça appelle bien __construct, et au final ça n'a rien changé -_-'
Smoke a écrit :
Version de PHP : 4.4.8 / 5.2.5
Ben faudrait savoir ! Smiley langue

Le plus simple serait de transformer
function __construct($inst,$error){
en
function form($inst,$error){

Modifié par Heyoan (09 May 2009 - 16:19)
j'ai tenté, ça ne fonctionne pas :s

mon interface est supposée être en php 5 mais en utilisant phpversion on me retourne 4.4.8, ce qui à mon avis explique mes nombreux échecs avec construct -_-

J'ai tenté de la passer vraiment en php5, mais il parait que ça peut prendre quelques temps, donc j'attends :s Smiley decu
Comment est-ce que tu fais l'appel ?

Pour mon test j'ai simplement mis : getIn('test erreur');

Et sinon tu as quoi comme message d'erreur ?
Mon appel passe par une détection de variables et de constantes^^ il fonctionne bien^^

la variable $error permet, lors d'un envoi de formulaire incomplet, de retrouver les champs incomplets et de les préciser, en réaffichant le formulaire^^

Je n'ai donc aucun message d'erreur de php, même venant de error_reporting :s
Euh mais alors (impression de déjà vu) qu'est-ce qui ne fonctionne pas précisément ?

PS : faudra-t-il à chaque fois te tirer les vers du nez ou vas-tu te décider à donner dès le début toutes les infos ? Smiley biggol
MDR! Smiley lol je fais de mon mieux crois moi^^ :o)

Ce qui ne fonctionne pas, c'est l'appel à la classe form que je fais dans la fonction getIn. Ca devrait me renvoyer un formulaire, et ça me renvoi que dalle, ça me coupe mon script tout net, mon code source s'arrête avant^^ De quoi as tu besoin d'autre comme infos? Smiley smile
Smoke a écrit :
Ce qui ne fonctionne pas, c'est l'appel à la classe form que je fais dans la fonction getIn. Ca devrait me renvoyer un formulaire, et ça me renvoi que dalle, ça me coupe mon script tout net
Eh bien je ne vois plus que le debug...

Par exemple :
	function form($inst,$error){
		list($id,$class,$action,$type)=explode('°',$inst);
		$this->id=$id;
		echo "<p>id = : $id</p>\n";
		$this->classe=$class;
		echo "<p>class = : $class</p>\n";
		$this->action=$action;
		echo "<p>action = : $action</p>\n";
		$this->type=$type;
		echo "<p>type = : $type</p>\n";
		$this->error=$error;
		echo "<p>error = : $error</p>\n";
	}
Et continuer jusqu'à trouver à quel moment ça plante...
j'ai fait copier-coller, toujours rien

j'ai essayé aussi en mettant tout le contenu de la classe form en commentaire, j'ai ajouté une fonction call, qui affiche une chaîne; et j'ai changé l'appel à la classe pour récupérer la valeur de call, ça ne m'affiche toujours rien. Je pencherais pour une erreur php genre un ' oublié, mais je doute grave :s
Quand tu dis
Smoke a écrit :
Mon appel passe par une détection de variables et de constantes^^ il fonctionne bien

As-tu vérifié ?

As-tu par exemple essayé de mettre un simple getIn('test erreur'); ?
bon okay, j'étais en train de tester quand tu as envoyé ton message^^

voilà ce que j'ai :

if( $perso and in_array(ROOT,$personnal) ){//envoi le menu perso
				include_once('profile.php');
				profile::menu();
			}elseif( !$perso and ROOT=='access' and BRANCH=='getIn' and !$_POST ){
				include_once('access.php');
				getin::getIn();//plante là
				echo " fonction called";
			}else


j'ai juste mis un extrait.
Dans mes tests, j'ai mis des echo avant et après l'include, il fonctionne, mais dès l'appel à la fonction il plante.
J'ai remplacé tout mon fichier par ça:

<?php


class getin {
	
	function getIn($error){
		echo "robert";
		die();
		
	}
}

?>


et ça plante toujours :s. C'est à n'y rien comprendre :s
as tu testé :

class form {
	public $id;
	public $classe;
	public $action;
	public $type;
	public $error;

	function __construct($inst,$error){
               echo $inst.', '.$error;
	}
}

class getin {
	function getIn($error=''){
		echo "robert";
	}
}


et comme ça ?
Modifié par Nours312 (09 May 2009 - 17:58)
okay j'ai trouvé (petit suspens...)


j'ai changé le nom de la fonction, et ça a marché. Pourquoi?











[nouveau petit suspens]

Parce que la classe s'appellait getin et la fonction getIn, donc ma théorie, c'est que ces noms sont insensibles à la casse.

Ce qui est une explication assez bizarre, parce que ça ne m'avait pas fait le coup avant. Avec mon autre méthode, qui ne faisait pas de class form en POO à proprement parler, ça fonctionnait sans problème, getin et getIn n'étaient pas considérés comme équivalents. Je ne m'explique pas cet étrange changement :s, en tous cas ça a l'air de marcher maintenant, merci à vous deux d'avoir eu la patience de chercher avec moi une solution^^ Smiley smile et bon week end Smiley smile
Pages :