функция prepare ($ sql) не работает на одном скрипте - PullRequest
0 голосов
/ 28 января 2019

Я работаю над школьным проектом, включающим веб-сайт с интеграцией базы данных.В настоящее время ведется работа по добавлению нового контента (текста, заголовков, изображений) на сайт через него.Я уже могу добавлять новых пользователей в базу данных через веб-сайт, но по какой-то причине тот же код и логика не применимы к содержимому.

Я заметил, что печать $ stmt с помощью echoничего не печатает.

<?php

include "../conn.php";

$sql = "INSERT INTO `contenido` (`id_contenido`, `tipo_contenido`, `id_seccion`, `orden_contenido`, `largo_contenido`, 'corto_contenido', 'extra_contenido') VALUES (NULL, '".$_POST["tipo"]."', '".$_GET['id']."','".$_POST["orden"]."','".$_POST["largo"]."','".$_POST["corto"]."','".$_POST["extra"]."')";

$stmt = $conn->prepare($sql);
if ($stmt = $conn->prepare($sql))
{
    //echo "It worked";

    $stmt->execute();
    $last_id = $conn->insert_id;

    header("Location: editarContenidos.php?id=".$_GET['id']);
}

?>

Ожидаемые результаты: информация о содержимом загружается в базу данных, и пользователь перенаправляется на страницу редактирования содержимого (editarContenidos.php)

Фактические результаты: белыйЭкран, без ошибок.Поскольку условие if ложно, вы никогда не будете перенаправлены, а содержимое не будет загружено в базу данных.

ПРИМЕЧАНИЕ. Вставка .php пользователя работает с той же логикой и синтаксисом, я недостаточно опытен сphp чтобы понять что я делаю не так.

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Я выяснил, в чем проблема.Кавычки не были использованы должным образом.Сработал следующий код:

    <?php

    include "../conn.php";

    $sectionid = $_GET['id'];

    $sql = "INSERT INTO contenido (id_contenido, tipo_contenido, id_seccion, orden_contenido, largo_contenido, corto_contenido, extra_contenido) VALUES (NULL, '".$_POST["tipo"]."', '".$sectionid."','".$_POST["orden"]."','".$_POST["largo"]."','".$_POST["corto"]."','".$_POST["extra"]."')";

    $stmt = $conn->prepare($sql);

    //echo $sql;

    if ($stmt = $conn->prepare($sql))
    {
        $stmt->execute();
        $last_id = $conn->insert_id;

        header("Location: editarContenidos.php?id=".$sectionid);
    }

?>
0 голосов
/ 28 января 2019

Я предполагаю, что id_contenido является полем auto_increment, и я не уверен, как работают обратные ссылки на разных языках.Я бы рекомендовал добавить некоторую обработку ошибок PDO :: errorInfo и изменить код SQL на:

$sql = "INSERT INTO contenido (tipo_contenido, id_seccion, orden_contenido, largo_contenido, corto_contenido, extra_contenido) VALUES ('".$_POST["tipo"]."', '".$_GET['id']."','".$_POST["orden"]."','".$_POST["largo"]."','".$_POST["corto"]."','".$_POST["extra"]."')";

В коде SQL есть $_GET['id']Я не могу сказать, является ли это преднамеренным.

Я бы рекомендовал использовать параметры и некоторую отладку, используя print_r($_POST);.

Попробуйте следующий код:

<?php

include "../conn.php";

$sql = "INSERT INTO contenido (id_contenido, tipo_contenido, id_seccion, orden_contenido, largo_contenido, corto_contenido, extra_contenido) VALUES (?,?,?,?,?,?)";

$stmt = $conn->prepare($sql);
if ($stmt))
{
    //echo "It worked";

    $stmt->execute(array($_POST["tipo"], $_GET['id'],$_POST["orden"],$_POST["largo"],$_POST["corto"],$_POST["extra"]));
    $last_id = $conn->lastInsertId();

    header("Location: editarContenidos.php?id=".$_GET['id']);
}

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