requete sql et menu déroulant

Petit nouveau ! | 7 Messages

19 juil. 2005, 10:38

bonjour, depuis hier je bloque sur une requete sql qui ne fonctionne pas. J'ai essayé pas mal de choses mais évidemment pas la bonne solution. En fait la requete dans mysql fonctionne c'est pas dur ! :) mais c'est dans le php je n'arrive pas à récupérer l'option séléctionnée dans le menu déroulant.
Mon code n'est pas simple et ne ressemble en rien à ce qu'on peut voir habituellement car il y a des appels de classes et de fonctions comme en Java donc c'est pas évident. Il faut bien connaitre le code.

voici mon code php ou du moins la fonction que j'ai codé :
/**************************************************
* Class: frm_affect_to_another_reporter
* Description: allow to re-affect bugs to another reporter
* @date: 18/07/2005
***************************************************/
class frm_affect_to_another_reporter extends tpl_form {
// Nom de la classe
var $classname = "frm_affect_to_another_reporter";
// Type de l'action
var $type_action = "new";
// cible du script
var $script_target = "";
// ID de l'utilisateur
var $user_id = 0;
// Titre du formulaire
var $form_title = "";
// Tableau de valeurs
var $myvalues = array();

// Constructor
function frm_affect_to_another_reporter ($type_action, $auth) {
GLOBAL $PHP_SELF;
$this->type_action = $type_action;
$this->user_id = $auth->auth["uid"];

// If new, affect bugs to another reporter
if ($type_action == "new") {
$this->script_target = sprintf("$PHP_SELF?datatype=affect_to_another_reporter&action=update");
$this->form_title = "Re affect bugs to another reporter";
}

// If update, update the new registration/reporter as current reporter
if ($type_action == "update") {
$this->script_target =sprintf("PHP_SELF?datatype=affect_to_another_reporter&action=update");
$this->form_title = "Update new reporter";

//connexion to the data base
$mydb = new DB_nextbug;
$query = sprintf("UPDATE bug
SET bug_reporter = 'current_user'
WHERE bug_reporter = 'new_user'",$this->bug_reporter);
$mydb->query($query);
printf("<span class=txbbleu>New reporter %s updated</SPAN><BR><HR>");
}
}// end constructor

// Preparation des champs ==> construit les objets du formulaire
// Pas de parametre
function setup_fields() {
$DB_lst = new DB_nextbug;
// Construction de la premiere boite de selection
$lst1 = $DB_lst->get_user_list();
$title1 = sprintf("Select the current reporter" );
$this->form_data->add_element(array(
"type" =>"select",
"name" =>"current_user",
"options" =>$lst1,
"size" =>1 ));

// Construction de la deuxieme boite de selection
$lst2 = $DB_lst->get_user_list();
$title2 = sprintf("Select the new reporter" );
$this->form_data->add_element(array
"type" =>"select",
"name" =>"new_user",
"options" =>$lst2,
"size" =>1 ));

$this->form_data->add_element(array(
"name" => "submit",
"type" => "image",
"src" => "image/submit.gif" ));
}//end of setup_fields
}// end class frm_affect_to_another_reporter

... Oui je sais c pas simple :?
alors si qq'un peut m'aider ça me fera grand plaisir !
:D
Merci

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

19 juil. 2005, 10:42

Modération : Alors...
1/ Merci d'éditer ton message et de mettre tout ton long code PHP entre balises [ PHP ] [ /PHP ] (on a même un petit bouton prévu à cet effet, entre Quote et Code !

2/ Pour les problèmes de requête, il y a un forum "Base de données" où les spécialistes se pressent pour répondre à tes questions :lol:...hum, plus sérieusement : regarde le filme "How to post on a forum" de ma signature, tu apprendras beaucoup.

Bon courage...
Modifié en dernier par mere-teresa le 19 juil. 2005, 10:43, modifié 1 fois.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

19 juil. 2005, 10:43

effectivement c'est pas simple, mais ça aiderait pas mal si tu éditais ton post pour utiliser les balises [ php]
 pour encadrer ton code

 merci ;)

Invité
Invité n'ayant pas de compte PHPfrance

19 juil. 2005, 15:01

J'ai fini par trouvé la solution. donc je vais enfin pouvoir passer à autre chose.

Par contre, je ne sais pas comment mettre [résolu] ...
Ciao
:wink:

Petit nouveau ! | 7 Messages

19 juil. 2005, 15:04

c'est ça de vouloir faire tout vite
c'est bon j'ai trouvé :idea:

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

19 juil. 2005, 15:08

J'ai fini par trouvé la solution. donc je vais enfin pouvoir passer à autre chose.
Peux tu expliquer brièvement ta solution ?
Si quelqu'un a le même problème, il sera content
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Petit nouveau ! | 7 Messages

19 juil. 2005, 16:04

en fait j'y étais presque mais ma requete ne fonctionnait pas à cause des double quote "
et puis dans ma fonction function setup_fields() qui permet de construire le formulaire, j'avais construit une liste déroulante que j'avais appelé new_user alors qu'en fait il fallait que je fasse la distinction entre les 2 listes déroulantes donc j'en ai construit 2 que j'ai appelé current_user et new_user. Bon je sais pas si c'est très clair parce qu'il y a des références à pleins de fichiers différents et quand on n'a pas le code et les fichiers sous les yeux c'est pas facile...

voici la bonne solution :
...
//connexion to the data base
$mydb 	 = new DB_nextbug;
$query   = sprintf("UPDATE bug 
                            SET bug_reporter  = $_POST[new_user]
	            WHERE bug_reporter = $_POST[current_user]", $this->bug_reporter, $bug_reporter);
$mydb->query($query);
...
// et mon formulaire
function setup_fields() {
 $DB_lst = new DB_nextbug;
 // Construction du premier menu déroulant
 // Appel de la fonction get_user_list qui permet de lister tous les  utilisateurs
 $lst1    = $DB_lst->get_user_list();
 $title1  = sprintf("Select the current reporter" );
 $this->form_data->add_element(array(	
                              "type"	=>"select",
                              "name"	=>"current_user",			              "value"        =>"",
	              "options"     =>$lst1,
                              "size"	=>1 ));
 // Construction du deuxieme menu déroulant
 // Appel de la fonction get_user_list qui permet de lister tous les utilisateurs
 $lst2    = $DB_lst->get_user_list();
 $title2  = sprintf("Select the new reporter" );
 $this->form_data->add_element(array(	
  	               "type"	=>"select",
            	               "name"	=>"new_user",
                               "options"    =>$lst2,
	               "size"         =>1 ));
 $this->form_data->add_element(array( 	
		"name"	=> "submit", 
		"type"  	=> "image", 			                "src"         => "image/submit.gif" ));
 }//end of setup_fields
...
D'ailleurs je me posais une question quant à la récupération des valeurs de la base avec $_POST : Pourquoi parfois on a besoin de mettre des quote, des double quote ou rien du tout ... comme ça :
$_POST["new_user"] ou $_POST['new_user'] ou $_POST[new_user]
si qq'un peut m'expliquer, je sais pas... Il doit y avoir une explication logique !
Merci
:)
[/php]

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

19 juil. 2005, 16:10

Pourquoi parfois on a besoin de mettre des quote, des double quote ou rien du tout ... comme ça :
$_POST["new_user"] ou $_POST['new_user'] ou $_POST[new_user]
A l'origine, $_POST n'a pas besoin de " ou de ' pour retrouver un nom d'index SAUF si ce nom contient un espace (new user)

Et comme il vaut mieux les mettres quand ça sert à rien plutôt que de les oublier quand on en a besoin, il vaut mieux les mettres tout le temps. De plus, il vaut mieux éviter de créer des noms qui contiennent des espaces

Ensuite, si tu mets des ", php est capable d'interpreter les variables php qui sont contenu dans la chaine alors que ' prend la chaine telle quelle

exemple
$i = 1;

echo $_POST["test$i"]; //va afficher le contenu de l'index test1
echo $_POST['test$i']; //va afficher le contenu de l'index test$1
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Petit nouveau ! | 7 Messages

20 juil. 2005, 08:47

merci bp pour cette réponse

ce que j'ai du mal à comprendre quand meme c'est que quand je mets des quote ça ne fonctionne pas. J'en avais toujours mis auparavant et là je ne dois rien mettre pour que ça fonctionne