Почему мой веб-сайт не загружается в мою базу данных (с использованием MySQLI), а затем не перенаправляет меня? - PullRequest
0 голосов
/ 17 июня 2020

Я уже давно ломаю голову над этой проблемой, но пока не нашел ее. У меня есть форма (в index. php), которая загружает пользовательский ввод в базу данных после нажатия кнопки отправки. Как и ожидалось, я перенаправлен на add_records. php после нажатия кнопки submit, но затем я застрял на нем, несмотря на включение строки

header("location: index.php")

Перенаправление работает нормально, если я закомментирую весь код mysqli , поэтому я пришел к выводу, что ошибка связана с mysqli и загрузкой в ​​базу данных (возможно, я неправильно обрабатываю географические данные). Я сделал все, как обычно - проверил журнал ошибок, проверил на наличие ошибок в PHPMyAdmin, но все не показывает ошибок! Я показал приведенный ниже код, чтобы помочь в устранении неполадок, со всей конфиденциальной информацией, замененной на '#' (обратите внимание: я несколько раз проверял пароль базы данных et c., И они верны).

index. php:

<?php
// Initialize the session
session_start();

// Check if the user is logged in, if not then redirect him to login page
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
    header("location: ##/records/login.php");
    exit;
}

echo file_get_contents("##/code/header.php");
?>
<div class="page-header">
    <h1>Hi, <b><?php echo htmlspecialchars($_SESSION["username"]); ?></b>. Welcome to our site.</h1>
</div>
<form action="##/records/add_records.php" method="POST">
    <input type="text" name="species" placeholder="Species">
    <br>
    <input type="date" name="date" placeholder="Date">
    <br>
    <input type="time" name="time" placeholder="Time">
    <br>
    <input type="location" name="location" placeholder="Location Name">
    <br>
    <input type="text" name="lat/long" placeholder="Lat Long">
    <br>
    <input type="number" name="count" placeholder="Count">
    <br>
    <input type="text" name="county" placeholder="County (default Norfolk)">
    <br>
    <input type="text" name="country" placeholder="Country (default United Kingdom)">
    <br>
    <input type="text" name="notes" placeholder="Notes">
    <br>
    <button type="submit" name="submit">Submit</button>
</form>

<p>
    <a href="##/records/logout.php" class="btn btn-danger">Sign Out of Your Account</a>
</p>
<?php echo file_get_contents("##/code/footer.php"); ?>

add_records. php:

<?php include_once '##/records/config_bird_records.php';

    $species = mysqli_real_escape_string($conn, $_POST['species']);
    $date = mysqli_real_escape_string($conn, $_POST['date']);
    $time = mysqli_real_escape_string($conn, $_POST['time']);
    $location = mysqli_real_escape_string($conn, $_POST['location']);
    $latlong = mysqli_real_escape_string($conn, $_POST['latlong']);
    $count = mysqli_real_escape_string($conn, $_POST['count']);
    $county = mysqli_real_escape_string($conn, $_POST['county']);
    $country = mysqli_real_escape_string($conn, $_POST['country']);
    $notes = mysqli_real_escape_string($conn, $_POST['notes']);

    $sql = "INSERT INTO bird_db (Species, Date, Time, Location, Lat/Long, Count, County, Country, Notes) VALUES ('$species', $date, $time, '$location', geography::STGeomFromText('POINT($latlong)', 4326), $count, '$county', '$country', '$notes')";

    mysqli_query($conn, $sql);
    mysqli_close($conn);

    header("location: ##/records/index.php")
?>

config_bird_records. php:

<?php
/* Database credentials.*/
define('DB_SERVER', '##');
define('DB_USERNAME', '##');
define('DB_PASSWORD', '##');
define('DB_NAME', '##');

/* Attempt to connect to MySQL database */
$conn = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);

// Check connection
if($conn === false){
    die("ERROR: Could not connect. " . mysqli_connect_error());
}
?>

Спасибо за любую помощь, Луис

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Метод header необходимо вызвать перед отправкой любого вывода в браузер.

Ваш код включает вывод как в случае успеха, так и в случае ошибки, что означает, что перенаправление никогда не будет работай. Если вы удалите echo "Records added successfully.";, все должно работать.

0 голосов
/ 17 июня 2020

вы можете использовать для этого javascript вместо header () для перенаправления; функция попробуйте следующее:

echo "<script type='text/javascript'>alert('Upload Successful');
            window.location='redirected_page.php';
            </script>";

Что касается неудачной загрузки, вы искали в Google, как работает mysqli_real_escape_string, вам нужно, потому что это повлияет на некоторые специальные символы в ваших переменных

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