IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

PHP OO: Problème avec une classe


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 4
    Points : 3
    Points
    3
    Par défaut PHP OO: Problème avec une classe
    Bonjour,

    Je débutes en objet et par la même occasion avec PDO en clair j'essaye de passer a un niveau supérieur.

    Je suis donc sur un système de news et j'ai
    - Une classe news.
    - Et 3 fonctions dans cette classe déclarées en public bien sur.

    Code de ma classe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    <?php
    class news {	
    /*---------------------------------------------INSERTION---------------------------------------------------------*/
    	public function InsertNews($titreNews, $contenueNews, $auteurNews, $dateNews, $imageNews){
    		//Déclaration		
    		$err_cpt = 0;
    		$err_titre = FALSE;
    		$err_contenue = FALSE;
    		$err_auteur = FALSE;		
    		$err_image = FALSE;
     
    		//Gestion des erreur
    		if(empty($titreNews))   $err_titre = TRUE;  $err_cpt++;
    		if(empty($contenueNews))	$err_contenue = TRUE;	$err_cpt++;
    		if(empty($auteurNews))	$err_auteur = TRUE;	 $err_cpt++;		
    		if(empty($imageNews))	$err_image = TRUE; 	$err_cpt++;
     
    		//Si err_cpt = 0 on Insère sinon on listes les erreurs
    		if($err_cpt == 4){
    			//Requête					
              $bdd = new PDO('mysql:host=localhost;port=3306;dbname=blog', 'root', ''); //Connection			
    			$requete =  $bdd -> prepare ('INSERT INTO news (titre, contenue, auteur, date, image) 
    										  VALUES(:titre, :contenue, :auteur, :date, :image)');	
     
    			$req = exec(array(
    						'titre' => $titreNews,
    						'contenue' => $contenueNews,
    						'auteur' => $auteurNews,
    						'date' => $dateNews,
    						'image' => $imageNews 					
    						));
     
    			echo ("News insérée corectement.");
    		}
    		else{
    			//Erreur
    			echo "Insertion impossible ".$err_cpt;
    			if($err_titre == TRUE)	echo("Vous n'avez pas précisé de tître.");
    			if($err_contenue == TRUE)	echo("Votre news n'a pas de contenue.");
    			if($err_auteur == TRUE)	echo("Vous n'avez sélectionné aucun auteur.");			
    			if($err_image == TRUE)	echo("Votre news n'a pas d'image.");
    		}
    	}
     
    /*---------------------------------------------MODIFICATION---------------------------------------------------------*/
    	public function updateNews($choixNews){
     
    	}
    /*---------------------------------------------SUPPRESSION---------------------------------------------------------*/	
    	public function deleteNews($choixNews){
     
    	}
    }
     
     
    ?>

    Code de mon formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <form method="post" action="news-insertion-valid.php">
    	Tître: <input type="text" name="titre" /><br />
        Contenue:<br /> <textarea name="contenue">a</textarea><br />
        Auteur: <input type="text"  name="auteur" /><br />
        Images: <input type="text" name="image" /><br />
        <input type="submit" value="Poster la news" />
    </form>

    Code de l'appel de ma classe (en clair la validation de mon formulaire)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php   
    require("../../class/news.class.php");
    $news = new news();
    $news -> InsertNews($_POST['titre'], $_POST['contenue'], $_POST['auteur'], "00/00/0000", $_POST['image']);
    ?>

    Voilà maintenant, mon soucis.
    Donc en clair j'initialise un compteur $err_cpt a 0 ainsi que mes variable
    err_tire, contenu etc a FALSE.

    Ensuite je teste que les champs sont bien renseignés donc si $titreNews est vide (champ titre de mon formulaire vu que j'envois le contenu de $_POST['titre'] a ma fonction) n'est pas renseigné je la met a TRUE et j'incrémente mon compteur.

    Ensuite si mon compteur $err_cpt == 0 alors tous les champs sont renseigné, on est content et on insère dans la base sinon on affiche une erreur et le nombre d'erreur.

    Maintenant passons au problème ma structure de test if considère que err_cpt est TOUJOURS égal à 4 sans qu'aucun J'ai donc toujours mon message insertion impossible 4

    De plus ce passage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    if($err_titre == TRUE)	echo(Vous n'avez pas précisé de tître.);
    			if($err_contenue == TRUE)	echo(Votre news n'a pas de contenue.);
    			if($err_auteur == TRUE)	echo(Vous n'avez sélectionné aucun auteur.);			
    			if($err_image == TRUE)	echo(Votre news n'a pas d'image.);
    
    ?>
    N'est absolument pas interprété.A
    lors pour le premier problème $err_cpt toujours égal a 4 je vois une énorme erreur de logique (passage du procédural à l'objet surement) en revanche pour le fait qu'une portion du code n'est pas interprété la je vois pas du tout.

    En espérant tomber sur un virtuose de la programmation objet et php, je vous remercie.

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    M'est avis que l'objet n'a rien à voir dans le problème : Un if sans accolade ne concerne que la 1ere instruction qui le suit
    Donc ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $err_cpt = 0;
     
    if(empty($titreNews))   $err_titre = TRUE;  $err_cpt++;
    if(empty($contenueNews))	$err_contenue = TRUE;	$err_cpt++;
    if(empty($auteurNews))	$err_auteur = TRUE;	 $err_cpt++;		
    if(empty($imageNews))	$err_image = TRUE; 	$err_cpt++;
    équivaut à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $err_cpt = 0;
     
    if(empty($titreNews))  { $err_titre = TRUE;  }
    $err_cpt++;
    if(empty($contenueNews)) { $err_contenue = TRUE; }
    $err_cpt++;
    if(empty($auteurNews))	 {$err_auteur = TRUE;	}
     $err_cpt++;		
    if(empty($imageNews))	{ $err_image = TRUE; 	}
    $err_cpt++;
    Donc quelque soient les erreurs $err_cpt vaudra toujours 4

    Et pour ton bout de code non interprété, vérifie les ouvertures/fermetures de chaines, et surtout que les balises php sont bien en <?php ?> et pas <? ?>

  3. #3
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    La syntaxe pour atteindre propriété dans un Objet c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $this->err_cpt++
     
    $this->err_titre = TRUE;
    Fait bien la distinction entre les les paramètre qui sont des variables et les propriétés.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Celira => Merci je ne savais pas pour les if sans accolades je comprends bien mieux le problème.

    RunCodePhp => Ok mais la je tente de joindre des variables locale à la fonction et non des paramètres. D'ailleurs je n'ai défini aucun paramètres pour cette classe.

    Faudrait til que les variables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $err_cpt = 0;
    $err_titre = FALSE;
    $err_contenue = FALSE;
    $err_auteur = FALSE;		
    $err_image = FALSE;
    soient déclarées en paramètres de ma classe et en privé plutôt qu'au sein de ma fonction alors qu'elles ne seront utilisé que par cette fonction et non par le reste de la classe ?

  5. #5
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Citation Envoyé par mandra123
    D'ailleurs je n'ai défini aucun paramètres pour cette classe.
    Effectivement, j'ai regardé ton code un peu trop en diagonal.

    Ceci dit, une variable contenant un booléen pourrait très bien faire l'affaire aussi, car au fond, le tout est de savoir s'il y a erreur ou pas (vrai ou faux), non ?
    Ou dit autrement, est-ce si utile que ça de connaitre le nombre d'erreurs ?


    Aussi, voit si c'est vraiment à cette classe, de cette méthode insertNews() de gérer les erreurs et les afficher (des echo), et même du echo après insertion.

    Si on prend une certaine généralité, la vérifications des données (GET/POST), gérer les erreurs, inserer en Bdd ... sont souvent 3 choses différentes.

    Bon, je comprend bien que tu débute, donc que c'est pas simple à concevoir, mais pour ce qui est de l'affichage (les echo), essai au moins de séparer ça, car ça va vraiment causer problème.
    A titre d'exemple, mettre ça dans un tableau (une propriété), et créer une méthode hasError() pour savoir s'il a eu erreur, puis une méthode getError() pour les afficher t'offriras déjà plus de possibilités.


    Une fois insertion par exemple, on est souvent amener à faire une redirection (un header) car si on ne le fait pas et qu'on actualise la page, une nouvelle insertion peu se faire, ce qui est plutôt embêtant.
    Fais des essai en tout cas.


    Autre petite parenthèse.
    http://fr2.php.net/manual/fr/pdo.exec.php
    PDO::exec() retourne un entier (un int), le nombre de ligne affectées, exploiter cette info peut être utile.

Discussions similaires

  1. [POO] Problème avec une classe + requêtes sql
    Par mithrendil dans le forum Langage
    Réponses: 2
    Dernier message: 30/04/2007, 08h27
  2. [PHP-JS] problème avec une variable
    Par schats dans le forum Langage
    Réponses: 14
    Dernier message: 15/04/2007, 13h54
  3. Problème avec une classe générique
    Par Core8 dans le forum C++
    Réponses: 3
    Dernier message: 19/03/2007, 03h18
  4. Problème avec une classe ActionScript
    Par Patryk403 dans le forum Flash
    Réponses: 3
    Dernier message: 06/08/2006, 12h42
  5. Problème avec une classe... "without object"
    Par z980x dans le forum C++
    Réponses: 8
    Dernier message: 27/04/2006, 16h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo