Temps de complilation - PHP - Programmation
Marsh Posté le 16-10-2007 à 10:23:51
Bonjour,
montre voir ton code s'il n'est pas trop long
merci
Marsh Posté le 16-10-2007 à 10:30:47
ton algo en gros c'est deux boucles imbriquées quoi ...
c'est assez restreint pour t'aider ...
Marsh Posté le 16-10-2007 à 10:44:27
micfont999 a écrit : ton algo en gros c'est deux boucles imbriquées quoi ... |
Oui je comprend. je vais essayer d'expliquer l'algo.
Pour commencer, je fais une boucle pour récupérer les données de chaque produit du style:
Code :
|
Ensuite
j'utilise la boucle : for($i=0;$i<sizeof($produit);$i++){} pour effectuer plein de traitement dans ma bdd càd:
1-
Code :
|
2- je fais un select, le resultat de ce select va me permettre soit d'inserer ou de modifier (update):
Code :
|
je t'envoie le else dans un autre post
Marsh Posté le 16-10-2007 à 10:56:44
micfont999 a écrit : ton algo en gros c'est deux boucles imbriquées quoi ... |
Pour le else:
Code :
|
Ce qui est en rouge, je le répete 4 fois en fonction de mes 4 mois:
if (!$rows2){} else{} if (!$rows3){} else{} if (!$rows4){} else{}
Marsh Posté le 16-10-2007 à 11:00:42
ReplyMarsh Posté le 16-10-2007 à 11:08:57
micfont999 a écrit : ton algo en gros c'est deux boucles imbriquées quoi ... |
C'est pas fini
Code :
|
et là pareil je répete la boucle 4 fois en fonction de mes variables var1...var4:
if($Si ['masomme']<>$vari[$i]){}
Marsh Posté le 16-10-2007 à 11:12:16
quand tu dis que tu répete, tu veux quand même pas dire que tu fait un copier coller ??
Marsh Posté le 16-10-2007 à 11:13:58
micfont999 a écrit : ton algo en gros c'est deux boucles imbriquées quoi ... |
Code :
|
Et voilà c'est lourd? long? pas propre?..?
Marsh Posté le 16-10-2007 à 11:15:04
micfont999 a écrit : quand tu dis que tu répete, tu veux quand même pas dire que tu fait un copier coller ?? |
ben càd que je repete le code mais je change les paramètres (en fonction des mois..)
je repete la synthaxe
Marsh Posté le 16-10-2007 à 11:15:43
ReplyMarsh Posté le 16-10-2007 à 11:19:57
sabbahh a écrit : |
Ouais t'a pas 4 fois ce code copier coller dans le programme quoi, j'ai eu peur
on va pouvoir faire un peu de ménage la dedant tkt pas
tu à déjà penser à te tourner vers des fonctions ?? ça serais déjà un tit plus
Marsh Posté le 16-10-2007 à 11:45:02
est ce que tu peux juste expliquer concretement ce que tu veux faire avec cette application si ça ne te dérange pas ... pourquoi tu fait ce programme en gros .. ce que tu veux y faire, et le but final
merci
Marsh Posté le 16-10-2007 à 11:55:04
Ok, c'est parti!
j'ai un tableau qui s'affiche en fonction d'un critère soit x soit Y.
dc je vérifie tjrs ce critére afin de construire mes requêtes (choix des tables, de code "id",..).
alors en gros j'enregistre ce qui était saisi par l'user; j'insere si c'est un nouveau enregistrement, j'update si modif. cela marchait assez vite avant que j'ajoute l'option suivante:
Insertion:
si on saisi sous le critère X, on affecte au premier codeY la valeur saisi (donc j'écris à la fois dans les 2 tables)
et si on saisi sous le critère Y, je fais la somme des codes X et je l'affecte au codeY correspondant.
Modification:
si on saisi sous le critère X, je regarde si la valeur saisi est égale à la somme des codesY. si OUI, je modifie rien. si NON, je l'affecte, comme vu pour l'insertion, au premier codeY et je delete ce que j'avais.
et si on saisi sous le critère Y, je fais la somme des codes X et je lmodifie le codeY correspondant.
N.B: 1 codeY appartient 1 ou n codeX
Marsh Posté le 16-10-2007 à 11:59:16
sabbahh a écrit : Ok, c'est parti! |
Marsh Posté le 22-10-2007 à 10:00:39
si je regardais ton truc encore hier soir .. mais je suis un peu surbooké en ce moment .. d'ou le pourquoi j'ai pas encore répondu, promi avant la fin de la journée j'essai de t'aider
Marsh Posté le 22-10-2007 à 10:40:34
Commençons par le commencement: la boucle "de nettoyage" initiale ne sert à rien, et tu injectes tes données sans les escaper dans tes requêtes SQL ce qui est une magnifique faille de sécurité.
Et tu devrais utiliser le foreach introduit en PHP4.
Si tu es en PHP 5.1 prière de passer à PDO ou mysqli et d'utiliser les prepared statements toussa.
Enfin, les trucs genre
Code :
|
non quoi
Marsh Posté le 22-10-2007 à 10:49:46
bah c'est du copier coller qui faut réduire. Je suis sur que ton truc peut tenir en une 20 aine de lignes même pas ..
Marsh Posté le 22-10-2007 à 10:52:08
masklinn a écrit : Commençons par le commencement: la boucle "de nettoyage" initiale ne sert à rien, et tu injectes tes données sans les escaper dans tes requêtes SQL ce qui est une magnifique faille de sécurité.
|
Excuse moi, mais j'ai rien compris c'est pas bien ck je fais là?
Marsh Posté le 22-10-2007 à 10:53:51
sabbahh a écrit : |
Ben non, c'est n'importe quoi, tu fais 4 fois la même chose en changeant 2 lettres
Marsh Posté le 22-10-2007 à 10:56:37
masklinn a écrit : |
Dans ce bout de code, j'ai deux variables qui change ("$var" ..)
cmt j'introduit le foreach ici?
Marsh Posté le 22-10-2007 à 11:26:52
micfont999 a écrit : bah c'est du copier coller qui faut réduire. Je suis sur que ton truc peut tenir en une 20 aine de lignes même pas .. |
Question:
à ce niveau là (récupération des données saisies):
Code :
|
Est ce qu'il y a moyen d'affecter les "trim($_POST["varX"][$i][$j])" à par exemple une seule variable (tab [X][]) et puis derrière réduire le nombre des lignes, genre:
Code :
|
Marsh Posté le 22-10-2007 à 11:30:55
oui c'est possible normalement, tout comme les POST et GET qu'on peut sans dout réduite aussi ... à essayer avec la concaténation aussi
Marsh Posté le 22-10-2007 à 12:07:38
micfont999 a écrit : oui c'est possible normalement, tout comme les POST et GET qu'on peut sans dout réduite aussi ... à essayer avec la concaténation aussi |
déjà j'arrive à récupérer les données de cette façon:
Code :
|
Marsh Posté le 22-10-2007 à 12:56:06
Bonjour,
Juste en passant, remplace
Code :
|
par :
Code :
|
Dans ton code, tu parcours ton tableau pour compter le nombre d'éléments, à chaque tour de boucle !
Dans l'exemple corrigé, le nombre d'éléments de ton tableau n'est compté qu'une fois.
Le ++$i induit en outre une optimisation par rapport au $i++, mais ça c'est plus de l'ordre du détail.
Voilà je n'ai pas le temps de regarder en détail, mais prends déjà ça...
Marsh Posté le 22-10-2007 à 13:05:24
CyberDenix a écrit : Bonjour,
|
Code :
|
de rien
CyberDenix a écrit : Dans ton code, tu parcours ton tableau pour compter le nombre d'éléments, à chaque tour de boucle ! |
Heuu j'espère bien que non, on est pas en C, dans les langages modernes si les implémenteurs sont pas trop cons ils stockent la taille du tableau directement à côté du tableau dans un cache
CyberDenix a écrit : |
C'est surtout de l'ordre de la connerie, on est pas en ASM là. Même en javascript, ya pas de différence entre les deux dans 3 navigateurs sur 4 (sous MSIE, c'est même l'inverse)
Marsh Posté le 22-10-2007 à 13:30:01
masklinn a écrit :
|
Code :
|
de rien
Marsh Posté le 22-10-2007 à 16:33:44
micfont999 a écrit : c'est mieux en effet |
je m'en sors très bien avec ce petit code sauf k'il me met des warning
Code :
|
j'ai mis les "@" pour voir si ça fonctionne quand même et c'est le cas. pourquoi ces warnings?
pour le premier: Warning: Cannot use a scalar value as an array
le 2éme: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in
Marsh Posté le 22-10-2007 à 17:04:30
je pense que pour le num rows il faut mettre $resul[$z] dans une variable avant ..
pour le problème de cannot use scalar :
verifie que tu n'a pas le même nom que dans un champs de ta base de donnée, je ne pense pas mais on ne sais jamais
Marsh Posté le 16-10-2007 à 10:22:26
Bonjour,
J'avais un programme qui validait un tableau (ligne par produit) et l'enregistre dans ma bdd,
maintenant j'ai ajouté la notion du pays (ligne par produit, par pays), donc j'ai 2 boucles: pour chaque produits{pour chaque pays{}}
et ça prend bcp de temps.
Il y a -t-il un moyen pour optimiser ce prog?