gpt4 book ai didi

php - 使用 PHP 将数据插入数据库

转载 作者:行者123 更新时间:2023-11-29 06:51:00 25 4
gpt4 key购买 nike

问题是:用户输入的数据经过filter_input过滤并保存到关联数组后,如何将其发送到数据库。按照我尝试执行此操作的方式,即使我用经过过滤、清理的输入填充了数组,我也会收到错误消息,说明filtered_inputs 数组的每个字段的索引未定义。另外,如果有人知道替代方案或更好的方法来做到这一点,请告诉我们。有问题的数据库是 MariaDB mySQL 方言。一切都放置在服务器上并运行并使用分配给服务器的 phpmyadmin。

<?php require_once("Filtering.php");

$filter = new Filtering();

$filter->connect();

if (isset($_POST['submit'])){
$filter->insertAll();
}

?>
<!DOCTYPE html>
<html lang="en">

<head>
</head>

<body>

<div class="container-fluid">
<form action="<?php $_SERVER['PHP_SELF']; ?>" method="POST" name="order" novalidate>
<fieldset>
<legend>Order Summary</legend>
<br>
<div class="row">
<div class="col-12 d-flex flex-row">
<div class="col-4">
<span><strong>Product Name</strong></span>
</div>
<div class="col-2 justify-content-center">
<span><strong>Quantity</strong></span>
</div>
<div class="col-3 justify-content-center">
<span><strong>Price</strong></span>
</div>
</div>
</div>
<br>
<div class="row">
<div class="col-12 d-flex flex-row">
<div class="col-4">
<span>Gigabyte GTX1060 G1 Gaming 3GB GDDR5</span>
</div>
<div class="col-2 justify-content-center">
<select class="form-control col-3" id="quantity">
</select>
</div>
<div class="col-3 justify-content-center">
<span id="price">$ 349.99</span>
</div>
</div>
</div>
</fieldset>
<br>
<fieldset>
<legend>Customer Information</legend>
<br>
<div class="row">
<div class="col-8 d-flex flex-row">
<div class="col-2">
<label class="col-form-label">First Name<span class="required">*</span></label>
</div>
<div class="col-auto">
<input class="form-control" placeholder="Enter your first name" type="text" name="firstName">
</div>
</div>
</div>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (!$filter->filterFirstName()) {
echo "<div class='row'>
<div class='col-5'>
<small class='text-muted ml-3 warning'>! Field must not be empty.</small>
</div>
</div>";
}
}
?>
<br>
<div class="row">
<div class="col-8 d-flex flex-row">
<div class="col-2">
<label class="col-form-label">Last Name<span class="required">*</span></label>
</div>
<div class="col-auto">
<input class="form-control" placeholder="Enter your last name" type="text" name="lastName">
</div>
</div>
</div>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (!$filter->filterLastName()) {
echo "<div class='row'>
<div class='col-5'>
<small class='text-muted ml-3 warning'>! Field must not be empty.</small>
</div>
</div>";
}
}
?>
<br>
<div class="row">
<div class="col-8 d-flex flex-row">
<div class="col-2">
<label class="col-form-label">E-mail<span class="required">*</span></label>
</div>
<div class="col-auto">
<input class="form-control" placeholder="Enter your e-mail" type="text" name="email">
</div>
</div>
</div>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (!$filter->filterEmail()) {
echo "<div class='row'>
<div class='col-5'>
<small class='text-muted ml-3 warning'>! Field must not be empty.</small>
</div>
</div>";
}
}
?>
<br>
<div class="row">
<div class="col-8 d-flex flex-row">
<div class="col-2">
<label class="col-form-label">Number<span class="required">*</span></label>
</div>
<div class="col-auto">
<input class="form-control noButton" placeholder="Enter your number" type="number"
name="number">
</div>
</div>
</div>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (!$filter->filterNumber()) {
echo "<div class='row'>
<div class='col-5'>
<small class='text-muted ml-3 warning'>! Field must not be empty.</small>
</div>
</div>";
}
}
?>
</fieldset>
<br>
<br>
<fieldset>
<legend>Payment Information</legend>
<br>
<div class="row">
<div class="col-8 d-flex flex-row">
<div class="col-3">
<label class="col-form-label">Card Number<span class="required">*</span></label>
</div>
<div class="col-auto">
<input class="form-control noButton" placeholder="xxxx-xxxx-xxxx-xxxx" type="number"
name="cardNum">
</div>
</div>
</div>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (!$filter->filterCard()) {
echo "<div class='row'>
<div class='col-5'>
<small class='text-muted ml-3 warning'>! Field must not be empty. Must not be longer than 16 digits</small>
</div>
</div>";
}
}
?>
<br>
<div class="row">
<div class="col-8 d-flex flex-row">
<div class="col-3">
<label class="col-form-label">Expiration Date<span class="required">*</span></label>
</div>
<div class="col-2">
<input class="form-control" placeholder="MM/YY" type="text" name="expDate">
</div>
</div>
</div>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (!$filter->filterExpDate()) {
echo "<div class='row'>
<div class='col-5'>
<small class='text-muted ml-3 warning'>! Field must not be empty. Enter a valid date format: 'MM/YY'</small>
</div>
</div>";
}
}
?>
<br>
<div class="row">
<div class="col-8 d-flex flex-row">
<div class="col-3">
<label class="col-form-label">Security Number<span class="required">*</span></label>
</div>
<div class="col-2">
<input class="form-control noButton" placeholder="xxxz" type="number" name="secNum">
</div>
</div>
</div>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (!$filter->filterSecurityNum()) {
echo "<div class='row'>
<div class='col-5'>
<small class='text-muted ml-3 warning'>! Field must not be empty. Must be at most 4 digits long</small>
</div>
</div>";
}
}
?>
</fieldset>
<br>
<br>
<fieldset>
<legend>Delivery Information</legend>
<br>
<div class="row">
<div class="col-8 d-flex flex-row">
<label class="form-check-label">
<strong>Delivery Option</strong>
</label>
</div>
</div>
<div class="row">
<div class="col-8 d-flex flex-row">
<label class="form-check-label">
<input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios1"
value="option1" checked>
Standard Delivery - Free of charge
</label>
</div>
<div class="col-8 d-flex flex-row">
<label class="form-check-label">
<input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios1"
value="option1">
Express Delivery - $ 5.99
</label>
</div>
</div>
<br>
<div class="row">
<div class="col-8 d-flex flex-row">
<div class="col-3">
<label class="col-form-label">Address Line 1<span class="required">*</span></label>
</div>
<div class="col-auto">
<input class="form-control" placeholder="Enter your address" type="text" name="address">
</div>
</div>
</div>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (!$filter->filterAddress()) {
echo "<div class='row'>
<div class='col-5'>
<small class='text-muted ml-3 warning'>! Field must not be empty.</small>
</div>
</div>";
}
}
?>
<br>
<div class="row">
<div class="col-8 d-flex flex-row">
<div class="col-3">
<label class="col-form-label">Address Line 2</label>
</div>
<div class="col-auto">
<input class="form-control" placeholder="Optional" type="text" name="address2">
</div>
</div>
</div>
<br>
<div class="row">
<div class="col-8 d-flex flex-row">
<div class="col-3">
<label class="col-form-label">Country</label>
</div>
<div class="col-auto">
<input class="form-control" value="Croatia" type="text" name="country" disabled>
</div>
</div>
</div>
<br>
<div class="row">
<div class="col-8 d-flex flex-row">
<div class="col-3">
<label class="col-form-label">County</label>
</div>
<div class="col-auto">
<select class="custom-select" id="county">
</select>
</div>
</div>
</div>
<br>
<div class="row">
<div class="col-8 d-flex flex-row">
<div class="col-3">
<label class="col-form-label">City<span class="required">*</span></label>
</div>
<div class="col-auto">
<input class="form-control" placeholder="Enter your city" type="text" name="city">
</div>
</div>
</div>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (!$filter->filterCity()) {
echo "<div class='row'>
<div class='col-5'>
<small class='text-muted ml-3 warning'>! Field must not be empty.</small>
</div>
</div>";
}
}
?>
<br>
<div class="row">
<div class="col-8 d-flex flex-row">
<div class="col-3">
<label class="col-form-label">Zipcode<span class="required">*</span></label>
</div>
<div class="col-auto">
<input class="form-control noButton" placeholder="Enter your zipcode" type="number" name="zip">
</div>
</div>
</div>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (!$filter->filterZip()) {
echo "<div class='row'>
<div class='col-5'>
<small class='text-muted ml-3 warning'>! Field must not be empty. Must be at most 5 digits long</small>
</div>
</div>";
}
}
?>
<br>
<div class="col-auto">
<label class="custom-control custom-checkbox mb-2 mr-sm-2 mb-sm-0">
<input type="checkbox" class="custom-control-input">
<span class="custom-control-indicator"></span>
<span class="custom-control-description">Receive mails about news and special offers</span>
</label>
</div>
<br>
<div class="row">
<div class="col-8 d-flex flex-row">
<div class="col-auto">
<label class="col-form-label">Additional Information</label>
</div>
</div>
</div>
<div class="row">
<div class="col-8 d-flex flex-row">
<div class="col-5">
<textarea class="form-control" id="txtarea" rows="5" name="additionalInfo"></textarea>
</div>
</div>
</div>
<br>
<div class="row">
<div class="col-8 d-flex flex-row">
<input class="btn btn-primary col-2 ml-3" type="submit" name="submit" value="Submit">
</div>
</div>
</fieldset>
</form>
</div>
<script src="js/script.js"></script>
</body>

</html>

这是 PHP 类:(我使用相同的函数来过滤几乎每个输入字段,但我删除了它们,因此这里的代码较少。基本上每个过滤器方法都会向数组添加一个新元素及其关联名称:名字、姓氏、电子邮件等)出于某种原因,当我尝试将数据发送到数据库的 insertAll() 时,数组似乎是空的。

<?php
class Filtering {

public $filtered_inputs = array();
public $error = array();

var $tableName = "contact";
var $connection;

public function connect() {

$this->connection= mysqli_connect($this->DBHostName, $this->DBUserName, $this->DBPassword, $this->DBName);

if(!$this->connection) {
print("Failed to connect to DB");
die("Connection to database failed. " . mysqli_error($this->connection));
}
else {
print("Connected to DB");
}
}

public function filterFirstName() {
global $filtered_inputs;
global $error;
$check = false;

if (filter_has_var(INPUT_POST, 'firstName')) {
if (strlen($_POST['firstName']) == 0) {
$check = false;
} else {
$filtered_inputs['firstName'] = filter_input(INPUT_POST, 'firstName', FILTER_SANITIZE_STRING);
$check = true;
}
}
$error['firstName'] = $check;
return $check;
}


public function insertAll(){
var_dump($this->filtered_inputs);

$firstName = $this->filtered_inputs['firstName'];
$lastName = $this->filtered_inputs['lastName'];
$eMail = $this->filtered_inputs['email'];
$number = $this->filtered_inputs['number'];
$cardNum = $this->filtered_inputs['cardNum'];
$secNum = $this->filtered_inputs['secNum'];
$address = $this->filtered_inputs['address'];
$city = $this->filtered_inputs['city'];
$zip = $this->filtered_inputs['zip'];;

$query = "INSERT INTO contact (firstName, lastName, eMail, number, cardNum, secNum, address, city, zip) VALUES ($firstName, $lastName, $eMail, $number, $cardNum, $secNum, $address, $city, $zip);";

print(mysqli_error($this->connection));
}

}

最佳答案

有几个问题(请参阅评论),但这里的主要问题是调用函数的顺序。

各个过滤器函数嵌入在表单本身中,因此在此行之后调用:

$filter->insertAll();

所以实际上数组仍然是空的,并且函数正在尝试插入空值。

您需要重新排列,以便在尝试插入值之前调用各个函数。

关于php - 使用 PHP 将数据插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47501845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com