[php]if NOT functie, wat doe ik verkeerd hier?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben met een scripje bezig waarmee ik een waarde moet controleren, als deze niet aan de waarde voldoet moet het script stoppen.
De waarde is in dit geval een bestandsnaam, de bestands naam MOET eindigen op .rar of .zip. Ik had hiervoor dit gebruikt:

code:
1
2
3
4
5
6
7
8
9
10
11
$ext=substr($uploadfile1_name,-3,3); 
$ext=strtolower($ext); 
if( $ext !="zip" || $ext !="rar" ){ exit ("<br><center><b>Dit is geen zip of rar file!</center>"); } 
else { rest script ....

ook heb ik dit geprobeert:

$ext=substr($uploadfile1_name,-3,3); 
$ext=strtolower($ext); 
if(!$ext =="zip" || !$ext =="rar"){ exit ("<br><center><b>Dit is geen zip of rar file!</center>"); } 
else{ rest script.....


Bij de eerste loopt het script altijd door, dus ook als er GEEN .zip of .rar is, terwijl die dan de EXIT zou moeten uitvoeren.

Bij de 2de stopt ie bij alle waardes, dus ook als er wel een zip of rar gebruikt wordt.

Het script andersom werkt wel, dus "!" weg halen, echter na de else { komen nog verschillende commando's die uitgevoerd moeten worden, het is bijna niet te doen om het script zo nog werkend te krijgen. Ik zoek echt een "if NOT" oplossing.
Wat doe ik verkeerd, want ik zie het niet, volgens mij zou dit moeten werken alleen doet ie het niet.

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

($ext !="zip" || $ext !="rar") == true

kijk maar eens goed wat || doet ;)

Acties:
  • 0 Henk 'm!

  • KorZijl
  • Registratie: December 2002
  • Laatst online: 30-11-2021

KorZijl

errare humanum est

Bij tekstvergelijkingen gebruik je "ne" ivp "!=" ;)

Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Erkens schreef op 01 februari 2003 @ 15:55:
($ext !="zip" || $ext !="rar") == true

kijk maar eens goed wat || doet ;)
Van || -> && maken dus. Als $ext niet zip en niet rar is, dan naar exit, anders niet. ;)

[ Voor 9% gewijzigd door RedRose op 01-02-2003 16:00 . Reden: extra 'niet' toegevoegd ]

Sundown Circus


Acties:
  • 0 Henk 'm!

  • Shagura
  • Registratie: Augustus 2001
  • Laatst online: 14-09 08:25
KorZijl schreef op 01 February 2003 @ 15:55:
Bij tekstvergelijkingen gebruik je "ne" ivp "!=" ;)
:?

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 03:13
Beide conditionele expressies zijn verkeerd. Ik zal ze even herschreven met wat haakjes, zodat je de fout kunt zien:
code:
1
2
3
4
5
// de eerste:
if( ($ext != "zip") || ($ext != "rar") ) ...

// de tweede:
if( ((!$ext) == "zip") || ((!$ext) == "rar"))


In het eerste geval, test je of de extensie ongelijk is aan "zip", OF ongelijk is aan "rar". Dat is natuurlijk altijd het geval: als de extensie "zip" is, is de extensie immers ongelijk aan "rar" en is de conditie waar; als de extensie "rar" is, is de extensie ongelijk aan "zip" en is de conditie waar; als de extentie "xyz" is, is de extensie ongelijk aan zowel "zip" als "rar" en is de conditie dus ook waar.

In het tweede geval vergis je je in de volgorde waarin operators uitgevoerd worden. De not-operator heeft een hogere prioriteit dan de == operator, waardoor dus eerst !$ext geavuleerd wordt (waar 'false' uit komt, neem ik aan) en vervolgens wordt die waarde met "zip" vergeleken, wat natuurlijk nooit gelijk is. Je tweede conditie is dus altijd onwaar.

Het is verstandig om fouten zoals in het tweede geval te vermijden, door haakjes op twijfelachtige plaatsen in te voegen. Ik doe dat zelf altijd overvloedig, omdat ik geen zin heb om de prioriteiten van operators uit m'n hoofd te leren (en die willen nog wel eens per taal verschillen).

De juiste conditie zou je nu ook zelf moeten kunnen verzinnen; die is gelijk aan de eerste, maar met een && operatie in plaats van een || operatie. Je wilt immers dat de conditie waar is, wanneer de extentie niet "zip" én niet "rar" is.

Pfff, ik was daarnet nog de eerste! :P

[ Voor 10% gewijzigd door Soultaker op 01-02-2003 16:01 ]


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

KorZijl schreef op 01 February 2003 @ 15:55:
Bij tekstvergelijkingen gebruik je "ne" ivp "!=" ;)
maakt niets uit, althans in php niet ;)
RedRose schreef op 01 February 2003 @ 16:00:
[...]
Van || -> && maken dus. Als $ext niet zip en niet rar is, dan naar exit, anders niet. ;)
mja, dat wilde ik hem zelf laten ontdenken ipv meteen de oplossing te geven, leert hij er tenminste ook nog van ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Thx allemaal, stom gewoon dat had ik zelf ook moeten zien .

Dat "||" moest idd "&& " zijn, nu werkt het perfect.

Acties:
  • 0 Henk 'm!

Verwijderd

Suggestie: (wel trager maar wel makkelijker):
PHP:
1
2
3
4
5
if (!(eregi("(.rar|.zip)$", $uploadfile1_name)) {
  echo "Geen goede file";
} else {
  // code
}

[ Voor 9% gewijzigd door Verwijderd op 01-02-2003 16:36 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 03:13
Verwijderd schreef op 01 February 2003 @ 16:36:
Suggestie: (wel trager maar wel makkelijker):
PHP:
1
2
3
4
5
if (!(eregi("(.rar|.zip)$", $uploadfile1_name)) {
  echo "Geen goede file";
} else {
  // code
}
Jammer dat het niet correct werkt. Een betere suggestie zou zijn:
PHP:
1
2
3
4
5
6
7
$valid_exts = array("zip", "rar");

$ext = array_pop(explode('.', $filename));
if (($ext != $filename) && in_array($ext, $valid_exts))
{
  // geldige extentie
}

De controle of $ext ongelijk is aan $filename is nodig om te voorkomen dat bestanden genaamd "zip" of "rar" (zonder extenties) doorgelaten worden.

[ Voor 81% gewijzigd door Soultaker op 01-02-2003 17:13 ]


Acties:
  • 0 Henk 'm!

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
en bestanden met als naam blah.zip.bla zijn ook toegestaan.
probeer eens
PHP:
1
2
3
4
5
6
7
8
$extensions=array("zip", "rar")
foreach($extensions as $ext){
  if(strlen($filename) > (strlen($ext) + 1)){
    if(substr($filename, 0, (-1 * (strlen($ext) + 1)))==$ext){
      echo "file is ok";
    }
  }
}


ff snel getypt weet niet zeker of het werkt

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 03:13
/dev/null schreef op 01 February 2003 @ 17:14:
en bestanden met als naam blah.zip.bla zijn ook toegestaan.
Sterker nog, bestanden waar ueberhaupt zip of rar in voorkomt, met een ander karakter ervoor, zijn geldig; bv. "Patty Brard.avi", "winzip.exe", etcetera.
ff snel getypt weet niet zeker of het werkt
Nee, want je controleert ook niet op die punt op 't einde, en die is wel van belang. Verder gebruik je substr nogal raar en doe je een vrij zinloze controle op de lengte van het bestand.

[ Voor 31% gewijzigd door Soultaker op 01-02-2003 17:30 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Soultaker schreef op 01 February 2003 @ 16:51:
[...]

Jammer dat het niet correct werkt. Een betere suggestie zou zijn:
...
En een reden waarom dit niet werkt? Het was niet syntax proof, had het zo gescript, maar ik zie het probleem niet. Er wordt met een regexp getest of de filename eindigd op .zip of .rar. Zo nee, foute extensie..

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Soultaker schreef op 01 February 2003 @ 17:28:
Sterker nog, bestanden waar ueberhaupt zip of rar in voorkomt, met een ander karakter ervoor, zijn geldig; bv. "Patty Brard.avi", "winzip.exe", etcetera.

Wat doet de $ in een regexp? :P

Enige probleem ermee was dat de . niet geescaped was, en dat er niet op een file genaamd '.zip' en '.rar' getest werd.

PHP:
1
2
if(eregi('^.+\.(zip|rar)$', $filenaam))
  echo "goed";

Lijkt me opzich prima...

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 03:13
ACM schreef op 01 February 2003 @ 18:33:
Wat doet de $ in een regexp? :P
Hmm, overheen gelezen, schijnbaar (of later aangepast door sKiLL4):P

[ Voor 5% gewijzigd door Soultaker op 01-02-2003 18:50 ]


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Soultaker schreef op 01 February 2003 @ 18:49:
schijnbaar (of later aangepast door sKiLL4):P

Zou wel knap zijn als ie het in jouw quote ook aangepast had dan :P

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 03:13
ACM schreef op 01 February 2003 @ 18:50:
Zou wel knap zijn als ie het in jouw quote ook aangepast had dan :P
Meestal open ik vanaf de topic listing een aantal tabs met interessante topics, die ik dan een voor een ga doorlezen. Het komt daardoor regelmatig voor dat op het moment dat ik een bericht quote, het al gewijzigd is. Meestal zie ik dat wel, (er staat opeens iets anders dan de tekst waar ik op wilde reageren) maar in dit geval zou het me niet opgevallen zijn, omdat het verschil zo klein was. Feit is in ieder geval dat het bericht gewijzigd is; WAT er gewijzigd is, weet alleen sKiLL4.

Maar het kan ook goed dat ik me gewoon vergist heb, hoor. ;) Dat is misschien nog wel het waarschijnlijkst.

Acties:
  • 0 Henk 'm!

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 02-09 11:02

D2k

offtopic:
ik wil ook wel melden dat je het hier netjes doet Soultaker ;) dus dat zie ik ook

Doet iets met Cloud (MS/IBM)

Pagina: 1