Hey everyone,

I know this probably seems simple but for some reason I can't get my head around the correct concept. Bare with me please. I have a form in html that is for uploading photos in a to a specific category. However I want to add a select menu that gathers data from another database that holds the blogs' names. Like the select menu before the last one, I want the blog select menu to have the same purpose as the one before it - to automatically update determining that blog titles that are listed in the database. I'm not sure what I should put as far as code to help you all understand my issue but I'll do the best I can.

form

<form action="" method="post" enctype="multipart/form-data">
    <p>Choose a file:<br /><input type="file" name="image" /></p>
    <p>
    Choose an album:<br />
    <select name="album_id">
        <?php 
        foreach ($albums as $album){
            echo '<option value="', $album['id'], '">', $album['name'], '</option>';
        }
        ?>
    </select><br /><br />
    Choose an blog:<br />
    <select name="blog_title">
    <?php

    $posts = get_posts();
    $pid = (int)$pid;

    $sql = "SELECT
                `post_title` AS `title` FROM `posts`
            WHERE `post_id` = {$pid}";

    $post = mysql_query($sql);
    $post = mysql_fetch_assoc($post);

    foreach ($posts as $post){
        echo '<option value="', $post['id'], '">', $post['title'], '</option>';
    }
    ?>
    </select>
    </p>
    <p><input type="submit" value="Upload" /></p>
</form>

file that contain the functions about blogs:

<?php

//checks if the given post id is in the table
function valid_pid($pid) {
    $pid = (int)$pid;

    $total = mysql_query("SELECT COUNT(`post_id`) FROM `posts` WHERE `post_id` = {$pid}");
    $total = mysql_result($total, 0);

    if ($total != 1) {
        return false;
    }else{
        return true;
    }
}

//gets a summary of all blog posts
function get_posts() {
    $sql = "SELECT
                `posts`.`post_id` AS `id`,
                `posts`.`post_title` AS `title`,
                LEFT(`posts`.`post_body`, 512) AS `preview`,
                `posts`.`post_user` AS `user`,
                DATE_FORMAT(`posts`.`post_date`, '%m-%d-%Y %H:%i:%s') AS `date`,
                `comments`.`total_comments`,
                DATE_FORMAT(`comments`.`last_comment`, '%m-%d-%Y %H:%i:%s') AS `last_comment`
            FROM `posts`
            LEFT JOIN(
                SELECT
                    `post_id`,
                    COUNT(`comment_id`) AS `total_comments`,
                    MAX(`comment_date`) AS `last_comment`
                FROM `comments`
                GROUP BY `post_id`
            ) AS `comments`
            ON `posts`.`post_id` = `comments`.`post_id`
            ORDER BY `posts`.`post_date` DESC";

    $posts = mysql_query($sql);

 $rows = array();
        while (($row = mysql_fetch_assoc($posts)) !== false) {
                $rows[] = array(
                        'id'                       => $row['id'],
                        'title'                   => $row['title'],
                        'preview'             => $row['preview'],
                        'user'                   => $row['user'],
                        'date'                   => $row['date'],
                        'total_comments' => ($row['total_comments'] === null) ? 0 : $row['total_comments'],
                        'last_comment'     => ($row['last_comment'] === null) ? 'none' : $row['last_comment']
                );
    }

    return $rows;
}

//gets a single post from the table
function get_post($pid) {
    $pid = (int)$pid;

    $sql = "SELECT
                `post_title` AS `title`,
                `post_body` AS `body`,
                `post_user` AS `user`,
                `post_date` AS `date`
            FROM `posts`
            WHERE `post_id` = {$pid}";

    $post = mysql_query($sql);
    $post = mysql_fetch_assoc($post);

    $post['comments'] = get_comments($pid);

    return $post;
}

//adds a new blog entry
function add_post($name, $title, $body) {
    $name = mysql_real_escape_string(htmlentities($name));
    $title = mysql_real_escape_string(htmlentities($title));
    $body = mysql_real_escape_string(nl2br(htmlentities($body)));

    mysql_query("INSERT INTO `posts` (`post_user`, `post_title`, `post_body`, `post_date`) VALUES ('{$name}', '{$title}', '{$body}', NOW())");
}

?>

Thanks for any help and sorry if this seems like a dumb question..I'm still learning

-GENEH23

Recommended Answers

All 3 Replies

do you mean you want the second select box to automatically update once the first select box is selected?

you will need some javascript to acheive this if so.

Is the second select box not getting any data at all, or what is the problem?

Looks like you have an error in your foreach loop in the second select list:

$sql = "SELECT
            `post_title` AS `title` FROM `posts`
        WHERE `post_id` = {$pid}";

$post = mysql_query($sql);

// You need an s here, to make it work in your foreach loop, right?
$post = mysql_fetch_assoc($post);
// Should be: 
$posts = mysql_fetch_assoc($post);    
// so you get:

foreach ($posts as $post){
    echo '<option value="', $post['id'], '">', $post['title'], '</option>';
}

Dont know if this was your problem?, as you dont write it specific.. :-)

Sorry It's been a while since I posted back. I actually fixed the issue. I was missing the $posts = get_posts(); above the form. I needed to call that function for the select menu to function properly..hehe no pun intened...well maybe a little :P but all is well. I'll be asking another question reguarding generally the same code. Thanks!

-geneh23

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.