Fonction de verification d'une table

Eléphant du PHP | 398 Messages

14 avr. 2008, 14:52

Bonjour,

Etant familier avec le php4, j ai un code que je souhaite adapter en php5 (pour le boulot). Il s'agit de verifier si une variable passé en paramètre est présente dans la table de la base de donnée. Le code en PHP4 fonctionne car utilisé auparavant mais je débute totalement en PHP5.

Si il y a des erreurs à ne pas faire etc, j'aimerais vos conseils, merci

Le code PHP4:
function _RechercheCodeParcelle($parcelle){
	$connect= pq_connect(...//connexion à la BD
	$sql = pg_exec($connect,"select code_parcelle from tsig_sol_analyse_sol");
	while($tab = pg_fetch_assoc($sql)){
		$codeParcelle .= $tab['code_parcelle']!= "" ? ''.$tab['code_parcelle'].', ' : "";
	}
	deconnexion();
	$codeParcelle = explode(", ",$codeParcelle)
	
	if (in_array($parcelle, $codeParcelle)) {
		$exist = true;
	}
	else {
		$exist = false;
	}
	return $exist;
}
Et voila comment je l'ai adapté en PHP5:
function _RechercherCodeParcelle($parcelle){
		
		var $m_CodeParcelle = array();
		$this->m_bRequeteValide = true;
		$sRequete = 'select code_parcelle from tsig_sol_analyse_sol';
		if ($this->m_bRequeteValide) {
			$this->m_nAccesBD->connexion();
			$rResultat = $this->m_nAccesBD->requete($sRequete);
			$this->m_nAccesBD->deconnexion();
		}
		$this->m_codeParcelle = array();
		$this->m_codeParcelle = pg_fetch_assoc($rResultat);
		
		if (in_array($parcelle, $m_codeParcelle)) {
		$exist = true;
		}
		else {
			$exist = false;
		}
	return $exist;
}
et pour info, ce que j en fait apres :
/**
* Traitement de la fonction
*/
if (_RechercheCodeParcelle($_SESSION['code_parcelle']) == true){
		//si la parcelle se trouve dans le tableau
		//on edite
	}
	else if(_RechercheCodeParcelle($_SESSION['code_parcelle']) == false){
		//on insere des nouvelles données
}
Voila :)
----------------------------------------------------------------------------------
https://astro-otter.space - Discover wonders and mysteries of Universe

Eléphanteau du PHP | 12 Messages

14 avr. 2008, 15:11

Bonjour tu fais beaucoup trop de chose dans ton code selon moi.
De plus pour ma part je ferais peut etre une connexion que je passerais en parametre ou alors une connexion pour l'objet en lui meme mais ca c'est qu'un avis personnel.
A moins que m_nAccesBD est un objet connexion deja dans ton objet.

Donc je disais pour moi il y a trop de code pourquoi ne pas rendre ta requete dynamique plutot que de lire toutes la base de données.
function _RechercherCodeParcelle($parcelle){
        
        var $m_CodeParcelle = array();
        $this->m_bRequeteValide = true;
        $sRequete = "select code_parcelle from tsig_sol_analyse_sol where code_parcelle = '$parcelle'"; //note que j'ai mis entre double quote et pas entre simple de maniere a mettre les simples a coté du code_parcelle =' blabalba '

        if ($this->m_bRequeteValide) {
            $this->m_nAccesBD->connexion();
            $rResultat = $this->m_nAccesBD->requete($sRequete); //note que tu pourrais egalement faire directement return $this->m_nAccesBD->requete($sRequete); car comme la connexion se fait dans la fonction elle est egalement detruite a la fin automatiquement
            $this->m_nAccesBD->deconnexion();
        }     
        if (!empty($rResultat)) 
        {
                  $exist = true;
        }
        else 
        {
                  $exist = false;
        }
    return $exist; 
} 
Voila j'espere ne pas avoir dit de betise et j'espere t avoir aider

Eléphant du PHP | 398 Messages

14 avr. 2008, 15:20

Merci de ta réponse.

pour la connexion j ai déja ceci dans ma page :
	function Sol () {
		/* Création d'un accès à la base de données pour les requetes  */
		$this->m_nAccesBD = new Acces_BD();
		//Chargement des listes de la BD utiles au formulaire
	}
EDIT:
Le probleme viens surtout de l'appel de la fonction car que ce soit ma fonction ou la tienne, c'est l'appel qui pose soucis:
Fatal error: Call to undefined function _RechercheCodeParcelle() in /var/www/tsigane_test/test.php on line 95
ce qui correspond à :
$oVerif = _RechercheCodeParcelle($_SESSION['codeParcelle']); 
//$oVerif->_RechercheCodeParcelle();
if ( $oVerif == true){
		//si la parcelle se trouve dans le tableau
		//on edite
		$oSol->m_bModeEdition;
		echo '<p>php5:&nbsp;Modification d\'une parcelle</p>';
											
	}
else if( $oVerif  == false){
	//on insere des nouvelles données
	$oSol->m_bModeInsertion;
	echo '<p>php5:Pas de donn&eacute;es sur la parcelle, inserer de nouvelles donn&eacute;es</p>';
}
else{ echo '<p>Veuillez s&eacute;lectionner votre choix :</p>'; }
----------------------------------------------------------------------------------
https://astro-otter.space - Discover wonders and mysteries of Universe

Eléphanteau du PHP | 12 Messages

14 avr. 2008, 18:13

Question bete mais as tu inclus le fichier contenant la fonction?
Sinon si la fonction fait parti d'une classe a tu créé un objet de cette classe avec un new afin d'utiliser les methodes de cette objet?

(evite d'editer le message car la du coup j ai pas recu le mail comme quoi tu avais repondu :D )

Eléphant du PHP | 398 Messages

15 avr. 2008, 11:10

Je te rassure la page est bien incluse :) vu que qu'il y a d'autre fonctions que j'utilise dedans.

Le code d'appel de la méthode :
....
//Bout de code bon et utilisé pour d autres methodes qui fonctionnent
$oSol = "";
if (!isset($_SESSION['Sol'])) {
	$oSol = new Sol();
}
else {
	//Restauration de l'objet sérialisé
	$oSol = unserialize(urldecode($_SESSION['Sol']));
}


....

// Methode non appelée
$oVerif = "";
$oVerif = new Sol();
$oVerif->_RechercheCodeParcelle($_SESSION['codeParcelle']);
	if ( $oVerif == true){
	      //si la parcelle se trouve dans le tableau
              //on edite
 	      $oSol->m_bModeEdition;
	      echo '&nbsp;Modification d\'une parcelle';		
	}
	else if( $oVerif  == false){
	        //on insere des nouvelles données
		$oSol->m_bModeInsertion;
		echo 'Pas de donn&eacute;es sur la parcelle, inserer de nouvelles donn&eacute;es';
}
avec ce message d erreur :

Code : Tout sélectionner

Fatal error: Call to undefined method Sol::_RechercheCodeParcelle() in /var/www/tsigane_test/Sol.php on line 105
la ligne 105 correspond à celle ci :
$oVerif->_RechercheCodeParcelle($_SESSION['codeParcelle']);
----------------------------------------------------------------------------------
https://astro-otter.space - Discover wonders and mysteries of Universe

Eléphanteau du PHP | 12 Messages

15 avr. 2008, 11:17

N'y a t'il pas de conflit entre la fonction Sol et la class? Ou du moins une confusion

Dans ta class a tu un constructeur de type:
function __construct()
{
          //initialisatoin des variables...
}

Eléphant du PHP | 398 Messages

15 avr. 2008, 11:23

Je ne penses pas qu'il y ait de conflit car les autres méthodes fonctionnent bien.
Non pas de constructeur.

le debut de la classe si ça peut t'aider :
class Sol extends Formulaire {
	/**
	 * Definition des variables
	 */
	//Permet de stocker le résultat de la dernière recherche effectuée par l'utilisateur
	var $m_aSol = array();
	
	//Permet de stocker le résultat du code parcelle dans la base
	var $m_CodeParcelle = array();
//	$parcelle = $_SESSION['codeParcelle'];
	
	//Permet de passer en mode insertion
	var $m_bModeInsertion;
	
	/**	 * Constructeur : construit le formulaire en vue d'un affichage ultérieur 	 */
	function Sol () {
		/* Création d'un accès à la base de données pour les requetes  */
		$this->m_nAccesBD = new Acces_BD();
	}

etc...

et la méthode en question se trouve ici ^^.

...
}//fin classe
----------------------------------------------------------------------------------
https://astro-otter.space - Discover wonders and mysteries of Universe

Eléphanteau du PHP | 12 Messages

15 avr. 2008, 11:30

EUREKA :D !
La fonction c'est Recherche(r)Parcelle et non pas RechercheParcelle

Edit:
Vive l'edition :D
Modifié en dernier par vibou_ le 15 avr. 2008, 11:34, modifié 1 fois.

ViPHP
ViPHP | 4039 Messages

15 avr. 2008, 11:32

TROUVER!
La fonction c'est Recherche(r)Parcelle et non pas RechercheParcelle
C'est EUREKA qu'on crie.. :wink:
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphant du PHP | 398 Messages

15 avr. 2008, 11:43

OMG paye ton erreur :shock:

On pouvais toujours chercher un probleme dans le code

Merci pour l'aide :D. ça devrais pouvoir aller maintenant :)
----------------------------------------------------------------------------------
https://astro-otter.space - Discover wonders and mysteries of Universe

Eléphanteau du PHP | 12 Messages

15 avr. 2008, 11:46

Oublie pas le resolu si tout est ok ;)

Ravis d'avoir pu t'aider ;) :P

ViPHP
ViPHP | 5924 Messages

15 avr. 2008, 11:46

C'est normal que j'ai l'impression que tu te compliques la vie, et qu'un simple WHERE pourrait régler ton problème ?
Comment sont organisées les données dans la table ?

Eléphant du PHP | 398 Messages

15 avr. 2008, 12:00

Oublie pas le resolu si tout est ok ;)

Ravis d'avoir pu t'aider ;) :P
Il y a encore qq trucs à régler mais je penses que je devrais m'en sortir, mais au cas ou je laisse le sujet ouvert...on sait jamais ^^.

@Sékiltoyai : j ai finalement utilisé la clause where dans ma requete SQL.
Le premier code que j'avais etait un code que j avais pondu y a qq temps pour un autre truc donc pensant que ça correspondait, je l'avais repris :).
En ce qui concerne la table, il y a a "code_parcelle" en clé primaire suivi d'une douzaine de champ Integer.


Edit : je comprends pas comment on récupère ce que la fonction me renvoi. On est daccord qu'en procédural, il suffit de faire $maVar = maFonctionBool($parametre); qui renvoi un boolean.

Desolé de passer un peu pour un boulet mais j ai vraiment du mal avec l'objet (le java qui m a traumatisé je penses...) et si ça ne tenait qu a moi je ferais tt ça en procedural et php4

EDIT FINAL : j ai trouvé une solution beaucoup plus simple qui ne requière aucune fonction et de verification dans la table...donc plus de fonction etc...un simple if().
donc problème résolu.
----------------------------------------------------------------------------------
https://astro-otter.space - Discover wonders and mysteries of Universe