Fonction de verification d'une table

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 : Fonction de verification d'une table

par BaLiSTiK » 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.

par Sékiltoyai » 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 ?

par vibou_ » 15 avr. 2008, 11:46

Oublie pas le resolu si tout est ok ;)

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

par BaLiSTiK » 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 :)

par Berzemus » 15 avr. 2008, 11:32

TROUVER!
La fonction c'est Recherche(r)Parcelle et non pas RechercheParcelle
C'est EUREKA qu'on crie.. :wink:

par vibou_ » 15 avr. 2008, 11:30

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

Edit:
Vive l'edition :D

par BaLiSTiK » 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

par vibou_ » 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...
}

par BaLiSTiK » 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 ' Modification d\'une parcelle';		
	}
	else if( $oVerif  == false){
	        //on insere des nouvelles données
		$oSol->m_bModeInsertion;
		echo 'Pas de données sur la parcelle, inserer de nouvelles donné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']);

par vibou_ » 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 )

par BaLiSTiK » 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>'; }

par vibou_ » 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

Fonction de verification d'une table

par BaLiSTiK » 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 :)