2016-11-15 5 views
-1

Возможно, это небольшая ошибка, но в настоящее время я пытаюсь отправить сообщение из html-формы в базу данных, чтобы добавить новую запись.html form INSERT INTO database

Вот код:

<div> 
    <?php 
    $menu = "INSERT INTO content (id, path, name) 
    **VALUES ('".$_POST['id']."', '".$_POST['path']."', '".$_POST['name']."')";** 

if ($connnect->query($menu) === TRUE) { 
    echo "New page added successfully"; 
} else { 
    echo "Error"; 
} 
    ?> 

    <form action="" method="post" name="menus" id="menus"> 
    <table style="width: 500px;"> 
     <tbody> 
     <tr> 
      <td> 
      <textarea name="id" id="id"></textarea> 
      </td> 
     </tr> 
     <tr> 
      <td> 
      <textarea name="path" id="path"></textarea> 
      </td> 
     </tr> 
     <tr> 
      <td> 
      <textarea name="name" id="name"></textarea> 
      </td> 
     </tr> 
     <tr> 
      <td> 
      <input type="submit" name="button" id="button" value="Upload"> 
      </td> 
     </tr> 
     </tbody> 
    </table> 
    </form> 
</div> 

Однако очевидно, что вы не можете поместить каждый $ _POST из формы в каждое значение есть другой способ сделать это, или кто-то может мне помочь?

С наилучшими пожеланиями, Льюис

+0

Как вы видите на ** линии ** это, где я имею в виду вопрос –

+3

я не вижу ничего плохого в запросе, за исключением, что она открыта для SQL инъекций. Я не знаю, в чем именно проблема. Что именно вы подразумеваете под этим: «Очевидно, вы не можете поместить каждый $ _POST из формы в каждое значение»? – Maximus2012

+1

И в чем же проблема? Вы получили сообщение об ошибке? –

ответ

0

использование Sprintf, которые могут сделать его немного более удобным для чтения в порядке параметров, переданных значений:

$menu = sprintf("INSERT INTO content (id, path, name) VALUES ('%s', '%s', '%s')", mysql_real_escape_string($_POST['id']), mysql_real_escape_string($_POST['path']), mysql_real_escape_string($_POST['name'])); 
0

Учитывая это ваш полный код, один из основных проблема в том, что вы вставляете содержимое формы каждый раз, когда страница загружается. Если ваша обработка формы находится на одной странице, вы можете добавить простую проверку. Например:

<?php 

if (isset($_POST['submit'])) { 

    # form information received, process it 
} 

# else continue with your normal script and display the form 
?> 

В этом случае, в первой странице загрузки данных $_POST не установлены, поэтому только форма будет появляться. Когда форма отправляется, скрипт обнаруживает, что есть данные и обрабатывает их.

И поясняется в комментариях, PHP Data Objects (или PDO для краткости) - это гораздо более современный, портативный и безопасный способ работы с базами данных. Есть много объяснений в Интернете о том, как и почему; и сама страница руководства довольно проста для чтения. Вы можете подготовить заявления, а затем сам класс будет обрабатывать все экранирование, необходимое для обеспечения безопасности вашего сценария. Быстрый пример:

# make a connection 
$db = new PDO(/* database info */); 
# prepare your statement with the placeholders for your data 
$st = $db->prepare(" 
    INSERT INTO content (id, path, name) 
     VALUES (?,?,?) 
"); 
# execute the query with the POST data 
$success = $st->execute([ 
    $_POST['id'], 
    $_POST['path'], 
    $_POST['name'] 
]); 

if (!$success) { 
    # error ... 
}