Как отладить форму HTML / PHP, не отправляя должным образом - PullRequest
0 голосов
/ 27 апреля 2020

Я смотрел на этот код, пока не коснулся глаз и не вижу ошибку, которую делаю. Я немного новичок.

Мой HTML - editPost. php:

<?php 
    session_start();
    include "includes/header.php";
    include "connectioninfo.php";
    include "functions.php";

    if(isset($_SESSION['user']))
    {
        editPost();
    }
    else
    {
        header("Location: /");
    }

    $return = getPost();
?>

<div class="container">
    <form action="editPost.php" method="post">
            <?php $id = $_GET['id']?>
            <input type="hidden" name="id" value="<?php echo $id?>">
        <div class="row">
            <div class="lab">
                <label for="category">Category:<br/></label>
            </div>
            <div class="inp">
                <select id="category" required autofocus name="category">
                    <option value="" selected disabled hidden>Choose a category.</option>
                    <option value="Something">About</option>
                    <option value="Something else">Coding</option>
                </select>
            </div>
        </div>
        <div class="row">
            <div class="lab">
                <label for="title">Title.</label>
            </div>
            <div class="inp">
                <input type="text" name="title" placeholder="Title" required value="<?php echo $return[0]?>">
            </div>
        </div>
        <div class="row">
            <div class="lab">
                <label for="content">Content.</label>
            </div>
            <div class="inp">
                <textarea name="content" id="content" style="height: 30em;"><?php echo $return[1]?></textarea>
            </div>
        </div>
        <div class="row">
            <input type="submit" name="submit" value="Post.">
        </div>
    </form>
</div>
<?php
include "includes/footer.php";
?>

getPost () просто получает значения для автозаполнения формы. это функция во включенных функциях. php:

function getPost()
{
    global $connection;

    $id=$_GET['id'];
    $query = "SELECT * FROM database WHERE id = '$id'";
    $result = $connection->query($query);    
    if($result)
    {
        while($post = $result->fetch_object())
        {
            $id = $post->id;
            $title = $post->title;
            $link = $post->permalink;
            $summary = $post->summary;
            $category = $post->category;
            $content = $post->content;
            $pubDate = $post->pubDate; 
            $author = $post->author;
            $return = array($title,$content);
            return $return;
        }
    }
    else
    {
        die('Query FAILED!' . mysqli_error());
    }
}

и, наконец, editPost ()

function editPost()
{
    global $connection;

    if(isset($_POST['submit']))
    {
        global $connection;

        $title = mysqli_real_escape_string($connection,$_POST['title']);
        $content = mysqli_real_escape_string($connection,$_POST['content']);
        $category = $_POST['category'];
        $id = $_POST['id'];
        //Permalink
        $link = strtolower(trim($title));
        $link = preg_replace('/[^a-z0-9-]/', '-', $link);
        $link = preg_replace('/-+/', "-", $link);
        $link = rtrim($link, '-');
        $link = preg_replace('/\s+/', '-', $link);        

        $query = "UPDATE database SET title = '$title', permalink = '$link', content = '$content', category = '$category' ";
        $query .= "WHERE id = '$id'";

        $result = $connection->query($query);
        if(!$result)
        {
            die('Query FAILED!' . mysqli_error());
        }
        else
        {
            header("Location: /");
        }
        $result->close();
    }
}

Нажатие на ссылку редактирования сообщения приводит меня к этой форме, и выглядит великолепно - заголовок и контент заполнены тем, что находится в базе данных, и я готов к редактированию.

Процесс (и html, и функция) практически идентичен моему createPost. php, и он работает нормально. но editPost. php просто отправляет меня обратно на ту же страницу, без значений в полях, и сообщение не было обновлено. Также нет сообщений об ошибках.

Чего мне не хватает?

Редактировать

В качестве ссылки я публикую содержание newPost. php и функцию newPost ( ) - которые работают нормально.

newPost. php:

<?php 
    session_start();
    include "connectioninfo.php";
    include "functions.php";

    if(isset($_SESSION['user']))
    {
        newPost();
    }
    else
    {
        header("Location: /");
    }

    include "includes/header.php";
?>

<div class="container">
    <form action="newPost.php" method="post">
        <div class="row">
            <div class="lab">
                <label for="category">Category.</label>
            </div>
            <div class="inp">
                <select id="category" required autofocus name="category">
                    <option value="" selected disabled hidden>Choose a category.</option>
                    <option value="About">About</option>
                    <option value="Coding">Coding</option>
                </select>
            </div>
        </div>
        <div class="row">
            <div class ="lab">
                <label for="title">Title.</label>
            </div>
            <div class ="inp">
                <input type="text" name="title" required placeholder="Title">
            </div>
        </div>
        <div class="row">
            <div class ="lab">
                <label for="summary">Summary.</label>
            </div>
            <div class ="inp">
                <input type="text" name="summary" required placeholder="Summary (for the RSS feed and Twitter)">
            </div>
        </div>
        <div class="row">
            <div class="lab">
                <label for="content">Content.</label>
            </div>
            <div class="inp">
                <textarea name="content" id="content" placeholder="The content of the post" style="height: 30em;"></textarea>
            </div>
        </div>
        <div class="row">
            <input type="submit" name="submit" value="Post.">
        </div>
    </form>   
</div>
<?php
include "includes/footer.php";
?>

newPost ():

function newPost()
{
    if(isset($_POST['submit']))
    {
        global $connection;

        $title = mysqli_real_escape_string($connection,$_POST['title']);
        $summary = mysqli_real_escape_string($connection,$_POST['summary']);
        $content = mysqli_real_escape_string($connection,$_POST['content']);
        $category = $_POST['category'];
        $pubDate = date("Y-m-d H:i:s");
        $author = $_SESSION['user'];
        //Permalink
        $link = strtolower(trim($title));
        $link = preg_replace('/[^a-z0-9-]/', '-', $link);
        $link = preg_replace('/-+/', "-", $link);
        $link = rtrim($link, '-');
        $link = preg_replace('/\s+/', '-', $link);

        $query = "INSERT INTO database(title, permalink, category, summary, content, pubDate, author) ";
        $query .= "VALUES ('$title', '$link', '$category', '$summary', '$content', '$pubDate', '$author')";

        $result = $connection->query($query);
        if(!$result)
        {
            die('Query FAILED!' . mysqli_error());
        }
        else
        {
            header("Location: /");
        }
        $result->close();
    }
}

1 Ответ

0 голосов
/ 27 апреля 2020

спасибо всем за помощь. Как я узнал и заявил в комментариях, проблема была в моем .htaccess

Я переписываю в .htaccess - mysite.com/editPost.php?id=1 на самом деле mysite.com/edit/1 - работает длинная форма WORKS, короткая форма давая мне ошибку.

Мой .htaccess имеет RewriteRule ^edit/([^/.]+)?$ /editPost?id=$1 [L] Мне просто нужно было изменить <form action="editPost.php" method="post"> в editPost. php на <form action="edit" method="post">, и это работает без проблем: - /

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