Problem to make upload images in blogpost.php

Post here is you are having problems with any of the tutorials.
Post Reply
tiaz1988
Posts: 15
Joined: Mon Nov 09, 2015 2:30 am

Problem to make upload images in blogpost.php

Post by tiaz1988 »

I have a question, it is so that I have made an edit function to my blog where you can upload a picture and then see it in blogread.php.
Everything works so long, but now I want to be able to upload photos directly when I create a post. So I can see the photos directly on bloglist.php.
I have used the same thing as I did when I created the function of editpost.php.
It works to upload the image to the folder, but it receives no ID, and it is broken when you open it. I'm close, in that I can upload the image, but that said it is broken and has no ID.
I do not know if I make a mistake I'll add the path to the image in my array into get_posts () functionen?

Please can someone help me with what I should do to be able to upload pictures from blogpost.php.

Here is the blogpost.php

[syntax=php]<?php

require("core/init.inc.php");

if(isset($_POST['user'], $_POST['title'], $_POST['body']))
{
$errors = array();

if(empty($_POST['user']))
{
$errors[] = "<span class='errors'>Du har glömt att fylla i ditt namn.</span>";
}

if(empty($_POST['title']))
{
$errors[] = "<span class='errors'>Du har glömt fylla i titeln för denna produkt.</span>";
}

if(empty($_POST['body']))
{
$errors[] = "<span class='errors'>Du har glömt fylla i produkt informationen i textrutan.</span>";
}

if(empty($_FILES['avatar']['tmp_name']) === false)
{
$file_ext = end(explode('.', $_FILES['avatar']['name']));

if(in_array(strtolower($file_ext), array('jpg', 'jpeg', 'png', 'gif')) === false)
{
$errors[] = "Din avatar måste vara en bild.";
}
}

if(empty($errors))
{
add_post($_POST['user'], $_POST['title'], $_POST['body'], (empty($_FILES['avatar']['tmp_name'])) ? false : $_FILES['avatar']['tmp_name']);

header("Location: http://rege.se/rege/func/productblog/bloglist.php");

die();
}
}

?>
[/syntax]

[syntax=xhtml]

<form class="productForm" action="" method="post" enctype="multipart/form-data">

<p>
<label class="user" for="user">Namn</label>

<input type="text" class="user" name="user" value="<?php if(isset($_POST['user'])) echo htmlentities($_POST['user']); ?>" />
</p>

<p>
<label class="title" for="title">Titel</label>

<input type="text" class="title" name="title" value="<?php if(isset($_POST['title'])) echo htmlentities($_POST['title']); ?>" />
</p>

<p>
<textarea class="body" name="body" rows="20" cols="60"><?php if(isset($_POST['body'])) echo $_POST['body']; ?></textarea>
</p>

<p>
<label class="avatar" for="avatar">Product Pic</label>

<input type="file" class="avatar" name="avatar" />
</p>

<p>
<input type="submit" class="submit" name="submit" value="Skapa">
</p>

</form> <!-- END PRODUCT FORM -->
[/syntax]

Here is the add_post function

[syntax=php]

function add_post($name, $title, $body, $avatar)
{
$name = mysql_real_escape_string(htmlentities($name));

$title = mysql_real_escape_string(htmlentities($title));

$body = mysql_real_escape_string(nl2br(htmlentities($body)));

if(file_exists($avatar))
{
$src_size = getimagesize($avatar);

if($src_size['mime'] === 'image/jpeg')
{
$src_img = imagecreatefromjpeg($avatar);
}
elseif($src_size['mime'] === 'image/png')
{
$src_img = imagecreatefrompng($avatar);
}
elseif($src_size['mime'] === 'image/gif')
{
$src_img = imagecreatefromgif($avatar);
}
else
{
$src_img = false;
}

if($src_img !== false)
{
$thumb_width = 200;

if($src_size[0] <= $thumb_width)
{
$thumb = $src_img;
}
else
{
$new_size[0] = $thumb_width;

$new_size[1] = ($src_size[1] / $src_size[0]) * $thumb_width;

$thumb = imagecreatetruecolor($new_size[0], $new_size[1]);

imagecopyresampled($thumb, $src_img, 0, 0, 0, 0, $new_size[0], $new_size[1], $src_size[0], $src_size[1]);
}

imagejpeg($thumb, "{$GLOBALS['path']}/avatars/{$_GET['pid']}.jpg");
}
}

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

[/syntax]

And get_posts function

[syntax=php]

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`, '%d/%m/%Y %H:%i:%s') AS `date`,
`comments`.`total_comments`,
DATE_FORMAT(`comments`.`last_comment`, '%d/%m/%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'],
'avatar' => ($row['avatar'] = (file_exists("{$GLOBALS['path']}/avatars/{$row['id']}.jpg")) ? "core/avatars/{$row['id']}.jpg" : "core/avatars/default.jpg"),
'last_comment' => ($row['last_comment'] === null) ? 'Aldrig' : $row['last_comment']
);
}

return $rows;
}

[/syntax]

Thanks :D
User avatar
jacek
Site Admin
Posts: 3262
Joined: Thu May 05, 2011 1:45 pm
Location: UK
Contact:

Re: Problem to make upload images in blogpost.php

Post by jacek »

You're almost there, there is just one slight mistake

On this line
[syntax=php]imagejpeg($thumb, "{$GLOBALS['path']}/avatars/{$_GET['pid']}.jpg");[/syntax]
$_GET['pid'] will not be defined. That is the variable you see in the address bar on the edit page so because you're not editing anything yet it will just be blank.

Instead of using that you need to use the ID of the post that's just been added to the database.

There is a function to get the last ID the database created which will be the one you want to use. So in this case you need to the the query first then store the image file after that - something along the lines of this

[syntax=php]
function add_post($name, $title, $body, $avatar)
{
$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())");

$post_id = mysql_insert_id();

if(file_exists($avatar))
{

/* snip */

if($src_img !== false)
{

imagejpeg($thumb, "{$GLOBALS['path']}/avatars/{$post_id}.jpg");
}
}
}
[/syntax]

Hope that helps :)
Image
tiaz1988
Posts: 15
Joined: Mon Nov 09, 2015 2:30 am

Re: Problem to make upload images in blogpost.php

Post by tiaz1988 »

jacek wrote:You're almost there, there is just one slight mistake

On this line
[syntax=php]imagejpeg($thumb, "{$GLOBALS['path']}/avatars/{$_GET['pid']}.jpg");[/syntax]
$_GET['pid'] will not be defined. That is the variable you see in the address bar on the edit page so because you're not editing anything yet it will just be blank.

Instead of using that you need to use the ID of the post that's just been added to the database.

There is a function to get the last ID the database created which will be the one you want to use. So in this case you need to the the query first then store the image file after that - something along the lines of this

[syntax=php]
function add_post($name, $title, $body, $avatar)
{
$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())");

$post_id = mysql_insert_id();

if(file_exists($avatar))
{

/* snip */

if($src_img !== false)
{

imagejpeg($thumb, "{$GLOBALS['path']}/avatars/{$post_id}.jpg");
}
}
}
[/syntax]

Hope that helps :)

OK I understand. :) I'll try it later.
So I do not need so long code in add_post function.
I only need the one you sent?

Take care
tiaz1988
Posts: 15
Joined: Mon Nov 09, 2015 2:30 am

Re: Problem to make upload images in blogpost.php

Post by tiaz1988 »

tiaz1988 wrote: OK I understand. :) I'll try it later.
So I do not need so long code in add_post function.
I only need the one you sent?

Take care
It's working now. Jeppi

Thanks for your time and help.

Take care!
Post Reply