PHP скрипт не загружает значения из формы HTML в базу данных SQL - PullRequest
0 голосов
/ 01 июня 2019

Я сталкиваюсь с некоторыми проблемами при загрузке данных из формы 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 (страницу формы). Маловероятно, что причина в неправильной базе данных, так как регистрация работает отлично. Это выдержка из соответствующей базы данных enter image description here

Любая помощь высоко ценится, так как я новичок в области 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];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...