ylkien Posted March 7, 2007 Share Posted March 7, 2007 Hi guys, I'm trying to create a normal site to upload stuff, and delete the file (which is up to the user). The code below is just a snippet of the code. The problem that I encounter, is that, if I click the "delete" hyperlink more than once, the "array_search" goes crazy, and returns a value which is more than the array size. Thanks! <?php error_reporting(E_ALL); //remove later session_start(); //include 'Protected/Functions.php'; //This is where all of the functions are stored! //include 'Protected/Database.php'; //This is where the database connections and variables are stored $UPLOAD_TEMP = "Upload_Temp"; $UPLOAD_PERMANENT = "Files"; /* if( !empty( $_REQUEST($FILE_UPLOAD_DISPLAY_HTML) ) ) $FILE_UPLOAD_DISPLAY_HTML = $_REQUEST($FILE_UPLOAD_DISPLAY_HTML); else $FILE_UPLOAD_DISPLAY_HTML = array(); */ if( isset( $_SESSION['Uploaded_Files'] ) || !session_is_registered('Uploaded_Files') ) { $Uploaded_Files = array(); session_register("Uploaded_Files"); } if( isset( $_SESSION['Uploaded_Files_Number'] ) || !session_is_registered('Uploaded_Files_Number') ) { $Uploaded_Files = 0; session_register("Uploaded_Files_Number"); } if( isset( $_SESSION['Error'] ) || !session_is_registered('Error') ) { $Error = 0; session_register("Error"); } /* if( !$_SESSION['Auth'] || !$_SESSION['User'] ) { echo "This is a private site. Please login to proceed...<BR>"; //header("Location: http://$_SERVER[sERVER_ADDR]/$LOGIN_PAGE"); session_destroy(); echo "<meta http-equiv=\"refresh\" content=\"3;URL=http://" . $_SERVER['SERVER_ADDR'] . "/" . $LOGIN_PAGE . "\">"; exit; } */ // Upload files ******************************************************************************************************** //This function does the actual work of saving the file into the $Target_Path function Save_Uploaded_File( $UPLOAD_TEMP ) { $File_Upload_Error = array( "There is no error, the file uploaded with success", "The uploaded file exceeds the upload_max_filesize directive in php.ini", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form", "The uploaded file was only partially uploaded", "No file was uploaded", "Missing a temporary folder" ); $Target_Path = $_SERVER['DOCUMENT_ROOT'] . "/" . $UPLOAD_TEMP . "/"; $Target_Path = $Target_Path . basename( $_FILES['Picture']['name']); if( move_uploaded_file($_FILES['Picture']['tmp_name'], $Target_Path) ) { //echo "<BR>The file ". basename( $_FILES['Picture']['name']). " has been uploaded"; //to be removed $_SESSION['Uploaded_Files'][$_SESSION['Uploaded_Files_Number']] = basename( $_FILES['Picture']['name'] ); } else { $_SESSION['Error'] .= "There was an error uploading the file!" . $File_Upload_Error[$_FILES['Picture']['error']] . ". Please try again<BR>"; } $_SESSION['Uploaded_Files_Number']++; } //Checks whether the 'file submit' button is selected if( empty($_SESSION['Error']) && isset($_REQUEST['_submit_check']) ) { if( empty($_FILES['Picture']['name'] ) ) $_SESSION['Error'] = "No file was selected to be uploaded"; //check if file has already been uploaded into the drive, and if so, will write to the $_SESSION['Error'] if( !empty($_FILES['Picture']['name']) && !empty($_SESSION['Uploaded_Files']) && empty($_SESSION['Error']) ) { foreach( $_SESSION['Uploaded_Files'] as $Temp_Array ) { if( $Temp_Array == basename( $_FILES['Picture']['name'] ) ) { $_SESSION['Error'] .= "This file, <i>" . $Temp_Array . "</i>, has already been uploaded, and can't be uploaded again. <BR>"; break; } } } //Does the actual action of uploading the file. Calls the function "$Save_Uploaded_File" if( empty($_SESSION['Error']) ) // && ($_FILES['Picture']['name'] == $_SESSION['Uploaded_Files'][$_SESSION['Uploaded_Files_Number']]) ) { Save_Uploaded_File( $UPLOAD_TEMP ); } } //This deletes the file in the upload temp folder, if the user chooses so. else if( empty($_SESSION['Error']) && isset( $_REQUEST['Action']) ) { if( empty($_REQUEST['File'] ) || $_REQUEST['Action'] != "Delete" ) $_SESSION['Error'] = "No file selected to be deleted"; else if( !file_exists( $UPLOAD_TEMP . "/" . $_REQUEST['File'] ) ) { echo array_search( $_REQUEST['File'], $_SESSION['Uploaded_Files'] ); $_SESSION['Error'] = "File not found."; array_splice( $_SESSION['Uploaded_Files'], array_search( $_REQUEST['File'], $_SESSION['Uploaded_Files'] ), 1 ); } else { echo "<BR>" . count( $_SESSION['Uploaded_Files']) . " - " . $_REQUEST['File'] . "<BR>"; reset( $_SESSION['Uploaded_Files']) ; echo "<BR>Array Before array_search and array_slice<BR><BR>"; $i = 0; //to be removed later foreach( $_SESSION['Uploaded_Files'] as $Temp_Array ) { echo $Temp_Array . $i . " has been uploaded <FONT>[<A HREF=\"" . $_SERVER['PHP_SELF'] . "?Action=Delete&File=" . $Temp_Array . "\">delete</A>]</FONT><BR>" ; $i++; } echo "Array Search found <B>" . $_REQUEST['File'] . "</B> at location <B>" . array_search( $_REQUEST['File'], $_SESSION['Uploaded_Files'] ) . "</B>"; array_splice( $_SESSION['Uploaded_Files'], array_search( $_REQUEST['File'], $_SESSION['Uploaded_Files'] ), 1 ); //echo array_search( $_REQUEST['File'], $_SESSION['Uploaded_Files'] ); //array_splice( $_SESSION['Uploaded_Files'], array_search( $_REQUEST['File'], $_SESSION['Uploaded_Files'] ), 1 ); unlink( $UPLOAD_TEMP . "/" . $_REQUEST['File'] ); } } $main_table = " <FORM ENCTYPE=\"multipart/form-data\" ACTION=\"" . $_SERVER['PHP_SELF'] . "\" METHOD=POST > <TABLE ALIGN=LEFT BORDER=0 CELLPADDING=2> <INPUT TYPE=hidden NAME=\"MAX_FILE_SIZE\" VALUE=\"10000000\"> <TR><TD>Upload your files here (jpeg, doc, zip, etc) </TD><TD>: <INPUT NAME=\"Picture\" SIZE=50 TYPE=file><br></TD></TR> <input type=hidden name=\"_submit_check\" value=\"UPLOAD1\"/> <TR><TD><INPUT TYPE=submit VALUE=\"Upload File\"></TD></TR> </FORM> </TABLE> "; ?> <HTML> <TITLE>File Upload</TITLE> <BODY> <P> <?php if( $_SESSION['Error'] ) echo "<FONT COLOR=RED><B>" . $_SESSION['Error'] . "</B></FONT>"; $_SESSION['Error'] = NULL; echo $main_table; //To display the files uploaded. Will add "delete" function in future! echo "<BR CLEAR=LEFT><BR>"; //this is to display the files that has been uploaded previously In future, will add a 'delete' link here if( !empty($_SESSION['Uploaded_Files']) ) { $i = 0; //to be removed later foreach( $_SESSION['Uploaded_Files'] as $Temp_Array ) { echo $Temp_Array . $i . " has been uploaded <FONT>[<A HREF=\"" . $_SERVER['PHP_SELF'] . "?Action=Delete&File=" . $Temp_Array . "\">delete</A>]</FONT><BR>" ; $i++; } } ?> </P> </BODY> </HTML> Link to comment https://forums.phpfreaks.com/topic/41585-possible-bug-in-search_array/ Share on other sites More sharing options...
btherl Posted March 7, 2007 Share Posted March 7, 2007 Can you put the following code in: print "<pre>";var_dump($_SESSION['Uploaded_Files']);print"</pre>"; echo array_search( $_REQUEST['File'], $_SESSION['Uploaded_Files'] ); to verify that the array is what you think it should be? I'm assuming that's the call to array_search() you are interested in. Link to comment https://forums.phpfreaks.com/topic/41585-possible-bug-in-search_array/#findComment-201537 Share on other sites More sharing options...
ylkien Posted March 7, 2007 Author Share Posted March 7, 2007 Hi, I have added it in already. The main part of the code that creates this problem is : else { echo "<BR>Array has " . count( $_SESSION['Uploaded_Files']) . " values. File to be deleted is " . $_REQUEST['File'] . "<BR>"; reset( $_SESSION['Uploaded_Files']) ; print "<pre>";var_dump($_SESSION['Uploaded_Files']);print"</pre>"; /* echo "<BR>Array Before array_search and array_slice<BR><BR>"; $i = 0; //to be removed later foreach( $_SESSION['Uploaded_Files'] as $Temp_Array ) { echo $Temp_Array . $i . " has been uploaded <FONT>[<A HREF=\"" . $_SERVER['PHP_SELF'] . "?Action=Delete&File=" . $Temp_Array . "\">delete</A>]</FONT><BR>" ; $i++; } */ echo "<BR>Array_Search returned value : " . array_search( $_REQUEST['File'], $_SESSION['Uploaded_Files'] ); echo "<BR>Array Search found <B>" . $_REQUEST['File'] . "</B> at location <B>" . array_search( $_REQUEST['File'], $_SESSION['Uploaded_Files'] ) . "</B>"; array_splice( $_SESSION['Uploaded_Files'], array_search( $_REQUEST['File'], $_SESSION['Uploaded_Files'] ), 1 ); //echo array_search( $_REQUEST['File'], $_SESSION['Uploaded_Files'] ); //array_splice( $_SESSION['Uploaded_Files'], array_search( $_REQUEST['File'], $_SESSION['Uploaded_Files'] ), 1 ); unlink( $UPLOAD_TEMP . "/" . $_REQUEST['File'] ); <?php error_reporting(E_ALL); //remove later session_start(); //include 'Protected/Functions.php'; //This is where all of the functions are stored! //include 'Protected/Database.php'; //This is where the database connections and variables are stored $UPLOAD_TEMP = "Upload_Temp"; $UPLOAD_PERMANENT = "Files"; /* if( !empty( $_REQUEST($FILE_UPLOAD_DISPLAY_HTML) ) ) $FILE_UPLOAD_DISPLAY_HTML = $_REQUEST($FILE_UPLOAD_DISPLAY_HTML); else $FILE_UPLOAD_DISPLAY_HTML = array(); */ if( isset( $_SESSION['Uploaded_Files'] ) || !session_is_registered('Uploaded_Files') ) { $Uploaded_Files = array(); session_register("Uploaded_Files"); } if( isset( $_SESSION['Uploaded_Files_Number'] ) || !session_is_registered('Uploaded_Files_Number') ) { $Uploaded_Files = 0; session_register("Uploaded_Files_Number"); } if( isset( $_SESSION['Error'] ) || !session_is_registered('Error') ) { $Error = 0; session_register("Error"); } /* if( !$_SESSION['Auth'] || !$_SESSION['User'] ) { echo "This is a private site. Please login to proceed...<BR>"; //header("Location: http://$_SERVER[sERVER_ADDR]/$LOGIN_PAGE"); session_destroy(); echo "<meta http-equiv=\"refresh\" content=\"3;URL=http://" . $_SERVER['SERVER_ADDR'] . "/" . $LOGIN_PAGE . "\">"; exit; } */ // Upload files ******************************************************************************************************** //This function does the actual work of saving the file into the $Target_Path function Save_Uploaded_File( $UPLOAD_TEMP ) { $File_Upload_Error = array( "There is no error, the file uploaded with success", "The uploaded file exceeds the upload_max_filesize directive in php.ini", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form", "The uploaded file was only partially uploaded", "No file was uploaded", "Missing a temporary folder" ); $Target_Path = $_SERVER['DOCUMENT_ROOT'] . "/" . $UPLOAD_TEMP . "/"; $Target_Path = $Target_Path . basename( $_FILES['Picture']['name']); if( move_uploaded_file($_FILES['Picture']['tmp_name'], $Target_Path) ) { //echo "<BR>The file ". basename( $_FILES['Picture']['name']). " has been uploaded"; //to be removed $_SESSION['Uploaded_Files'][$_SESSION['Uploaded_Files_Number']] = basename( $_FILES['Picture']['name'] ); } else { $_SESSION['Error'] .= "There was an error uploading the file!" . $File_Upload_Error[$_FILES['Picture']['error']] . ". Please try again<BR>"; } $_SESSION['Uploaded_Files_Number']++; } //Checks whether the 'file submit' button is selected if( empty($_SESSION['Error']) && isset($_REQUEST['_submit_check']) ) { if( empty($_FILES['Picture']['name'] ) ) $_SESSION['Error'] = "No file was selected to be uploaded"; //check if file has already been uploaded into the drive, and if so, will write to the $_SESSION['Error'] if( !empty($_FILES['Picture']['name']) && !empty($_SESSION['Uploaded_Files']) && empty($_SESSION['Error']) ) { foreach( $_SESSION['Uploaded_Files'] as $Temp_Array ) { if( $Temp_Array == basename( $_FILES['Picture']['name'] ) ) { $_SESSION['Error'] .= "This file, <i>" . $Temp_Array . "</i>, has already been uploaded, and can't be uploaded again. <BR>"; break; } } } //Does the actual action of uploading the file. Calls the function "$Save_Uploaded_File" if( empty($_SESSION['Error']) ) // && ($_FILES['Picture']['name'] == $_SESSION['Uploaded_Files'][$_SESSION['Uploaded_Files_Number']]) ) { Save_Uploaded_File( $UPLOAD_TEMP ); } } //This deletes the file in the upload temp folder, if the user chooses so. else if( empty($_SESSION['Error']) && isset( $_REQUEST['Action']) ) { if( empty($_REQUEST['File'] ) || $_REQUEST['Action'] != "Delete" ) $_SESSION['Error'] = "No file selected to be deleted"; else if( !file_exists( $UPLOAD_TEMP . "/" . $_REQUEST['File'] ) ) { echo "<BR>Array_Search value when 'file not found' is : " . array_search( $_REQUEST['File'], $_SESSION['Uploaded_Files'] ); $_SESSION['Error'] = "File not found."; array_splice( $_SESSION['Uploaded_Files'], array_search( $_REQUEST['File'], $_SESSION['Uploaded_Files'] ), 1 ); } else { echo "<BR>Array has " . count( $_SESSION['Uploaded_Files']) . " values. File to be deleted is " . $_REQUEST['File'] . "<BR>"; reset( $_SESSION['Uploaded_Files']) ; print "<pre>";var_dump($_SESSION['Uploaded_Files']);print"</pre>"; /* echo "<BR>Array Before array_search and array_slice<BR><BR>"; $i = 0; //to be removed later foreach( $_SESSION['Uploaded_Files'] as $Temp_Array ) { echo $Temp_Array . $i . " has been uploaded <FONT>[<A HREF=\"" . $_SERVER['PHP_SELF'] . "?Action=Delete&File=" . $Temp_Array . "\">delete</A>]</FONT><BR>" ; $i++; } */ echo "<BR>Array_Search returned value : " . array_search( $_REQUEST['File'], $_SESSION['Uploaded_Files'] ); echo "<BR>Array Search found <B>" . $_REQUEST['File'] . "</B> at location <B>" . array_search( $_REQUEST['File'], $_SESSION['Uploaded_Files'] ) . "</B>"; array_splice( $_SESSION['Uploaded_Files'], array_search( $_REQUEST['File'], $_SESSION['Uploaded_Files'] ), 1 ); //echo array_search( $_REQUEST['File'], $_SESSION['Uploaded_Files'] ); //array_splice( $_SESSION['Uploaded_Files'], array_search( $_REQUEST['File'], $_SESSION['Uploaded_Files'] ), 1 ); unlink( $UPLOAD_TEMP . "/" . $_REQUEST['File'] ); } } $main_table = " <FORM ENCTYPE=\"multipart/form-data\" ACTION=\"" . $_SERVER['PHP_SELF'] . "\" METHOD=POST > <TABLE ALIGN=LEFT BORDER=0 CELLPADDING=2> <INPUT TYPE=hidden NAME=\"MAX_FILE_SIZE\" VALUE=\"10000000\"> <TR><TD>Upload your files here (jpeg, doc, zip, etc) </TD><TD>: <INPUT NAME=\"Picture\" SIZE=50 TYPE=file><br></TD></TR> <input type=hidden name=\"_submit_check\" value=\"UPLOAD1\"/> <TR><TD><INPUT TYPE=submit VALUE=\"Upload File\"></TD></TR> </FORM> </TABLE> "; ?> <HTML> <TITLE>File Upload</TITLE> <BODY> <P> <?php if( $_SESSION['Error'] ) echo "<FONT COLOR=RED><B>" . $_SESSION['Error'] . "</B></FONT>"; $_SESSION['Error'] = NULL; echo $main_table; //To display the files uploaded. Will add "delete" function in future! echo "<BR CLEAR=LEFT><BR>"; //this is to display the files that has been uploaded previously In future, will add a 'delete' link here if( !empty($_SESSION['Uploaded_Files']) ) { $i = 0; //to be removed later foreach( $_SESSION['Uploaded_Files'] as $Temp_Array ) { echo $Temp_Array . $i . " has been uploaded <FONT>[<A HREF=\"" . $_SERVER['PHP_SELF'] . "?Action=Delete&File=" . $Temp_Array . "\">delete</A>]</FONT><BR>" ; $i++; } } ?> </P> </BODY> </HTML> Link to comment https://forums.phpfreaks.com/topic/41585-possible-bug-in-search_array/#findComment-201572 Share on other sites More sharing options...
ylkien Posted March 8, 2007 Author Share Posted March 8, 2007 I did a walk-around, by manually searching the array (instead of using array_search), and it works nicely... Anyone knows the solution for this problem? Is my initialisation incorrect? Link to comment https://forums.phpfreaks.com/topic/41585-possible-bug-in-search_array/#findComment-202162 Share on other sites More sharing options...
btherl Posted March 8, 2007 Share Posted March 8, 2007 Your code is quite long. If you can give us the output of var_dump(), then we can tell you what the problem is without having to look through all that code Link to comment https://forums.phpfreaks.com/topic/41585-possible-bug-in-search_array/#findComment-202167 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.