Erreur de syntaxe SQL, problèmes de connexion sous forme simple PHP
-
28-10-2019 - |
Question
J'ai un formulaire simple qui insère des données dans une table sur mon serveur.J'ai configuré un utilisateur spécial pour gérer cela, avec des autorisations d'insertion uniquement.J'obtiens des erreurs de connexion et de syntaxe.
Voici mon formulaire:
<form id="form1" name="form1" method="post" action="mailform.php" onsubmit="return validateForm();">
<input type="text" id="First" maxlength="100" autocorrect placeholder="First name" />
<input type="text" id="Last" maxlength="100" autocorrect placeholder="Last name" />
<input type="text" id="Email" maxlength="100" autocorrect placeholder="Email address" />
<select name="SalesPerson">
<option value="SP1">SP1</option>
<option value="SP2">SP2</option>
<option value="SP3">SP3</option>
</select>
<select name="Show">
<option value="Show1">Show1</option>
<option value="Show2">Show2</option>
</select>
<button type="submit" id="submit" class="oneup">Submit</button>
</form>
et plus sur mailform.php nous avons:
<?php
$name = "xxx_xxx";
$name = mysql_real_escape_string($name);
$SQL = "SELECT * FROM users WHERE username = '$name'";
$con = mysql_connect("localhost","xxx_xxx","xxxxxxxxx");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("xxx_x", $con);
$sql="INSERT INTO email_signup (First, Last, Email, SalesPerson, Show)
VALUES
('$_POST[First]','$_POST[Last]','$_POST[Email]','$_POST[SalesPerson]','$_POST[Show]')";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
mysql_close($con)
?>
Et voici les erreurs -
Warning: mysql_real_escape_string() [<a href='function.mysql-real-escape-string'>function.mysql-real-escape-string</a>]: Access denied for user 'xxx'@'localhost' (using password: NO) in <b>.../mailform.php</b> on line 28
Warning: mysql_real_escape_string() [<a href='function.mysql-real-escape-string'>function.mysql-real-escape-string</a>]: A link to the server could not be established in <b>.../mailform.php</b> on line 28
Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Show)
VALUES
('','','','SP1','Show1')' at line 1
Une idée des raisons pour lesquelles j'ai des problèmes de connexion?J'ai un formulaire presque identique mis en place dans un autre endroit qui fonctionne très bien.
La solution
Commencez par établir votre connexion, puis exécutez mysql_real_escape_string (), puis votre requête.mysql_real_escape_string () se connecte en fait à la base de données pour la laisser échapper à votre chaîne.Si vous n'avez pas de connexion, cela ne fonctionnera pas
Autres conseils
Essayez de mettre la connexion en premier.
$con = mysql_connect("localhost","xxx_xxx","xxxxxxxxx");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
$name = "xxx_xxx";
$name = mysql_real_escape_string($name);
$SQL = "SELECT * FROM users WHERE username = '$name'";
Remarque: Cette réponse ne tente pas de résoudre une vulnérabilité majeure d'injection SQL.Pour une discussion plus approfondie, lisez les commentaires sous la question.
Afficher est un mot réservé
Utiliser
$sql="INSERT INTO email_signup (`First`, `Last`, `Email`, `SalesPerson`, `Show`)
VALUES
('$_POST[First]','$_POST[Last]','$_POST[Email]','$_POST[SalesPerson]','$_POST[Show]')";