Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
537 connectés 

 



Pour ou contre du changement sur le topic ?


 
35.7 %
 5 votes
1.  Oui, faq / bonnes pratiques + blabla@php
 
 
0.0 %
        0 vote
2.  Oui, blabla@php uniquement
 
 
7.1 %
 1 vote
3.  Ce topic mérite la poubelle. Pauvre poubelle
 
 
21.4 %
 3 votes
4.  Non, ce topic reste tel quel
 
 
35.7 %
 5 votes
5.  Obiwan n'aime pas le php
 

Total : 16 votes (2 votes blancs)
Ce sondage est clos, vous ne pouvez plus voter
 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  63  64  65  66  67  68
Auteur Sujet :

blabla@php | faq et bonnes pratiques page 1

n°2260616
art_dupond
je suis neuneu... oui oui !!
Posté le 18-06-2015 à 09:45:16  profilanswer
 

Reprise du message précédent :
hello :)
 
ça fait mille an que j'ai plus fait de php et je vois qu'apparemment php 5.3 n'est plus supporté :ange:  
 
 
du coup il faut que j'upgrade mon serveur mais je vois qu'il y a 3 millions de nouvelles version de php : 5.4, 5.5, 5.6 (et 7 :o)
 
 
Bête question : il y a des versions conseillées ou déconseillées ?
 
 
merci :)


---------------
oui oui
mood
Publicité
Posté le 18-06-2015 à 09:45:16  profilanswer
 

n°2260617
kao98
...
Posté le 18-06-2015 à 09:47:05  profilanswer
 

art_dupond a écrit :

hello :)
 
ça fait mille an que j'ai plus fait de php et je vois qu'apparemment php 5.3 n'est plus supporté :ange:  
 
 
du coup il faut que j'upgrade mon serveur mais je vois qu'il y a 3 millions de nouvelles version de php : 5.4, 5.5, 5.6 (et 7 :o)
 
 
Bête question : il y a des versions conseillées ou déconseillées ?
 
 
merci :)


La dernière :o
 
Elle s'améliorent de version en version :jap:


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°2260619
art_dupond
je suis neuneu... oui oui !!
Posté le 18-06-2015 à 09:54:40  profilanswer
 

pas de risque de trucs plus compatible avec des anciennes applications ?

 


edit: ok, j'ai trouvé les Backward incompatible changes :)

 


merci :jap:


Message édité par art_dupond le 18-06-2015 à 09:58:39

---------------
oui oui
n°2260620
TheCreator
zwiiiii and then shbrouk tak
Posté le 18-06-2015 à 10:01:03  profilanswer
 

tu mets à jour et tu vois ce qui explose :o


---------------
- "Bon ! Guethenoc, vous remboursez Roparzh." - "Non." - "Très bien. Roparzh, vous l'avez dans l'os."
n°2260622
art_dupond
je suis neuneu... oui oui !!
Posté le 18-06-2015 à 10:02:51  profilanswer
 

Je voulais juste savoir si je devais me construire un bunker avant :o


---------------
oui oui
n°2260624
kao98
...
Posté le 18-06-2015 à 10:22:24  profilanswer
 

En général, ils listent plutôt bien les changements non rétro-compatibles, et de façon simple et claires.
 
Bah, à ce que je vois, tu as trouvé :)


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°2263360
kontas
Photographe amateur daltonien
Posté le 27-07-2015 à 15:52:56  profilanswer
 

Salut à tous, j'ai une petite question sur les bonnes pratiques à avoir en programmation orienté objet.
 
Quelle est la méthode la plus logique parmi ses deux (ou pourquoi pas une troisième ^^), sur l'utilisation des objets pour l'insertion en base de données. L'une je passe les valeurs à ajouter dans les paramètres de la méthode et l'autre je défini les valeurs des variables de l'objet
 
 
Méthode 1
 

Code :
  1. class maClasse{
  2. var $id;
  3. var $valeur;
  4. function update($id,$valeur){
  5.   $query = "UPDATE table SET valeur = '".$valeur."' WHERE id='".$id."' ";
  6.   $result = mysqli_query ($link,$query);
  7.   etc .....
  8. }
  9. }
  10. $maClasse = new maClasse;
  11. $maClasse->update($id,$valeur);


 
 
 
Méthode 2
 

Code :
  1. class maClasse{
  2. var $id;
  3. var $valeur;
  4. function update(){
  5.   $query = "UPDATE table  SET valeur = '".$this->valeur."' WHERE id='".$this->id."' "
  6.   $result = mysqli_query ($link,$query);
  7.   etc .....
  8. }
  9. }
  10. $maClasse = new maClasse;
  11. $maClasse->id = 10;
  12. $maClasse->valeur = 'test';
  13. $maClasse->update();


 
 
Merci

n°2263364
skeye
Posté le 27-07-2015 à 16:05:21  profilanswer
 

solution 3 (vite fait directement ici, peut y avoir des conneries):

 
Code :
  1. class maClasse{
  2. protected $id;
  3. protected $valeur;
  4.  
  5. function __construct($id, $val){
  6. ...
  7. }
  8.  
  9. function save(){
  10. if(this->existeDeja(){
  11. $this->update();
  12. }
  13. else{
  14. $this->insert()
  15. }
  16. }
  17.  
  18. protected function update(){
  19.  $query = "UPDATE table  SET valeur = '".$this->valeur."' WHERE id='".$this->id."' "
  20.  $result = mysqli_query ($link,$query);
  21.  etc .....
  22. }
  23.  
  24. protected function insert(){
  25.  $query = "insert into table  ...' "
  26.  $result = mysqli_query ($link,$query);
  27.  etc .....
  28. }
  29.  
  30. }
  31. $maClasse = new maClasse(10, 'test');
  32. $maClasse->save();
 

"var" est déprécié depuis 10 ans ou pas loin, j'aime pas les accès directs aux membres, et pour moi le code en-dehors de ta classe a aucune raison de savoir comment les accès à la base sont gérés.

Message cité 1 fois
Message édité par skeye le 27-07-2015 à 16:08:19

---------------
Can't buy what I want because it's free -
n°2263366
kontas
Photographe amateur daltonien
Posté le 27-07-2015 à 16:41:35  profilanswer
 

Merci de ta réponse.
 
Pour le Var je ne le met jamais en php, c'est a cause de mes récents travaux en java-script :P.
 
Donc dans ton constructeur tu viens mettre à jours les valeurs des membres (variables) défini en protected.
 
C'est intéressant, par contre, souvent mes classes me servent également à récupérer des valeurs. Donc ca voudrais dire que dans ce cas là, lors de la création de l'objet je dois passer des paramètres vide au constructeur ?!
 
Si tu n'aime pas les accès direct aux membres (variables) des classes, comment fait tu pour exploiter leurs valeurs dans le reste du code ?
 
 

n°2263388
skeye
Posté le 27-07-2015 à 20:25:14  profilanswer
 

kontas a écrit :

Merci de ta réponse.

 

Pour le Var je ne le met jamais en php, c'est a cause de mes récents travaux en java-script :P.

 

Donc dans ton constructeur tu viens mettre à jours les valeurs des membres (variables) défini en protected.

 

C'est intéressant, par contre, souvent mes classes me servent également à récupérer des valeurs. Donc ca voudrais dire que dans ce cas là, lors de la création de l'objet je dois passer des paramètres vide au constructeur ?!

 

le plus souvent avec des factory methods...genre

 
Code :
  1. class Toto{
  2. [...]
  3.  
  4. static getTotoById($id){
  5.  
  6. $sql = "select * from table where id = :id"
  7.  
  8. ...
  9.  
  10. return new Toto($id, $uneAutreValeurRécupérée, $bidule);
  11. }
 

ainsi tu n'as pas besoin de savoir en-dehors de la classe comment ses données sont stockées, tu te contentes de lui demander de te fournir elle-même l'instance qui t'intéresse.

 
kontas a écrit :


Si tu n'aime pas les accès direct aux membres (variables) des classes, comment fait tu pour exploiter leurs valeurs dans le reste du code ?

 


 

avec des accesseurs.

Message cité 1 fois
Message édité par skeye le 27-07-2015 à 20:28:30

---------------
Can't buy what I want because it's free -
mood
Publicité
Posté le 27-07-2015 à 20:25:14  profilanswer
 

n°2263390
ratibus
Posté le 27-07-2015 à 21:56:27  profilanswer
 

skeye a écrit :

solution 3 (vite fait directement ici, peut y avoir des conneries):
 

Code :
  1. class maClasse{
  2. protected $id;
  3. protected $valeur;
  4.  
  5. function __construct($id, $val){
  6. ...
  7. }
  8.  
  9. function save(){
  10. if(this->existeDeja(){
  11. $this->update();
  12. }
  13. else{
  14. $this->insert()
  15. }
  16. }
  17.  
  18. protected function update(){
  19.  $query = "UPDATE table  SET valeur = '".$this->valeur."' WHERE id='".$this->id."' "
  20.  $result = mysqli_query ($link,$query);
  21.  etc .....
  22. }
  23.  
  24. protected function insert(){
  25.  $query = "insert into table  ...' "
  26.  $result = mysqli_query ($link,$query);
  27.  etc .....
  28. }
  29.  
  30. }
  31. $maClasse = new maClasse(10, 'test');
  32. $maClasse->save();


 
"var" est déprécié depuis 10 ans ou pas loin, j'aime pas les accès directs aux membres, et pour moi le code en-dehors de ta classe a aucune raison de savoir comment les accès à la base sont gérés.


Solution 4 : utiliser un ORM du marché qui a déjà fait ses preuves (Doctrine, Propel). Là y a des failles de sécurité partout :D

n°2263391
ydalb
In Crêpes n' Cidre I Trust!
Posté le 27-07-2015 à 21:58:57  profilanswer
 

Pomm :o


Message édité par ydalb le 27-07-2015 à 21:59:36

---------------
:o
n°2263392
skeye
Posté le 27-07-2015 à 22:13:51  profilanswer
 

ratibus a écrit :


Solution 4 : utiliser un ORM du marché qui a déjà fait ses preuves (Doctrine, Propel). Là y a des failles de sécurité partout :D


les ORM ça pue du fion.:o
les failles c'était pas le sujet, j'ai copié/collé :D


Message édité par skeye le 27-07-2015 à 22:14:26

---------------
Can't buy what I want because it's free -
n°2263413
kontas
Photographe amateur daltonien
Posté le 28-07-2015 à 10:44:22  profilanswer
 

skeye a écrit :

 

le plus souvent avec des factory methods...genre

 
Code :
  1. class Toto{
  2. [...]
  3.  
  4. static getTotoById($id){
  5.  
  6. $sql = "select * from table where id = :id"
  7.  
  8. ...
  9.  
  10. return new Toto($id, $uneAutreValeurRécupérée, $bidule);
  11. }
 

ainsi tu n'as pas besoin de savoir en-dehors de la classe comment ses données sont stockées, tu te contentes de lui demander de te fournir elle-même l'instance qui t'intéresse.

 


 
skeye a écrit :

 

avec des accesseurs.

 

Si je comprend bien tu défini la méthode getTotoById en static pour ne pas avoir besoin de créer un objet pour l'appeler.

 

Puis cette méthode renvoi un objet de cette classe avec les informations voulu. Je ne savais même pas que l'on pouvais créer un objet a l'intérieur même de la classe :)

 

Je trouve les frameWork complet interessant, mais être dépendant d'un système et de son support m'enchante pas trop.


Message édité par kontas le 28-07-2015 à 14:42:36
n°2263434
kontas
Photographe amateur daltonien
Posté le 28-07-2015 à 15:27:47  profilanswer
 

J'ai utilisé la méthode avec succès pour la création de nouvelle entrée, par contre je n'arrive pas à exploité l'objet de retour pour la récupération, j'ai un message comme quoi ma variable n'est pas un objet

 

Fatal error: Call to a member function getIdUtilisateur() on a non-object

 

EDIT, erreur a la noix, oublié de virer un commentaire

 


Cette méthode est intéressante, mais je trouve quand même assez contraignant de ne plus pouvoir lister les variables disponibles de l'objet pendant la programmation sous aptana, par contre je suis étonné de pouvoir faire un print_r de l'objet $utilisateur et d'avoir le contenu complet de ce dernier, alors que les variables était en protégées. Un echo de $utilisateur->idutilisateur donnera un erreur de sécurité. Pourquoi une telle différence entre le tableau de l'objet et l'accès direct à la variable ?

 
Code :
  1. class utilisateur{
  2. protected $idutilisateur;
  3. protected $utilisateurNom;
  4. protected $utilisateurPrenom;
  5. protected $utilisateurVille;
  6. protected $utilisateurAdresse;
  7. protected $utilisateurCodePostal;
  8. protected $utilisateurPays;
  9. protected $utilisateurTel;
  10. protected $utilisateurMail;
  11. protected $utilisateurDateInscription;
  12. protected $utilisateurActif;
  13. protected $utilisateurMdp;
  14. protected $utilisateurAdressePaypal;
  15. function __construct( $idutilisateur,
  16.       $utilisateurNom,
  17.       $utilisateurPrenom,
  18.       $utilisateurVille,
  19.       $utilisateurAdresse,
  20.       $utilisateurCodePostal,
  21.       $utilisateurPays,
  22.       $utilisateurTel,
  23.       $utilisateurMail,
  24.       $utilisateurDateInscription,
  25.       $utilisateurActif,
  26.       $utilisateurMdp,
  27.       $utilisateurAdressePaypal){
  28.  $this->idutilisateur    = $idutilisateur;
  29.  $this->utilisateurNom    = $utilisateurNom;
  30.  $this->utilisateurPrenom   = $utilisateurPrenom;
  31.  $this->utilisateurVille    = $utilisateurVille;
  32.  $this->utilisateurAdresse   = $utilisateurAdresse;
  33.  $this->utilisateurCodePostal  = $utilisateurCodePostal;
  34.  $this->utilisateurPays    = $utilisateurPays;
  35.  $this->utilisateurTel    = $utilisateurTel;
  36.  $this->utilisateurMail    = $utilisateurMail;
  37.  $this->utilisateurDateInscription = $utilisateurDateInscription;
  38.  $this->utilisateurActif    = $utilisateurActif;
  39.  $this->utilisateurMdp    = $utilisateurMdp;
  40.  $this->utilisateurAdressePaypal  = $utilisateurAdressePaypal;
  41. }
  42. public function getIdUtilisateur(){
  43.  return $this->idutilisateur;
  44. }
  45. static function getUtilisateurInfo($pdo,$idutilisateur){
  46.  $query  = "SELECT * FROM utilisateur WHERE idutilisateur = :idutilisateur ";
  47.  $prep   = $pdo->prepare($query);
  48.  $prep->bindValue(':idutilisateur', $idutilisateur, PDO::PARAM_INT);
  49.  try {
  50.     $prep->execute();
  51.     $data = $prep->fetch();
  52.   
  53.     $retour = new utilisateur($data['idutilisateur'],'','','','','','','',$data['utilisateurMail'],'','',$data['utilisateurMdp'],'');
  54.  }
  55.  catch (PDOException $e) {
  56.   
  57.     $retour = FALSE;
  58.   exit('<b>Catched exception at line '. $e->getLine() .' :</b> '. $e->getMessage());
  59.  }
  60.  if(isset($messages)){
  61.   foreach($messages as $message)
  62.   {
  63.    echo '<p>Le ', $message->date, ' par ', $message->auteur, ' : <br />', $message->contenu, '</p>';
  64.   }
  65.  }
  66.      
  67.  //Clore la requête préparée
  68.  $prep->closeCursor();
  69.  unset($prep);
  70.  //return $retour;
  71. }
  72. }
  
Code :
  1. $utilisateur = utilisateur::getUtilisateurInfo($pdo,1);
  2. $utilisateur->getIdUtilisateur();
 


Merci


Message édité par kontas le 28-07-2015 à 15:50:40
n°2263435
TheCreator
zwiiiii and then shbrouk tak
Posté le 28-07-2015 à 15:30:17  profilanswer
 

bah t'as commenté le return de ton getter non?


---------------
- "Bon ! Guethenoc, vous remboursez Roparzh." - "Non." - "Très bien. Roparzh, vous l'avez dans l'os."
n°2263437
kontas
Photographe amateur daltonien
Posté le 28-07-2015 à 15:37:26  profilanswer
 

Lol, mais quel idiot !!

n°2263449
kontas
Photographe amateur daltonien
Posté le 28-07-2015 à 19:11:43  profilanswer
 

Pourquoi ne pas utilisé une méthode static pour l'insertion en base de données tout comme le la récupération des données. Dans tous les cas, ne faudrait t'il pas passer par les accesseur pour validé l'intégrité des données avant l'insertion ?
 
Je suis en train de regarder pour les accesseurs, et du coup cela donne ca :
 

Code :
  1. class utilisateur{
  2. protected $idutilisateur;
  3. protected $utilisateurNom;
  4. protected $utilisateurPrenom;
  5. protected $utilisateurVille;
  6. function __construct( $idutilisateur,
  7.       $utilisateurNom,
  8.       $utilisateurPrenom,
  9.       $utilisateurVille){
  10.  $this->setIdUtilisateur($idutilisateur);
  11.  $this->setUtilisateurNom($utilisateurNom);
  12.  $this->utilisateurPrenom   = $utilisateurPrenom;
  13.  $this->utilisateurVille    = $utilisateurVille;
  14. }
  15. /**
  16.  * Vérifie que ID est bien numérique
  17.  */
  18. public function setIdUtilisateur($idutilisateur){
  19.  $idutilisateur = (int) $idutilisateur;
  20.  if ($idutilisateur > 0)
  21.     {
  22.       $this->idutilisateur = $idutilisateur;
  23.     }
  24. }
  25. /**
  26.  * Vérifie que utilisateurNom est bien alphanum
  27.  */
  28. public function setUtilisateurNom($utilisateurNom){
  29.  if(ctype_alnum($utilisateurNom)){
  30.   $this->utilisateurNom = $utilisateurNom;
  31.  }
  32. }
  33. }


 
 
merci :)

n°2263450
skeye
Posté le 28-07-2015 à 19:17:03  profilanswer
 

Quand tu insères tes données dans la base, tu as déjà l'objet. C'est bien plus cohérent de faire  

Code :
  1. $toto->save();


 
plutôt que  
 

Code :
  1. Toto::save($toto);


 
Et pour ton code, fais ton choix : soit tu utilises des setters partout, soit seulement en-dehors de ta classe, mais évite de mélanger les styles dans ta classe...
 
Question subsidiaire : pourquoi préfixer les membres de ta classe par le nom de celle-ci? C'est redondant...


---------------
Can't buy what I want because it's free -
n°2263453
kontas
Photographe amateur daltonien
Posté le 28-07-2015 à 19:35:59  profilanswer
 

skeye a écrit :

Quand tu insères tes données dans la base, tu as déjà l'objet. C'est bien plus cohérent de faire  

Code :
  1. $toto->save();


 
plutôt que  
 

Code :
  1. Toto::save($toto);


 
Et pour ton code, fais ton choix : soit tu utilises des setters partout, soit seulement en-dehors de ta classe, mais évite de mélanger les styles dans ta classe...
 
Question subsidiaire : pourquoi préfixer les membres de ta classe par le nom de celle-ci? C'est redondant...


 
Si justement on ne créer pas l'objet, mais l'objet pourrai être créer à la fin de la méthode static
 

Code :
  1. $nouvelUtilisateur = utilisateur::creer($id,$nom,$etc);


 
Il est évident que si j'utilise les setters, je les utiliserai de partout, c'est justement pour montrer les différences :)
 
Pour les préfixes, c'est une vielle (et mauvaise ?!) habitude du à MysqlWorkBench, et parfois ca m'évite de me retrouver avec des conflits, et puis je sais à quoi ca correspond exactement en base (moi petit cerveau :P)

n°2263472
skeye
Posté le 28-07-2015 à 23:40:21  profilanswer
 

kontas a écrit :

 

Si justement on ne créer pas l'objet, mais l'objet pourrai être créer à la fin de la méthode static

 
Code :
  1. $nouvelUtilisateur = utilisateur::creer($id,$nom,$etc);


 

Le jour où tu as un membre de plus à enregistrer dans ton objet il te faut revoir la classe ET tous les appels à cette méthode! Et pour tous tes objets existants il te faut une méthode d’instance ou une méthode de classe qui prend une instance en paramètre...autant n'avoir tout ça qu'une fois!

 
Code :
  1. $nouvelUtilisateur = new Utilisateur($id,$nom,$etc);
  2. $nouvelUtilisateur->save();
 
kontas a écrit :


Pour les préfixes, c'est une vielle (et mauvaise ?!) habitude du à MysqlWorkBench, et parfois ca m'évite de me retrouver avec des conflits, et puis je sais à quoi ca correspond exactement en base (moi petit cerveau :P)

 

Dans la base pourquoi pas si ça te chante, mais aucune raison de lier exactement le modèle de ton appli aux objets en base (d'où mon aversion des ORMs, qui ont tendance à faire ce genre de choses...).


Message édité par skeye le 28-07-2015 à 23:45:44

---------------
Can't buy what I want because it's free -
n°2263486
kontas
Photographe amateur daltonien
Posté le 29-07-2015 à 10:28:20  profilanswer
 

Je ne suis pas sur de comprendre ton explication, en faisant quelques recherches je suis tombé quelques explication des usages des méthode static, mais c'est pareil... un poil abstrait pour moi

n°2263487
skeye
Posté le 29-07-2015 à 10:41:45  profilanswer
 

kontas a écrit :

Je ne suis pas sur de comprendre ton explication, en faisant quelques recherches je suis tombé quelques explication des usages des méthode static, mais c'est pareil... un poil abstrait pour moi


 
C'est simple, mettons que tu as une instance de Toto à enregistrer, tu vas pas faire ça :
 

Code :
  1. Toto::enregistrer($toto->getId(), $toto->getName(), $toto->getBidule());


 
Ce serait totalement ridicule et peu lisible...tandis qu'un simple
 

Code :
  1. $toto->enregistrer()


 
est simple et bien plus lisible. Et pour le cas où tu n'as pas encore l'instance mais que tu as les données, au lieu de refaire le boulot via une méthode statique mieux vaut créer l'objet et utiliser la méthode d'instance...


---------------
Can't buy what I want because it's free -
n°2263490
kontas
Photographe amateur daltonien
Posté le 29-07-2015 à 11:20:35  profilanswer
 

skeye a écrit :


 
C'est simple, mettons que tu as une instance de Toto à enregistrer, tu vas pas faire ça :
 

Code :
  1. Toto::enregistrer($toto->getId(), $toto->getName(), $toto->getBidule());


 
Ce serait totalement ridicule et peu lisible...tandis qu'un simple
 

Code :
  1. $toto->enregistrer()


 
est simple et bien plus lisible. Et pour le cas où tu n'as pas encore l'instance mais que tu as les données, au lieu de refaire le boulot via une méthode statique mieux vaut créer l'objet et utiliser la méthode d'instance...


 
Oky, donc si je comprend bien, l'idée est de ne pas refaire appel au méthode get à l'intérieur de la méthode "enregistrer", qui elle ce contentera de faire appel aux variables de la manière $this->maDonnée . Ce qui permet par ailleurs, lors d'un changement de traitement de getMaDonnée de ne pas avoir à modifier le contenu de la méthode "enregistrer"

n°2271399
mechkurt
Posté le 11-12-2015 à 11:57:38  profilanswer
 

Quelqu'un peut me dire pourquoi ça, ça marche :

Code :
  1. define('LG', 'fr');
  2. $sql = " SELECT id, titre FROM contenu_trad WHERE lg = '".LG."' ";


Mais ça non :

Code :
  1. define('LG', 'fr');
  2. class Url {
  3.   private $sql = " SELECT id, titre FROM contenu_trad WHERE lg = '".LG."' ";
  4. }


 
Et en bonus un workaround...
Genre http://stackoverflow.com/questions [...] catenating ?


---------------
D3
n°2271402
ratibus
Posté le 11-12-2015 à 12:24:56  profilanswer
 

mechkurt a écrit :

Quelqu'un peut me dire pourquoi ça, ça marche :

Code :
  1. define('LG', 'fr');
  2. $sql = " SELECT id, titre FROM contenu_trad WHERE lg = '".LG."' ";


Mais ça non :

Code :
  1. define('LG', 'fr');
  2. class Url {
  3.   private $sql = " SELECT id, titre FROM contenu_trad WHERE lg = '".LG."' ";
  4. }


 
Et en bonus un workaround...
Genre http://stackoverflow.com/questions [...] catenating ?


 
Tout est là : http://php.net/manual/en/migration56.new-features.php
https://3v4l.org/Z0umX

n°2271409
mechkurt
Posté le 11-12-2015 à 15:27:10  profilanswer
 

Ok, mais du coups à part passer en 5.6 on peut pas coller de constante dans une classe...
 
Bon je me suis débrouille avec un string simple et un sprintf au moment de la requête, mais bon je ne comprends pas pourquoi PHP se comporte comme ça !  :pt1cable:


---------------
D3
n°2273209
nitrafb
Posté le 11-01-2016 à 13:13:14  profilanswer
 

Bonjour à tous et bonne année 2016 !  
 
Étudiant en Finance, j'ai un partiel de python qui consiste à écrire un code résolvant un Sudoku.  
J'ai plusieurs soucis car je suis vraiment débutant en python.  
- Tout d'abord je compte utiliser une stratégie de Backtracking. Affecter 0 à toutes les cellules vides de la grille initiale et tester tous les entiers de 1 à 9 sur la ligne, la colonne et le sous-carré de ma cellule. Si chaque test répond vrai, alors j'affecte la valeur testée et je passe à la cellule suivante.  
 
Toutefois je ne sais pas comment importer ma grille sur ma commande ou sur mon interpréteur python.  
Je ne sais pas non plus comment créer un dictionnaire qui définit de façon clair mes lignes, mes colonnes, mes sous-carrés et mes 81 cellules. Je ne sais sous quelle forme l'écrire.  
 
Ensuite on nous demande d'écrire une fonction qui nous réaffiche la matrice complète à chaque étape, ie dès qu'un nouveau chiffre est apparu dans la grille. Et là c'est le même problème. Comment à partir d'un dictionnaire définie linéairement comme une combinaison (key, value) obtenir une grille bien délimitée de Sudoku au niveau de l'affichage ?  
 
Si quelqu'un pouvais m'aider, ce serait vraiment hyper cool car c'est vrai que je piétine carrément.  
 
Bonne fin de week-end à tous et merci pour votre aide :) !

n°2273211
skeye
Posté le 11-01-2016 à 13:34:57  profilanswer
 

1) ici c'est php, pas python
2) démerde toi, on ne fait pas les devoirs.


---------------
Can't buy what I want because it's free -
n°2273214
TheCreator
zwiiiii and then shbrouk tak
Posté le 11-01-2016 à 13:53:11  profilanswer
 

et bienvenue sur hfr :whistle:


---------------
- "Bon ! Guethenoc, vous remboursez Roparzh." - "Non." - "Très bien. Roparzh, vous l'avez dans l'os."
n°2273215
skeye
Posté le 11-01-2016 à 13:58:21  profilanswer
 

TheCreator a écrit :

et bienvenue sur hfr :whistle:


 
http://forum.hardware.fr/hfr/Progr [...] 4544_1.htm
 

Citation :


[09] Dans la mesure du possible, veuillez ne pas trop dévier du sujet d'origine.  
[0C] On ne fait pas le boulot à votre place.
[0D] De la même manière, les demandes de résolutions d'exercices ne seront pas acceptées  


---------------
Can't buy what I want because it's free -
n°2273217
ydalb
In Crêpes n' Cidre I Trust!
Posté le 11-01-2016 à 14:06:56  profilanswer
 

nitrafb a écrit :

Bonjour à tous et bonne année 2016 !  
 
Étudiant en Finance, j'ai un partiel de python qui consiste à écrire un code résolvant un Sudoku.  
J'ai plusieurs soucis car je suis vraiment débutant en python.  
- Tout d'abord je compte utiliser une stratégie de Backtracking. Affecter 0 à toutes les cellules vides de la grille initiale et tester tous les entiers de 1 à 9 sur la ligne, la colonne et le sous-carré de ma cellule. Si chaque test répond vrai, alors j'affecte la valeur testée et je passe à la cellule suivante.  
 
Toutefois je ne sais pas comment importer ma grille sur ma commande ou sur mon interpréteur python.  
Je ne sais pas non plus comment créer un dictionnaire qui définit de façon clair mes lignes, mes colonnes, mes sous-carrés et mes 81 cellules. Je ne sais sous quelle forme l'écrire.  
 
Ensuite on nous demande d'écrire une fonction qui nous réaffiche la matrice complète à chaque étape, ie dès qu'un nouveau chiffre est apparu dans la grille. Et là c'est le même problème. Comment à partir d'un dictionnaire définie linéairement comme une combinaison (key, value) obtenir une grille bien délimitée de Sudoku au niveau de l'affichage ?  
 
Si quelqu'un pouvais m'aider, ce serait vraiment hyper cool car c'est vrai que je piétine carrément.  
 
Bonne fin de week-end à tous et merci pour votre aide :) !


 
http://lmgtfy.com/?q=python+tableau+2D
 
De rien :jap:


---------------
:o
n°2273346
kontas
Photographe amateur daltonien
Posté le 13-01-2016 à 12:24:55  profilanswer
 

J'aurai besoin de votre avis sur cette méthode.
 
J'ai une classe qui défini un objet (un utilisateur), ainsi qu'une classe qui s'occupe des traitements en base pour les utilisateurs.
 
Quand je fais l'insertion d'un utilisateur:
 
1/ Je déclare un nouvel objet utilisateur
2/ J'alimente mon objet avec  $utilisateur->setNom(), etc
3/ Je déclare un nouvel objet utilisateurSql
4/ J'exécute l'insertion en passant en argument mon objet utilisateur correctement alimenté $utilisateurSql->nouveau($utilisateur)
 
Pour ca je pense être relativement dans le bon, seulement est il intéressant vis a vis de la méthode nouveau de renvoyer un objet utilisateur complété avec l'id que MySQL lui a attribué pendant l'insertion au lieu de simplement renvoyer un l'id.
 
Quand pensez  vous  :D

Message cité 1 fois
Message édité par kontas le 13-01-2016 à 12:31:01
n°2273347
skeye
Posté le 13-01-2016 à 12:27:15  profilanswer
 

kontas a écrit :


Quand pensez vous


 
Uniquement le dimanche entre 8h et 8h05.
 


---------------
Can't buy what I want because it's free -
n°2273348
ydalb
In Crêpes n' Cidre I Trust!
Posté le 13-01-2016 à 12:27:53  profilanswer
 

En général, avant de m'endormir.


---------------
:o
n°2273349
kontas
Photographe amateur daltonien
Posté le 13-01-2016 à 12:29:55  profilanswer
 

Apparemment plus que moi en tout cas :O

n°2273350
skeye
Posté le 13-01-2016 à 12:33:50  profilanswer
 

Plus sérieusement, je crains que tu ne sépares pas terriblement bien les couches, vu ce que tu expliques.

 

Comme je le comprends, tu fais ça:

 
Code :
  1. $u = new Utilisateur(...);
  2. $u->setBidule(...);
  3.  
  4. $uSql = new UtilisateurSql(...);
  5. $id = $uSql->nouveau($u);
  6.  
  7. $u->setId($id);
 


Vu d'ici, pour faire "propre" il faudrait plutôt que ça ressemble à ça (grosso merdo, hein...:o ):

 
Code :
  1. $u = new Utilisateur(...);
  2. $u->setBidule(...);
  3. $u->save();
 

...et dans ta méthode save():

 
Code :
  1. $uSql = new UtilisateurSql(...);
  2.  
  3. if($this->id === null){
  4.  $this->id = $uSql->nouveau($this);
  5. }
  6. else{
  7.  $uSql->mettreAJour($this);
  8. }


Message édité par skeye le 13-01-2016 à 12:34:24

---------------
Can't buy what I want because it's free -
n°2273352
kontas
Photographe amateur daltonien
Posté le 13-01-2016 à 12:41:45  profilanswer
 

Ok, je comprend bien !! Ca sera quand même plus pratique par la suite.

 

En attendant de tout réécrire, je vais continuer à renvoyer l'id par mes méthodes SQL puis j'aurais plus qu'a faire le changement sur le reste.

 

Merci pour ces conseils :)


Message édité par kontas le 13-01-2016 à 12:46:27
n°2273354
kao98
...
Posté le 13-01-2016 à 14:02:15  profilanswer
 

Après, ça dépend si tu veux de l'ActiveRecord ou du Repository (voir aussi Domain-driven) comme pattern.
 
Le second est un peu plus complexe (mais pas tant que ça). Bon, si c'est pour gérer 3 tables, c'est peut-être pas la peine non plus.


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°2273360
kontas
Photographe amateur daltonien
Posté le 13-01-2016 à 17:31:31  profilanswer
 

Je veux surtout apprendre à coder plus propre et me rapprocher au mieux de ce que ce fait dans les bonnes pratiques. Je vais regarder un peu les liens que tu a posté. Dans le premier lien je vois que dans la catégorie PHP ils font référence a des framework très connus, ca peut valoir le coup que je regarde un peu comment c'est fait.

n°2273366
kontas
Photographe amateur daltonien
Posté le 13-01-2016 à 19:44:36  profilanswer
 

Pour en revenir aux bonnes pratiques,
 
Si j'ai besoin de récupérer la liste des mes utilisateurs, habituellement je fais  
 

Code :
  1. $utilisateurSQL = new utilisateurSql($pdo);
  2. $utilisateur = $utilisateurSQL->getUtilisateur();


 
La méthode getUtilisateur(); me renvoi un tableau avec pour chaque ligne un objet utilisateur.
 
Si je reprend le shéma que vous m'avez indiqué plus haut, je suis plus sensé faire  
 

Code :
  1. $utilisateur = new utilisateur;
  2. $utilisateur->getUtilisateur();


 
et dans ce cas c'est la méthode getUtilisateur qui va ce charger de créer un nouvelle objet $utilisateurSql et de récupérer le résultat ?!
 
C'est sur que le reste du code en serait que plus propre et "simple"
 

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  63  64  65  66  67  68

Aller à :
Ajouter une réponse
 

Sujets relatifs
Problème pour une mise en page sous forme de tableauAfficher sur une page web directement le resultat d'une autre page web
[PHP] Fonction include plus rapide qu'un bout de code dans la page ?Ouvrir un fichier HTML en fin de page
[Résolu] Expirer la cache au niveau de la pageexecuter une page php sans rien afficher
inserer dans ma page wikiControler le changement de page
Certificat SSL a valider pour chaque élément de pageinstallé un mdp sur une page web avec Namo
Plus de sujets relatifs à : blabla@php | faq et bonnes pratiques page 1


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR