Une classe qui ne voudrait pas s'initialiser

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Une classe qui ne voudrait pas s'initialiser

par Cyrano » 10 sept. 2005, 17:30

A classer en Résolu
C'est fait, mais si tu t'inscris au forum, d'une part ça coute pas un rond, ensuite tu pourras le faire toi-même et enfin tu seras averti par courriel de toutes les réponses postées dans les sujets où tu participes sans devoir les surveiller toi-même ;)

par Ferdi » 10 sept. 2005, 17:27

Super ça marche
Bon j'ai réussi un premier truc en php.
Mais bon j'ai pas encore fini: j'ai pas réglé les problèmes de cookies,
et je sens que je vais devoir batailler uncore un peu avec ma bdd
Mais bon merci pour tout
ciao

A classer en Résolu

par Cyrano » 10 sept. 2005, 16:42

Mouais, j'avais soulevé le problème un peu plus tôt: j'ai peur que tu doives dédoubler tes classes dans deux répertoires distincts et avoir une version PHP4 et l'autre PHP5 : il faudra donc modifier le header.php en conséquence. Mais ça veut dire que la copie que tu mettra en PHP4 devra être un peu modifiée : tu devras remplacer private par var

par Ferdi » 10 sept. 2005, 15:58

Je te remercie Cyrano pour toute l'attention que tu me portes.
J'ai compris le principe et ai fait comme tu m'as dit.
conclusion: ça avance!! En effet, le nouveau problème que j'ai est autre:
la portée private de mes variables dans inscription.php pose problème:
j'ai cette erreur:
Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /home/drivingman/domains/drivingmanagement.yi.org/public_html/classes/Inscription.php on line 4
J'ai essayé de les mettre en global, mais j'ai le même type d'erreur.
Sais tu d'où le problème pourrait venir?
Merci d'avance

par Cyrano » 10 sept. 2005, 15:41

Bon, on va simplifier: modifie ton fichier header.php comme ceci:
<?php
/* On vérifie quelle version de PHP est installée */
if(substr(phpversion(),0,1) == 5)
{
    /* PHP5 est la version utilisée, on utilise autoload */
    function __autoload($classe)
    {
        include_once("./classes/". $classe .".php");
    }
}
else
{
    /* PHP4 ou inférieur est utilisé, on fait des inclusions de fichier classiques */
    include_once('./classes/Inscription.php');
    include_once('./classes/MySql.php');
    include_once('./classes/IBaseDeDonnees.php');
    include_once('./classes/configBdd.php');
}
?>
<html>
<head>
<title>Suivi des inscriptions au jeu Driving Management</title>
</head>
<body>
Et tu peux supprimer le fichier charge_classes.php tout simplement.

par Ferdi » 10 sept. 2005, 15:33

Désolé de vous décevoir mais je crois que je vais encore vous demander un peu d'aide.

Donc en fait je viens de modifier mon fichier header.php comme ceci:
<?php
function __autoload($classe)
{
	include_once("./charge_classes.php");
}
?>
<html>
<head>
<title>Suivi des inscriptions au jeu Driving Management</title>
</head>
<body>
Ma classe Inscription ressemble à ceci:
<?php
class Inscription
{
    private $identifiant;
    private $password;
    private $email;
    private $ecurie;
    private $nom_patron;
    private $nation;
    private $description_ecurie;
    /**
     * Constructeur PHP5
     */
    function __construct( $identifiant, $password, $email, $ecurie, $nom_patron, $nation, $description_ecurie )
    {
        $this->identifiant = $identifiant;
        $this->password = $password;
        $this->email = $email;
        $this->ecurie = $ecurie;
        $this->nom_patron = $nom_patron;
        $this->nation = $nation;
        $this->description_ecurie = $description_ecurie;
    }
    /**
     * Constructeur PHP4
     */
    function Inscription( $identifiant, $password, $email, $ecurie, $nom_patron, $nation, $description_ecurie )
    {
        $this->__construct($identifiant, $password, $email, $ecurie, $nom_patron, $nation, $description_ecurie);
    }
    /**
     * Enter description here...
     *
     */
    function enregistrer()
    {
        $bdd = new MySql();
        $bdd->connecter();
        $requete  = "INSERT INTO kart_saison1 (identifiant, password, email, ecurie, nom_patron, nation, description_ecurie) VALUES (";
        $requete .= "'" . mysql_escape_string($this->identifiant) . "', ";
        $requete .= "'" . mysql_escape_string($this->password) . "', ";
        $requete .= "'" . mysql_escape_string($this->email) . "', ";
        $requete .= "'" . mysql_escape_string($this->ecurie) . "', ";
        $requete .= "'" . mysql_escape_string($this->nom_patron) . "', ";
        $requete .= "'" . mysql_escape_string($this->nation) . "', ";
        $requete .= "'" . mysql_escape_string($this->description_ecurie) . "' )";
        $bdd->executerRequete( $requete );
        $bdd->deconnecter();
    }
}
?>
Mon fichier charge_classes.php à ceci:
<?php
include_once('./classes/Inscription.php');
include_once('./classes/MySql.php');
include_once('./classes/IBaseDeDonnees.php');
include_once('./classes/configBdd.php');
?>
Et le fichier suivi_inscription à ceci:
<?php
include("header.php");
$_POST["identifiant"] = stripslashes($_POST["identifiant"]);
$_POST["password"] = stripslashes($_POST["password"]);
$_POST["email"] = stripslashes($_POST["email"]);
$_POST["ecurie"] = stripslashes($_POST["ecurie"]);
$_POST["nom_patron"] = stripslashes($_POST["nom_patron"]);
$_POST["nation"] = stripslashes($_POST["nation"]);
$_POST["description_ecurie"] = stripslashes($_POST["description_ecurie"]);
$souvenir_info = $_GET["souvenir_info"];
if ($souvenir_info = oui)
{
$_cookieUnName="identifiant";
$_cookieDeuxName="password";
$_cookieUnValue="identifiant";
$_cookieDeuxValue="password";
$_expire=14*24*3600;
}
$c = new inscription($_POST["identifiant"], $_POST["password"], $_POST["email"], $_POST["ecurie"], $_POST["nom_patron"], $_POST["nation"], $_POST["description_ecurie"]);
$c -> enregistrer();
$destinataire = $_POST["email"];
$sujet = "Récapitulatif de vos informations à propos de l\'inscription sur le site de jeu Driving Management";
$corps="à remplir";
mail ( $destinataire, $sujet, $corps);
print("Votre inscription a bien été validée!<br/>Vous allez recevoir un message récapitulant les informations que vous venez d\'entrer à l\'adresse email que vous venez d\'indiquer.<br/>Vous allez maintenant être redirigé sur la page d\'accueil de la catégorie pour laquelle vous venez d\'être inscrit.");
print("<meta HTTP-EQUIV=\"refresh\" CONTENT=20;URL=\"kart_saison1.htm\">");
include("footer.php");
?>
Malheureusement, j'ai encore et toujours la même erreur.
Est ce que j'ai écris mon code convenablement?
Merci de m'aider

par Cyrano » 10 sept. 2005, 15:12

Le principe basique: dans tes fichier, une ligne comme par exemple:
include_once("./charge_classes.php")
Dans ce fichier "charge_classes.php" les lignes d'incusion des classes:
<?php
include_once('./lib/identifier.php');
include_once('./lib/mysql.php');
// etc...
?>
Où "lib" serait donc le répertoire contenant les classes.

Le jour où tu passes à PHP5 sur le serveur, tu remplace tous les include de ce fichier par la méthode __auto_load()

Ou mieux encore : tu teste dans un if/else la version de PHP avec phpversion() et selon le résultat, tu mets les includes ou l'autoload.

par jeff » 10 sept. 2005, 15:05

salut
pour utiliser autoload tu fait un fichier par class et le nom de ton fichier est celui de ta class avec la meme casse

par Ferdi » 10 sept. 2005, 15:01

OK merci pour le coup de main
Je pense comprendre le concept de ce qui pourrait se passer mais j'avoue avoir un peu de mal à voir à quoi ressemblerait ce fichier:
est ce que ce serait quelque chose du genre?
<?php
class Inscription
{
/* bla bla
*/
}


class MySql
{

}
?>
Sinon pourrais tu me faire une rapide arborescence de ce à quoi il devrait ressembler à peu près (dans le même style qu'au-dessus peut être)?
Merci d'avance

par Cyrano » 10 sept. 2005, 14:56

Fais-toi un fichier d'inclusion unique dans lequel tu auras l'appel à tes classes: le jour où ton serveur passe à PHP5, tu n'auras que ce fichier à modifier pour utiliser la méthode __autoload() et dans tes défférenttes pages, tu fais un include de ce fichier au lieu d'inclure directement les classes.

par Ferdi » 10 sept. 2005, 14:52

Je te remercie pour ton aide
J'imagine facilement qu'un simple include("classes/inscription.php") marcherait facilement, mais en fait j'aurais aimé gardé ce header pour toute les pages de mon site que je programmerais en php.
De plus, la classe inscription en fait appel à une autre: MySql, qui elle-même en fait intervenir une autre.
C'est pour ça que mon autoload m'aurait aidé à gérer ces classes qui n'ont pas subi d'include auparavant.
Est-il possible de conserver un système convenable alors?
Sinon, deux solutions s'offrent à moi: soit je renonce à ce système, soit je change d'hébergeur.

par Cyrano » 10 sept. 2005, 14:00

Très juste: alors pour php4, ajoute un include pour insérer la classe : __autoload() est une autre méthode magique de PHP5 non comprise par PHP4

par Ferdi » 10 sept. 2005, 13:57

Je viens de tester exactement la modification de la classe insription mais j'ai toujours le même message d'erreur.
Je pense que le problème se situe au niveau de la fonction __autoload de mon header.
Qu'en pensez-vous?

par Cyrano » 10 sept. 2005, 13:45

Tu l'insère dans ta classe comme ceci:
<?php
class Inscription
{
    private $identifiant;
    private $password;
    private $email;
    private $ecurie;
    private $nom_patron;
    private $nation;
    private $description_ecurie;
    /**
     * Constructeur PHP5
     */
    function __construct( $identifiant, $password, $email, $ecurie, $nom_patron, $nation, $description_ecurie )
    {
        $this->identifiant = $identifiant;
        $this->password = $password;
        $this->email = $email;
        $this->ecurie = $ecurie;
        $this->nom_patron = $nom_patron;
        $this->nation = $nation;
        $this->description_ecurie = $description_ecurie;
    }
    /**
     * Constructeur PHP4
     */
    function Inscription( $identifiant, $password, $email, $ecurie, $nom_patron, $nation, $description_ecurie )
    {
        $this->__construct($identifiant, $password, $email, $ecurie, $nom_patron, $nation, $description_ecurie);
    }
    /**
     * Enter description here...
     *
     */
    function enregistrer()
    {
        $bdd = new MySql();
        $bdd->connecter();
        $requete  = "INSERT INTO kart_saison1 (identifiant, password, email, ecurie, nom_patron, nation, description_ecurie) VALUES (";
        $requete .= "'" . mysql_escape_string($this->identifiant) . "', ";
        $requete .= "'" . mysql_escape_string($this->password) . "', ";
        $requete .= "'" . mysql_escape_string($this->email) . "', ";
        $requete .= "'" . mysql_escape_string($this->ecurie) . "', ";
        $requete .= "'" . mysql_escape_string($this->nom_patron) . "', ";
        $requete .= "'" . mysql_escape_string($this->nation) . "', ";
        $requete .= "'" . mysql_escape_string($this->description_ecurie) . "' )";
        $bdd->executerRequete( $requete );
        $bdd->deconnecter();
    }
}
?>
La question que je me pose par contre, c'est qu'en PHP4, ça va peut-être tordre le nez à cause des "private" des propriétés de la classe :-k

par Ferdi » 10 sept. 2005, 13:13

Ok super pour l'aide
j'ai hâte de voir si ça va marcher mais malheureusement je ne sais pas où placer la méthode que tu m'indique: quel fichier exactement et je dois enlever quoi pour mettre ceci àla place.
Est-ce que je dois aussi faire ce que Cyrano m'a dit?
Merci beaucoup pour votre aide