Pb foreach avec classe ( prog objet )

Résolu
Signaler
Messages postés
144
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
22 mars 2006
-
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
-
Bonjour j'ai un probleme pour metre a jour mon objet afin de faire un update dur ma table avec des données recupéré d'un formulaire en methode post.

( mon formulaire reprend tout les elements de mon objet )

$update_user = new user(@$_GET['id_user']);

echo form($actions, $update_user);


foreach($_POST as $key => $value)
{
$update_user->$key=$value;
}
$update_user->modification();

ps : voici le resultat d'un print_r appres un new :

<!--StartFragment --> Objet user retourne : user Object ( [id] => 6 [Nom] => [Prenom] => [login] => 6 [pass] => 6 [mail] => 6 [langage] => 0 [group_id] => 2 [societe] => 6 [tarif] => 0 [remise] => 0 )

merci de votre aide !!

vive PHP !!!, vive la prog !!!

13 réponses

Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Je comprends rien lol...

Bon...

<?php

class Foo {

private $aBar = array (
'bar_id' => 0,
'bar_nom' => '',
'bar_prenom' => ''
);

public function __construct ($barId) {
$this -> aBar['bar_id'] ) $barId;
}

public function setPrivate($aBar) {
foreach ($aBar as $clef => $val) {
if (array_key_exists ($clef, $this -> aBar))
$this -> aBar[$clef] = $val;
}
}
}
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
4
"voici le print_r de mon objet a l''instanciation :

Objet user retourne : user Object ( [id] = > 6 [Nom] => [Prenom] => [login] => 6 [pass] => 6 [mail] => 6 [langage] => 0 [group_id] => 2 [societe] => 6 [tarif] => 0 [remise] => 0 )"

Pas normal. Ta classe doit être construite sur ce modèle :

class user {

public $id;
public $login;
public $prenom;
public $pass; // etc...

public function __construct($id=NULL) {
$this->id = $id;
}

public function update() {
$query = 'UPDATE.....';
mysql_query($query);
}

}

Et hop :
$user = new user;
if ( isset($_POST['id']) ) {
$user->id = $_POST['id'];
$user->login = $_POST['login'];
// etc...
$user->update();
}

Et ca marche. Attention, la classe n'est pas gardé à ton changement de page !
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Salut,

$update_user = new user(@$_GET['id_user']);

hum, if(isset($_GET['id_user']))
{
//ok sinon tu l'as dans l'os
}

Ensuite "voici le resultat d'un print_r" > print_r de quel tableau ? sois plus précis stp

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
144
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
22 mars 2006

Escusez-moi de ne pas avoir été précis !!


Je me re-explique.





Lorsque je fais L'instanciation de ma classe grâce au constructeur de ma classe :




$update_user = new user($îd_user);



Ce qui me renvoie toutes les information sur l’utilisateur en fonction de son id dans un objet.


Le print_r de mon instanciation me donne :




Objet user retourne : user Object ( [id] => 6 [Nom] => [Prenom] => [login] => 6 [pass] => 6 [mail] => 6 [langage] => 0 [group_id] => 2 [societe] => 6 [tarif] => 0 [remise] => 0 )




J’ai un formulairede mise a jour qui affiche toutes ces information, qui son pour certaine ou toutes modifier et renvoyer a la même page par la méthode post.




Ce que je voudraisfaire, c’es demettre a jour mon instanciation afin de retourné mon objet mise a jour a ma classe qui exécuteras la requête de mise a jour.




J’ai procédé de la manière suivante avec une boucle foreach:




// Je récupère toutes les variables post et les insère dans mon objet




foreach ($_POST as $key => $value)


{


$update_user->$$key = addslashes(trim($value));


}






// Puis j’envoie l’objet ainsi modifier a ma fonction modification qui ce chargera de l’insertion en //base




$update_user->modification ();








Voila j’espère avoir été plus claire je débute en prog objet

vive PHP !!!, vive la prog !!!
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Hello,

c'est dangereux ça...
ceci dit, ça va marchouiller. Mais tu ne dis pas quel est ton problème, au juste...?
Messages postés
144
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
22 mars 2006

et bien, je n'arrive a recupéré dans mon objet $update_user les valeur les valeur a mettre a jour, car le but es de de mettre a jour ma base.

donc je dois revoyé mon objet avec toutes les nouvelles valleurs pour que la fonction modification de ma classe puissent executé correctement ca requette de mise a jour UPDATE.

voila un exemple :
voici le print_r de mon objet a l''instanciation :

Objet user retourne : user Object ( [id] = > 6 [Nom] => [Prenom] => [login] => 6 [pass] = > 6 [mail] => 6 [langage] => 0 [group_id] => 2 [societe] => 6 [tarif] => 0 [remise] => 0 )

l'utilisateur dans le formulaire met a jiur le prenom et le login ( par exemple ) ce squi me donnerais :

Objet user retourne : user Object ( [id] => 6 [Nom] => [Prenom] => frederic
[login] => fred [pass] => 6 [mail] => 6 [langage] => 0 [group_id] => 2 [societe] => 6 [tarif] => 0 [remise] => 0 )

je vous met ma fonction cette objet ainssi modifier et renvoyé la fonction de ma classse pirras mettre a jour ma base.

je vous met ma fonction modification de ma classe au cas ou :

function modification()
{
$querry "UPDATE user SET Nom'".$this->Nom."',Prenom ='".$this->Prenom."', login ='".$this->login."', pass ='".$this->pass."', mail ='".$this->mail."', Societe ='".$this->societe."' where id='".$this->id."'";
$result = querry($querry);

}

et ma foonction querry qui gere la connexion et l'execution de la requette :
function querry ($querry)
{
$host = "localhost";
$base = "base";
$user = "root";
$pwd = "";

$connexion = mysql_connect($host,$user, $pwd);
$db = mysql_select_db($base, $connexion);
$result = mysql_query($querry);
mysql_close($connexion);

return $result;

}

ps : pk dite-vous que cela es dangereux ??

vive PHP !!!, vive la prog !!!
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Où est l'intérêt d'une prog objet là dedans ?

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
4
Aucun ici.
L'utilité d'une classe comme ca est inutile car mal exploitée !

La vraie utilité serait de faire quelque chose comme ca :
http://www.phpcs.com/tutoriaux/GESTION-UTILISATEUR-MEMBRE-VERSION-OBJET_344.aspx
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Heu... c'est bien codé mais inutile à mon sens de faire de l'objet pour ça ;-) ça ralentit tout inutilement, m'enfin pourquoi pas...

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
4
Personne a dit que l'objet optimisé tout :)

Cependant, c'est bien plus structuré et plus facile niveau maintenabilité !
Après c'est qu'une question de point de vue... et moi j'ai adhéré à l'objet depuis un bon moment :)
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
C'est sûr, c'est pas mon cas ^^

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
4
C'est parce que t'as pas encore vu toutes les possibilités objet, c'est pour ca :)

Ca viendra peut-être un jour lol =)
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Non c'est parce que je ne cède pas à une mode lente et inutile dans mon cas ;-)

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>