MySQL не вставляется в столбец - PullRequest
0 голосов
/ 12 марта 2011

У меня есть код ниже:

    <html><body>
<?php
$con = mysql_connect("localhost","will","blahblah");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("blahblah", $con);

$sql="INSERT INTO links (link, notes, username)
VALUES
('$_POST[link]','$_POST[notes]','$_POST[username]')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "1 link added";

mysql_close($con)
?>
</body></html>

Он должен вставить ссылку, заметки и имя пользователя в мою базу данных, но это не так.Я не знаю, почему и был бы признателен за помощь!Это получает эти значения из формы ниже:

   <div id="stylized" class="myform">
<form id="form" name="form" method="post" action="user.php">
<label>Username
<span class="small">Enter Your Username</span>
</label>
<input type="text" name="name" id="username" />

<label>Link
<span class="small">Paste Your Link</span>
</label>
<input type="text" name="email" id="link" />

<label>Notes
<span class="small">Add Some Notes</span>
</label>
<input type="text" name="password" id="notes" />

<button type="submit"></button>
<div class="spacer"></div>

</form>
</div>

Спасибо!

Ответы [ 5 ]

2 голосов
/ 12 марта 2011

Я вижу, по крайней мере, три проблемы с вашим кодом:

Сначала , когда вы вводите строки в запрос SQL, вы должны экранировать его, используя mysql_real_escape_string():

$link = mysql_real_escape_string($_POST['link']);
$notes = mysql_real_escape_string($_POST['notes']);
$username = mysql_real_escape_string($_POST['username']);

$sql="INSERT INTO links (link, notes, username)
VALUES ('$link','$notes','$username')";


Третий , в вашем PHP-коде вы должны использовать атрибут name ваших полей ввода - а не их атрибуты id.

Учитывая, что ваш HTML-код выглядит следующим образом:

<input type="text" name="name" id="username" />
<input type="text" name="email" id="link" />
<input type="text" name="password" id="notes" />

Вы должны работать с:

  • $_POST['name'], а не $_POST['username']
  • $_POST['email'], а не $_POST['link']
  • $_POST['password'], а не $_POST['notes']

Примечание: с использованием name и id, которые по-разному приводят к проблемам; -)



Итак,Подводя итог, ваш код должен выглядеть примерно так:

$email = mysql_real_escape_string($_POST['email']);
$password = mysql_real_escape_string($_POST['password']);
$name = mysql_real_escape_string($_POST['name']);

$sql="INSERT INTO links (link, notes, username)
VALUES ('$email','$password','$name')";

Примечание: вы должны использовать одинаковые имена для полей ввода, а поля в таблице - этосделает ваш код проще для понимания.

1 голос
/ 12 марта 2011

Заменить его:

$sql="INSERT INTO links (link, notes, username)
VALUES
('$_POST[link]','$_POST[notes]','$_POST[username]')";

с:

$sql="INSERT INTO links (link, notes, username)
VALUES
('". mysql_escape_string($_POST['name']) ."','".
     mysql_escape_string($_POST['email']) ."','". 
     mysql_escape_string($_POST['password']) ."')";

Обратите внимание, что переменные POST, которые вы пытаетесь использовать в своем запросе, полностью отличаются от тех, которые указаны в вашей форме

0 голосов
/ 12 марта 2011

Элементы в $ _POST индексируются по атрибуту имени, а не по идентификатору.

0 голосов
/ 12 марта 2011

id атрибуты не имеют смысла при отправке формы. Вы, вероятно, хотите поменять местами атрибуты name и id.

В настоящее время вместо $_POST['username'], $_POST['link'] и $_POST['notes'].

отправляются $_POST['name'], $_POST['email'] и $_POST['password'].

Ваш код также уязвим для SQL-инъекций .

0 голосов
/ 12 марта 2011

Индексы переменных POST должны соответствовать именам элементов формы.

Так что либо напишите:

<input type="text" name="link" id="link" /> или используйте $_POST[email]

Адаптировать для других переменных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...