n3stis
n3stis

Reputation: 37

Update Query in PHP - undefined ID error in code

I have a problem with my code in php.

Error: Undefined Variable 'id'.

<?php
include_once '../includes/connection.php';
include_once '../includes/functions.php';

session_start();

$posts = $pdo->query("SELECT * FROM posty ORDER BY post_id DESC");
$j=0;
?>

<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="../sources/css/style.css">
<script type="text/javascript" src="../sources/scripts/time.js"></script>
<script type="text/javascript" src="../sources/scripts/scroll.js"></script>
</head>

<body onload="timeLine(); setInterval('timeLine()', 1000 )" >
<header>
<div class = "menu">
    <ul>
        <li><a href="loginPanel.php"> Blog </a></li>
        <li><a href="archives.php"> Archives </a></li>
        <li><a href="contact.php"> Contact </a></li>
        <li id="addPost"><a href="addPost.php"> Add Post </a></li>
        <li id="editPost"><a href="editPost.php"> Edit Post </a></li>
        <li id="deletePost"><a href="deletePost.php"> Delete Post       </a></li>
        <li id="showBlogContent"><a href="#" onclick="showHideDiv('showBlog')""> Hide Blog </a> </li>
        <li id="menuRightLogin"><a href="logout.php"> Logout </a></li>
        <li id="menuRightDate"><?php echo date('jS F Y').' '; ?><span id="clock">&nbsp;</span> </li>
    </ul>
</div>
</header>
<div id="showBlog" style="display: block;">
<div class="container">
    <div class="postsContainer">
        <?php foreach($posts as $post) {
            if ($j <= 5) { ?>
                <div class="postBox">
                    <div class="postTitle">
                        <br />
                        <?php echo $post['post_title']; ?>

                    </div>
                    <div class="postContent">
                        <br />
                        <?php if(($wordCount = str_word_count($post['post_content']) <=50)) {
                            echo $post['post_content'];?>
                            <a href="editPostPanel.php?id=<?php echo $post['post_id']?>">Edit Post</a>
                            <br />
                        <?php } else {
                            echo excerpts($post['post_content'], 50).'... <br/> <br/>
                <a href="editPostPanel.php?id='.$post['post_id'].'">Edit Post</a>
                <br /> <br />';
                        } ?>

                    </div>
                    <div class="postDate">
                        <?php echo '<b id="author">Author:</b> '.$post['post_author'].' <b id="posted">posted:</b> '.date('jS F Y', $post['add_date']); ?>

                    </div>
                </div>
                <?php $j++; } }?>
    </div>
</div>


<footer>
    <small> © Copyright 2015, n3stis </small>
</footer>
</div>
</body>
</html>

So from here I'm sending a 'id' to edit form:

<?php
include_once '../includes/connection.php';
include_once '../includes/functions.php';

session_start();
$id = $_GET['id'];
if (isset ($id)) {

if (isset($_SESSION['logged_in'])) {

    $query = $pdo->prepare("SELECT * FROM posty WHERE post_id='" . $id . "' LIMIT 1");
    $query->execute();

    $post = $query->fetch();

    if (isset($_POST['post_title'], $_POST['post_content'], $_POST['post_author'])) {
        $postTitle = $_POST['post_title'];
        $postAuthor = $_POST['post_author'];
        $postContent = nl2br($_POST['post_content']);
        $postTime = time();

        if (empty($post_title) or empty($post_content) or empty($post_author)) {
            $error = 'All fields required.';
        } else {
            $sql = ("UPDATE `posty` SET `post_title` = :title, `post_author` = :author, `post_content` = :content, `edit_date` = :editDate WHERE `post_id` = :postID ");
            $query = $pdo->prepare($sql);

            $query->bindValue(':title', $postTitle);
            $query->bindValue(':author', $postAuthor);
            $query->bindValue(':content', $postContent);
            $query->bindValue(':editDate', $postTime);
            $query->bindValue(':postID', $id);

            $query->execute();

            header('Location: adminPanel.php');
        }
    }
    ?>

    <html>
    <head>
        <meta charset="utf-8">
        <link rel="stylesheet" type="text/css" href="../sources/css/style.css">
        <script type="text/javascript" src="../sources/scripts/time.js"></script>
        <script type="text/javascript" src="../sources/scripts/scroll.js"></script>
    </head>

    <body onload="timeLine(); setInterval('timeLine()', 1000 )">
    <header>
        <div class="menu">
            <ul>
                <li><a href="loginPanel.php"> Blog </a></li>
                <li><a href="archives.php"> Archives </a></li>
                <li><a href="contact.php"> Contact </a></li>
                <li id="#addPost"><a href="addPost.php"> Add Post </a></li>
                <li id="#editPost"><a href="editPost.php"> Edit Post </a></li>
                <li id="#deletePost"><a href="deletePost.php"> Delete Post </a></li>
                <li id="showBlogContent"><a href="#" onclick="showHideDiv('showBlog')""> Hide Blog </a> </li>
                <li id="menuRightLogin"><a href="logout.php"> Logout </a></li>
                <li id="menuRightDate"><?php echo date('jS F Y') . ' '; ?><span id="clock">&nbsp;</span></li>
            </ul>
        </div>
    </header>

    <div id="showBlog" style="display: block;">
        <div class="container">
            <div class="postsContainer">
                <?php if (isset($error)) { ?>
                    <p id="error"><?php echo $error ?> </p>
                <?php } ?>
                <form action="editPostPanel.php" method="post">
                    <input type="text" name="post_title" value="<?php echo $post['post_title'];?>"/>
                    <input type="text" name="post_author" value="<?php echo $post['post_author'];?>"/>
                    <br/>
                    <br/>
                    <textarea name="post_content" rows="15" cols="90"><?php echo $post['post_content'];?></textarea>
                    <br/>
                    <br/>
                    <input type="submit" value="Wyślij post"/>
                </form>

            </div>
        </div>
        <footer>
            <small> © Copyright 2015, n3stis </small>
        </footer>
    </div>
    </body>
    </html>


<?php
} else {
    echo 'Error';
} }
else {
    echo 'Error';
}

When I send a form I get this:

Notice: Undefined index: id on line 7

I will be very greatfull for yours help :)

Upvotes: 0

Views: 295

Answers (3)

Barmar
Barmar

Reputation: 781310

Your form doesn't have the id parameter in it. You need to change

<form action="editPostPanel.php" method="post">

to:

<form action="editPostPanel.php?id=<?php echo $id; ?>" method="post">

This is in addition to correcting the isset check that the other answers noted:

if (isset($_GET['id'])) {
    $id = $_GET['id'];

Upvotes: 0

xathien
xathien

Reputation: 822

While I don't have your line numbers, I'd guess that line 7 is $id = $_GET['id'];. This indicates that you don't have a GET (query) param called id set. To fix that Notice, you probably want to swap the two lines as follows:

if (isset($_GET['id'])){
    $id = $_GET['id']

But all that will do is start echoing 'Error' back to you. You'll also want to figure out why your line editPostPanel.php?id='.$post['post_id'] is not apparently setting the id as desired.

Upvotes: 0

Arlind Hajredinaj
Arlind Hajredinaj

Reputation: 8519

change

$id = $_GET['id'];
if (isset ($id))

to

if (isset ($_GET['id'])) {
    $id = $_GET['id'];

Upvotes: 1

Related Questions