Ameioration code, de saisi d'un fomulair et insertion des une table - PHP - Programmation
Marsh Posté le 14-02-2008 à 21:46:56
robocop333 a écrit : Bonjour, J'ai essayé de faire en PHP/MySQL un script qui permet de créer une table dans un BDD, et de faire une saisie à partir d'un petit formulaire puis insérer les informations dans la table. Je sais que j'ai mal codé ça (je débute en php), et il ya quelque problèmes : Peut-on faire une améliorations en ce qui concernent l'utilisation de sessions pour le compteur du 1er champ d'une ligne dans la table Prof ( $_SESSION['cpt'] ), que j'ai utiliser dans le fichier insert_Prof.php ? |
Si ce champ est bien une clé primaire comme je le crois, tu n'as besoin d'aucun compteur, tu dois juste définir ce champ comme "auto-increment" à la création de la table. A chaque ligne il incrémentera son propre compteur interne et toi t'aura rien à faire. Et tant qu'à faire, appelle ce champ "id" au lieu de "cote", c'est plus standard.
En ajoutant une vraie protection SQL (là c'est nimp ), ta requete devrait plutot etre un truc du genre :
Code :
|
Moi a la place d'addslashes, j'utilise mysql_real_escape_string(), ça échappe encore mieux (je sais plus trop en quoi mais c'est mieux ).
Et ce format de requete, qui fait exactement la même chose en plus lisible :
Code :
|
robocop333 a écrit : Et aussi pour l'utilisation de sessions pour bloquer la recréation de la table si elle à déjà été créer. Je sais que c'est crade ce que j'ai fait, mais je n’ai pas trouvé d'autres solutions, donc si vous avez une idée, aidé moi |
Ben déja créer les tables dans le code en soi c'est pas tip-top
Je sais pas comment vérifier l'existence d'une table, mais ya surement des fonctions en SQL faites pour. Mais surtout pas de session pour ça
robocop333 a écrit : Je croie que le code est vulnérable au injections SQL, et au XSS ..., rien ne s'insért dans la table si je mets par exemple: richard","A","B","C,"D" )/* dans le 1er champ du formulaire. |
cf au-dessus
robocop333 a écrit : J'ai aussi un problème avec la fonction header() pour revenir à la page add_prof.php pour pouvoir saisir une nouvelle fois ! Si vous avez une meilleur idée que d'utiliser header, je suis preneur. (PS: je peux être intégrer la page insert_Prof.php avec la page add_prof.php ...). |
il ne faut RIEN écrire sur la page avant de faire une redirection PHP (header("location:bala" )) . La tu fais plein d'echo, du coup PHP lé pas content.
Marsh Posté le 15-02-2008 à 11:58:32
Bonjour,
1) Pour la requette SQL, j'ai fait un truc du genre:
Code :
|
ça marche bien, mais pour plus de visibilité, j'ai pensé à faire :
Code :
|
Mais bizarrement ça ne marche pas avec la méthode du sprintf() !
2) Pourquoi vous dites que créer les tables dans le code en soi c'est pas tip-top ?
Qu'est ce que vous proposez ? que le user crée les tables manuellement lui même ?
Parce-que moi, j'ai même eu l'idée de créer la BDD à partir du script (code), ou choisir une BDD existante (en saisissant son nom dans un formulaire).
PS: j'ai trouver un moyen pour lister les tables de la bdd, avec le requête: SHOW TABLES FROM $dbname
Sinon j'ai quelque autre questions:
Est ce que ça présente un avantage de mettre insert_Prof.php dans un page autre que add_prof.php, ou bien j'aurai du mettre le contenue de insert_Prof.php dans add_prof.php (une seul page quoi..) ?
à votre avis, est ce que c'est possible d'automatiser la page insert_Prof.php pour n'importe quel formulaire, pas seulement pour celui de add_prof.php ?
Marsh Posté le 15-02-2008 à 12:16:44
robocop333 a écrit : Bonjour, Mais bizarrement ça ne marche pas avec la méthode du sprintf() ! |
T'as pas l'impression qu'y a un truc qui cloche, genre vers le haut de ton code ?
robocop333 a écrit : 2) Pourquoi vous dites que créer les tables dans le code en soi c'est pas tip-top ? |
C'est qui l'user ? c'est quoi ton site ? je peux pas te répondre si je sais pas ça Si c'est un site perso tu crées tes tables à la main ou avec un script SQL... Si c'est un modèle de blog par ex, là tu fais un script PHP qui crée les tables et tu reviens pas dessus
robocop333 a écrit : Sinon j'ai quelque autre questions: Est ce que ça présente un avantage de mettre insert_Prof.php dans un page autre que add_prof.php, ou bien j'aurai du mettre le contenue de insert_Prof.php dans add_prof.php (une seul page quoi..) ? |
Moi je trouve ça très bien, ça te permet de ne pas te taper des "des données en posts ont été envoyées blabla" à chaque F5, et puis si un jour tu veux appeler add_prof.php sans passer par ce formulaire, tu peux.
robocop333 a écrit : à votre avis, est ce que c'est possible d'automatiser la page insert_Prof.php pour n'importe quel formulaire, pas seulement pour celui de add_prof.php ? |
C'est déja le cas.
Ah oui et tu peux me tutoyer
Marsh Posté le 15-02-2008 à 12:36:41
theredled a écrit :
|
Pour le code de mon sprintf(), je ne vois vraiment pas ce qui cloche
theredled a écrit :
|
En fait, c'est pas un site perso, le but c'est de faire un projet (ensemble de scripts) de gestion de profs d'un institut, qui peut être utilisé sur n'importe quel site (accessible par le net) ...
theredled a écrit : C'est déja le cas. |
Ce que je voulais dire c'est: essayer t'automatiser le code de ta page insert_prof.php (que j'appellerai insert.php) pour n'importe quel type de formulaire, pas seulement pour celui du form qui ce trouve sur la page add_Prof.php ? càd si j'ai un formulaire sur une page add_truc.php, j'appellerai la même page insert.php, pour l'insertion de donnés dans la table correspondante.
Marsh Posté le 15-02-2008 à 12:45:11
Citation : our le code de mon sprintf(), je ne vois vraiment pas ce qui cloche |
robocop333 a écrit : |
Alors fait un script d'install que tu n'appelles qu'une fois.
robocop333 a écrit : |
oké, ben moi je ferais comme ça :
Code :
|
Code :
|
insert.php
Code :
|
Et après si les requete se ressemblent vraiment tu peux te débrouiller dans ton scripts pour pas avoir trop de redondance.
Marsh Posté le 15-02-2008 à 12:53:37
Ah, en PHP elle retourne la chaine ! Je n'ai pas lut le man de sprintf en php, je croyais que c'étais comme en Langage C.
Ok.
theredled a écrit : |
Alors pour plus de sécurité je dois faire en sorte que la page install.php ce delete automatiquement aprés l'installation.
theredled a écrit : |
Ah bonne idée, Ok.
Merci beaucoup therEDLED.
Marsh Posté le 15-02-2008 à 14:18:31
robocop333 a écrit : |
Oui ou alors tu testes l'existence d'une seule table, ça te dira si le truc est installé.
D'ailleurs je crois que si tu crée une table qui existe déja, ça te fait une erreur mais ça ne l'écrase pas.
Marsh Posté le 22-02-2008 à 00:46:20
En regardant 2 min l'article CREATE TABLE de la doc mySQL, j'ai vu qu'il y avait un mot-clé IF NOT EXISTS...
Sinon pourquoi ce up ?
Marsh Posté le 14-02-2008 à 13:41:55
Bonjour,
J'ai essayé de faire en PHP/MySQL un script qui permet de créer une table dans un BDD, et de faire une saisie à partir d'un petit formulaire puis insérer les informations dans la table.
Voici les scripts que j'ai essayés de faire:
install.php http://rafb.net/p/nhS2Tk96.html
add_prof.php http://rafb.net/p/8FwYFe25.html
insert_Prof.php http://rafb.net/p/MX3VcN58.html
Je sais que j'ai mal codé ça (je débute en php), et il ya quelque problèmes :
Peut-on faire une améliorations en ce qui concernent l'utilisation de sessions pour le compteur du 1er champ d'une ligne dans la table Prof ( $_SESSION['cpt'] ), que j'ai utiliser dans le fichier insert_Prof.php ?
Et aussi pour l'utilisation de sessions pour bloquer la recréation de la table si elle à déjà été créer. Je sais que c'est crade ce que j'ai fait, mais je n’ai pas trouvé d'autres solutions, donc si vous avez une idée, aidé moi
Je croie que le code est vulnérable au injections SQL, et au XSS ..., rien ne s'insért dans la table si je mets par exemple: richard","A","B","C,"D" )/* dans le 1er champ du formulaire.
J'ai aussi un problème avec la fonction header() pour revenir à la page add_prof.php pour pouvoir saisir une nouvelle fois ! Si vous avez une meilleur idée que d'utiliser header, je suis preneur. (PS: je peux être intégrer la page insert_Prof.php avec la page add_prof.php ...).
La fonction header me donne ce warning:
Warning: Cannot modify header information - headers already sent by (output started at c:___\insert_prof.php:20) in c:\___\insert_prof.php on line 27
Enfin proposez moi svp des améliorations pour le code, c'est mon 1er code fait en php, et je sais que c'est vraiment mal codé
Merci.