0

嘿伙计们,我想做的是为不同游戏机上的各种游戏建立一个上传页面。我承认我是 php 新手,我只是想弄清楚。我通过上传图片遇到了一个奇怪的问题。我不明白为什么这会失败,因为数组中的一个属性工作得很好。它可以毫无问题地从表单上传结果。其他三个属性都失败了。使用完全相同的功能和方法。

//// this the form block for uploading ////


<form action="process.php" method="post" enctype="multipart/form-data">
    <!--xbox -->
                <div class="form">
                    <h3>Xbox 360</h3>

                    <!-- title of post/ game name -->
                    <p><label for="xboxtitle"> Title of Game </lable></p>
                    <input type="text" name="xboxtitle"  size=20 /><br />

                    <!-- image uploader -->
                    <p><label for="xbox-image">Game Image:</label><sup>*png, png, bmp, jpeg and jpg only!</sup></p>
                    <input type="file" name="xboximage" /><br />
                    <input type="hidden" name="MAX_FILE_SIZE" value="100000" />

                    <!-- large text box -->
                    <p><label for="xboxtext">Displayed text:</label><sup> * limit of 250 characters allowed.</sup></p>
                    <textarea cols=40 rows=10 name="xboxtext"></textarea>

                    <!-- price box -->
                        <p><label for="xboxprice">Price of item</label></p>
                        <input type="text" name="xboxprice" size=8 /><br />

                </div>                  



<!-- p3 -->
                <div class="form">

                    <h3>Playstation 3</h3>

                    <!-- title of post/ game name -->
                    <p><label for="ps3title"> Title of Game </lable></p>
                    <input type="text" name="ps3title" size=20 /><br />

                    <!-- image uploader -->
                    <p><label for="ps3image">Game Image:</label><sup>*png, png, bmp, jpeg and jpg only!</sup></p>
                    <input type="file" name="ps3image" /><br />
                    <input type="hidden" name="MAX_FILE_SIZE" value="100000" />

                    <!-- large text box -->
                    <p><label for="ps3text">Displayed text:</label><sup> * limit of 250 characters allowed.</sup></p>
                    <textarea cols=40 rows=10 name="ps3text"></textarea>

                    <!-- price box -->
                        <p><label for="ps3price">Price of item</label></p>
                        <input type="text" name="ps3price" size=8 /><br />


                </div>
<!-- wii -->
                <div class="form">
                    <h3>Wii</h3>

                    <!-- title of post/ game name -->
                    <p><label for="wiititle"> Title of Game </lable></p>
                    <input type="text" name="wiititle" size=20 /><br />

                    <!-- image uploader -->
                    <p><label for="wiiimage">Game Image:</label><sup>*png, png, bmp, jpeg and jpg only!</sup></p>
                    <input type="file" name="wiiimage" /><br />
                    <input type="hidden" name="MAX_FILE_SIZE" value="100000" />

                    <!-- large text box -->
                    <p><label for="wiitext">Displayed text:</label><sup> * limit of 250 characters allowed.</sup></p>
                    <textarea cols=40 rows=10 name="wiitext"></textarea>

                    <!-- price box -->
                        <p><label for="wiiprice">Price of item</label></p>
                        <input type="text" name="wiiprice" size=8 /><br />

                    </div>



<!-- PC -->
                <div class="form">
                    <h3>PC</h3>

                    <!-- title of post/ game name -->
                    <p><label for="pctitle"> Title of Game </lable></p>
                    <input type="text" name="pctitle" size=20 /><br />

                    <!-- image uploader -->
                    <p><label for="pcimage">Game Image:</label><sup>*png, png, bmp, jpeg and jpg only!</sup></p>
                    <input type="file" name="pcimage" /><br />
                    <input type="hidden" name="MAX_FILE_SIZE" value="100000" />

                    <!-- large text box -->
                    <p><label for="pctext">Displayed text:</label><sup> * limit of 250 characters allowed.</sup></p>
                    <textarea cols=40 rows=10 name="pctext"></textarea>

                    <!-- price box -->
                        <p><label for="pcprice">Price of item</label></p>
                        <input type="text" name="pcprice" size=8 /><br />

                </div>
        <p><input type="submit" id="submit" class="bigbutton" value="Upload" /></p>
</form>




///// this is the process.php page ///
<?php
include ("includes/logincheck.php");
?>

<?php

// Call our connection file
require("dbacess.php");


///////////////////////////////////////////////////////////////////////////////////////////////////

    // create validating image types function
function is_valid_type($file)
{
    // This is an array that holds all the valid image MIME types
    $valid_types = array("image/jpg", "image/jpeg", "image/bmp", "image/gif", "image/png");

    if (in_array($file['type'], $valid_types))
        return 1;
    return 0;
}


// declare possible forms in array.
$arr = array("xbox","ps3", "wii",  "pc");

// push the array through the following code
//while giving $value the proper form prefix
foreach ($arr as &$value) {

//$value Variables 
   $title = $_POST[$value . 'title'];
   $text = $_POST[$value . 'text'];
   $price = $_POST[$value . 'price'];
   $image = $_FILES[$value .'image'];

//validate info or redirect
if ($title && $text && $price && $image['name'] != "" ) 
    {

    // Sanitize our inputs
   $title = mysql_real_escape_string($title);
   $text = mysql_real_escape_string($text);
   $price = mysql_real_escape_string($price);
   $image['name'] = mysql_real_escape_string($image['name']);

    // Build our target path full string.  This is where the file will be moved to
   // Build Partial Target Path
    $TARGET_PATH = "../../images/newreleasesuploads/";
    $TARGET_PATH .= "$value/";

    //creates upload path
    $UPLOAD_PATH = $TARGET_PATH;
    $UPLOAD_PATH .= $image['name'];


    // Check to make sure that our file is actually an image
    // You check the file type instead of the extension because the extension can easily be faked
    if (!is_valid_type($image))
    {
        $_SESSION['error'] = "You must upload a jpeg, gif, png, or bmp in {$value} field. Please select a correct file type.";
        header("Location: welcome.php");
        exit;
    }

    // Here we check to see if a file with that name already exists
    // You could get past filename problems by appending a timestamp to the filename and then continuing
    if (file_exists($UPLOAD_PATH))
    {
        $_SESSION['error'] = "A file with that name already exists when trying to update $value page. Please rename file something different or remove the existing files";
        header("Location: welcome.php");
        exit;
    }

    //create current date variable
    $date = date("Y-m-d");
    $date .= date(" h:i:s");
    // count # of entries
    $entry = mysql_query("SELECT * FROM new{$value}");
    $NUMBER_OF_ROWS = mysql_num_rows($entry);

    // Count # of entries delete if index is 10 or more.
    if($NUMBER_OF_ROWS >=10){

        // find oldest entry by date
            $sqldate ="SELECT * FROM new{$value}
            WHERE date = (SELECT MIN(date) FROM new{$value})";
            $oldestdate = mysql_query($sqldate) or die ("could not access DB to find oldest entry" . mysql_error());

            //grabs data from that row
            $row = mysql_fetch_assoc($oldestdate);

            //adds filename to delete path
            $DELETE =$TARGET_PATH;
            $DELETE .=$row['filename'];

            // parse row date to variable
            $deletedate = $row['id'];

            //terminates entry
            $deletedate = "DELETE FROM new{$value}
            WHERE id = $deletedate";
            $deleteoldest = mysql_query($deletedate) or die ("could not delete oldest date entry" . mysql_error());

            //terminates file
            unlink($DELETE);

            $_SESSION['message'] .= "The oldest entry was deleted to make room for the new upload.";


        }

    // attempt to move the file from its temporary directory to its new home
    if (move_uploaded_file($image['tmp_name'], $UPLOAD_PATH))
    {   

        // Placing a reference of the images location into the database, *not* putting the image into the database.
        $sql = "insert into new{$value} (date, title, description, price, filename) values ('$date', '$title', '$text', '$price',  '" . $image['name'] . "' )";
        $result = mysql_query($sql) or die ("Could not insert data into DB: " . mysql_error());
        //message to let user know image was uploaded correctly
        $_SESSION['message'] .= "The {$value} entry was uploaded correctly";


    }

    else    {
        // A common cause of file moving failures is because of bad permissions on the directory attempting to be written to
        // Make sure you chmod the directory to be writable also make sure directory is not READ ONLY
        $_SESSION['error'] = "Could not upload file.  Check read/write permissions on the directory";
        header("Location: welcome.php");
        exit;

    }
}


// declare variable for error display
$i = 0;
// validate to make sure all are filled
if($title !=""){$i++;}
if($text !=""){$i++;}
if($price !=""){$i++;}
if($image['name'] !=""){$i++;}

elseif ($i!=0) {


    //validate that more then one but not all box
        $_SESSION['error'] = "Only $i of the fields for $value were filled. Please refill all fields or no fields for $value";
        header("Location: welcome.php");
        exit;

    }


}



// return to upload page
header("Location: welcome.php");
        exit;
?>

发生的事情是数组中的 xbox 值通过,但是 ps3 wii 和 pc 都发回错误“您必须在 ps3 字段中上传 jpeg、gif、png 或 bmp。请选择正确的文件类型。” 如果图像是错误的文件类型,它应该这样做。但是,我可以同时或单独上传相同的图像,并且 xbox 每次都会通过,而其他的则会失败。谁能告诉我这是为什么?可能如何解决?

提前感谢您的时间

4

1 回答 1

0

在做了更多研究后解决了我自己的问题,我有两个选择。问题是我试图在没有 Apache 配置的情况下上传多个文件。选项1)像这样修改表单(一次只允许上传一个)

                <div class="form">
                <form action="newreleasesprocess.php" method="post" enctype="multipart/form-data">
                <h3>Playstation 3</h3>

                <!-- title of post/ game name -->
                <p><label for="ps3title"> Title of Game </lable></p>
                <input type="text" name="ps3title" size=20 /><br />

                <!-- image uploader -->
                <p><label for="ps3image">Game Image:</label><sup>*png, png, bmp, jpeg and jpg only!</sup></p>
                <input type="file" name="ps3image" /><br />
                <input type="hidden" name="MAX_FILE_SIZE" value="100000" />

                <!-- large text box -->
                <p><label for="ps3text">Displayed text:</label><sup> * limit of 250 characters allowed.</sup></p>
                <textarea cols=40 rows=10 name="ps3text"></textarea>

                <!-- price box -->
                    <p><label for="ps3price">Price of item</label></p>
                    <input type="text" name="ps3price" size=8 /><br />
                    <p><input type="submit" id="submit"  value="Upload" /></p>
    </form>


            </div>

然而,这一次摆脱了多次上传,而我使用它的目的并不好。

选项2)将配置.ini中的max_file_uploads从1重新配置到4(或者你想要的)


我选择了选项 2。

希望此解决方案可以帮助遇到相同问题的其他人再次感谢任何研究我的问题的人

于 2012-08-22T20:03:56.007 回答