OVH Cloud OVH Cloud

Code incompris

5 réponses
Avatar
Eric
Bonjour,

Dans le cadre d'un stage, je reprend un code PHP fait par plusieurs
personnes avant moi, dont certaines, non expérimentées en PHP, font
des hérésies en programmation, le tout sans documentation aucune
(oui, je sais, je suis sévère, et je ne suis pas mieux qu'eux sur
nombre de points), je m'arrache souvent les cheveux à comprendre
certains bouts de codes, dont celui ci, les commentaires laissés par
mon prédécesseur montre que je n'ai pas été le seul à être
intrigué par ce code :

switch (strtolower($val_nvelle_table))
{
case 'null':
break;
case '$set$':
//A QUOI CA SERT????????????????
$f = "field_$key";
$val_nvelle_table "'".($$f?implode(',',$$f):'')."'";//$$f?????
break;
default:
$val_slash_nvelle_table = addslashes($val_nvelle_table);
$texte_nvelle_table str_replace("\r\n","<br>",$val_slash_nvelle_table);
$val_nvelle_table = "'$texte_nvelle_table'";
break;
}

Bref, ma question : à quelle condition va-t-on rentrer dans le case
'$set$' ?
Question numéro 2 : à quoi sera égal $val_nvelle_table si l'on
rentre dans ce case ?

Merci d'avance pour vos réponses !

PS : Merci de ne pas remuer le couteau dans la plaie : le premier qui
me dit que le code est pourri, que ne pas faire de doc, cépasbien, je
l'étrangle ! ;-)

5 réponses

Avatar
Demosthene
switch (strtolower($val_nvelle_table))
{
case 'null':
break;
case '$set$':
//A QUOI CA SERT????????????????
$f = "field_$key";
$val_nvelle_table "'".($$f?implode(',',$$f):'')."'";//$$f?????
break;
default:
$val_slash_nvelle_table = addslashes($val_nvelle_table);
$texte_nvelle_table str_replace("rn","<br>",$val_slash_nvelle_table);
$val_nvelle_table = "'$texte_nvelle_table'";
break;
}



Bonjour,
Bref, ma question : à quelle condition va-t-on rentrer dans le case
'$set$' ?
Lorsque $val_nvelle_table mis en minuscule donne $set$


Commentaire : Les gens d'avant semble avoir crée un système un peu
complexe en sauvant en base des actions à effectuer sur des données
elles aussi en base ...


Question numéro 2 : à quoi sera égal $val_nvelle_table si l'on
rentre dans ce case ?
Il semble manquer un "=" à la place du grand blanc

Dans le cas ou il y a un "=", $val_nvelle_table devient une chaine de
caractère. Si la variable $field_QuelqueChose est vide $val_nvelle_table
est vide également. Sinon, la variable $field_QuelqueChose est très
vraisemblablement un tableau (implode) transformé en chaine séparé par
des virgules.

Je ne peux pas en dire plus : il faut remonter au modèle de données pour
en savoir plus.

Cordialement

Démosthène

Avatar
bruno modulix
Eric wrote:
(snip)
PS : Merci de ne pas remuer le couteau dans la plaie : le premier qui
me dit que le code est pourri, que ne pas faire de doc, cépasbien, je
l'étrangle ! ;-)


Le code est pourri, et le documenter commencerait par une réécriture
propre et lisible (un code lisible étant sa propre documentation...)

Tu m'étrangle ?-)

--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in ''.split('@')])"

Avatar
Steuf
Bonjour,


Bonjour


Dans le cadre d'un stage, je reprend un code PHP fait par plusieurs
personnes avant moi, dont certaines, non expérimentées en PHP, font
des hérésies en programmation, le tout sans documentation aucune
(oui, je sais, je suis sévère, et je ne suis pas mieux qu'eux sur
nombre de points), je m'arrache souvent les cheveux à comprendre
certains bouts de codes, dont celui ci, les commentaires laissés par
mon prédécesseur montre que je n'ai pas été le seul à être
intrigué par ce code :

switch (strtolower($val_nvelle_table))
{
case 'null':
break;
case '$set$':
//A QUOI CA SERT????????????????
$f = "field_$key";
$val_nvelle_table "'".($$f?implode(',',$$f):'')."'";//$$f?????
break;
default:
$val_slash_nvelle_table = addslashes($val_nvelle_table);
$texte_nvelle_table str_replace("rn","<br>",$val_slash_nvelle_table);
$val_nvelle_table = "'$texte_nvelle_table'";
break;
}


A priori ce code n'a aucun sens, il manque des bouts de synthaxe et je
doute que l'intépréteur PHP veuille bien lancer ce code sans crier de
partout avec des erreurs fatales...


Bref, ma question : à quelle condition va-t-on rentrer dans le case
'$set$' ?


Bonne question... d'ailleurs $set$ ça ne ressemble à rien...

Question numéro 2 : à quoi sera égal $val_nvelle_table si l'on
rentre dans ce case ?


Bonne question, sans avoir le reste difficil d'en savoir plus que vous...


Merci d'avance pour vos réponses !

PS : Merci de ne pas remuer le couteau dans la plaie : le premier qui
me dit que le code est pourri, que ne pas faire de doc, cépasbien, je
l'étrangle ! ;-)


Le code n'est pas pourri, il est affreux... donner sur les trotoires ^^.

--
Site dédié au développement WEB : http://www.exinsidephp.com

Avatar
Vincent Lascaux
switch (strtolower($val_nvelle_table))
{
case 'null':
break;
case '$set$':
//A QUOI CA SERT????????????????
$f = "field_$key";


Cette ligne fait la même chose que $f = 'field_'.$key... Imaginons que $key
vale 12, par la suite, $f vaut 'field_12'

$val_nvelle_table "'".($$f?implode(',',$$f):'')."'";//$$f?????


$$f vaut la valeur de la variable dont le nom est stoqué dans $f. Dans notre
cas, ca vaut $field_12.
C'est une construction que je n'aime pas trop parcequ'elle n'existe pas dans
beaucoup d'autres langages (d'une part) et qu'on peut souvent la remplacer
par du code plus propre, plus lisible, plus simple et plus efficace. Si je
devais parier, je dirais qu'on pourrait avoir un tableau nommé $field plutot
que plein de variables $field_1, $field_2... $field_12. J'ai pas vu le reste
du code, mais ca serait surement plus propre, ca permettrait pas mal de
choses (par exemple énumérer sur les fields), ca serait surement plus
efficace et plus clair (ca t'aurait permis de conserver quelques cheveux
sans doutes ;))

break;
default:
$val_slash_nvelle_table = addslashes($val_nvelle_table);
$texte_nvelle_table str_replace("rn","<br>",$val_slash_nvelle_table);
$val_nvelle_table = "'$texte_nvelle_table'";
break;
}

Bref, ma question : à quelle condition va-t-on rentrer dans le case
'$set$' ?


Ca c'est comme n'importe quel switch : on va dans le case '$set$' quand la
valeur switchée (strtolower($val_nvelle_table)) vaut '$set$'.
C'est comme si t'avais ca :
if(strtolower($val_nvelle_table) == 'null')
{
} else if(strtolower($val_nvelle_table) == '$set$') {
//A QUOI CA SERT????????????????
$f = "field_$key";
$val_nvelle_table "'".($$f?implode(',',$$f):'')."'";//$$f?????
} else {
$val_slash_nvelle_table = addslashes($val_nvelle_table);
$texte_nvelle_table str_replace("rn","<br>",$val_slash_nvelle_table);
$val_nvelle_table = "'$texte_nvelle_table'";
}

Question numéro 2 : à quoi sera égal $val_nvelle_table si l'on
rentre dans ce case ?


Pour conserver l'exemple, on suppose que $$f vaut $field_12 et que $field_12
est un tableau qui vaut array('Foo', 'Bar', 'Bla', 'Bli')
Alors "'".($$f?implode(',',$$f):'')."'" vaut la chaine 'Foo,Bar,Bla,Bli'
(les guillemets font partis de la chaine). Si je devais parier, je dirais
que cette chaîne va bientot être utilisée dans une requête SQL, et qu'on va
pas prendre la précaution de l' "escaper" (rajouter des derrière les
éventuels guillemets contenus dans les chaines Foo, Bar, Bla ou Bli).

Quant à la qualité du code, c'est claire que c'est pas la panaché, mais j'ai
peur que ce soit les déboires d'un langage très permissif, et pousse au
"quick and dirty". Je pense que beaucoup de code PHP dans la nature est pire
que celui que t'as dans les yeux (il ya qu'à voir le nombre de programmeurs
chauves :))

--
Vincent

Avatar
Eric
Tout d'abord, merci à tous pour vos réponses (quant à bruno modulix,
étrangles toi tout seul, j'ai trop de code à comprendre pour me
déplacer ;-) )

Je pense que ça m'éclaire pas mal.

Pour votre information, ce site est un site qui deviendra plus tard un
intranet dans des hopitaux pour des dossiers patients, et il se trouve
que les médecins changent d'avis sur le contenu des pages tous les 3
jours, donc mes prédécesseurs ont mis au point un système qui
génère automatiquement des formuliare à partir d'infos concues dans
la base, et les enregistrent les résultats sur d'autres tables (ce
code fait partie de la fonction qui enregistre).

Voilà, merci.