Ameioration code, de saisi d'un fomulair et insertion des une table

Ameioration code, de saisi d'un fomulair et insertion des une table - PHP - Programmation

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é :P
 
Merci.

Reply

Marsh Posté le 14-02-2008 à 13:41:55   

Reply

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.
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 ?


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 :D), ta requete devrait plutot etre un truc du genre :

Code :
  1. $req = 'INSERT INTO Prof (nom, prenom, module, grade, comments) VALUES ("'.addslashes($nom_prof).'",
  2. "'.addslashes($prenom_prof).'", "'.addslashes($module).'", "'.addslashes($grade).'", "'.addslashes($comment).'" )';


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 :o).
Et ce format de requete, qui fait exactement la même chose en plus lisible :

Code :
  1. $req = 'INSERT INTO Prof SET nom="'.addslashes($nom_prof).'", prenom="'.addslashes($prenom_prof).'",
  2. module="'.addslashes($module).'", grade="'.addslashes($grade).'", comments="'.addslashes($comment).'" )';
 


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 :D
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 [:totoz]

 
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 ...).
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


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.

 


Message édité par theredled le 14-02-2008 à 21:49:58

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 15-02-2008 à 11:58:32    

Bonjour,

 

1) Pour la requette SQL, j'ai fait un truc du genre:

Code :
  1. $req = 'INSERT INTO Prof (nom, prenom, module, grade, comments) values ("'.mysql_real_escape_string($nom_prof).
  2.              '","'.mysql_real_escape_string($prenom_prof).'","'.mysql_real_escape_string($module).'","'.
  3.              mysql_real_escape_string($grade).'","'.mysql_real_escape_string($comment).'" )';


ça marche bien, mais pour plus de visibilité, j'ai pensé à faire :

Code :
  1. $req = "";
  2. sprintf($req, "INSERT INTO Prof (nom, prenom, module, grade, comments) values ('%s','%s','%s','%s','%s')",
  3.               mysql_real_escape_string($nom_prof), mysql_real_escape_string($prenom_prof),
  4.               mysql_real_escape_string($module), mysql_real_escape_string($grade),
  5.               mysql_real_escape_string($comment));


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 ?

Message cité 1 fois
Message édité par robocop333 le 15-02-2008 à 12:07:01
Reply

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 [:dawa] ?

 
robocop333 a écrit :

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 ? :/


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 [:airforceone]

 
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 :o

Message cité 1 fois
Message édité par theredled le 15-02-2008 à 12:18:12

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 15-02-2008 à 12:36:41    

theredled a écrit :


T'as pas l'impression qu'y a un truc qui cloche, genre vers le haut de ton code [:dawa] ?


Pour le code de mon sprintf(), je ne vois vraiment pas ce qui cloche  :(

 
theredled a écrit :


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 [:airforceone]


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.

Message cité 1 fois
Message édité par robocop333 le 15-02-2008 à 12:37:08
Reply

Marsh Posté le 15-02-2008 à 12:45:11    

Citation :

our le code de mon sprintf(), je ne vois vraiment pas ce qui cloche  :(


http://fr2.php.net/sprintf
 

robocop333 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) ...


Alors fait un script d'install que tu n'appelles qu'une fois.
 

robocop333 a écrit :


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.


oké, ben moi je ferais comme ça :

Code :
  1. <form action="insert.php?do=insert_prof" method="post">
  2.  <input type="text" name="nom" value="" />
  3.  <input type="text" name="grade" value="" />
  4.  ...
  5.  <input type="submit" value="OK" />
  6. </form>


Code :
  1. <form action="insert.php?do=insert_eleve" method="post">
  2.  <input type="text" name="nom" value="" />
  3.  <input type="text" name="classe" value="" />
  4.  ...
  5.  <input type="submit" value="OK" />
  6. </form>


insert.php

Code :
  1. if ($_GET['do']=='insert_prof')
  2.   faire la requete;
  3. elseif ($_GET['do']=='insert_eleve')
  4.   faire la requete;


 
Et après si les requete se ressemblent vraiment tu peux te débrouiller dans ton scripts pour pas avoir trop de redondance.


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

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 fait un script d'install que tu n'appelles qu'une fois.


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 :


oké, ben moi je ferais comme ça :
<...>
Et après si les requete se ressemblent vraiment tu peux te débrouiller dans ton scripts pour pas avoir trop de redondance.


Ah bonne idée, Ok.
 
Merci beaucoup therEDLED.

Reply

Marsh Posté le 15-02-2008 à 14:18:31    

robocop333 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.
 


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.


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 22-02-2008 à 00:37:18    

   

`


Message édité par robocop333 le 26-02-2008 à 10:39:37
Reply

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 ?


Message édité par theredled le 22-02-2008 à 00:46:30

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed