écriture sur BDD via formulaire php...

Etchoum
Invité n'ayant pas de compte PHPfrance

09 sept. 2005, 14:16

Bonjour...

C'est encore moi, et oui *va prendre un abonnement*.

Voilà en fait, j'essaie tout bêtement d'enregistrer des infos sur ma bdd, via un formulaire php qui récupère les données. Tout me parait correct, mais, pourtant, ça n'écrit rien... Donc y'a forcement une erreur...mais où? :)

Si quelqu'un peut m'aider... ayant déjà offert ma gratitude j'offrirai un sourire ;)

merci d'avance^^

Code : Tout sélectionner

<?php include "connect.php"; echo '<form method="post" action="Amat.php"> <table align="center" border="0" class="table"> <tr><td><b>Matériel:</b></td><td><input type="text" name="type_mat" value=""></td></tr> <tr><td><b>Tarif:</b></td><td><input type="text" name="tarif_mat" value=""></td></tr> <tr><td><b>Descriptif:</b></td><td><input type="text" name="descr_mat" value=""></td></tr> <tr><tr><tr><td colspan="2" align="center" width="80" height="30"><input type="submit" value="Valider"> </table> </form>'; mysql_query("INSERT INTO materiel(id,type_mat,tarif_mat,descr_mat)' VALUES('','".$_POST['type_mat']."', '".$_POST['tarif_mat']."','".$_POST['descr_mat']."') ");

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

09 sept. 2005, 14:28

Salut
a mon avis un include se fait de tal façon:
include (connect.php);
de plus si tu fessait une meilleur organisation de ta page tu verrai que tu as 3 <tr> a la suite avant le bouton => ils se construit bien ton formulaire ???

sinon le INSERT tu le fait sur la meme page que le formulaire ??

fait des echo sur les variables avant de vouloir inserer pour voir ce qu'elles contiennent.

EDIT:
de plus il y a une ' ds l'instruction sql:
materiel(id,type_mat,tarif_mat,descr_mat)' VALUES

Invité
Invité n'ayant pas de compte PHPfrance

09 sept. 2005, 21:41

pour le include, j'ai toujours fait ça et apparement ça marche..; enfin il se peut que ce soit une utilisation erronée, mais ça semble accepté...

les <tr> c'était juste pour placer le bouton plus ou moins om je voulais, l'affichage est "nickel" :)

Bon par contre, en effet, je fais le INSERT sur la même pâge, c'est peut-être le pb... Je voudrais limiter le nombre de pages, parce que à force ça cumule pas mal, pour des broutilles...

Je vias tenter les echos sur variable, ça peut m'aider en effet... réponse demain ;)

merci ^^

Mammouth du PHP | 19672 Messages

09 sept. 2005, 22:09

include (connect.php);
Avec ça, c'est sur que ça plante : à la rigueur si on met des parenthèses, il faudrait que ce soit:
include ("connect.php");
Par contre il y a une erreur dans ta requête, une apostrophe en trop. Sans compter que tu fais analyser un formulaire HTML par PHP, ce qui non seulement est complètement inutile mais en plus ralentit les performances. Proposition de corrigé:
<?php
include "connect.php";
?>
<form method="post" action="Amat.php">
  <table align="center" border="0" class="table">
    <tr>
      <td><b>Matériel:</b></td>
      <td><input type="text" name="type_mat" value=""></td>
    </tr>
    <tr>
      <td><b>Tarif:</b></td>
      <td><input type="text" name="tarif_mat" value=""></td>
    </tr> 
    <tr>
      <td><b>Descriptif:</b></td>
      <td><input type="text" name="descr_mat" value=""></td>
    </tr>
    <tr>
      <td colspan="2" align="center" width="80" height="30"><input type="submit" value="Valider"></td>
    </tr>
  </table> 
</form>
<?php
mysql_query("INSERT INTO materiel(id,type_mat,tarif_mat,descr_mat) VALUES('', '".$_POST['type_mat']."', '".$_POST['tarif_mat']."', '".$_POST['descr_mat']."') ");
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

09 sept. 2005, 22:13

include (connect.php);
Avec ça, c'est sur que ça plante : à la rigueur si on met des parenthèses, il faudrait que ce soit:
include ("connect.php");
Tout à fait un oubli (erreur) de plus :oops:
Par contre il y a une erreur dans ta requête, une apostrophe en trop.

Je lui avait aussi fait la remarque sur ce point :wink:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

09 sept. 2005, 22:56

De plus, comme il n'y a pas de vérification d'envoi du formulaire, la requete est exécutée dans le vide au chargement du formulaire.

Pareil, si cette page ne s'appelle pas Amat.php, le formulaire n'envoi jamais les données au script php qui, lui, n'insérera jamais les données dans la bdd
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Administrateur PHPfrance
Administrateur PHPfrance | 149 Messages

09 sept. 2005, 23:08

une belle requete pour l'injection sql ca
--
Moosh - ancêtre de la communauté
http://www.phpfrance.com

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

09 sept. 2005, 23:09

une belle requete pour l'injection sql ca
:langue: :langue: :langue:

Mais on va voir un pb à la fois ... ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Etchoum
Invité n'ayant pas de compte PHPfrance

10 sept. 2005, 18:31

Merci à tous :)

Du coup ça marche, ça écrit dans ma bdd ;)

me reste plus qu'un petit problème de variable, apparement mes trois valeurs ne sont aps reconnues au premier chargement de la page, mais tout se apsse bien quand-même... Et c'est bien là l'essentiel ,que ça marche^^

*part chercher la source des erreurs*.

Encore merci ;)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

11 sept. 2005, 10:53

De plus, comme il n'y a pas de vérification d'envoi du formulaire, la requete est exécutée dans le vide au chargement du formulaire.
C'est ce que je disais. Si il ne trouve pas les variables au 1er chargement, c'est parce qu'elles n'existent pas tant que le formulaire n'est pas validé.

Il faut que tu encadre le script d'insertion par un test de validation du formulaire. Par exemple si le bouton de validation existe. Si il existe, c'est que le formulaire est validé
<?php 
include "connect.php"; 
?> 
<form method="post" action="Amat.php"> 
  <table align="center" border="0" class="table"> 
    <tr> 
      <td><b>Matériel:</b></td> 
      <td><input type="text" name="type_mat" value=""></td> 
    </tr> 
    <tr> 
      <td><b>Tarif:</b></td> 
      <td><input type="text" name="tarif_mat" value=""></td> 
    </tr> 
    <tr> 
      <td><b>Descriptif:</b></td> 
      <td><input type="text" name="descr_mat" value=""></td> 
   </tr> 
    <tr> 
      <td colspan="2" align="center" width="80" height="30"><input type="submit" value="Valider" name="valid"></td> 
    </tr> 
  </table> 
</form> 
<?php 
//Le formulaire a été validé
// /!\ J'ai donné un nom au bouton de validation
if (isset($_POST['valid''])) {
    mysql_query("INSERT INTO materiel(id,type_mat,tarif_mat,descr_mat) VALUES('', '".$_POST['type_mat']."', '".$_POST['tarif_mat']."', '".$_POST['descr_mat']."') "); 
}
?>
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer