par
BaLiSTiK » 05 juin 2008, 17:33
Yop,
J'aimerai savoir comment je peux renvoyer deux requetes SQl dans une méthode. J ai un formulaire d'inscription, et je dois renseigner deux tables de ma base de donnée.
J'utilise deux methodes pour construire ma requete SQl, qui est renvoyée dans une méthode d'une classe supérieure pour être traitée.
Le probleme c est que le script fonctionne tres bien si je n'utilise une requete SQL (remplissage d'une table) mais se corse pour l'insertion dans deux tables. J ai pensé à la concaténation des deux requetes avant de les renvoyer mais ça ne doit pas être la solution.
Peut-on renvoyer deux variables ?
Pour mieux comprendre, voilà mon code :
Les données du formulaire sont recuperées comme ceci :
if ($_POST['btnEdit']=='Sauver' and !$this->m_bModeEdition) {
if($this->_verifDispoUser(pg_escape_string($_POST['login_user']))){
$this->_SauverInsert();
}//fin if
else {
echo '<span class="consignes-form">Erreur : Sélectionner un autre login, celui-ci est déjà utilisé. Merci</span>';
}//fin else
if ($this->m_bRequeteValide){
$this->m_bModeEdition = false;
}//fin if
}//fin if sauver
Si le login est disponible, les données sont envoyées dans la méthode _sauverInsert(), qui se trouve dans la classe au dessus, qui fait appelle aux méthodes suivantes qui traite la requete SQL (vive l'objet ^^) :
Voila al classe _sauverInsert(); pour ceux qui veulent :
function _SauverInsert(){
//Génération de la requête SQL
$sRequeteInsert = $this->_GenereSQLInsert();
//Si aucune erreur de saisie n'a été détéctée -> la requête est valide, execution
if ($this->m_bRequeteValide) {
$this->m_nAccesBD->connexion();
$rResultat = $this->m_nAccesBD->requete($sRequeteInsert);
$this->m_nAccesBD->deconnexion();
$this->m_sMessageErreurRequete = 'L\'insertion a bien été effectuée.';// : '.$sRequeteInsert;
}//fin if
//Affichage du Resultat de la requete
echo '<span class="consignes-form">' . $this->m_sMessageErreurRequete . '</span>';
}
et on revient là :
//Premiere partie de la requete
function _GenereSQLInsert(){
//Requete valide
$this->m_bRequeteValide = true;
//Génération de la requête SQL
$sRequete = 'INSERT INTO tsig_usr_agr ("num_user","num_sica", "num_level", "login", "mot_de_pass", "nom_user", "prenom_user", "adresse", "commune", "num_telephone", "e_mail") ';
//$sRequete2 = 'INSERT INTO tsig_usr_expl_int("num_user","num_level","login","num_pacage")';
$sRequete .= $this->_GenereSQLValues();
//$sRequete2 .= $this->_GenereSQLValues();
return $sRequete1;
}//fin fonction
//Valeurs à inserer ds la requete
function _GenereSQLValues(){
/*Recuperation des variables*/
$gnNumUser = pg_escape_string($_POST['num_user']);
$gnNumPacage = pg_escape_string($_POST['num_pac']);
$gnNum_Sica = pg_escape_string($_POST['sica']);
$gnLogin = pg_escape_string($_POST['login_user']);
$gnNom_User = pg_escape_string($_POST['nom_user']);
$gnPrenom_User = pg_escape_string($_POST['prenom_user']);
$gnMDP = pg_escape_string($_POST['mpassword']);
$gnMDP = md5($gnMDP);
$gnAdresse = pg_escape_string($_POST['adresse']);
$gnCommune = pg_escape_string($_POST['commune']);
$gnNum_Tel = pg_escape_string($_POST['tel']);
$gnE_Mail = pg_escape_string($_POST['mail']);
//Insertion pour la requete 1
$sRequete .= 'VALUES(';
$sRequete .= ' \''.$gnNumUser.'\', ';
if ($gnNum_Sica !='') {
$sRequete .= ' \''.$gnNum_Sica.'\', ';
}else{
$this->m_bRequeteValide = false;
$this->m_sMessageErreurRequete = 'Erreur : Avancement : La valeur Numero Sica doit être saisie';
return;
}
//insertion du niveau de level
$sRequete .= 4 .',' ;
/* etc. pour les autres champs recupérés, je ne les mets pas pour alléger la présentation du code */
//Suppression du dernier ', ' en surplus
$sRequete = substr($sRequete, 0, strlen($sRequete) - 2);
$sRequete .= ')';
//Insertion pour la requete 2
//$sRequete2 .= 'VALUES(';
//$sRequete2 .= ' \''.$gnNumUser.'\', ';
//$sRequete2 .= 4 .',' ;
//if ($gnLogin !='') {
// $sRequete2 .= ' \''.$gnLogin.'\', ';
//}else{
// $this->m_bRequeteValide = false;
// $this->m_sMessageErreurRequete = 'Erreur : Avancement : Le login doit être saisie';
// return;
//}
//$sRequete2 .= '\''.$gnNumPacage.'\',';
//$sRequete2 = substr($sRequete2, 0, strlen($sRequete2) - 2);
//$sRequete2 .= ')';
//concatenation des requetes
//$sRequete = $sRequete1.' AND '.$sRequete2;
return $sRequete;
}//fin fonction
J ai mis en commentaire ma deuxième requête. J aimerai pouvoir la traiter mais je sais pas trop comment :/. J aimerai surtout éviter de construire une nouvelle méthode pour cette deuxième requête.
Merci de votre aide ^^.
Yop,
J'aimerai savoir comment je peux renvoyer deux requetes SQl dans une méthode. J ai un formulaire d'inscription, et je dois renseigner deux tables de ma base de donnée.
J'utilise deux methodes pour construire ma requete SQl, qui est renvoyée dans une méthode d'une classe supérieure pour être traitée.
Le probleme c est que le script fonctionne tres bien si je n'utilise une requete SQL (remplissage d'une table) mais se corse pour l'insertion dans deux tables. J ai pensé à la concaténation des deux requetes avant de les renvoyer mais ça ne doit pas être la solution.
Peut-on renvoyer deux variables ?
Pour mieux comprendre, voilà mon code :
Les données du formulaire sont recuperées comme ceci :
[php]
if ($_POST['btnEdit']=='Sauver' and !$this->m_bModeEdition) {
if($this->_verifDispoUser(pg_escape_string($_POST['login_user']))){
$this->_SauverInsert();
}//fin if
else {
echo '<span class="consignes-form">Erreur : Sélectionner un autre login, celui-ci est déjà utilisé. Merci</span>';
}//fin else
if ($this->m_bRequeteValide){
$this->m_bModeEdition = false;
}//fin if
}//fin if sauver
[/php]
Si le login est disponible, les données sont envoyées dans la méthode _sauverInsert(), qui se trouve dans la classe au dessus, qui fait appelle aux méthodes suivantes qui traite la requete SQL (vive l'objet ^^) :
Voila al classe _sauverInsert(); pour ceux qui veulent :
[php]
function _SauverInsert(){
//Génération de la requête SQL
$sRequeteInsert = $this->_GenereSQLInsert();
//Si aucune erreur de saisie n'a été détéctée -> la requête est valide, execution
if ($this->m_bRequeteValide) {
$this->m_nAccesBD->connexion();
$rResultat = $this->m_nAccesBD->requete($sRequeteInsert);
$this->m_nAccesBD->deconnexion();
$this->m_sMessageErreurRequete = 'L\'insertion a bien été effectuée.';// : '.$sRequeteInsert;
}//fin if
//Affichage du Resultat de la requete
echo '<span class="consignes-form">' . $this->m_sMessageErreurRequete . '</span>';
}
[/php]
et on revient là :
[php]
//Premiere partie de la requete
function _GenereSQLInsert(){
//Requete valide
$this->m_bRequeteValide = true;
//Génération de la requête SQL
$sRequete = 'INSERT INTO tsig_usr_agr ("num_user","num_sica", "num_level", "login", "mot_de_pass", "nom_user", "prenom_user", "adresse", "commune", "num_telephone", "e_mail") ';
//$sRequete2 = 'INSERT INTO tsig_usr_expl_int("num_user","num_level","login","num_pacage")';
$sRequete .= $this->_GenereSQLValues();
//$sRequete2 .= $this->_GenereSQLValues();
return $sRequete1;
}//fin fonction
//Valeurs à inserer ds la requete
function _GenereSQLValues(){
/*Recuperation des variables*/
$gnNumUser = pg_escape_string($_POST['num_user']);
$gnNumPacage = pg_escape_string($_POST['num_pac']);
$gnNum_Sica = pg_escape_string($_POST['sica']);
$gnLogin = pg_escape_string($_POST['login_user']);
$gnNom_User = pg_escape_string($_POST['nom_user']);
$gnPrenom_User = pg_escape_string($_POST['prenom_user']);
$gnMDP = pg_escape_string($_POST['mpassword']);
$gnMDP = md5($gnMDP);
$gnAdresse = pg_escape_string($_POST['adresse']);
$gnCommune = pg_escape_string($_POST['commune']);
$gnNum_Tel = pg_escape_string($_POST['tel']);
$gnE_Mail = pg_escape_string($_POST['mail']);
//Insertion pour la requete 1
$sRequete .= 'VALUES(';
$sRequete .= ' \''.$gnNumUser.'\', ';
if ($gnNum_Sica !='') {
$sRequete .= ' \''.$gnNum_Sica.'\', ';
}else{
$this->m_bRequeteValide = false;
$this->m_sMessageErreurRequete = 'Erreur : Avancement : La valeur Numero Sica doit être saisie';
return;
}
//insertion du niveau de level
$sRequete .= 4 .',' ;
/* etc. pour les autres champs recupérés, je ne les mets pas pour alléger la présentation du code */
//Suppression du dernier ', ' en surplus
$sRequete = substr($sRequete, 0, strlen($sRequete) - 2);
$sRequete .= ')';
//Insertion pour la requete 2
//$sRequete2 .= 'VALUES(';
//$sRequete2 .= ' \''.$gnNumUser.'\', ';
//$sRequete2 .= 4 .',' ;
//if ($gnLogin !='') {
// $sRequete2 .= ' \''.$gnLogin.'\', ';
//}else{
// $this->m_bRequeteValide = false;
// $this->m_sMessageErreurRequete = 'Erreur : Avancement : Le login doit être saisie';
// return;
//}
//$sRequete2 .= '\''.$gnNumPacage.'\',';
//$sRequete2 = substr($sRequete2, 0, strlen($sRequete2) - 2);
//$sRequete2 .= ')';
//concatenation des requetes
//$sRequete = $sRequete1.' AND '.$sRequete2;
return $sRequete;
}//fin fonction
[/php]
J ai mis en commentaire ma deuxième requête. J aimerai pouvoir la traiter mais je sais pas trop comment :/. J aimerai surtout éviter de construire une nouvelle méthode pour cette deuxième requête.
Merci de votre aide ^^.