Avis et optimisation

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Avis et optimisation

Re: Avis et optimisation

par sirakawa » 23 févr. 2012, 17:30

Quelques commentaires sur la partie HTML
<!-- tous les marqueurs HTML sont maintenant en minuscules !>
<!-- tous les marqueurs HTML doivent avoir un marqueur de fin !>
<!-- les value='' ne servent à rien  quand il n'y a pas de valeur par défaut !>
<html> <!-- il serait bien de déclarer une DTD, un langage, un jeu de caractères !>
    <head>
       <title>Insertion Article</title>
    </head>
<?php
include ("connexion.php");
include ("connectbase.php");
$req = "SELECT * FROM categorie";
$result = mysql_query ($req);

?>
<H1><p align = "center"><FONT COLOR = "#808080">INSERTION D'ARTICLE AU CATALOGUE</p> <!-- fin de h1? pourquoi mêler h1 et <p>? pour centrer, il faut passer par une CSS soit redéfinissant tous les h1, soit définissant une classe centrage!>
<HR> <!-- devient <hr /> !>
<BODY bgcolor = "#111111">
<p align="center"> <!-- align deprecated utiliser une CSS. <p> est un début de paragraphe, pas un saut à la ligne, il lui faut donc un </p> qui se trouve là, mais la présentation est tellement crade que c'est dificile à voir !>
<form action='reqinsert.php' method='POST'>
<table width='95%' border='0' cellspacing='0' cellpadding='2'> <!-- cellpadding et cellspacing et width not supported in HTML5 !>
<tr>
    <td align='right'> <FONT COLOR = "#3d82f0"><b>Titre : </b> </td> <!-- align not suported !>
    <td> <input type ='text' name='titre' value='' size ='65' maxlength='65'></td> <!-- <input .... /> avec un espace avant le / !>
</tr>
<tr>
    <td align='right'><FONT COLOR = "#3d82f0"> <b>Categorie : </b> </td>
    <td> <select name='categorie' rows='20' cols='20' ><!-- je connais multiple et size pour les select, pas rows et cols!>
    <?php
         while ($ligne = mysql_fetch_array($result))  
           {
                 extract ($ligne);
                 if ($nom<>"")
                     echo "<option value='$nom'>$nom\n"; // à ma connaissance c'est <option value='valeur'>barratin </option>
          }
       echo "</select>";
     ?>
    </td>
</tr>
<tr>
    <td align='right'><FONT COLOR = "#3d82f0"> <b>Unite : </b> </td> <!--comme la même mise en forme est utilisée plusieurs fois, il est évident qu'un style serait le bienvenu:
    <td class = 'droitier'>Unite :  </td> !>
    <td> <input type ='text' name='unite' value='' size ='3' maxlength='3'></td>
</tr>
<tr>
    <td align='right'><FONT COLOR = "#3d82f0"> <b>Prix : </b> </td>
    <td> <input type ='text' name='prix' value='' size ='8' maxlength='65'></td>
</tr>
<tr>
    <td align='right'><FONT COLOR = "#3d82f0"> <b>Image : </b> </td>
    <td> <input type ='text' name='image' value='' size ='65' maxlength='65'>
    <input type="file" name="fichier" size="3"></td>
</tr>
<tr>
    <td align='right'><FONT COLOR = "#3d82f0"> <b>Description : </b> </td>
    <td> <textarea name='description' rows='20' cols='50' value=''></textarea></td>
</tr>
<tr>
     <td></td> <!-- ca va afficher un truc moche; il faut y mettre un espace ou 
         <td class = 'gauchiste' colspan = '2'><input type ='submit' value ='Envoyer'></td> ou fermer la table avant d'afficher le bouton, mais je sais qu'il est plus facile de positionner le bouton dans la table !>
     <td><div align='left'> <p> <input type ='submit' value ='Envoyer'> </p> </div></td> <! étrange cumul!>
</tr>
</table>
</form>
</body>
</html>
Voici mon fichier connectbase
<?php
$table ="dbeco";
if (!$base = mysql_select_db ($table, $connexion))
{
$message1 = mysql_error();
echo ($message1."<br>");
die();
}

?>
Et voici mon fichier d econnexion au serveur
<?php
$hebergeur = "localhost";
$utilisateur ="root";
$mdp="";
if (!$connexion = mysql_connect ($hebergeur, $utilisateur, $mdp))
{
$message = mysql_error();
echo ($message."<br>");
die();
}
?>
Et le fichier de traitement de données
<html>
<head>
</head>
<body>
<?php
$titre =($_POST['titre']);
$categorie=($_POST['categorie']);
$description=($_POST['description']);
$unite=($_POST['unite']);
$prix=($_POST['prix']);
include ("connexion.php");
include ("connectbase.php");
$req = 'INSERT INTO ouvrage (nom, descrip, unite, prix, categorie) VALUES ("'.$_POST['titre'].'","'.$_POST['description'].'","'.$_POST['unite'].'","'.$_POST['prix'].'","'.$_POST['categorie'].'");';
$resultat = mysql_query ($req)
or die (mysql_error());
?>
<script type="text/javascript"> 
history.go(-1); 
</script> 
</boby>
</html>
Par contre j'aurais quelques questions. lorsque je traite mes données, j'ai inséré une commande javascript qui me permet de rester sur mon formulaire. Ca marche très bien sauf qu'il ne me réinitialise pas les champs. Est ce possible et comment??
Dans mon fichier de traimtement de données, je suis obligé de refaire des include de ma connexion au serveur et à la base alors que je les ai déjà déclaré dans mon formulaire. Pourquoi??

Merci pour vos avis et réponses.
Les include incluent dans le script en cours, et leurs contenus se perdent quand ce script se termine.

"La connexion au serveur sera fermée aussitôt que l'exécution du script se termine, à moins qu'elle soit fermée avant en appelant explicitement mysql_close(). "

Re: Avis et optimisation

par Shenryu » 23 févr. 2012, 15:41

Pour l'upload, tu as une explication sur ce sujet : faq-tutoriels/telechargement-fichiers-a ... 53523.html

Tu devrais t'en sortir avec ça ;)

Cependant, cela nécessite de mettre l'image sur ton serveur donc tu as pas mal de vérifications à faire (qui sont indiquées dans le lien que je t'ai passé).

Re: Avis et optimisation

par cagouille65 » 23 févr. 2012, 15:36

Oki merci pour les infos. Par contre dans mon formulaire je voudrais récupérer le chemin d'une image que l'on va chercher grâce à un bouton parcourir et je voudrais stocker l'empalcement de cette image dans ma base. Le soucis que j'ai actuellement (parmis tant d'autres) c'est que lorsque je vais chercher mon image, il ne m'affiche pas le chemin complet mais seulement le nom. De plus il ne me l'affaiche pas dans la zone voulue mais à côté du bouton parcourir. Que faire ??

Re: Avis et optimisation

par Shenryu » 23 févr. 2012, 15:26

Ta connexion est automatiquement fermée à la fin de ton code php.
La connexion au serveur sera fermée aussitôt que l'exécution du script se termine, à moins qu'elle soit fermée avant en appelant explicitement mysql_close .
Si tu veux garder ta connexion ouvert, tu peux utiliser mysql_pconnect mais je ne pense pas que ce soit terrible niveau sécurité.

Re: Avis et optimisation

par cagouille65 » 23 févr. 2012, 15:20

Merci pour le header ca fonctionne nickel.... Petite question : Lorsque je transmet mes données de mon formulaire vers mon fichier reqinsert, je dois obligatoirement faire un include de ma connexion au serveur et à ma base sinon cela ne fonctionne pas alors que je l'ai déjà fait sur mon formulaire, est ce normal?? Car si j'ai bien compris, une connexion reste active tant qu'on ne la ferme pas....

Re: Avis et optimisation

par Shenryu » 23 févr. 2012, 15:05

Tu as oublié le "Location:"

Il faut que tu le mettes après l'exécution de ton insertion puisque tout ce qui est après ton header ne sera pas exécuté.

http://php.net/manual/fr/function.header.php

Re: Avis et optimisation

par cagouille65 » 23 févr. 2012, 14:57

PAS COMPRIS.....LOL

voilà ce que j'ai fait
<?php
header ("formulaire2.php");
$titre =($_POST['titre']);
$categorie=($_POST['categorie']);
$description=($_POST['description']);
$unite=($_POST['unite']);
$prix=($_POST['prix']);
include ("connexion.php");
include ("connectbase.php");
$req = 'INSERT INTO ouvrage (nom, descrip, unite, prix, categorie) VALUES ("'.$_POST['titre'].'","'.$_POST['description'].'","'.$_POST['unite'].'","'.$_POST['prix'].'","'.$_POST['categorie'].'");';
$resultat = mysql_query ($req)
or die (mysql_error());
?>
Résultat, tout se passe bien sauf que je reste sur une page blanche reqinsert.php

Re: Avis et optimisation

par Shenryu » 23 févr. 2012, 14:32

Oui. Ca te permet de rediriger vers cette page, pas d'y revenir. J'insiste sur l'emploi des mots ^^
Par contre, il ne faut pas que tu utilises de echo, print, etc. avant l'appel du header.

Re: Avis et optimisation

par cagouille65 » 23 févr. 2012, 13:47

Merci pour toutes ces infos, je vais regarder pour améliorer tous ça. Le header dont tu me parles permet de revenir sur la page du formulaire et de réinitialiser les champs, c'est bien ça??

Re: Avis et optimisation

par Shenryu » 23 févr. 2012, 13:32

Salut,

Alors avant de penser optimisation, je te suggère de corriger quelques erreurs.

Déjà ta base de données.. Il faut que ta table ouvrage enregistre l'id de la catégorie et non son nom. Ca te permettra de faire des jointures entre tes tables.
Ensuite, tu pourras utiliser ton id catégorie en valeur de tes options plutôt que d'utiliser le nom.

Il faut aussi que tu fermes ta balise option.

Enfin dans ton insertion, plutôt que d'appeler une page html qui te redirige, je te suggère de n'utiliser que du php et de rediriger avec les header.
header("Location: http://www.monSite.com/maPage.php")
Ca t'évitera les problèmes dont tu parles.

Utilise mysql_real_escape_string($maVar) avant ton insertion en base, ça te permettra de protéger tes champs peu importe la configuration de ton serveur.
Tu peux supprimer $titre = $_POST['titre'] etc. puisque tu ne les utilises pas par la suite.

Quel genre d'optimisations souhaites-tu en dehors de ça ? Je ne pense pas que tu en aies réellement besoin vu que ton code est correct mais je peux toujours t'en proposer d'autres pour te faire gagner des millièmes de millièmes de secondes :mrgreen:

Avis et optimisation

par cagouille65 » 23 févr. 2012, 12:21

Bonjour,

JE viens d'écrire ces bouts de codes qui fonctionnent entre eux. J'aimerais que vous me donniez votre avis et voir s'il est possible d'optimiser tout ça.

Voici mon formulaire principal
<html>
<head>
<title>Insertion Article</title>
</head>
<?php
include ("connexion.php");
include ("connectbase.php");
$req = "SELECT * FROM categorie";
$result = mysql_query ($req);

?>
<H1><p align = "center"><FONT COLOR = "#808080">INSERTION D'ARTICLE AU CATALOGUE</p>
<HR>
<BODY bgcolor = "#111111">
<p align="center">
<form action='reqinsert.php' method='POST'>
<table width='95%' border='0' cellspacing='0' cellpadding='2'>
<tr>
<td align='right'> <FONT COLOR = "#3d82f0"><b>Titre : </b> </td>
<td> <input type ='text' name='titre' value='' size ='65' maxlength='65'></td>
</tr>
<tr>
<td align='right'><FONT COLOR = "#3d82f0"> <b>Categorie : </b> </td>
<td> <select name='categorie' rows='20' cols='20' >
<?php
while ($ligne = mysql_fetch_array($result))
{extract ($ligne);
if ($nom<>"")
echo "<option value='$nom'>$nom\n";
}
echo "</select>";
?>
</td>
</tr>
<tr>
<td align='right'><FONT COLOR = "#3d82f0"> <b>Unite : </b> </td>
<td> <input type ='text' name='unite' value='' size ='3' maxlength='3'></td>
</tr>
<tr>
<td align='right'><FONT COLOR = "#3d82f0"> <b>Prix : </b> </td>
<td> <input type ='text' name='prix' value='' size ='8' maxlength='65'></td>
</tr>
<tr>
<td align='right'><FONT COLOR = "#3d82f0"> <b>Image : </b> </td>
<td> <input type ='text' name='image' value='' size ='65' maxlength='65'>
<input type="file" name="fichier" size="3"></td>
</tr>
<tr>
<td align='right'><FONT COLOR = "#3d82f0"> <b>Description : </b> </td>
<td> <textarea name='description' rows='20' cols='50' value=''></textarea></td>
</tr>
<tr>
<td></td>
<td><div align='left'> <p> <input type ='submit' value ='Envoyer'> </p> </div></td>
</tr>
</table>
</form>
</body>
</html>
Voici mon fichier connectbase
<?php
$table ="dbeco";
if (!$base = mysql_select_db ($table, $connexion))
{
$message1 = mysql_error();
echo ($message1."<br>");
die();
}

?>
Et voici mon fichier d econnexion au serveur
<?php
$hebergeur = "localhost";
$utilisateur ="root";
$mdp="";
if (!$connexion = mysql_connect ($hebergeur, $utilisateur, $mdp))
{
$message = mysql_error();
echo ($message."<br>");
die();
}
?>
Et le fichier de traitement de données
<html>
<head>
</head>
<body>
<?php
$titre =($_POST['titre']);
$categorie=($_POST['categorie']);
$description=($_POST['description']);
$unite=($_POST['unite']);
$prix=($_POST['prix']);
include ("connexion.php");
include ("connectbase.php");
$req = 'INSERT INTO ouvrage (nom, descrip, unite, prix, categorie) VALUES ("'.$_POST['titre'].'","'.$_POST['description'].'","'.$_POST['unite'].'","'.$_POST['prix'].'","'.$_POST['categorie'].'");';
$resultat = mysql_query ($req)
or die (mysql_error());
?>
<script type="text/javascript"> 
history.go(-1); 
</script> 
</boby>
</html>
Par contre j'aurais quelques questions. lorsque je traite mes données, j'ai inséré une commande javascript qui me permet de rester sur mon formulaire. Ca marche très bien sauf qu'il ne me réinitialise pas les champs. Est ce possible et comment??
Dans mon fichier de traimtement de données, je suis obligé de refaire des include de ma connexion au serveur et à la base alors que je les ai déjà déclaré dans mon formulaire. Pourquoi??

Merci pour vos avis et réponses.