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 :

Méthode d'un objet qui boucle


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 10
    Par défaut Méthode d'un objet qui boucle
    Bonjour,

    Voici un d'objet pour ce connecter aux différentes bases de données avec possibilité d'envoyer la requête avec une autre méthode et d'obtenir le retour (actuellement qu'avec mysql)

    Objet :
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
     
    /*
    	*Objet permettant la connection a toutes les bases de donnees selon
    	*$Type_Db :
    	*
    	*
    	*			1 -> Mysql
    	*			2 -> MSSQL
    	*			3 -> Oracle
    	*			4 -> PostgreSQL
    	*/
     
    	class CConnectDB_Request
    	{
     
    	var $Server;
    	var $Port = '3306';
    	var $Login;
    	var $Pass;
    	var $Database;
    	var $Type_Db;
    	var $Connect;
     
    		function TypeDataBase()
    		{
    			switch($this->Type_Db)
    			{
    				//MySQL
    				case 1:
    				$this->Connect = mysql_connect($this->Server.":".$this->Port,$this->Login,$this->Pass) or die("Connexion au serveur MySQL impossible");
     
    				mysql_select_db($this->Database) or die("Connexion a la Base MySQL ".$this->Database." impossible");
     
    				break;
     
    				//SQL Serveur
    				case 2:
    				$this->Connect = odbc_connect($this->Server,$this->Login,$this->Pass) or die("Connexion au serveur MSSQL impossible");
     
    				break;
     
    				//Oracle Serveur
    				case 3:
    				$this->Connect = oci_connect($this->Login,$this->Pass,$this->Database) or die("Connexion au serveur Oracle impossible");
     
    				break;
     
    				//PostegreSQL Serveur 
    				case 4:
    				$this->Connect = pg_connect("host=".$co_req->Server." port=".$this->Port." dbname=".$this->Database." user=".$this->Login." password=".$this->Pass."") or die("Connexion au serveur PostegreSQL impossible");
     
    				break;
    			}
    		}
     
     
    		function RequestReturnType($Req,$TypeRetour="")
    		{
     
    			switch($this->Type_Db)
    			{
    				//MySQL
    				case 1:
     
    				$Result = mysql_query($Req) or die("Erreur dans la requete MySQL");
     
    				if($TypeRetour != "")
    				{
    				$function = "mysql_".$TypeRetour;
     
    				$Result = $function ($Result);
    				}
    				else
    				$Result = mysql_fetch_assoc($Result);
     
    				return $Result;
     
    				break;
     
    				//SQL Serveur
    				case 2:
     
    				odbc_commit($this->Connect);
     
    				$Result = odbc_exec($this->Connect,$Req) or die("Erreur dans la requete MSSQL");
     
    				return $Result;
     
    				break;
     
    				//Oracle Serveur
    				case 3:
     
    				//oci_commit($this->Connect);
     
    				$Req = oci_parse($this->Connect, $Req); //prepare la requete
    				$Result = oci_execute ($Req) or die("Erreur dans la requete Oracle");
     
    				return $Result;
     
    				break;
     
    				//PostegreSQL Serveur
    				case 4:
     
    				$Result = pg_query($this->Connect, $Req) or die("Erreur dans la requete PostegreSQL");
     
    				return $Result;
     
    				break;
    			}
    		}
     
    		function CloseDb()
    		{
    			mysql_close($this->Connect);
    		}
     
    	}
    Mon appel avec un while qui boucle à l'infini :
    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
     
    $co_req = new CConnectDB_Request;
     
    	$co_req->Server = "127.0.0.1";
    	$co_req->Login = "root";
    	$co_req->Pass = "toto";
    	$co_req->Database = "toto";
    	$co_req->Type_Db = 1; //MySQL
     
    	$co_req->TypeDataBase();
     
    $VerifConnect = "SELECT * ";
    	$VerifConnect .= "FROM utilisateurs U ";
    	$VerifConnect .= "WHERE U.login_utilisateur = '".$login."' AND U.pass_utilisateur = '".$pass."' ";
     
    	while($ResVerifConnect = $co_req->RequestReturnType($VerifConnect,"fetch_object"))
    	{
    		echo $ResVerifConnect->id_utilisateur;
     
    	}
    Merci pour votre aide

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 320
    Par défaut
    Si je comprends bien ce que fais ta boucle:

    Affiche l'id_utilisateur tant que $co_req->RequestReturnType($VerifConnect,"fetch_object") est true ?

    Félicitations, la connexion à la bd fonctionne.

    Enfin, j'espère avoir compris ce que fait cette fonction.

    Pourquoi faire une boucle à cet endroit ?

  3. #3
    Membre chevronné Avatar de defcon_suny
    Homme Profil pro
    Non pas trop...
    Inscrit en
    Décembre 2006
    Messages
    441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Non pas trop...
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 441
    Par défaut
    Ca m'a l'air super intéressant mais je n'en vois pas vraiment l'utilité...

    C'est pas ce que fais l'objet PDO ???

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 10
    Par défaut
    Citation Envoyé par defcon_suny Voir le message
    Ca m'a l'air super intéressant mais je n'en vois pas vraiment l'utilité...

    C'est pas ce que fais l'objet PDO ???
    C'est exact, mais en fait j'apprends l'objet et je me suis dit que cet exemple était pas mal, car jusque là je ne faisais que des petits objets.

    Pouvez-vous tester le code svp, je continue de regarder pourquoi ça plante mais je trouve pas.

    Merci en tout cas pour le lien.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 320
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if($TypeRetour != "")
    {
        $function = "mysql_".$TypeRetour;
    
    $Result = $function ($Result);
    }
    else 
    {
        $Result = mysql_fetch_assoc($Result);
    }
    C'est peut-être pas ça, mais c'est mieux je trouve.

    Tu as une boucle infinie car tu la provoques toi-même.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while($ResVerifConnect = $co_req->RequestReturnType($VerifConnect,"fetch_object"))
    risque bien d'être tout le temps vrai.

    Donc tu dis en bon français:
    "Tant que $ResVerifConnect = $co_req->RequestReturnType($VerifConnect,"fetch_object"), affiche id_utilisateur"

    Comme $co_req->RequestReturnType($VerifConnect,"fetch_object") retourne une ressource par mysl_fetch_object et parviens à l'affecter à $ResVerifConnect, c'est toujours TRUE et ça boucle.

    Remplace ton while par un if, je ne comprends pas pourquoi tu veux un while ici.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 10
    Par défaut Merci pour votre aide mais
    Voilà je me suis dis ok avec une identification simple ça fonctionne.

    Donc avec un if cela fonctionne j'ai un seul résultat dans le cas d'une identification.

    Mais disons à présent que je veux...lister tous les articles de cet utilisateur disons 100

    alors la je dois faire un while.

    $ListArticles= "Select * from artciles where id_util = 1"

    $co_req->RequestReturnType($ListArticles,"fetch_object")

    cette méthode fait :
    $Result = mysql_query($ListArticles)

    puis

    mysql_fetch_object($Result)

    donc

    $co_req->RequestReturnType contient (mysql_fetch_object($Result))

    et je pensais que faire

    while($data=$co_req->RequestReturnType($ListArticles,"fetch_object"))

    était identique à

    while($data=mysql_fetch_object($Result))

    je continue de regarder et je vous dis mais si quelqu'un peut m'aider ce serait coool!


  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 10
    Par défaut
    Désolé, il manque des informations :

    Dans l'exemple je me connecte à la table utilisateurs car je test pour le moment mon objet.

    j'ai 1 seul utilisateur, mais pourtant mon while affiche une infinité de résultat à savoir :

    111111111111111

    id_utilisateur = 1.

    Si je passe pas par mon objet un mysql_query et un while($data=mysql_fetch_assoc)

    ne retourne qu'un résultat.

    Je sais pas si c'est bien clair ?

    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. JNI -> Appeler méthode Java depuis C++ qui instancie un objet
    Par MilWolf dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 07/02/2015, 13h36
  2. Réponses: 11
    Dernier message: 11/04/2007, 19h33
  3. Select qui boucle ou se termine par un Ora-01460
    Par PatriceP dans le forum Oracle
    Réponses: 4
    Dernier message: 29/10/2004, 09h53
  4. Réponses: 19
    Dernier message: 07/11/2003, 09h10
  5. Sortir d'un progamme qui boucle ou qui refresh
    Par mikevador02 dans le forum C
    Réponses: 12
    Dernier message: 14/12/2002, 10h38

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