Avatar billede dr.truti Nybegynder
02. juli 2003 - 16:04 Der er 25 kommentarer og
1 løsning

If løkke problem

Hvorfor får jeg fejl på denn lille kode hvis $center er noget andet end links.php eller books.php istædet for at lave fejl skulle koden i stædet vise oops.php!!

<?php
$center = "walla";

if ($center)
{
if ($center == "links.php" || "books.php")
    {
    include $center;
    }
    else
    {
    include "oops.php";
    }
}
else
{
include "main.php";
}
?>
Avatar billede ohmish Nybegynder
02. juli 2003 - 16:13 #1
jeg har lavet en nyttig include ting, så kun "lovlige" sider vises:

<?php
$s = $_GET['s'];
$side = array (
"home" => "home.php",
"bio" => "bio.php",
"calendar" => "calendar.php",
"gallery" => "gallery.php",
"guestbook" => "guestbook.php",
"contact" => "contact.php",
"error" => "error.php");
$s = $side[$s];
if ($s) { include ($s); } else { include ("error.php"); }
?>

nu kan du kalde siden med f.eks index.php?s=calendar
Avatar billede tipsen Nybegynder
02. juli 2003 - 16:13 #2
<?php
$center = "walla";

if ($center) {
    if ($center == 'links.php' || $center == 'books.php') {
        include $center;
    }
    else {
        include 'oops.php';
    }
}
else {
    include 'main.php';
}
?>
Avatar billede ohmish Nybegynder
02. juli 2003 - 16:30 #3
helt i orden.. men du får nok brug for min løsning senere hen, når du har mange sider. :)
Avatar billede schaefner Juniormester
02. juli 2003 - 16:33 #4
Du kan også prøve at kigge på:
www.disneyzone.dk/include.zip (www.disneyzone.dk/include/)

mvh. Jesper Sørensen
Avatar billede tipsen Nybegynder
02. juli 2003 - 18:37 #5
ohmish: En optimering af din kode, så den kører uden fejl/warnings/notices:

<?php
$s = isset($_GET['s']) ? $_GET['s'] : 'error';
$side = array (
    'home' => 'home.php',
    'bio' => 'bio.php',
    'calendar' => 'calendar.php',
    'gallery' => 'gallery.php',
    'guestbook' => 'guestbook.php',
    'contact' => 'contact.php',
    'error' => 'error.php'
);
if (array_key_exists($s, $side) {
    include ($side[$s]);
} else {
    include ('error.php');
}
?>
Avatar billede ohmish Nybegynder
02. juli 2003 - 19:17 #6
tipsen> jo tak (hov, det var da en helt fræk variation du hev frem der).

men det virkede ellers upåklageligt her.. hvis siden der forsøges kaldt ikke findes i arrayet, er $s jo lig med false.
Avatar billede tipsen Nybegynder
02. juli 2003 - 19:41 #7
ohmish: Jeg har sat php op til at rapportere alle fejl, warnings og notices og dér fik jeg nogle røde beskeder :-)

fejl1: Hvis $_GET['s'] ikke findes giver tildelingen fejl
fejl2: Hvis nøgle $s ikke findes i $side giver nr. 2 tildeling fejl
fejl3: if($s) kan give uventede resultater, hvis $s indeholder en værdi der evaluerer til "false"
detalje1: Sålænge der ikke er variable der skal parses er ' hurtigere end "

Det var de ting der var "vage" i den første udgave!
Avatar billede ohmish Nybegynder
02. juli 2003 - 23:56 #8
tipsen> der manglede lige et ) efter
array_key_exists($s, $side)

jeg kan ikke helt se nytten i at rette det til så "fejl" undgåes..
if (!$s) gir samme resultat som if (array_key_exists($s, $side))
samme princip bruges jo ved mysql queries: if (mysql_query($noget))

men forklar gerne :)
Avatar billede ohmish Nybegynder
02. juli 2003 - 23:57 #9
eller:

if ($side[$s]) {
    include ($side[$s]); }
else {
include ('error.php'); }

burde række.
Avatar billede tipsen Nybegynder
03. juli 2003 - 00:10 #10
som sagt - det giver ikke samme resultat hos mig - der giver din kode en masse fejl fordi jeg har et andet fejlrapporteringsniveau! (Den manglende ')' havde jeg overset - sådan går det når ens primære php-editor er en kommentar-boks på eksperten.dk)

Du kan godt argumentere for at hvis koden fungerer på trods af en masse notices og warnings så er det fint - men for mig er det bare tegn på at problemstillingen ikke er tænkt ordentligt igennem og man har et stort fejlpotentiale ved senere opdateringer af php, mysql osv. Hvis koden den er 100% fejlfri skal der ske markante ændringer til serveropsætning inden et script hopper i havet!

Et godt eksempel er da php fornyligt besluttede at overgå til "register_globals = off" - der var rama-skrig på nettet fordi en masse folk ikke havde taget højde for dette og bare havde kodet på den "nemme" måde - jeg fik ikke en eneste fejl på mit website i forbindelse med at php blev opgraderet!

Et andet eksempel er når folk de kommer med et script der skal køre på en anden server og det lige pludselig ikke fungerer på grund af en eller anden lille ændring i server-opsætningen. Hvis det er en indstilling der kan ændres fra scriptet vha. ini_set(), hvorfor har man så ikke bare gjort det, så scriptet så vidt muligt var uafhængigt af server-opsætningen?

Jeg har mange andre eksempler på hvorfor man bør kode "pænt", men jeg tror du fanger ideen fra det ovenstående - problemet er jo så, at det tager længere tid - men jeg tror du får den tid igen ved senere lejlighed - både grundet færre fejlrettelser og bedre forståelse af php!
Avatar billede tipsen Nybegynder
03. juli 2003 - 00:11 #11
Årsagen til at jeg koder på den måde er så fordi jeg er lært op med ansi C og C++, som overhovedet ikke er så tilgivende som PHP overfor dårlig kodestil - så dér har jeg vænnet mig til det!
Avatar billede schaefner Juniormester
03. juli 2003 - 00:41 #12
en lille personlig klassiker må vidst være:

if ($_GET['foo'] == 'etellerandet') {

den vil/kan give en warning hvis den ikke er sat. Det er ikke nok at tjekke om den er lig med noget, der skal også tjekkes om den er sat.

if (isset($_GET['foo']) && $_GET['foo'] == 'etellerandet') {
Avatar billede tipsen Nybegynder
03. juli 2003 - 00:50 #13
schaefner: Rart med en "lidelsesfælle" ;-)
Avatar billede ohmish Nybegynder
03. juli 2003 - 00:53 #14
hmm.. jeg sidder med et kæmpeindlæg i hånden, og eksperten smider mig til respons.php uden at poste det?
Avatar billede schaefner Juniormester
03. juli 2003 - 00:58 #15
tipsen >> Hvad er i grunden de præcise indstillinger for at få den til at spytte alle fejl ud?
Avatar billede tipsen Nybegynder
03. juli 2003 - 01:00 #16
ini_set('error_reporting',E_ALL);
Avatar billede ohmish Nybegynder
03. juli 2003 - 01:06 #17
mystisk, og det er ikke første gang det sker..

når jeg poster et lille indlæg går det fint. prøver jeg med et større (mindre end de fleste scripts her) ryger jeg direkte til respons.php "could not find server"
Avatar billede ohmish Nybegynder
03. juli 2003 - 01:13 #18
hørt! man skal da så vidt muligt kode på den bedst opbyggede (+ overskuelige) og korrekte måde. :)

jeg har fået den vane bla. at tilføje et par skærpende linier i .htaccess, hvis udbyderen ikke har konfigureret serveren optimalt.
det kunne være:
php_value register_globals off
php_value magic_quotes_gpc on
php_value session.use_trans_sid 1

mange koder fejlagtigt efter den faste serveropsætning.

derudover prøver jeg så vidt muligt også at kode *fremtidssikret*, og teste på forskellige servere, konfigurationer, versioner m.m.
Avatar billede ohmish Nybegynder
03. juli 2003 - 01:13 #19
Man kunne sige: *Lær den mest perfektionistisk korrekte kodemåde fra starten af du!*.. Men for mange ikke-nørder er den 100% versions-sikrede kodemåde ret kompleks (læs: besværlig/kompromitterende) at tilgå..
Man skal kravle før man kan drikke øl. Det kræver tålmodighed at programmere over hobbyplanet. Og jeg har den mening, at hvis det virker og korrektheden er over gennemsnittet, så er det helt fint til en hobbykoder der alligevel får svært ved at forstå et script opbygget på den heeeelt rigtige måde. hov, klokken er mange og jeg vrøvler derudaf.
Avatar billede schaefner Juniormester
03. juli 2003 - 01:18 #20
Hvis man nu skulle lave noget for penge, så vil jeg da mene at det skal virke lige meget hvilke sjove/underlige/gode indstillinger den pågældende server kunne have, men ellers kan jeg da godt følge dig, men jeg synes dog alligevel man skal lave et korrekt eksempel selvom det er til en nybegynder, så lærer de det fra starten :)
Avatar billede tipsen Nybegynder
03. juli 2003 - 02:08 #21
ohmish (03/07-2003 01:06:20): Ctrl+A, Ctrl+C, Tab, Return - fast procedure når indlægget er færdigskrevet!
Avatar billede tipsen Nybegynder
03. juli 2003 - 02:11 #22
Jeg er til dels enig med ohmish - forstået på den måde at jeg også tit forenkler svarene her på eksperten til gavn (forhåbentlig) for spørgeren - hvor jeg nok selv havde løst samme problemstilling væsentlig mere kompliceret men forhåbentlig også bedre! (Det betyder så også at det normalt tager lang tid når jeg koder, hvis der er nogle løsninger jeg ikke er tilfredse med - selvom de måske umiddelbart fungerer!)
Avatar billede ohmish Nybegynder
03. juli 2003 - 02:26 #23
hehe tipsen.. ja, jeg kopierer da også næsten altid teksten inden jeg trykker på den sjove knap forneden. Det hersens indernæt er uberegneligt. Man sku næsten tro Microsoft stadig var kongen! eller ææh det er de vist fejlagtigt stadig :)
Avatar billede tipsen Nybegynder
03. juli 2003 - 13:00 #24
Tror mere det er Ekspertens skyld når lige præcis det, du omtaler, sker...
Avatar billede ohmish Nybegynder
03. juli 2003 - 14:00 #25
ja. og det sker konstant i øjeblikket.. hvorfooor.. har de forbudt mig at skrive for lange indlæg eller hva fa'en. det sker nemlig ikke når jeg forkorter det indlæg jeg vil poste. lige meget hvad, er det belastende.
Avatar billede tipsen Nybegynder
03. juli 2003 - 14:28 #26
Jeg har tidligere oplevet det, men kun på tidspunkter, hvor deres servere også har været hårdt belastede og det virker meget stabilt for tiden synes jeg...
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