Php!is_valid_type($image)仅适用于数组的一个实例


Php !is_valid_type($image) is only working on one instance of an array

嘿,伙计们,我想做的是为不同游戏机上的各种游戏建立一个上传页面。我承认我是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都会通过,而其他的都会失败。有人能告诉我为什么会这样吗?以及可能如何修复?

感谢您提前抽出时间

在做了更多的研究后,修复了我自己的问题,我有两个选择。问题是,我试图在没有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)将configuration.ini中的max_file_ploads从1重新配置为4(或者您想要的)


我选择了选项2。

希望这个解决方案能帮助其他遇到同样问题的人再次感谢任何调查我的问题

的人