0

基本的に画像アップロードでブログを作っています。

これが私のadd_post関数です:

function add_post($title, $txt_content, $img_content, $tags, $file_temp, $file_extn){
    $title = mysql_real_escape_string($title);
    $txt_content = mysql_real_escape_string($txt_content);
    $tags = mysql_real_escape_string($tags);
    $file_path = 'simpleblog/resources/images/'.  substr(md5(time()), 0, 20) . '.' . $file_extn;
    move_uploaded_file($file_temp, $file_path);

    mysql_query("INSERT INTO `posts` SET
                        `tag_id` = '$tags',
                        `title` = '$title',
                        `txt_content` = '$txt_content',
                        `img_content` = '". mysql_real_escape_string($file_path) ."',
                        `date_posted` = NOW()");
}

これがadd_post.phpのphpスクリプトです

<?php
include 'resources/init.php';

    if (isset($_FILES['img_content']) === true){
    if(empty($_FILES['img_content']['name']) === true){
        echo '<script type = "text/javascript">window.alert("Please pick a file!");</script>';
    }   else    {
        $allowed = array('jpg','jpeg','gif','png');
        $file_size = $_FILES['img_content']['size'];
        $file_name = $_FILES['img_content']['name'];
        $file_extension= explode('.', $file_name); 
        $file_extn= strtolower(end($file_extension));
        $file_temp = $_FILES['img_content']['tmp_name'];

        $title = $_POST['title'];
        $txt_content = $_POST['txt_content'];
        $tags = $_POST['tags'];

        if(in_array($file_extn, $allowed) === true && isset($_POST['txt_content']) === true){
            add_post($title, $txt_content, $tags, $file_temp, $file_extn);

            $post_id = mysql_insert_id();
            header("Location: index.php?post_id=" . $post_id);
            exit();
        }else if (in_array($file_extn, $allowed)=== false){
            echo '<script type = "text/javascript">window.alert("The only file type allowed are .jpg, .gif, .png");</script>';
        }
    }
}
?>

mySQLデータベースは、イメージファイルの名前で更新されます。しかし、それはアップロードされたファイルをsimpleblog/resources/images/ 何の問題に移動していませんか?

4

1 に答える 1

0

最初は、このタイプのチェックは正しくありません。

 $file_name = $_FILES['img_content']['name'];
 $file_extension= explode('.', $file_name); 
 file_extn= strtolower(end($file_extension));

名前の付いたファイルをアップロードするimage.php.jpgと、これは画像であるとチェックされますが、php-fileを送信し、このファイルをphp-fileとしてリクエストできます。

2番目に、関数add_postにはパラメーターがあります$img_contentが、関数呼び出しではそれを無視します。

 add_post($title, $txt_content, $tags, $file_temp, $file_extn);

また、 move_uploaded_file関数のファイルパスには、サイトのルートパスが必要です。

于 2013-01-21T15:59:16.860 に答える