Загрузка формы PHP в базу данных MySQL - PullRequest
1 голос
/ 26 марта 2012

PHP новичок работает с учебника. Я пытаюсь сделать простую загрузку из формы PHP в базу данных MySQL. Форма загружается правильно, но каждый раз, когда страница обновляется, она повторяет предыдущую загрузку, создавая повторяющиеся записи. Вы можете увидеть мою рабочую страницу здесь .

Вы видите, что я пытаюсь получить комментарий "Спасибо! Товар добавлен!" выплюнуть над таблицей при подаче, но я признаю, что я не совсем понимаю, что именно происходит, когда я нажимаю "Отправить" ... сейчас он всегда показывает подтверждающее сообщение! Я включил код PHP для формы ниже.

Заранее спасибо!

Mike

<div id="form">

<h1 class="green">UPLOAD TO TABLE 'manufacturer'</h1>


<?php

$con = mysql_connect($host,$user,$pass);
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("thenally_productdump", $con);

$sql="INSERT INTO manufacturer (manu_name, manu_product_type, manu_product_description, manu_website)
VALUES
('$_POST[manufacturer]','$_POST[product]','$_POST[description]','$_POST[website]')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "Thank you! Product Added!";

mysql_close($con);

?> 

<form action="" method="post">
<table>
    <tr>
    <td class="form-table-left"><b>Manufacturer: </b> </td>
    <td class="form-table-right"><input type="text" name="manufacturer" size=50></td>
    </tr>

    <tr>
    <td class="form-table-left"><b>Product Type:</b></td>
    <td class="form-table-right"><input type="text" name="product" size=50></td>
    </tr>

    <tr>
    <td class="form-table-left"><b>Product Description: </b></td>
    <td class="form-table-right"><textarea name="description" rows=5 cols=40></textarea></td>
    </tr>

    <tr>
    <td class="form-table-left"><b>Manufacturer Website: </b></td>
    <td class="form-table-right"><input type="text" name="website" value="http://" size=50></td>
    </tr>

    <tr>
    <td class="submit"><input type="submit" name="submit" value="Add Product !"></td>
    </tr>

    </table>
    </form>

</div>

Ответы [ 3 ]

2 голосов
/ 26 марта 2012

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

  1. Проверьте свои данные, чтобы убедиться, что форма была отправлена ​​правильно.Здесь вы должны проверить, чтобы убедиться, что все необходимые поля имеют содержимое.Если они этого не делают, то вы бы снова показали форму.Если они правы, то вы показываете сообщение об успехе.Вы можете просто проверить ввод, используя strlen, чтобы убедиться, что переменные заполнены чем-то длиной> 0.Или вы можете использовать isset ().

  2. Вам действительно нужно сразу подумать о безопасности.Я знаю, что вы только учитесь на этом учебном примере, но для кого-то очень легко сделать инъекционную атаку на вашу базу данных, если вы просто вставите значения, как вы это сделали.Вам нужно взглянуть на справочную страницу для mysql_real_escape_string.

2 голосов
/ 26 марта 2012

Вы не проверили, действительно ли POST состоялся.Это означает, что ваш код обработки формы срабатывает при каждой загрузке страницы, даже если форма не была отправлена.Базовая универсальная обработка форм в PHP имеет следующую структуру:

<?php

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  ... a post has taken place, process the form
}

... display the form/errors/etc....

И, как сказано в комментарии Брэда, вы ШИРОКИ ОТКРЫТЫ для атак инъекций sql.Прежде чем делать что-то, что размещает ваш код на общедоступном веб-сайте, лучше изучить правила безопасного кодирования, иначе ваш сайт очень быстро заглохнет.

0 голосов
/ 26 марта 2012

добавить это перед вставкой в ​​БД

if(isset($_POST['submit'])){
//then do the insert 
}

не говорю о безопасности ....

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