Я сталкиваюсь с некоторыми проблемами при загрузке данных из формы HTML в мою базу данных. Я разделил фактическую загрузку и ввод в двух разных файлах.
Вот форма ввода HTML-кода и команда для включения файла upload.php:
<?php
require 'db.php';
session_start();
?>
<?php
if (isset($_POST['upload'])) { //shop upload
require 'upload.php';
}
?>
<!DOCTYPE html>
<html >
<head>
<meta charset="UTF-8">
<title>Welcome <?= $first_name.' '.$last_name ?></title>
<?php include 'css/cssuser.html'; ?>
</head>
<body>
<div class="form">
<form action="user.php" method="post" autocomplete="off">
<div class="top-row">
<div class="field-wrap">
<label>
Country<span class="req">*</span>
</label>
<input type="text" required autocomplete="off" name='country' />
</div>
//....
<div class="field-wrap">
<label>
Price range<span class="req">*</span>
</label>
<input type="text"required autocomplete="off" name='price_range' />
</div>
<button type="submit" class="button button-block" name="upload">Upload</button>
</form>
</div>
</body>
</html>
Этот ввод должен обрабатываться следующим скриптом загрузки php
<?php
require 'geocoding.php';
/*
Upload shop details to database and check if shop already exists
*/
// Escape all $_POST variables to protect against SQL injections
$country = $mysqli->escape_string($_POST['country']);
$city = $mysqli->escape_string($_POST['city']);
$address = $mysqli->escape_string($_POST['address']);
$shop_name = $mysqli->escape_string($_POST['shop_name']);
$description = $mysqli->escape_string($_POST['description']);
$opening_hours = $mysqli->escape_string($_POST['opening_hours']);
$price_range = $mysqli->escape_string($_POST['price_range']);
//forward geocode the adress to a longitude and latitude value
use reverseGeocoding\Geocoding;
$geo = new Geocoding("my API Key which works fine");
$coordinates = $geo ->getCoordinates("Friedrich-Missler-Strasse 43");
$lat = $location->lat
$lon = $location->lng
//Get user id and select it from database
$email = $_SESSION['email'];
$id = $mysqli->query("SELECT 'id' FROM users WHERE email='$email'") or die($mysqli->error());
// Check if user with that email already exists
$result = $mysqli->query("SELECT * FROM shops WHERE address='$address' AND shopname='$shop_name'") or die($mysqli->error());
// We know shop exists if the rows returned are more than 0
if ( $result->num_rows > 0 ) {
$_SESSION['message'] = 'This shop already exists';
header("location: error.php");
}
else { // Shop does not exist in a database, proceed...
$sql = "INSERT INTO shops (country, city, address, lon, lat, shopname, description, opening, price_range, id) "
. "VALUES ('$country','$city','$address','$lon','$lat','$shop_name','$description','$opening_hours','$price_range','$id')";
// Add shop to the database
if ( $mysqli->query($sql) ){
$_SESSION['message'] =
"$shop_name has been added to the database";
header("location: user.php")
}
else {
$_SESSION['message'] = 'Upload failed';
header("location: error.php");
}
}
?>
Проблема в том, что каждый раз, когда я заполняю форму и отправляю ее на сервер, данные не сохраняются в базе данных. Сайт перенаправляет меня на пустую страницу users.php (страницу формы). Маловероятно, что причина в неправильной базе данных, так как регистрация работает отлично.
Это выдержка из соответствующей базы данных
Любая помощь высоко ценится, так как я новичок в области PHP
На случай, если кто-нибудь спросит, где
$lat = $location->lat
$lon = $location->lng
исходит от:
public function getCoordinates($address)
{
$data = [
'address' => $address,
'key' => $this->api_key
];
$addressData = $this->request($this->callurl, $data);
$location = json_decode($addressData)->results[0]->geometry->location;
return [ 'latitude' => $location->lat, 'longitude' => $location->lng];
}
}