Форма отправки / вставки данных в базу данных MySQL при загрузке страницы - PullRequest
0 голосов
/ 09 октября 2011

У меня проблема с одной из моих страниц .php.

adddata.php имеет форму, которая позволяет пользователю отправлять определенные данные в базу данных, однако каждый раз, когда страница загружается или обновляется, отправляется пустая форма (создается строка пустых значений в БД).

У меня мало опыта работы с PHP, поэтому заранее извиняюсь за любые ошибки новичка - вот код:

<html>
<head>
<title>Project IPAM - Add Data</title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<div id="container" class="container" style="width:980px">


<?php

include('./templates/header.php'); 
include('./templates/dbconnect.php');


?>



<?php
if(isset($_POST['submit']))
{
    $name = $_POST['address_v4'];
    echo "Successful submitted";

}
?>

<div id="content" style="background-color:#ABCDEF;height:500px;width:980px">

<!--  This is a example submit form to add data to the database !-->



<table width="300" border="0" align="center" cellpadding="0" cellspacing="1">
<tr>
<td><form method="post" action="adddata.php">
<table width="" border="0" cellspacing="1" cellpadding="3">
<tr>
<td colspan="3"><strong>Insert Data Into mySQL Database </strong></td>
</tr>
<tr>
<td>IP(v4)</td>
<td>:</td>
<td><input name="address_v4" type="text" id="address_v4" maxlength="15"></td>
</tr>
<tr>
<td>Hostname</td>
<td>:</td>
<td><input name="hostname" type="text" id="hostname" maxlength="32"></td>
</tr>
<tr>
<td>Type</td>
<td>:</td>
<td><select name="type">
<option value="static">Static</option>
<option value="dhcp">DHCP</option>
<option value="reserved">Reserved</option>
</td>
</tr>
<tr>
<td>Updated By</td>
<td>:</td>
<td><input name="updated_by" type="text" id="updated_by" maxlength="16"></td>
</tr>
<tr>
<td>Notes</td>
<td>:</td>
<td><input name="notes" type="text" id="notes" maxlength="128"></td>
</tr>
<tr>
<td>Location</td>
<td>:</td>
<td><textarea cols="17" rows="7" name="location" type="text" id="location" maxlength="64"></textarea></td>
</tr>
<tr>
<td>Default Gateway</td>
<td>:</td>
<td><input name="default_gateway" type="text" id="default_gateway" maxlength="15"></td>
</tr>
<tr>
<td>Subnet Mask</td>
<td>:</td>
<td><input name="subnet_mask" type="text" id="subnet_mask" maxlength="15"></td>
</tr>
<tr>
<td colspan="3" align="center"><input type="submit" name="submit" value="Submit"></td>
</tr>
</table>
</form>
</td>
</tr>
</table>


<?php


// Connect to the DB
include_once('./templates/dbconnect.php');

// Get values from form and checks whether values have been initilized using the isset() function.
$address=isset($_POST['address_v4']);
$hostname=isset($_POST['hostname']);
$type=isset($_POST['type']);
$updated_by=isset($_POST['updated_by']);
$notes=isset($_POST['notes']);
$location=isset($_POST['location']);
$default_gateway=isset($_POST['default_gateway']);
$subnet_mask=isset($_POST['subnet_mask']);



// Insert data into mysql 
$sql="INSERT INTO $tbl_name(address_v4, hostname, type, updated_by, notes, location, default_gateway, subnet_mask)
        VALUES('$address','$hostname','$type','$updated_by','$notes','$location','$default_gateway','$subnet_mask')";


if (!mysql_query($sql,$con))//
  {
  die('Error: ' . mysql_error());
  }


mysql_close($con)
?>








</div>
<div id="footer" style="background-color:#FFA500;clear:both;text-align:center;">
Copyright © 2011 Richard Day
</div>
</div>
</body>
</html>

Ответы [ 3 ]

1 голос
/ 09 октября 2011

isset() проверяет, установлено ли значение или нет, и возвращает true или false. Измените это на что-то вроде:

if (isset($_POST['address_v4']))
{
    // if the value does indeed exist, then prepare it to be used in an SQL query
    // and assign it to the $address variable
    $address = mysql_real_escape_string($_POST['address_v4']);
}
else
{
    // if the value does not exist, then make the $address variable an
    // empty string
    $address = '';
}

То же самое для остальных переменных, которые нужно добавить в запрос.

0 голосов
/ 09 октября 2011

Прежде всего вам необходимо подтвердить свои данные.

Используйте isset();, чтобы проверить, установлены ли они, используйте empty();, чтобы проверить, являются ли переменные пустыми. Используйте оператор && для одновременного выполнения нескольких проверок.

Приведите переменные к соответствующим им типам данных. Сбросьте свой ввод с помощью mysql_real_escape_string(); перед сохранением в базу данных.

Используйте метод post-redirect-get , чтобы предотвратить отправку формы при обновлении или перезагрузке.

0 голосов
/ 09 октября 2011

Проблема в том, что вы проверяете, установлены ли переменные $ _POST, например ::

$address=isset($_POST['address_v4']);

isset возвращает логическое (true или false) значение, а не данные, которые находятся впеременная, с которой вы проверяете.Измените ваши строки на что-то вроде этого:

$address=isset($_POST['address_v4']) ? mysql_real_escape_string($_POST['address_v4']) : '';

mysql_real_escape_string поможет предотвратить SQL-инъекцию атак на ваш сайт.

EDIT

Если я вас правильно понимаю, вам также необходимо проверить, была ли форма действительно отправлена ​​перед выполнением вашего оператора базы данных, в тот момент, когда вы выполняете его, независимо от того, была ли форма отправлена.Переместите весь ваш PHP-код из нижней части документа внутри оператора if(isset($_POST['submit'])) в верхней части, и это должно разобраться.

if(isset($_POST['submit'])) {
  $name = $_POST['address_v4'];
  echo "Successful submitted";

  // Now the code from the bottom, minus the database file include as you've already got that further up in the code
  $address=isset($_POST['address_v4']) ? mysql_real_escape_string($_POST['address_v4']) : '';

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