Bonjour Djockey,
pour essayer de clarifier (et trouver une solution), il faudrait que je puisse tester en local ton application. Est-il possible de me fournir le code intégral (en .zip) et un export de la bdd ?
Version imprimable
Bonjour Djockey,
pour essayer de clarifier (et trouver une solution), il faudrait que je puisse tester en local ton application. Est-il possible de me fournir le code intégral (en .zip) et un export de la bdd ?
Je regarderais , comment et par quoi les remplacer
Oui la clés primaire est sur la colonne " code_deposant "Citation:
- post #18, de "ON DUPLICATE UPDATE", je pense que tu as vraiment à y gagner à condition de bien avoir une clé primaire dans ta table (code_deposant je crois)
C'est par du CSS.Citation:
Je regarderais , comment et par quoi les remplacer
OUI c'est possible, je supprime quelques données de la Bdd et je t'envois ca. Sinon via "AnyDesk" ou autre.
Fait en mp avec lien de telechargement
J'ai un peu regardé mais bonjour le boulot ; sacré merdier le code ! Même les paramètres de connexion à la bdd ne sont pas factorisés ; y a environ 50 fichiers où ils sont définis...J'abandonne, DSL
OK Merci tout de même,
Oui le soft a subi divers modifications, depuis ça création cars de l'utilisation se sont des utilisatrices (toujours peur de le faire planter), et par la même des besoin pour la compta, et lors des enregistrements. Du coup le code je le conçois est catastrophique.
Bonne fin de journée.
Bonjour Djokey
Cette table présente à peu près tout ce qu'il ne faut pas faire quand on modélise une base de données.
Aucune des formes normales n'est respectée.
Par exemple, pour un même identifiant, on a a la fois le nom, le prénom et l'adresse de l'emprunteur, mais aussi une colonne livre, CD et DVD et également une colonne association...
Ceci implique que si une même personne emprunte 5 livres, il faut enregistrer son nom et son adresse 5 fois... en prenant garde de ne pas se tromper bien entendu :aie:
Et si la personne est membre de deux associations, vous enregistrez une seule des deux, ou vous multipliez par deux le nombre de lignes en enregistrant deux fois chaque emprunt ? :aie:
Bref, la première chose à faire est de réaliser un modèle de données correct.
Vous trouverez des exemples de modélisation d'une BDD médiathèque dans le forum consacré à la modélisation, inspirez-vous en.
Voir par exemple ces fils de discussion :
https://www.developpez.net/forums/d2...cd-bdd-livres/
https://www.developpez.net/forums/d2...ercice-rendre/
De plus, le moteur MyISAM est complètement obsolète, il faut le remplacer par INNODB
Vous n'arriverez jamais à concevoir des requêtes fiables et performantes avec un modèle de données aussi mal fait, comme dit ci-dessus, commencez par le commencement, à savoir la modélisation correcte de la base de données !
Bonjour escartefigue,
Alors aujourd'hui le soft tourne sans problème malgré la vétusté et l'imperfection du code vus plusieurs modification pour des besoin comptable et autres. Le soft a été créé en 1986 donc effectivement pas au gout du jour. Comme, je l'ai dit dans le premier message la nouvelle fonction serais de pouvoir vider partiellement la "table déposant" cela devrais mettre a zéro ou nul les colonnes "code_deposant",livres, dvd,cd; Ainsi lors de la prochaine bourse via le soft on retrouverais nom,prénom, et autre coordonnées on aurais seulement a indiquer le nouveau code_deposant.
Un client " deposant" ne peux être que déposant ou bénévole avec un seul code.
Le soft sert a enregistrer les coordonnée d'un déposant avec le nom d'articles de trois catégories, et le jour de la vente on entre le code_déposant de l'article et le prix, ainsi en fin de vente on sait combien il en as vendu, et la somme qui lui reviens.
A ce jour, via un formulaire j'arrive à modifier et enregistrer coordonnées et articles MAIS pas le code
aussi, j' essaie car je connais pas grand chose.
Malgré la vétusté du code, j'ai pus avancé il y a tout de même un problème avec " $ud_code_deposant = preg_replace("/[\n\r]*/","",$ud_code_deposant);"
1)Ce que j'ai fait dans la table Déposant j'ai ajouté un champ "num_client" (auto incrément). Modifier la page recherche qui affiche tout les codes, nom, prénom et " num_client" : Ca fonctionne
2) une fois choisis un code ..... via num_client on arrive sur la page permettant les modification : Ca fonctionne
Le champ code_deposant lors d'un enregistrement permet un code numérique ou alpha l'enregistrement se fait bien, la recherche aussi.
3) Dans le cas d'une modification code_deposant numerique genre 11 >> 15 ou AA >>> 16 pas de soucis. Par contre genre 11 >>> AA , ou BB >>> CC rien a faire
Code:
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85 <?PHP session_start(); ?> <head> <title>amend 2</title> <meta content=""> <style></style> </head> <body> <?php $ud_id =$_POST['ud_id']; $ud_code_deposant =$_POST['ud_code_deposant']; $ud_nom =$_POST['ud_nom']; $ud_prenom =$_POST['ud_prenom']; $ud_rue =$_POST['ud_rue']; $ud_code_postal =$_POST['ud_code_postal']; $ud_ville =$_POST['ud_ville']; $ud_tel =$_POST['ud_tel']; $ud_email =$_POST['ud_email']; $ud_association =$_POST['ud_association']; $ud_Livres =$_POST['ud_Livres']; $ud_DVD =$_POST['ud_DVD']; $ud_CD =$_POST['ud_CD']; $ud_Note =$_POST['ud_Note']; if ($ud_id == "") echo "! Pas de code deposant recupere."; else echo "<h3>Modification des informations du deposant Enregistre : ".$ud_id." pour la bld<br><br>\n</h3>"; //clean up any carriage returns etc $ud_code_deposant = preg_replace("/[\n\r]*/","",$ud_code_deposant); $ud_nom = preg_replace("/[\n\r]*/","",$ud_nom); $ud_prenom = preg_replace("/[\n\r]*/","",$ud_prenom); // déclaration de quelques variables $host= "localhost"; $user= "apache"; $pass= "apache"; $bdd = "novbld22"; $table= "deposant"; $clef_de_connection = @mysqli_connect($host, $user, $pass) or die("Impossible de se connecter a myadmin ".__LINE__); @mysqli_select_db($clef_de_connection, $bdd) or die("Impossible de se connecter a la base dispobld ".__LINE__); $sql="UPDATE deposant SET code_deposant=$ud_code_deposant, nom='$ud_nom', prenom='$ud_prenom', rue='$ud_rue', code_postal='$ud_code_postal', ville='$ud_ville', tel='$ud_tel', email='$ud_email', association='$ud_association', Livres='$ud_Livres', DVD='$ud_DVD', CD='$ud_CD', Note='$ud_Note' WHERE num_client='$ud_id';"; $result = mysqli_query($clef_de_connection,$sql); echo "<BR>Code --> $ud_id <-- mis a jour<BR><BR>"; ?> <?php //if you want to check it's ok, display new data //echo "Search on $ud_id<BR>"; $sql="SELECT * FROM deposant WHERE num_client ='$ud_id'"; $result = mysqli_query($clef_de_connection,$sql) or die(" - Failed More Information:<br><pre>$sql</pre><br>Error: " . mysqli_error()); $num_rows = mysqli_num_rows($result); if ($myrow = mysqli_fetch_array($result)); { echo "<table BORDER BGCOLOR=\"#C0C0C0\">\n"; echo "<tr><td>Code</td><td>Nom</td><td>Prenom</td><td>Rue</td><td>Code Postal</td><td>Ville</td><td>Tel</td><td>Email</td><td>Association</td>\n"; echo "<td>Livres</td><td>DVD</td><td>CD</td><td>Note</td></tr>\n"; do { printf("<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n",$myrow["code_deposant"], $myrow["nom"], $myrow["prenom"], $myrow["rue"], $myrow["code_postal"], $myrow["ville"], $myrow["tel"], $myrow["email"], $myrow["association"], $myrow["Livres"], $myrow["DVD"], $myrow["CD"], $myrow["Note"]); } while ($myrow = mysqli_fetch_array($result)); echo "</table>\n"; } //else { //echo "Desole pas de deposant trouve."; } mysqli_free_result($result); mysqli_close($clef_de_connection); session_destroy(); ?> </body> </html>
Bonjour,
En fait il y a double boulot à faire : d'un côté tenter de maintenir la gestion au jour le jour avec l'existant, de l'autre créer une base toute neuve avec une application toute neuve, puis ... s'efforcer d'y transférer les données existantes.
Il paraît vraiment difficile de gérer une bibliothèque si il n'y a pas une table de livres, une table d'emprunteurs (avec surtout un seul enregistrement par emprunteur), et une table d'association avec comme champs code d'emprunteur, code de livre, date de début, date de fin.
Sauf fonctionnement très particulier.
Je n'entre pas dans les détails des précautions à prendre pour éviter qu'un livre soit déclaré emprunté par deux personnes différentes aux mêmes dates.
Ce n'est pas une bibliothèque d'emprunt de livres,Cd,DVD. Les Clients (DEPOSANTS) donc déposes leurs différent articles pour être vendus un jour XX. Il y a 80% des DEPOSANTS qui reviennent d'années en années le but est pouvoir retrouver leur coordonnées l'année +1 en ayant juste a entre leur nouveau code à deux lettres et le nombre d'articles par catégories.
Ah OK.
Donc il y a deux modifications à apporter à mon message précédent : il faut remplacer emprunteur par déposant, et livre par article.
Et probablement la notion de date de fin n'est-elle pas à envisager sous le même angle.
Encore autre chose, vous croyez ?
Ah si, il y a une autre modif.
Le modèle étant différent, il n'est pas prévu qu'un article passe d'un utilisateur de la "bibliothèque" à un autre.
Donc, il semble qu'on puisse se contenter de deux tables.
Plutôt qu'avoir une table d'associations, la table article peut comporter un champ code de déposant, pour savoir à qui appartient l'article.
*
En règle générale, pour faire automatiser un traitement, il est bon de commencer par décrire à l'intervenant le contexte de manière simple, sans toutefois oublier de détail essentiel.
C'est vrai que si on a affaire à une boutique de dépôt-vente, quelqu'un qui va plancher sur une bibliothèque a de fortes chances de se planter.
Même si j'ai dit y a quelques jours que j'abandonnais, je ne peux m'empêcher de revenir...
Comme le disait Escartefigue au post #28, il faut commencer par créer un meilleur MCD. J'y ai un peu réfléchi mais je coince...
Voici un début :
Pièce jointe 644901
Mais je ne vois pas comment modéliser un déposant qui appartiendrait à plusieurs associations...
Question : les colonnes Livre, DVD et CD, on y met quoi ?
J'ai gardé le nom de colonne code_deposant mais il serait plus logique de la nommer id_deposant.
Le DDL actuel :
Code:
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 CREATE TABLE depot( code_deposant SMALLINT, livre VARCHAR(40), DVD VARCHAR(40), CD VARCHAR(40), note VARCHAR(1001), date_creation DATE, PRIMARY KEY(code_deposant) ); CREATE TABLE association( id_association SMALLINT, nom VARCHAR(50), PRIMARY KEY(id_association) ); CREATE TABLE deposant( id_deposant SMALLINT, nom VARCHAR(40), prenom VARCHAR(40), rue VARCHAR(40), code_postal VARCHAR(5), ville VARCHAR(40), tel VARCHAR(15), email VARCHAR(40), id_association SMALLINT, code_deposant SMALLINT NOT NULL, PRIMARY KEY(id_deposant), FOREIGN KEY(code_deposant) REFERENCES depot(code_deposant) );
C'est bien ce que j'allais demander.
Non, j'en reviens à la notion d'article, et je n'exclue pas de créer, derrière, une notion de catégorie d'article.
En première intention je pensais à un article avec un champ texte "catégorie" dans lequel on pourrait écrire livre, CD, bibelot ...
Mais il est vrai que dans la mesure où on a un nombre limité de catégories, une table est bien plus adaptée et évite les fautes de frappe. Dans la table article, "catégorie" sera donc une clef étrangère, renvoyant à la table CategorieArticle.
Comme vous le voyez, nous n'en sommes pas encore à la phase de rédiger des descriptions de tables. Il faut d'abord situer les notions de base, et les articuler proprement.
Je ne vois pas comment un article pourrait être à la fois un livre, un CD et un DVD.
Je vous accorde qu'un livre peut être illustré avec un CD. Mais dans ce cas soit on considère simplement le livre, et il se trouve que le CD est fourni avec, soit si on veut être plus précis on crée une catégorie à part, "livre avec CD".
Le déposant a une relation un à plusieurs avec l'article.
La catégorie a une relation un à plusieurs avec l'article.
Raison pour laquelle, bien qu'il soit trop tôt pour parler d'implémentation mais je vous sens impatients, la table article pourra comporter une clef étrangère vers la table déposant, et une clef étrangère vers la table CategorieArticle.
L'article appartient à un seul déposant, et à une seule catégorie d'article.
La catégorie d'article peut être livre, CD, DVD, je ne sais plus si d'autres exemples ont été proposés mais peu importe ils pourront être créés pendant l'exploitation.
Bien entendu pour l'article on aura aussi besoin de noter un titre et peut-être une description, mais ça ce seront juste des champs. Au même titre que le déposant, lui, aura un nom, peut-être un prénom, une adresse, un numéro de téléphone ...
Pour Laurent, on peut être découragé de se taper des dizaines de pages de spécifications qu'on devine obsolètes, mais quand même volontaire pour aider à poser les bases d'une analyse valide.
Tant que l'on y est.. mais ne se ferais t'elle pas automatiquement comme lorsqu'on enregistre un nouveau Déposant (1ere fois qu'il déposerait).
Laurent
Dans les colonnes Livres, dvd, Cd on y inscrit que des nombre de 0à 100 EN aucun cas un article pourrait être à la fois un livre, un CD et un DVD. Il n'y aucune description concernant auteur ,titre, ou autre information.Citation:
Envoyé par Laurent
Dans ce cas, car bien évidement nous avons eu le cas il est considérer comme un livre.Citation:
Envoyé par Laurent
Non juste un nombre de 0 à 100Citation:
Bien entendu pour l'article on aura aussi besoin de noter un titre et peut-être une description,
OUICitation:
Au même titre que le déposant, lui, aura un nom, peut-être un prénom, une adresse, un numéro de téléphone ...
Alors un déposant ne peux avoir qu'un seul statut "deposant" car lorsqu’il y a vent d'un de ces article l'association retiens 15%,Citation:
Mais je ne vois pas comment modéliser un déposant qui appartiendrait à plusieurs associations...
Le statut Bénévole donc membre de l’équipe association a part entière i n'y à pas de retenue.
Le statut association : la pas de retenue forcément c'est les différent articles laissé à l'association par les deposants ou bénévole, pour être remis en vente le XX année +1 bien évidement ces dernier on été réétiqueter avec un code et prix modifier
Si vous voulez, je peux vous faire voire le soft a distance, serais peux être plus facile pour l'aide.Citation:
J'ai gardé le nom de colonne code_deposant mais il serait plus logique de la nommer id_deposant.
Laurent
j'ai fait un test sur la table déposant.
Pièce jointe 644912
OK, mais il signifie quoi ce nombre de 0 à 100 ? Nombre d'articles déposés ?Citation:
Dans les colonnes Livres, dvd, Cd on y inscrit que des nombre de 0à 100
En tous cas, si j'ai bien compris, y aura pas de table "article"...
Tu parles de 3 statuts : déposant, bénévole et association. T'en avais jamais parlé.
Les choses ne sont pas claires. Il faudrait commencer par donner les règles de gestion, ce qui permettra alors de concevoir un MCD...
Je pense qu'avant de chercher à corriger le soft, il faut d'abord concevoir un MCD correct.Citation:
Si vous voulez, je peux vous faire voire le soft a distance, serais peux être plus facile pour l'aide.
Ce que je voulais dire, c'est que la colonne code_deposant de la table depot sera une clé étrangère de la table deposant qui comporte la colonne id_deposant et qu'en général, il est plus clair de donner le même nom aux 2 colonnes.Citation:
J'ai gardé le nom de colonne code_deposant mais il serait plus logique de la nommer id_deposant.
Tout ce que j'ai écrit au-dessus, c'était avant que tu écrives le post #39...
Mais avant de s'attaquer au MCD, il faut d'abord lister les règles de gestion.Citation:
j'ai fait un test sur la table déposant.