Avatar billede melange Nybegynder
10. januar 2003 - 15:15 Der er 14 kommentarer og
1 løsning

nye standarter fra PHP 4.3

når jeg før i tiden skrev fx login system, kom jeg ofte frem til en linje i retningen af.

if (($_COOKIE['cookie_login'] || $_POST['form_login']) == $password) {

men det kan PHP 4.3 ikke helt lide, den giver nemlig en lille Notice

Notice: Undefined index: cookie_login in C:\sti\til\min\fil.php on line xx

problemmet løser sig ved at sige:

if ((isset($_COOKIE['cookie_login']) || isset($_POST['form_login'])) == $password) {

men er det den politsk korrekte måde at gøre det på ?
Hvis ikke, hvordan bød man gøre det ?
Avatar billede melange Nybegynder
10. januar 2003 - 15:15 #1
så, nu mangler jeg at kunne stave :)
Avatar billede jakoba Nybegynder
10. januar 2003 - 15:19 #2
Ja det er langt mer politisk korrekt at bruge isset(...) funktionen. Især fordi den virkelig tester det du ønsker at teste. det gør den anden ikke.
Avatar billede erikjacobsen Ekspert
10. januar 2003 - 15:24 #3
Men du mener vel:

if ((isset($_COOKIE['cookie_login']) || (isset($_POST['form_login'])) &&  $_POST['form_login']== $password)) {
Avatar billede erikjacobsen Ekspert
10. januar 2003 - 15:28 #4
Og om "politisk korrekt" ....

Hvis vi havde samlet al den tid, der er spildt i PHP (og andre scriptsprog)
på at finde fejl forårsaget af udefinerede variabler, uinitialiserede
variabler, ikke-eksisterende indexer osv osv, der normalt fanges af fx
et sprog som Java, så havde menneskeheden haft så meget tid til overs,
at vi nemt kunne klaret verdensfreden, hungersnøden, at sende mennesker til
Mars og Pluto (dem vi helst vil af med naturligvis).

Så betragt det ikke kun som "politisk korrekt", men som en hjælp til at
fange de irriterende småfejl meget hurtigere. Man skal dog lige vænne sig til det ;)
Avatar billede melange Nybegynder
10. januar 2003 - 15:28 #5
jakoba << men er det også den fortrukne måde at gøre det på ?

ligesom det er korrekt at skrive

if ($var == 1) {
    //noget
} elseif ($var == 2) {
    //noget_andet
}

mens jeg stadigvæk anser det for 'bedre kode' hvis man skriver (medmindre //noget og // noget_andet ikke er en meget lang kode):

switch ($var) {

  case 1:
      //noget
      break;

  case 2:
      //noget_andet
      break;

}

erikjacobsen << nej, det mener jeg egentlig ikke.
Det er jeg mener er:

Hvis (("der findes en cokkie" eller "hvis det findes en $_POST") som er lig $password) {
// skal dette ske
Avatar billede jakoba Nybegynder
10. januar 2003 - 15:32 #6
funktionen isset(...) tester een og kun een ting. "er den variabel defineret?"
når du derefter vil teste på HVAD der står i variabelen skal du bruge en separat sammenligning (som erikjacobsen viser det)
Avatar billede melange Nybegynder
10. januar 2003 - 15:32 #7
erikjacobsen << lige for at uddybe min forrige kommentar. Så vidt jeg kan se tester din kode ikke com $_COOIKE['login'] er lig $password, men min gør :) (så nemt kunne det siges)
Avatar billede jakoba Nybegynder
10. januar 2003 - 15:35 #8
det 'foretrukne' er desværre at være doven og skrive det som du startede med i spørgsmålet, det går godt tilstrækkelig ofte til at mange tror det er nok.
Avatar billede melange Nybegynder
10. januar 2003 - 15:35 #9
jakoba << vil det sige at min kode reelt ikke tester om nogle af variablerne er lig $password ?
Avatar billede melange Nybegynder
10. januar 2003 - 15:38 #10
jakoba << hmm..jeg kan godt se jeres pointe nu.

koden skal atås se således ud (næsten som erikjacobsen skrev):

if ((isset($_COOKIE['cookie_login']) || (isset($_POST['form_login'])) &&  (($_POST['form_login']== $password) || ($_COOKIE['cookie_login'] == $password))) {
Avatar billede jakoba Nybegynder
10. januar 2003 - 15:48 #11
ja. såvidt jeg kan se vil den betingelse godkende et hvilketsomhelst password bare der indtastes et.

( (  isset( $_COOKIE['cookie_login']
            )
  || isset( $_POST['form_login']
            )
  ) == $password
)

når sådan en betingelse udregnes starter man indeni de inderste parenteser
      isset( $_COOKIE['cookie_login']
            )
den bliver til true hvis den celle findes i _COOKIE arrayert og false hvis den ikke gør, det er ligesådan med den anden isset den bliver også til true eller false.
så står der: (fx)
( (  false
  || true
  ) == $password
)

false eller true giver true så nu står der:

( ( true
  ) == $password
)

php laver autokenvertering af variable og siden første led er en boolean værdi vil den også prøve at gøre andet led til en boolean værdi. konvertereingsreglen for strenge er at alt andet end en tom streng ("") giver true, så hvis der står nogetsomhelst i din variabel $password bliver det:

( true == true
)

og det er jo altid sandt.

mvh JakobA
Avatar billede jakoba Nybegynder
10. januar 2003 - 15:53 #12
den der (10/01-2003 15:38:50) ser helt korrekt ud ja.
næe der er lidt bøvl med parenteserne:

if (  (  isset($_COOKIE['cookie_login'])
        || (isset($_POST['form_login'])      <--  Fejl med '(' foran isset
      )
    && (  ($_POST['form_login']== $password)
        || ($_COOKIE['cookie_login'] == $password)
      )
  ) {
Avatar billede tomsommer Juniormester
10. januar 2003 - 16:02 #13
Den måde I opstiller de paranteser på meget grimt og uoverskueligt :)
Avatar billede jakoba Nybegynder
10. januar 2003 - 16:08 #14
Det hedder indrykning og jeg er MEGET glad for det. fidusen er at man skriver det så man kan SE hvilken slutparentes der hører til hvilken startparentes.

Det virker bedst på en fastbredde font her med e's proportionalfont skal man kende metoden for at se at slutparenteserne altid står lige under den startparentes de hører sammen med.
Avatar billede melange Nybegynder
10. januar 2003 - 16:10 #15
jakoba << jeg ved godt at der blev lidt knas med paranteserne i den 15:38:50, men har selv rettet det :)

Desuden  tror jeg lige jeg går i seng, og gemmer PHP væk til imorgen, hvor jeg (forhåbenligt) er lidt mere vågen :P

NÅ, du skal under alle omstændigheder have mange tak for hjælpen :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester