Salut à vous,

je patauge depuis des années avec mon fameux script en trouvant chaque fois des solution "à peu près" et loin d'être "propres".

Cette fois ci, je me suis décidé à braver le ridicule en vous exposant ce que j'ai pondu.Accrochez-vous, ce n'est pas joli et certains pros sensibles feraient mieux de fermer les yeux

Une petite explication sur le but du script. Il s'agit de faire le calcul du compte annuel des clients d'un terrain de camping.

1ère étape: Sélection des clients à l'année et insertion des leurs infos dans la table "payements".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
$requete=mysql_db_query($sql_bdd,"INSERT INTO payements(Client_num,titre, nom,Prenom,emplacement,Adresse,Code_Postal,Ville,Pays,Type,solde_annee,langue) 
SELECT DISTINCT num,titre, Nom, Prenom,EMPLACEMENT, Adresse, Code_postal,Ville,Pays,Type,solde_annee,Langue FROM clients WHERE Client_annee=1 AND EMPLACEMENT>0 
ORDER BY Nom",$db_link) or die(mysql_error());
Un header revoie vers la seconde partie (calcul.php):

1. calcul du nombre de personnes et d'enfants de moins de 5 ans:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
$requetemoins5 =mysql_db_query($sql_bdd, "SELECT Enfants_Prenom FROM enfants WHERE DATEDIFF( NOW(),Date_naissance) <1825 AND Client_num=$num AND Compris = 1; ",$db_link) or die(mysql_error());
$tot=mysql_num_rows($requetemoins5);
 
$requete5 =mysql_db_query($sql_bdd, "SELECT Enfants_Prenom FROM enfants WHERE DATEDIFF( NOW(),Date_naissance) >1825 AND Client_num=$num AND Compris = 1; ",$db_link) or die(mysql_error());
$tot5=mysql_num_rows($requete5);
 
$requete =mysql_db_query($sql_bdd, "SELECT adulte_num FROM adultes WHERE Client_num=$num ; ",$db_link) or die(mysql_error());
 
$totadultes=mysql_num_rows($requete);
 
$total=$totadultes+$tot5;
2.Calcul de la consommation électrique:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
$requete_compteur=mysql_db_query($sql_bdd,"select * from compteurs where Client_num='$num'",$db_link) or die(mysql_error());
$Compteur_num=mysql_result($requete_compteur,0,"Compteur_num");
 
$requete_index=mysql_db_query($sql_bdd,"SELECT * FROM appartenir WHERE Client_num=$num AND payed ='PAYE' AND Compteur_num='$Compteur_num' ORDER BY Annee DESC LIMIT 0,1"  
 
,$db_link) or die(mysql_error());
 
$Index_last=mysql_result($requete_index,0,"releve");
$datederniere=mysql_result($requete_index,0,"Annee");
list($date, $time) = explode(" ", $datederniere);
list($year, $month, $day) = explode("-", $date);
$date_last = "$day-$month-$year";
 
$requetenew=mysql_db_query($sql_bdd,"SELECT * FROM appartenir WHERE Client_num=$num AND payed =0 ORDER BY Annee DESC LIMIT 0,1"  
 
,$db_link) or die(mysql_error());
 
if(mysql_num_rows($requetenew)==0) {
 
$Index_new=mysql_result($requete_index,0,"releve");
$datenew=mysql_result($requete_index,0,"Annee");
list($date, $time) = explode(" ", $datenew);
list($year, $month, $day) = explode("-", $date);
$date_new = "$day-$month-$year";
 
} else {
$Index_new=mysql_result($requetenew,0,"releve");
$datenew=mysql_result($requetenew,0,"Annee");
list($date, $time) = explode(" ", $datenew);
list($year, $month, $day) = explode("-", $date);
$date_new = "$day-$month-$year";
}
 
if ($Index_new < $Index_last) {
   $conso=((10000-$Index_last)+$Index_new);
} else {
   $conso=($Index_new-$Index_last);
}
3. Recherche des tarifs en vigueur:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
$requete_prix=mysql_db_query($sql_bdd,"select * from tarif_annuel where annee =$annee",$db_link) or die(mysql_error());
 
//$Estandard=mysql_result($requete_prix,0,"standard");
//$Eresid=mysql_result($requete_prix,0,"resid");
//$Echalet=mysql_result($requete_prix,0,"chalet");
$Eeau=mysql_result($requete_prix,0,"eau");
$E2eauto=mysql_result($requete_prix,0,"2eauto");
$Eentretien=mysql_result($requete_prix,0,"parcelle");
$Etaxe=mysql_result($requete_prix,0,"taxe");
$Eadulte =mysql_result($requete_prix,0,"adult_an");
$Eenfant=mysql_result($requete_prix,0,"enf_an");
$Eelect =mysql_result($requete_prix,0,"elect_an");
$limite=mysql_result($requete_prix,0,"date_paiement");
 
$request_empl=mysql_db_query($sql_bdd,"select * from clients WHERE num=$num ",$db_link) or die(mysql_error());
$entretien=mysql_result($request_empl,0,"ENTRETIEN");
$auto2=mysql_result($request_empl,0,"Voiture_2");
$type=mysql_result($request_empl,0,"Type");
 
if($type=="0")         //1er 
    { 
 $Emplac =mysql_result($requete_prix,0,"standard"); 
    } 
elseif( $type=="1")
    { 
 $Emplac =mysql_result($requete_prix,0,"resid");
 
    } 
elseif($type=="2")
    { 
 $Emplac =mysql_result($requete_prix,0,"chalet");
 
    }
4.Calcul du compte et insertion des résultats dans la table "payements":

Code : Sélectionner tout - Visualiser dans une fenêtre à part
	$suite=mysql_db_query($sql_bdd,"update payements set nb_enfants =$tot ,nb_adultes=$total,index_last=$Index_last,index_new=$Index_new,date_last='$date_last',date_new='$date_new',conso=$conso,cout_eau= $Eeau,cout_emplact=$Emplac,cout_adultes=(nb_adultes*$Eadulte),cout_enfant=(nb_enfants*$Eenfant),cout_elect=($conso/4),cout_auto2=($auto2*$E2eauto),cout_entretien=($entretien*$Eentretien),cout_taxe=$Etaxe,total=$totalmoney,subtotal=$subtotalmoney,tarif_adulte=$Eadulte,tarif_enfant=$Eenfant,tarif_elect=$Eelect,limite='$limite' WHERE Client_num=$num",$db_link) or die(mysql_error());
Ce n'est pas beau mai ça fonctionne pour un client (num).
Comme il y a une centaines de comptes à faire, j'ai trouvé ceci, qui vous plaira encore moins !!

A la fin du premier script de sélection et d'insertion:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
$last= mysql_insert_id();
 
header("Location:start.php?year=$year&number=$last")
pour trouver le numero (auto) du premier enregistrement de l'année.
Et ceci pour trouver le numero correspondant au dernier enregistrement:

start.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
$newKey = "select max(numero) As NKey from payements"; 
$result = mysql_query($newKey) or die(mysql_error()); 
while($row = mysql_fetch_array($result)){ 
$newKey= $row['NKey']; 
$newKey +=1; 
}
header("Location:start_next.php?number=$number&last=$newKey&year=$year");
Et ensuite, pour me faire flinguer ici et permettra au script de bosser:

start_next.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
IF ($number < $last)
{
$requete_num=mysql_db_query($sql_bdd,"select * from payements WHERE numero = $number ",$db_link) or die(mysql_error());
$num=mysql_result($requete_num,0,"Client_num");
header("Location:calcul.php?num=$num&number=$number&last=$last&year=$year");
}
ELSEIF ($number == $last)
{
echo "done";
}
Et voilà. Je n'ai plus qu'à aller me planquer en attendant que vos esprits offensés se soient calmés
C'est surtout la partie "boucle" de mon script que je voudrais améliorer, même si je ne suis pas fier de la partie calcul !!

Je vous remercie de bien vouloir me mettre sur la bonne voie. Rien ne vaut un bon exemple et je suis persuadé de vous avoir fourni un beau condensé d'erreurs à ne pas commettre

Bien amicalement.

Camomille