Archief - PHP: $_files / $http_post_files

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

frensj

Legacy Member
Ik kan dus perfect een file uploaden naar waar ik wil. Maar nu wou ik dat enkel limiteren naar jpeg bestanden, maar elke keer gaf hij aan dat het geen jpeg was... dus voor de fout te vinden ging ik eens kijken wat het type dan juist was. Niets dus.
(ik doe het met die 2, zouden allebei moeten werken?)

en ik kan dus wel degelijk het bestand wegschrijven, alleen geen check doen van ['type']

echo($_FILES['file']['type'] . " spul <br />");
echo($HTTP_POST_FILES['file']['type'] . " spul <br />");

iemand een idee wat er fout loopt?

zabulus

Legacy Member
$_FILES['userfile']['type']

De mime-type van het bestand, zoals gegeven door de browser. (Het kan voorkomen dat geen mime-type wordt gegeven, of een verkeerde wordt gegeven) The mime type of the file, if the browser provided this Een voorbeeld hiervan zou kunnen zijn "image/gif".

if($_FILES['userfile']['type'] != "image/gif") {
echo "da mag ni";
}

iets in die aard?

post anders je broncode eens..

frensj

Legacy Member
ni gaan zagen over andere dinges e, kweet da der heel inefficiente dingen in zitte enzo :) tmoet eerst werken en dan gaan we opkuisen e.
(en ja, iets in dien aard... alleen ziet hij gewoon *geen* type... )

edit: de relevante code staat nogal helemaal vanboven en vanonder ;)
alles werkt buiten dien check voor jpeg... (en de mime type wergeven ook ni )
Code:
<?php
if($_SESSION["Login"]==1){

if(isset($_POST['aantalnummers'])){

 $dir = "./images/";
	echo($_FILES['file']['type'] . " spul <br />");
	echo($HTTP_POST_FILES['file']['type'] . " spul <br />");
 if ($HTTP_POST_FILES['file']['type'] == "image/pjpeg" or $HTTP_POST_FILES['file']['type'] == "image/jpeg" or $HTTP_POST_FILES['file']['type'] == "image/jpg"){
 	 if(move_uploaded_file($HTTP_POST_FILES['file']['tmp_name'], $dir . $_POST['cdnaam'] . ".jpg")) {
	echo("Het prentje staat op de server<br />");
	}else{ 
	echo "Oeps een foutje :("; 
	} 
	}else{
	echo("Het prentje is geen jpeg image");
	}

include("connect.php");
  $cdID = $_POST['cd'];
  $groepID = $_POST['groep'];
  $recordlabelID = $_POST['recordlabel'];
  $cdnaam = addslashes($_POST['cdnaam']);
  $aantalnummers = $_POST['aantalnummers'];
  $jaarvanuitgave = addslashes($_POST['jaarvanuitgave']);
  $sql = "UPDATE cd SET groepID=".$groepID.", labelID=".$recordlabelID.", cdnaam='".$cdnaam."', jaarvanuitgave='".$jaarvanuitgave."', aantalnummers=" .$aantalnummers. " WHERE cdID=".$cdID;

  $query = mysql_query($sql) or die ("fout bij het toevoegen, probeer nog eens?");
  echo("De cd is aangepast");

}
else{
$cdID = $_POST['cd'];
echo("<form enctype=\"multipart/form-data\" method=\"post\" action=\"index.php?page=editcd\"><input TYPE=\"hidden\" value=\"" .$cdID ."\" name=\"cd\">");

include("connect.php");
$query = "SELECT cdID, groepID, labelID, cdnaam, jaarvanuitgave, aantalnummers FROM cd WHERE cdID = " .$cdID;
$resultaat = mysql_query ($query);

while ($record = mysql_fetch_object($resultaat)){
 $origineelgroepID=stripslashes($record->groepID);
 $origineellabelID=stripslashes($record->labelID);
 $cdnaam=stripslashes($record->cdnaam);
 $jaarvanuitgave=stripslashes($record->jaarvanuitgave);
 $aantalnummers=stripslashes($record->aantalnummers);
}


?>
 <table align="center">
  <tr>
   <td>RecordLabel:</td>
   <td><SELECT NAME="recordlabel">
   <?
    include("connect.php");
	$query = "SELECT labelnaam, labelID FROM label order by labelID";
	$resultaat = mysql_query ($query);
	while ($record = mysql_fetch_object($resultaat)){
	$labelnaam=stripslashes($record->labelnaam);
	$labelID=stripslashes($record->labelID); 	
	 if($labelID == $origineellabelID){
	  echo("<OPTION SELECTED VALUE=\"" .$labelID. "\">" .$labelnaam. "</OPTION>");
	  }else{
	  echo("<OPTION VALUE=\"" .$labelID. "\">" .$labelnaam. "</OPTION>");
	 }
	}
    ?>
	</SELECT></td>
     </tr>
  <tr>

  </tr>
  <tr>
   <td>Groep</font>:</td>
   <td><SELECT NAME="groep">
   <?
    include("connect.php");
	$query = "SELECT groepnaam, groepID FROM groep order by groepID";
	$resultaat = mysql_query ($query);
	while ($record = mysql_fetch_object($resultaat)){
	$groepnaam=stripslashes($record->groepnaam);
	$groepID=stripslashes($record->groepID);
	 if($groepID == $origineelgroepID){
	  echo("<OPTION SELECTED VALUE=\"" .$groepID. "\">" .$groepnaam. "</OPTION>");
	 }else{
	  echo("<OPTION VALUE=\"" .$groepID. "\">" .$groepnaam. "</OPTION>");
	 }
	}
    ?>
	</SELECT></td>
  </tr>
  <tr>
   <td>CD-naam</td>
<?   echo("<td><input name=\"cdnaam\" size=\"10\" value=\"" .$cdnaam. "\"></td>");
?>
  </tr>
  <tr>
   <td>Aantal nummers:</td>
<?   echo("<td><input name=\"aantalnummers\" size=\"10\" value=\"" .$aantalnummers. "\"></td>");
?>
  </tr>
  <tr>
   <td>Jaar van uitgave:</td>
<?   echo("<td><input name=\"jaarvanuitgave\" size=\"10\" value=\"" .$jaarvanuitgave. "\"></td>");
?>
  </tr>
  <tr>
    <td>CD-hoes:
	</td>
    <td><input name="userfile" type="file">
	</td>
  </tr>
  <tr>
   <td><INPUT type="reset" name="reset" value="reset"></td>
   <td colspan="3"><INPUT type="submit" name="submit" value="Pas aan"></td>
  </tr>
 </table>
</form>

<?php
}

}else{
echo("Logt gij eerst maar is in ja!");
}
?>

Tyfius

Legacy Member
$_FILES en $HTTP_POST_FILES doen hetzelfde, $_FILES is de nieuwe manier terwijl $HTTP_... depricated geworden is.

En er staat: $HTTP_POST_FILES['file']['type'] == "image/pjpeg" in je code. Op het eerste zicht zie ik niet meteen een probleem, maar PHP beschikt reeds over een aantal functies om na te gaan of een bestand een JPEG, GIF of PNG bestand is, uitleg vindt je wel in de PHP manual.

dJeez

Legacy Member
Het content type is sowieso niet te vertrouwen als check op het bestandstype (je kan zeer simpel een PHP script met vb. content type image/gif uploaden als je dat wil).

Als je wil testen of het bestand een GIF, JPEG of PNG is, gebruik dan de PHP image functies die daar specifiek voor geschreven zijn (vb. getimagesize).

orez

Legacy Member
Tyfius zei:
En er staat: $HTTP_POST_FILES['file']['type'] == "image/pjpeg" in je code.

dit klopt ook ... enkel is het niet volledig moet er nog een: || $HTTP_POST_FILES['file']['type'] == "image/jpeg"
bijkomen, een JPG file verstuurt IE als image/pjpeg, terwijl andere browsers dit als image/jpeg versturen

maar dit is idd de meest onveilige manier van uploaden. Je moet effectief checken als het al dan niet een image is mbv de functies die de GD Library u schenken, op type controleren is enkel de header van het bestand controleren, en niet de effectieve inhoud, via php kan je perfect die header info faken en het bestand dus andere code bevatten..

frensj

Legacy Member
ja allemaal goed en wel :)

maar hoe komt et dat hetgeen ik wil niet werkt, terwijl dat wel zou moeten... (bij gewone images, en zonder da hackers proberen iets gevaarlijk te uploaden enzo ...)
ik ga nu wel zoeken naar een andere methode, maar toch zou ik de fout hier nog wel willen weten.

mvg
frensj

edit:

khebbet nu aangepast naar
" if (exif_imagetype($HTTP_POST_FILES['file']['tmp_name']) == 2) "
en zo werkt het wel, maar is waarschijnlijk even onveilig :) welke methode bedoelen jullie dan? want ik vind ze zo direct niet...

Mr.Waggel

Legacy Member
en nog een vraagje van mij, kan je een $_FILES laten weergeven moest het een image zijn?
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan