Waar is waarde leeg bij upload veld?
BigBug - 04/11/2006 10:22 (laatste wijziging 04/11/2006 10:39)
PHP expert
Hallo allemaal!
Ik ben nu bezig met een uploadgedeelte van een script. En ik wil controleren wanneer het veld leeg is. Dus dat er niks geupload is.
Heb al wat lopen proberen maar tis een beetje vaag allemaal.
->
Moet ik het met $_POST of met $_FILES checken?
Gr, Jeroen
Edit: Een stuk van mijn script:
<?php elseif(empty($_FILES['image']['name']))
{
if(mysql_query("INSERT INTO games (catid, naam, image, link, width, height) VALUES ('".addslashes(htmlentities($_POST['categorie']))."', '".addslashes(htmlentities($_POST['naam']))."','".addslashes(htmlentities('noimg.gif'))."','".addslashes(htmlentities($_POST['url']))."','".addslashes(htmlentities($_POST['breedte']))."', '".addslashes(htmlentities($_POST['hoogte']))."')"))
{
echo 'Game succesvol toegevoegd! Een momentje geduld...';
header("Refresh: 2 url= index.php?pagina=adminoverzicht");
}
else
{
echo mysql_error();
}
}
else
{
if(mysql_query("INSERT INTO games (catid, naam, image, link, width, height) VALUES ('".addslashes(htmlentities($_POST['categorie']))."', '".addslashes(htmlentities($_POST['naam']))."','".addslashes(htmlentities($_FILES['image']['name']))."','".addslashes(htmlentities($_POST['url']))."','".addslashes(htmlentities($_POST['breedte']))."', '".addslashes(htmlentities($_POST['hoogte']))."')"))
{
move_uploaded_file($_FILES['image']['tmp_name'], "upload/" . $_FILES['image']['name'] );
echo 'Game succesvol toegevoegd! Een momentje geduld...';
header("Refresh: 2 url= index.php?pagina=adminoverzicht");
}
else
{
echo mysql_error();
}
} ?>
<?php elseif ( empty ( $_FILES [ 'image' ] [ 'name' ] ) ) {
if ( mysql_query ( "INSERT INTO games (catid, naam, image, link, width, height) VALUES ('" . addslashes ( htmlentities ( $_POST [ 'categorie' ] ) ) . "', '" . addslashes ( htmlentities ( $_POST [ 'naam' ] ) ) . "','" . addslashes ( htmlentities ( 'noimg.gif' ) ) . "','" . addslashes ( htmlentities ( $_POST [ 'url' ] ) ) . "','" . addslashes ( htmlentities ( $_POST [ 'breedte' ] ) ) . "', '" . addslashes ( htmlentities ( $_POST [ 'hoogte' ] ) ) . "')" ) ) {
echo 'Game succesvol toegevoegd! Een momentje geduld...' ; header ( "Refresh: 2 url= index.php?pagina=adminoverzicht" ) ; }
else
{
}
}
else
{
if ( mysql_query ( "INSERT INTO games (catid, naam, image, link, width, height) VALUES ('" . addslashes ( htmlentities ( $_POST [ 'categorie' ] ) ) . "', '" . addslashes ( htmlentities ( $_POST [ 'naam' ] ) ) . "','" . addslashes ( htmlentities ( $_FILES [ 'image' ] [ 'name' ] ) ) . "','" . addslashes ( htmlentities ( $_POST [ 'url' ] ) ) . "','" . addslashes ( htmlentities ( $_POST [ 'breedte' ] ) ) . "', '" . addslashes ( htmlentities ( $_POST [ 'hoogte' ] ) ) . "')" ) ) {
echo 'Game succesvol toegevoegd! Een momentje geduld...' ; header ( "Refresh: 2 url= index.php?pagina=adminoverzicht" ) ; }
else
{
}
} ?>
Na het runnen van het script staat er bij image niks in de db. Dus gebruikt PHP de laatste query ... Maar hij moet de eerste gebruiken als het uploadform leeg is.
Wat is er hier dus fout aan?
Jeroen
9 antwoorden
Gesponsorde links
timo - 04/11/2006 11:40
PHP ver gevorderde
probeer eens bij empty($_FILES..) er van te maken $_FILES... == ''
want als je een form gebruikt (correct me if i'm wrong) worden de waardes automatisch wel gezet...
Addow - 04/11/2006 11:42 (laatste wijziging 04/11/2006 11:43)
PHP beginner
Een imagescript moet je normaal gezien zo opvangen, indien je verder geen controles doorvoert. $_FILES om het bestand op te vangen, $_POST voor de eventuele andere variabelen...
Ik gebruik wel altijd $_FILES['image']['name']!="" om te controleren of er iets is ingevuld.
Mag ik je POST-formulier eens zien? Heb je daar een enctype toegevoegd??
Zoniet:
<?
<form name="blabla" action="ergerans" method="POST" enctype="multipart/form-data">
?>
<?
< form name= "blabla" action= "ergerans" method= "POST" enctype= "multipart/form-data" >
?>
BigBug - 04/11/2006 11:45
PHP expert
Enctype is toegevoegd. Het enige waar ik nu m ee vast zit is bij het controleren of er een plaatje is bijgevoegd.
Addow - 04/11/2006 11:57
PHP beginner
Ewel, heb je de andere optie al uitgeprobeerd:
<?
elseif($_FILES['image']['name']=="") {
}
<?
elseif ( $_FILES [ 'image' ] [ 'name' ] == "" ) {
}
BigBug - 04/11/2006 12:33
PHP expert
Nee die nog niet, dat zal ik zometeen eens proberen.
Ultimatum - 04/11/2006 15:57
PHP expert
@addow, empty doet precies hetzelfde al == '', dus dat zou niet het verschil moeten/mogen maken..
Ibrahim - 05/11/2006 15:56
PHP expert
Citaat:
probeer eens bij empty($_FILES..) er van te maken $_FILES... == ''
want als je een form gebruikt (correct me if i'm wrong) worden de waardes automatisch wel gezet...
empty en if(... == '') is hetzelfde...
'waardes automatisch wel gezet...'
=>
daar heeft ie het niet over, dat is if(isset(...))
Gerard - 05/11/2006 16:20
Ouwe rakker
Citaat:
empty en if(... == '') is hetzelfde...
Is niet helemaal waar. Misschien wel in de context van dit voorbeeld, maar er is wel een degelijk verschil.
<?php
$sLegeString = '';
$sGevuldeString = 'Dit is een test String';
$sGetalString = '0';
$iNul = 0;
$iTien = 10;
echo var_export(empty($sLegeString), true) . '<br />'
. var_export(empty($sGevuldeString), true) . '<br />'
. var_export(empty($sGetalString), true) . '<br />'
. var_export(empty($iNum), true) . '<br />'
. var_export(empty($iTien), true) . '<br />'
. var_export(empty($sBestaatNiet), true);
<?php
$sLegeString = '' ;
$sGevuldeString = 'Dit is een test String' ;
$sGetalString = '0' ;
$iNul = 0 ;
$iTien = 10 ;
Dit zal opleveren:
true
false
true
true
false
true
De volgende code echter:
<?php
$sLegeString = '';
$sGevuldeString = 'Dit is een test String';
$sGetalString = '0';
$iNul = 0;
$iTien = 10;
echo var_export($sLegeString == '', true) . '<br />'
. var_export($sGevuldeString == '', true) . '<br />'
. var_export($sGetalString == '', true) . '<br />'
. var_export($iNum == '', true) . '<br />'
. var_export($iTien == '', true) . '<br />'
. var_export($sBestaatNiet == '', true);
<?php
$sLegeString = '' ;
$sGevuldeString = 'Dit is een test String' ;
$sGetalString = '0' ;
$iNul = 0 ;
$iTien = 10 ;
. var_export ( $sGevuldeString == '' , true ) . '<br />' . var_export ( $sGetalString == '' , true ) . '<br />'
Levert dit resultaat op:
true
false
false
true
false
true
Hierbij zie je dus dat het getal (integer) 0 nogsteeds true teruggeeft. Maar aangezien alle inputs uit een formulier als een string worden doorgegeven, zal je bij de == '' in ieder geval geen true krijgen, dat hij leeg is. Want dan ziet hij wel gewoon dat er een 0 staat in de string.
Je zou dus kunnen zeggen dat deze vergelijking de voorkeur heeft boven empty.
Gesponsorde links
Dit onderwerp is gesloten .