[PHP] if statement werkt niet?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • reinzor
  • Registratie: November 2006
  • Laatst online: 12-12-2024
Ben bezig een uploadscript te maken/begrijpen. Voorheen alleen nog maar met normale formulieren gewerkt.

Om het script te laten controleren of iets ingevuld is gebruik je normaal

if($_POST['naam']) , nu heb ik gevonden dat het bij een bestand anders is:

$_FILES['naam']

Echter werkt dit niet, hij blijft steeds maar geven "image uploaded"

Kan iemand mij misschien vertellen wat ik fout doe :)?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php         
if ($_POST['uploaden']) // als er op submit wordt gedrukt
     { 
            if (!$_FILES['new_image'])  // als er geen file is ingevuld
                echo ("Geef een bestand op!"); 
             else {          
             echo "image uploaded";
             }
      }  

// Upload formulier 
echo  "<form method=post action=" . $_SERVER['PHP_SELF'] . " enctype=multipart/form-data> 
Bestand: <input type='file' name='new_image'>
<input type='submit' name='uploaden' value='Uploaden'></form>"; 
?>

Acties:
  • 0 Henk 'm!

  • MsG
  • Registratie: November 2007
  • Laatst online: 23:11

MsG

Forumzwerver

Ik mis { en } binnen de if

Denk om uw spatiegebruik. Dit scheelt Tweakers.net kostbare databaseruimte! | Groninger en geïnteresseerd in Domotica? Kom naar DomoticaGrunn


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Weet je hoe je moet debuggen? Check eens de functie [url=htp://php.net/var_dump]var_dump[/] van de php manual.

Je kan hiermee variabelen met de volledige eigenschappen bekijken. Dus als je zowel de $_POST als de $_FILES dumpt, zie je waarschijnlijk snel wat je fout doet :)
Accolades zijn d.e.s.d. verplicht wanneer je meerdere statements wilt groeperen binnen één if conditie (en dit geldt ook voor else/elseif/for/foreach etc).

[ Voor 34% gewijzigd door mithras op 18-11-2009 00:05 ]


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

To determine whether upload was successful you should check for error being UPLOAD_ERR_OK instead of checking the file size. When nothing is chosen to be uploaded, the key in $_FILES will still be there, but it should have error equal UPLOAD_ERR_NO_FILE.
:)

Dan doen ze nog zo hun best om de handleiding naar dertig talen te vertalen, als je er niet één leest nadert het nut daarvan snel het nulpunt ;)

[ Voor 18% gewijzigd door CodeCaster op 18-11-2009 00:06 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Zet voor de lol ook eens error_reporting op E_ALL | E_STRICT en display_errors op on. Zo te zien heb je dat namelijk niet gedaan; je zou best wel wat warnings/notices moeten krijgen voor deze code wanneer je een waarde niet goed gezet hebt.

Hint: isset.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Nog een hint: is_uploaded_file() ;)

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Nog een hint: zorg ook dat je HTML in orde is:

PHP:
1
2
3
4
echo  '
<form method="post" action="' . $_SERVER['PHP_SELF'] . '" enctype="multipart/form-data"> 
Bestand: <input type="file" name="new_image">
<input type="submit" name="uploaden" value="Uploaden"></form>';


verder: debuggen, debuggen, debuggen!!!111

Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 17:23
Nog een tip: echo geen html, maar ga uit PHP mode. Dan heb je syntax highlighting om de fout van Cartman! te spotten:

HTML:
1
2
3
4
5
?>
// Upload formulier 
<form method=post action="<?php echo $_SERVER['PHP_SELF'] ?>" enctype="multipart/form-data"> 
Bestand: <input type="file" name="new_image">
<input type="submit" name="uploaden" value="Uploaden"></form>";

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Offtopic tip:

PHP:
1
if ($_POST['uploaden']) // als er op submit wordt gedrukt 


Vervangen door:
PHP:
1
if (strToLower($_SERVER["REQUEST_METHOD"]) == "post")


Dit lost je probleem niet op trouwens.

[ Voor 10% gewijzigd door AtleX op 18-11-2009 09:26 ]

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • harrald
  • Registratie: September 2005
  • Laatst online: 16-09 08:44
AtleX schreef op woensdag 18 november 2009 @ 09:26:
Offtopic tip:

Dit lost je probleem niet op trouwens.
En waarom is dit beter dan zijn methode?

waar je bij jou alleen maar op een hele omslachtige manier kijkt of er uberhaupt een post is. Kijkt hij tenminste nog of het een relevente post is. :)

Acties:
  • 0 Henk 'm!

  • Mike2k
  • Registratie: Mei 2002
  • Laatst online: 22-08 11:59

Mike2k

Zone grote vuurbal jonge! BAM!

Doe inderdaad even een print_r ($_FILES);

You definitely rate about a 9.0 on my weird-shit-o-meter
Chuck Norris doesn't dial the wrong number. You answer the wrong phone.


Acties:
  • 0 Henk 'm!

  • djexplo
  • Registratie: Oktober 2000
  • Laatst online: 07-07 15:40
Jaap-Jan schreef op woensdag 18 november 2009 @ 09:21:
Nog een tip: echo geen html, maar ga uit PHP mode. Dan heb je syntax highlighting om de fout van Cartman! te spotten:
Nog een tip, mix geen HTML en PHP ;) .
Je kan beter een apart HTML bestand aanmaken, waarbij als PHP iets moet invullen gewoon %textje% gebruiken. Dan kan je in PHP het html bestand inlezen en met str_replace de % plekken invullen. Of natuurlijk gewoon een kant en klaar template systeem gebruiken.

Dus:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

function gettemplate($filename)
{
    $handle = fopen($filename, "r");
    $template = fread($handle, filesize($filename));
    fclose($handle);
    return $template;
}

$pagina=gettemplate("voorbeeld.html");
$pagina= str_replace("%text%", "hello world",$pagina);
echo $pagina
?>

HTML:
1
2
3
4
5
<html>
<body>
%text%
</body>
</html>

'if it looks like a duck, walks like a duck and quacks like a duck it's probably a duck'


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

harrald schreef op woensdag 18 november 2009 @ 11:32:
[...]

En waarom is dit beter dan zijn methode?

waar je bij jou alleen maar op een hele omslachtige manier kijkt of er uberhaupt een post is. Kijkt hij tenminste nog of het een relevente post is. :)
Submit eens met Javascript het formulier en kijk wat er gebeurt. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Of je
HTML:
1
2
3
4
5
<html>
<body>
%text%
</body>
</html>


of
HTML:
1
2
3
4
5
<html>
<body>
<?php GetYourTextFromController(); ?> <!-- whatever --> 
</body>
</html>

Gebruikt is inderdaad een wereld van verschil!
Ik zie niet in waarom je een template-engine zou maken of gebruiken (PHP is het namelijk al).
Al dat geneuzel met str_replace() om iets te bouwen wat allang kan, je creëert alleen maar onnodige overhead.
Je mag gerust PHP in je view gebruiken, geef me 1 valide reden waarom het niet zou mogen.

[ Voor 28% gewijzigd door Verwijderd op 18-11-2009 16:07 ]


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
harrald schreef op woensdag 18 november 2009 @ 11:32:
[...]

En waarom is dit beter dan zijn methode?

waar je bij jou alleen maar op een hele omslachtige manier kijkt of er uberhaupt een post is. Kijkt hij tenminste nog of het een relevente post is. :)
Waarom zou het voorkomen van de submit-knop relevanter zijn dan checken of de method POST is? Je moet je input daarna toch nog valideren. Het gebruik van checken op POST-method werkt een stuk universeler dan checken op een submitveldje.

Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 17-09 14:28
Pff wat doen sommigen toch moeilijk. Het makkelijkste is als nog checken op een POST methode zoals @Cartman! & @AtleX ook zeggen. Vanaf daar kan je nog altijd zeggen van controlleer op de submit methode.

Verder wil ik je aanraden geen PHP_SELF te gaan gebruiken, dit vanwege XSS injecties. Doe het dan liever op een andere manier met bijvoorbeeld SCRIPT_NAME in combinatie met een aantal andere variabelen. Nog beter zou zijn het zelf allemaal invullen.

Lees dit voor meer uitleg: Informatie over XSS Injecties i.c.m met PHP_SELF

Acties:
  • 0 Henk 'm!

Verwijderd

djexplo schreef op woensdag 18 november 2009 @ 11:36:
[...]


Nog een tip, mix geen HTML en PHP ;) .
Je kan beter een apart HTML bestand aanmaken, waarbij als PHP iets moet invullen gewoon %textje% gebruiken. Dan kan je in PHP het html bestand inlezen en met str_replace de % plekken invullen. Of natuurlijk gewoon een kant en klaar template systeem gebruiken.

Dus:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

function gettemplate($filename)
{
    $handle = fopen($filename, "r");
    $template = fread($handle, filesize($filename));
    fclose($handle);
    return $template;
}

$pagina=gettemplate("voorbeeld.html");
$pagina= str_replace("%text%", "hello world",$pagina);
echo $pagina
?>

HTML:
1
2
3
4
5
<html>
<body>
%text%
</body>
</html>
Seriously? _O-
AtleX schreef op woensdag 18 november 2009 @ 09:26:
Offtopic tip:
Vervangen door:
PHP:
1
if (strToLower($_SERVER["REQUEST_METHOD"]) == "post")
Ten eerste zou je die functienaam even door de functie moeten halen, dus "strtolower" ipv "strToLower". En wat is er mis met:
PHP:
1
if ($_SERVER["REQUEST_METHOD"] == "POST")

??? :?

Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Verwijderd schreef op woensdag 18 november 2009 @ 16:31:
En wat is er mis met:
PHP:
1
if ($_SERVER["REQUEST_METHOD"] == "POST")

??? :?
Het feit dat op Lighttpd die waarde lowercase is en onder Apache uppercase?

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op woensdag 18 november 2009 @ 16:31:
[...]
En wat is er mis met:
PHP:
1
if ($_SERVER["REQUEST_METHOD"] == "POST")

??? :?
Beetje defensief en robuust programmeren misschien? Nu ga je er van uit dat 't altijd POST is terwijl een willekeurige webserver wellicht "post" geeft. Als je er een strToLower overheen jast (of voor mijn part strToUpper) dan boeit het niet meer.

[edit]
Wat AtleX dus ook zegt :P

[ Voor 5% gewijzigd door RobIII op 18-11-2009 16:46 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

offtopic:
Maakt voor de IF-lus toch niet uit? Standaard is PHP, naar mijn weten, case insensitive?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

GJtje schreef op woensdag 18 november 2009 @ 16:56:
offtopic:
Maakt voor de IF-lus toch niet uit? Standaard is PHP, naar mijn weten, case insensitive?
In stringvergelijkingen? Daar maakt het wel degelijk uit. ;) En in variabelenamen en array indices. Class- en function namen zijn dan wel weer case insensitive.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • dev10
  • Registratie: April 2005
  • Laatst online: 17-09 09:37
djexplo schreef op woensdag 18 november 2009 @ 11:36: Dan kan je in PHP het html bestand inlezen en met str_replace de % plekken invullen.
offtopic:
Hoe moet je dan view logica gebruiken? Ik mag hopen dat je dit niet in een productie omgeving inzet, want het is een hel om bij te houden. Ik werk bijna dagelijks met een systeem dat ook zo is opgezet. Vanwege andere prioriteiten mag ik dit niet omzetten naar Smarty. (Waar andere delen in de website mee gemaakt zijn.)

Acties:
  • 0 Henk 'm!

  • djexplo
  • Registratie: Oktober 2000
  • Laatst online: 07-07 15:40
dev10 schreef op woensdag 18 november 2009 @ 17:16:
[...]
offtopic:
Hoe moet je dan view logica gebruiken? Ik mag hopen dat je dit niet in een productie omgeving inzet, want het is een hel om bij te houden. Ik werk bijna dagelijks met een systeem dat ook zo is opgezet. Vanwege andere prioriteiten mag ik dit niet omzetten naar Smarty. (Waar andere delen in de website mee gemaakt zijn.)
offtopic:
Ik heb dit zelf toegepast bij 3 kleine websites, waarbij de designer met alleen kennis van html en css in een simpel programma zijn design wou maken. Voor een grote website heb ik het omgekeerde toegepast waarbij, de HTML templates een soort van commando strings bevatten die PHP functies die b.v. een tabel kunnen bouwen aanroepen

'if it looks like a duck, walks like a duck and quacks like a duck it's probably a duck'


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

djexplo schreef op woensdag 18 november 2009 @ 19:43:
[...]

Ik heb dit zelf toegepast bij 3 kleine websites, waarbij de designer met alleen kennis van html en css in een simpel programma zijn design wou maken.
Die designer moet alsnog leren hoe hij data uit het script in z'n html moet krijgen. En of ie dan leert of ie %data% of <?= $data ?> moet gebruiken maakt natuurlijk ook geen zak uit.
Voor een grote website heb ik het omgekeerde toegepast waarbij, de HTML templates een soort van commando strings bevatten die PHP functies die b.v. een tabel kunnen bouwen aanroepen
Of je gebruikt gewoon PHP ipv moeilijk te doen 8)7

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Niet weer een topic wat uitloopt op een discussie over template engines he? :+

Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 17:23
Ik schaam mij diep :$

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

Verwijderd

Geweldig om te zien hoe een simpel probleem kan veranderen in een discussie over template engines. *sarcastisch*.

1 woord: Debuggen.
Zoals al eerder is gezegd :)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Precies, dat was al eerder gezegd.

Maar hey, nog even over die template engines... :P

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • sanzut
  • Registratie: December 2006
  • Laatst online: 01:31

sanzut

It's always christmas time

In mijn applicaties staat de ombouw los van de code
PHP:
1
2
3
4
5
6
7
<?php
include('_menu_top.php');
include('_menu_left.php');
//content
include('_menu_right.php');
include('_menu_bottom.php');
?>

Voordeel; 1 keer menu aanpassen en het is overal goed, design los van de code, en duidelijk overzicht van je losse files.
Ohja, en geen uur door opmaak meuk van mn top en left mnu scrollen...

[ Voor 9% gewijzigd door sanzut op 19-11-2009 00:18 ]


  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
sanzut schreef op donderdag 19 november 2009 @ 00:17:
In mijn applicaties staat de ombouw los van de code
PHP:
1
2
3
4
5
6
7
<?php
include('_menu_top.php');
include('_menu_left.php');
//content
include('_menu_right.php');
include('_menu_bottom.php');
?>

Voordeel; 1 keer menu aanpassen en het is overal goed, design los van de code, en duidelijk overzicht van je losse files.
Ohja, en geen uur door opmaak meuk van mn top en left mnu scrollen...
Nog 1 klein dingetje dan.

Wat nu als je content weer in blokken verdeeld is, je menu top user customisable is, je menu left user customisable is, je menuright afhankelijk is van de rechten en enkel je menu bottom redelijk standaard is. En je menu left / right te verwisselen zijn ( waardoor je namen niet meer kloppen )

Dan ga je imho toch weer ontiegelijk veel logica in je views stoppen, het liefste heb ik zo weinig mogelijk logica in mijn views ( view-logica op zich uitgezonderd ) waardoor ik toch zelfs bovenop php een template engine prefereer.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Hoeveel logica je in je view stopt heeft niets te maken met het al dan niet gebruiken van een aparte template engine. Je templates zoals jij die maakt zal ik bijna één op één over kunnen nemen zonder template engine...

Laten we verder deze discussie maar laten voor wat het is, we hebben het hier vaak genoeg over gehad en niemand gaat elkaar overhalen om af te zien van template engines danwel over te stappen op template engines.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1