2012-08-22 69 views
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都發回的錯誤推「你必須上傳JPEG,GIF,PNG,或BMP在PS3領域。請選擇正確的文件類型。」如果圖像是錯誤的文件類型,它應該如何處理。但是,我可以同時或單獨上傳相同的圖像,並且每次都會傳遞Xbox,而其他人則會失敗。誰能告訴我這是爲什麼?並可能如何解決它?

感謝您的時間提前

+0

*相關*代碼不應該太長,您可以在這裏發佈。大多數問題只涉及不超過20-30行。請發佈*相關的*代碼。 – Matt

+0

複製,粘貼,選擇,Ctrl + K。男人,這是一個痛苦。是的,代碼*太長。 – deceze

回答

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)重新從1配置的.ini的max_file_uploads 4(或你想要什麼都)


我選擇去2.

希望這個解決方案能夠幫助別人誰遇到相同的問題 再次感謝任何人看着我的問題

相關問題