Insérer une ligne de la Table MySQL à l'aide de PHP Formulaire
J'aimerais que l'utilisateur puisse insérer une "offre" dans une table MySQL à l'aide d'un formulaire php - ce n'est que pour la démo, ne vivent pas le but. Je reçois le message d'erreur suivant,
Erreur: Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre versions du serveur MySQL pour la bonne syntaxe à utiliser près de "90','2011-07-13" à la ligne 3 (Ligne 3 se réfère à mon tag?) Je me dis qu'il ne marche pas comme les entrées d'un formulaire juste en étant "texte" type, mais aucune idée de comment le résoudre - tous les conseils très bienvenue, c'est ma forme & code php ci-dessous;
<form action="insert.php" method="post">
<div><label for="commodity">Commodity</label><input type="text" name="commodity"/></div>
<div><label for="region">Region</label><input type="text" name="region"/></div>
<div><label for="member">Member</label><input type="text" name="member" /></div>
<div><label for="size">Size</label><input type="int" name="size" /></div>
<div><label for="price">Post Bid</label><input type="decimal" name="price" /></div>
<div><label for="posted">Date Posted</label><input type="text" name="posted"/></div>
<P><label for="submit">Submit Bid</label><input type="submit" /></P>
</form>
& php
<?php
$con = mysql_connect("localhost","","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("palegall_newTrader", $con);
$sql="INSERT INTO `buy` (commodity, region, member, size, price, posted)
VALUES
('$_POST[commodity]','$_POST[region]','$_POST[member]','$_POST[size]','$_POST[price]','$_POST[posted]'";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "1 record added";
mysql_close($con)
?>
Merci beaucoup à l'avance, - écosse
- Juste à l'aide de variables post dans une requête est dangereux (et s'ils comprennent le caractère ' et modifiez le code c'est exécutée).. Envisagez d'utiliser les requêtes paramétrées
- se terminant ronde crochet égaré ...$sql="INSERT INTO
buy
(matières premières, de la région, membre de, la taille, le prix, affichés) VALEURS ('$_POST[commodity]','$_POST[region]','$_POST[member]','$_POST[size]','$_POST[price]','$_POST[posted]')"; - Merci Bob & Adam - Dans les nouvelles à ce sujet (évidemment) & ne pas comprendre au sujet de sanatising & injection encore (mais jeté un coup d'oeil au lien fourni - merci) & pour les corrections, beaucoup apprécié.
Vous devez vous connecter pour publier un commentaire.
Vous êtes vulnérable à l'injection SQL, et votre POST contient probablement un
'
, qui est à l'origine de l'erreur de syntaxe. Essayez ce qui suit:la fonction d'échappement veillera à ce que le SQL des caractères dans les données sont échappés, ils ne peuvent pas "casser" votre requête. Ne jamais insérer directement les données fournies par l'utilisateur dans une requête SQL, même si c'est un script simple qui ne vous seront jamais utiliser. Prenez l'habitude d'échapper à tout (ou mieux encore, l'utilisation de PDO déclarations préparées à l'avance), car à un certain moment, vous allez vous brûler si vous ne le faites pas.
Votre parenthèse fermante besoin d'aller après la dernière valeur insérée, maintenant, c'est après le 4ème élément. Le mettre à la fin de l'instruction.
Suivez aussi @Marc, les conseils et le sanatize votre entrée.
Ne devrait-elle pas être
Il y a une parenthèse mal placée après le $_POST['taille'] qui devrait être après $_POST[publié]
SQL devrait ressembler à ceci: