login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Waar is waarde leeg bij upload veld?

Offline BigBug - 04/11/2006 10:22 (laatste wijziging 04/11/2006 10:39)
Avatar van BigBugPHP 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:
  1. <?php elseif(empty($_FILES['image']['name']))
  2. {
  3. 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']))."')"))
  4. {
  5. echo 'Game succesvol toegevoegd! Een momentje geduld...';
  6. header("Refresh: 2 url= index.php?pagina=adminoverzicht");
  7. }
  8. else
  9. {
  10. }
  11. }
  12. else
  13. {
  14. 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']))."')"))
  15. {
  16. move_uploaded_file($_FILES['image']['tmp_name'], "upload/" . $_FILES['image']['name'] );
  17. echo 'Game succesvol toegevoegd! Een momentje geduld...';
  18. header("Refresh: 2 url= index.php?pagina=adminoverzicht");
  19. }
  20. else
  21. {
  22. }
  23. } ?>

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
Offline timo - 04/11/2006 11:40
Avatar van timo 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...
Offline Addow - 04/11/2006 11:42 (laatste wijziging 04/11/2006 11:43)
Avatar van Addow Gouden medaille

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:
  1. <?
  2. <form name="blabla" action="ergerans" method="POST" enctype="multipart/form-data">
  3. ?>
Offline BigBug - 04/11/2006 11:45
Avatar van BigBug PHP expert Enctype is toegevoegd. Het enige waar ik nu m ee vast zit is bij het controleren of er een plaatje is bijgevoegd.
Offline Addow - 04/11/2006 11:57
Avatar van Addow Gouden medaille

PHP beginner
Ewel, heb je de andere optie al uitgeprobeerd:

  1. <?
  2. elseif($_FILES['image']['name']=="") {
  3.  
  4. }
Offline BigBug - 04/11/2006 12:33
Avatar van BigBug PHP expert Nee die nog niet, dat zal ik zometeen eens proberen.
Offline Ultimatum - 04/11/2006 15:57
Avatar van Ultimatum PHP expert @addow, empty doet precies hetzelfde al == '', dus dat zou niet het verschil moeten/mogen maken..
Offline Addow - 04/11/2006 16:05
Avatar van Addow Gouden medaille

PHP beginner
idd Ultimatum, heb keer zelf scriptje geschreven en daar werkt het effectief.

BigBug, kan je misschien een groter stuk code posten (bvb. wat er voor de elseif staat)? Ik peis dat dit stukje volledig correct is.

En graag het formulier ook...
Offline Ibrahim - 05/11/2006 15:56
Avatar van Ibrahim 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(...))
Offline Gerard - 05/11/2006 16:20
Avatar van Gerard 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.

  1. <?php
  2.  
  3. $sLegeString = '';
  4. $sGevuldeString = 'Dit is een test String';
  5. $sGetalString = '0';
  6.  
  7. $iNul = 0;
  8. $iTien = 10;
  9.  
  10. echo var_export(empty($sLegeString), true) . '<br />'
  11. . var_export(empty($sGevuldeString), true) . '<br />'
  12. . var_export(empty($sGetalString), true) . '<br />'
  13. . var_export(empty($iNum), true) . '<br />'
  14. . var_export(empty($iTien), true) . '<br />'
  15. . var_export(empty($sBestaatNiet), true);


Dit zal opleveren:
true
false
true
true
false
true

De volgende code echter:
  1. <?php
  2.  
  3. $sLegeString = '';
  4. $sGevuldeString = 'Dit is een test String';
  5. $sGetalString = '0';
  6.  
  7. $iNul = 0;
  8. $iTien = 10;
  9.  
  10. echo var_export($sLegeString == '', true) . '<br />'
  11. . var_export($sGevuldeString == '', true) . '<br />'
  12. . var_export($sGetalString == '', true) . '<br />'
  13. . var_export($iNum == '', true) . '<br />'
  14. . var_export($iTien == '', true) . '<br />'
  15. . var_export($sBestaatNiet == '', true);


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.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.254s