2012-02-20 1 views
2

У меня есть простая форма, которая вставляет данные в таблицу на моем сервере. Я создал для этого специального пользователя, с разрешениями только для вставки. Я получаю ошибки соединения и синтаксиса.Ошибка синтаксиса SQL, проблемы с подключением простая форма PHP

Вот моя форма:

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

и более в mailform.php мы имеем:

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

А вот ошибки -

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

Любая идея, почему я получаю проблемы с подключением? У меня есть почти идентичная форма, созданная в другом месте, которое отлично работает.

+0

** ПРЕДУПРЕЖДЕНИЕ ** - код очень восприимчивы к SQL-инъекций. –

+0

Вы должны быть подключены к базе данных, чтобы использовать 'mysql_real_escape_string': http://www.php.net/manual/pl/function.mysql-real-escape-string.php посмотреть первое примечание. –

+0

@ Данеил А. Уайт Да, у меня есть еще один код, который защищает от этого, отфильтровывая восприимчивые символы. – blackessej

ответ

2

Сделайте свое подключение первым, а затем запустите mysql_real_escape_string(), а затем ваш запрос. mysql_real_escape_string() фактически соединяется с db, чтобы позволить ему избежать вашей строки. Если у вас нет подключения, он не будет работать

1

Попробуйте сначала установить соединение.

$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'"; 
0

Примечание. Этот ответ не пытается устранить серьезную уязвимость SQL-инъекции. Для более углубленного обсуждения прочитайте комментарии под вопросом.

Show является зарезервированным словом

Использование

$sql="INSERT INTO email_signup (`First`, `Last`, `Email`, `SalesPerson`, `Show`) 
VALUES 
('$_POST[First]','$_POST[Last]','$_POST[Email]','$_POST[SalesPerson]','$_POST[Show]')"; 
+0

спасибо за это - решил 1/2 ошибки! – blackessej

+0

Но если вы используете так, ваш сайт уязвим для инъекций sql. Поэтому всегда дезинфицируйте пользовательские входы. – amilaishere

+0

@amilaishere, это правда. Ответ решает проблему с зарезервированным словом; уже было обсуждено выше (по вопросу), относящееся к SQL-инъекции. Я отредактирую этот ответ, чтобы направить людей на эту дискуссию. – SimonMayer

Смежные вопросы