Page 1 sur 2

Object id #1

Posté : 04 juin 2006, 14:32
par Amistrad
Bonjour, je suis debutant en PHP et je me retrouve confronté a un probleme:

J'essaie de faire un appel a une function

par exemple :

Code : Tout sélectionner

<?php require ("session.php"); $chaine = formIndetification ("html.php", $email); echo 'retour de fonction : '.$chaine; ?>
ce n'est qu'un test en fait pour appeller mon objet formulaire

le probleme c'est que ca me renvoie :

-> Object id #1retour de fonction : <-

pourquoi??

sinon je tourne sur wamp, php5, POO, merci

Posté : 04 juin 2006, 15:03
par Hubert Roksor
Enlève l'"echo", tu verras sûrement "Object #1", ça veut dire que ta fonction affiche cette chaîne. Débogue la fonction en premier.

Posté : 04 juin 2006, 15:06
par rami
Parce que la fonction formIndetification() renvoit un objet.

Essaies cela, ca te donnera plus d'informations :
<?php
require ("session.php");

$chaine = formIndetification ("html.php", $email);
echo '<pre>retour de fonction : ';
var_dump($chaine);
echo '</pre>';

Posté : 04 juin 2006, 15:57
par Hubert Roksor
Non, d'après ce qu'a posté Amistrad c'est impossible. Si la fonction renvoyait un objet le résultat serait "retour de fonction : Object id #1", pas l'inverse.

Apparemment, quelque chose affiche "Object id #1" dans session.php ou dans la fonction elle-même.

Posté : 04 juin 2006, 16:06
par Amistrad
en fait je sais plus si un objet est forcement une class ou pas..

Sinon je ne connait pas les debogueurs mais je vois par exemple sur le tit livret "momento php sql" que j'ai acheter hier qu'ils proposent Advanced php debugger, Xdebug et php Debuger BDG... y'en a un qui est mieu que l'autre ou en francais et gratuit? je cherche de mon cote en meme temps

le code de session.php si ca peut aider:

Code : Tout sélectionner

<?php require_once ("form.class.php"); function formIndetification($nameScript, $emailDefault=""){ $form = new form ("POST", "$nameScript"); $form-> fieldText ("Your email", "email", "$emailDefault", 30, 60); $form-> fieldPassword ("Password", "password", "", 30); $form-> fieldValid ("Identification", "ident"); echo $form; } ?>

Posté : 04 juin 2006, 16:11
par Amistrad
Sinon rami, la commande que tu m'a donner renvoir:

Code : Tout sélectionner

Object id #1 retour de fonction : NULL
La class c'est le formulaire

Posté : 04 juin 2006, 16:34
par Hubert Roksor
En règle générale, en PHP quand on dit "déboguer" c'est plutôt "tout à la main" :lol: Les débogueurs comme XDebug sont vraiment cools et irremplaçables dans certaines situations, mais dans 99% des cas on règle ce genre de bugs avec de simples var_dump() ou print_r(). Il n'existe pas à ma connaissance de débogueur en français.

Quant à ta fonction, je vois qu'elle se termine par "echo $form", c'est ce qui produit ton "Object id #1". Si tu veux récupérer le résultat au lieu de l'afficher alors il te faut utiliser return.

En dernier, une classe devient un objet lorsqu'elle est instantiée (c'est à dire quand on utilise new), mais en pratique il est inutile de faire la distinction. Pour les cinq années à venir, considère qu'une classe c'est pareil qu'un objet. Si tu programmes encore en PHP d'ici là, tu auras saisi la différence subtile entre les deux ;)

Posté : 04 juin 2006, 17:24
par Amistrad
Ok c'est un peut plus clair deja :P

En revanche quand je tape var_dump ca me sort....:

Code : Tout sélectionner

retour de fonction : object(Form)#1 (10) { ["method:private"]=> string(4) "POST" ["action:private"]=> string(9) "html2.php" ["name:private"]=> NULL ["fileTransfert:private"]=> bool(false) ["orientation:private"]=> string(0) "" ["center:private"]=> bool(true) ["classCSS:private"]=> string(4) "Form" ["table:private"]=> NULL ["components:private"]=> array(3) { [0]=> array(3) { ["type"]=> string(5) "FIELD" ["libelle"]=> string(27) "Your email" ["field"]=> string(67) " " } [1]=> array(3) { ["type"]=> string(5) "FIELD" ["libelle"]=> string(25) "Password" ["field"]=> string(74) " " } [2]=> array(3) { ["type"]=> string(5) "FIELD" ["libelle"]=> string(18) " " ["field"]=> string(81) " " } } ["nbComponents:private"]=> int(3) }
(je ne sais pas si ca va s'afficher sur le forum mais il y a deux champs affichés aussi)


...ce qui, si j'ai bien compris est normal, mais le echo ne fonctionne pas et me renvoi tjrs objet :(

J'ai un peut de mal a comprendre ce qui ne va pas, a moin que cela puisse provenir de ma class form?[/code]

Posté : 04 juin 2006, 17:31
par Hubert Roksor
le echo ne fonctionne pas et me renvoi tjrs objet
Attention, echo ne renvoie rien, il affiche des données. Et lorsqu'on essaie d'afficher un objet, PHP affiche "Object id #" suivi du numéro interne de l'objet.

Si tu veux que ta fonction renvoie des données, il faut utiliser return.

Posté : 04 juin 2006, 17:55
par Amistrad
d'accord je fais mieu la distinction entre return et echo.

je vais finir ma class form alors car je crois qu'il doit manquer des elements.

Le probleme c'est que j'ai recopier le code dans un bouquin (impossible de faire ca tout seul a mon niveau :p) mais j'ai virer tout les tableaux car eux ont fait ca en appellant une class table.

Hors moi je procede avec des div.

c'est la que ca doit merder, j'ai pas encore remplacer.

Posté : 06 juin 2006, 14:53
par Amistrad
Salut, on est bien d'accord que la class Exception est prédefinier et que par consequent il ne faut pas que je cree une class???

parce que quand je tape ce code
	        //Connect server
		if (!$this->connection = @mysql_pconnect ($server, $login, $password))
			throw new Exeption ("Error of connection to the server.");
bah ca me renvoi
Fatal error: Class 'exeption' not found in C:\wamp\www\mysql.class.php on line 15
je comprend pas...[/code]

Posté : 06 juin 2006, 14:58
par zeus
Parce que c'est Exception et non pas Exeption :roll: ;)

Posté : 06 juin 2006, 15:02
par Amistrad
arf :?

Sur 3 c'etait le seul qui avait pas de C... bah je l'avait point vu :wink:

Posté : 06 juin 2006, 15:07
par zeus
ça arrive ;)

Est-ce que ton problème est [RESOLU] ?

Posté : 06 juin 2006, 15:27
par amistrad
bah non pas vraiment en fait

Code : Tout sélectionner

Warning: Missing argument 1 for MySQL::MySQL(), called in C:\wamp\www\html.php on line 4 and defined in C:\wamp\www\mysql.class.php on line 9 Warning: Missing argument 2 for MySQL::MySQL(), called in C:\wamp\www\html.php on line 4 and defined in C:\wamp\www\mysql.class.php on line 9 Warning: Missing argument 3 for MySQL::MySQL(), called in C:\wamp\www\html.php on line 4 and defined in C:\wamp\www\mysql.class.php on line 9 Warning: Missing argument 4 for MySQL::MySQL(), called in C:\wamp\www\html.php on line 4 and defined in C:\wamp\www\mysql.class.php on line 9 Fatal error: Uncaught exception 'Exception' with message 'Error of connection to the server.' in C:\wamp\www\mysql.class.php:15 Stack trace: #0 C:\wamp\www\html.php(4): MySQL->MySQL() #1 {main} thrown in C:\wamp\www\mysql.class.php on line 15
je triffouille dans le code mais si a tout hasard vous avez un info qui me dit pq il repete 4 fois l'erreur par exemple ou où il faut chercher :D