USB webserver vs Hostnet.nl
ik ben bezig met een site voor school(dus heb nog niet echt veel verstand van php) en dacht dat het ook wel leuk was om het online te zetten. Maar op hostnet.nl krijg ik allemaal problemen... dingen als header(location:'example.nl') werken niet. Ook krijg ik als ik probeer te verbinden met een database een witte site. Terwijl dit wel op mijn USBwebserver werkt. Ligt dit aan mij of ligt dit probleem bij Hostnet(of aan de USBwebser en dus ook aan mij)?
voorbeeld :
if(isset($_SESSION["in"]))
{ bla bla bla;
include example.com ;}
else {
echo "<form name='yolo' method='POST'>
<input type='submit' name='okayinlog' value='inloggen'>
</br>";
if(isset($_POST['okayinlog']))
{ $_SESSION["in"] = 1;}
}
in mijn USBwebserver krijg ik example.com te zien op mijn website als ik op de submit button klik. Op Hostnet gebeurt dit niet... Het werkt wel als ik de code die in de else staat voor de if zet(wat ik natuurlijk niet wil).
Alsof USBwebserver de code vaak herhaalt en hostnet het maar 1 keer langsloopt. Kan iemand mij uitleggen hoe het zit?
Voor de geintresseerde: Wesselschuurman.nl (doet momenteel dus niet zoveel)
Gewijzigd op 08/03/2015 00:23:28 door Wessel Schuurman
bij onderstaande
Staat een accolade te veel, de laatste mag weg.
Verder mis ik een session_start()
Probeer ook consequent te zijn in het gebruik van enkel- en dubbelquotes
Ik zou zeggen, zet het weergeven en melden van foutmeldingen eens aan en sla eens aan het debuggen :).
Paar puntjes, haal er uit wat interessant kan zijn.
-functie header()
Om te redirecten naar een andere pagina kun je prima de header() functie gebruiken maar er zit wel een voorwaarde aan het gebruik van de header functie. Er mag namelijk nog geen enkele output gegenereerd zijn (html voor de <.php tag, echo 'iets'; etc). Dat brengt je direct bij mijn volgende punt:
- 1e PHP logica, 2e Output
Een pagina bouw je op door eerst je programma te schrijven/uitvoeren en DAARNA pas de output te genereren:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
// hier je PHP programma
$welkom = 'Goedenacht!';
$hour = date('H');
if($hour >= 6)
$welkom = 'Goedemorgen!';
if($hour >= 12)
$welkom = 'Goedemiddag!';
if($hour >= 18)
$welkom = 'Goedenavond!';
?> <!-- hier je output -->
<!DOCTYPE html>
<html>
<head>
<title>PHP Logica</title>
<meta charset="UTF-8">
</head>
<body>
<h1><?php echo $welkom; ?></h1>
</body>
</html>
// hier je PHP programma
$welkom = 'Goedenacht!';
$hour = date('H');
if($hour >= 6)
$welkom = 'Goedemorgen!';
if($hour >= 12)
$welkom = 'Goedemiddag!';
if($hour >= 18)
$welkom = 'Goedenavond!';
?> <!-- hier je output -->
<!DOCTYPE html>
<html>
<head>
<title>PHP Logica</title>
<meta charset="UTF-8">
</head>
<body>
<h1><?php echo $welkom; ?></h1>
</body>
</html>
- error reporting
In php ini kan de serverbeheerder instellen of er foutmeldingen getoond moeten worden. Bij veel providers staat deze optie uit omdat zij er van uitgaan dat een website die bij hun gehost wordt uitontwikkeld is. Echter moet je deze dus wel aanzetten als je bijvoorbeeld witte pagina's krijgt of als je wilt debuggen. Gelukkig kun je deze instelling overrulen door aan het begin van je code het volgende te zetten:
-include
de include functie is niet bedoeld om een link naar een andere website te bewerkstelligen. include gebruik je om je php applicatie onder te verdelen in meerdere bestanden. Met een include komt alles wat in het in te voegen bestand staat op de plek waar de include regel staat.
Deze twee bestanden ...
is hetzelfde als:
Gewijzigd op 08/03/2015 01:54:42 door Frank Nietbelangrijk
Frank Nietbelangrijk op 08/03/2015 01:46:39:
Hallo Wessel,
Paar puntjes, haal er uit wat interessant kan zijn.
-functie header()
Om te redirecten naar een andere pagina kun je prima de header() functie gebruiken maar er zit wel een voorwaarde aan het gebruik van de header functie. Er mag namelijk nog geen enkele output gegenereerd zijn (html voor de <.php tag, echo 'iets'; etc). Dat brengt je direct bij mijn volgende punt:
Paar puntjes, haal er uit wat interessant kan zijn.
-functie header()
Om te redirecten naar een andere pagina kun je prima de header() functie gebruiken maar er zit wel een voorwaarde aan het gebruik van de header functie. Er mag namelijk nog geen enkele output gegenereerd zijn (html voor de <.php tag, echo 'iets'; etc). Dat brengt je direct bij mijn volgende punt:
Wat is dan logisch om te doen om in te loggen. naar een hele andere pagina sturen zou ik zeggen maar hoe dan?
Frank Nietbelangrijk op 08/03/2015 01:46:39:
- 1e PHP logica, 2e Output
Een pagina bouw je op door eerst je programma te schrijven/uitvoeren en DAARNA pas de output te genereren:
- 1e PHP logica, 2e Output
Een pagina bouw je op door eerst je programma te schrijven/uitvoeren en DAARNA pas de output te genereren:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
// hier je PHP programma
$welkom = 'Goedenacht!';
$hour = date('H');
if($hour >= 6)
$welkom = 'Goedemorgen!';
if($hour >= 12)
$welkom = 'Goedemiddag!';
if($hour >= 18)
$welkom = 'Goedenavond!';
?> <!-- hier je output -->
<!DOCTYPE html>
<html>
<head>
<title>PHP Logica</title>
<meta charset="UTF-8">
</head>
<body>
<h1><?php echo $welkom; ?></h1>
</body>
</html>
// hier je PHP programma
$welkom = 'Goedenacht!';
$hour = date('H');
if($hour >= 6)
$welkom = 'Goedemorgen!';
if($hour >= 12)
$welkom = 'Goedemiddag!';
if($hour >= 18)
$welkom = 'Goedenavond!';
?> <!-- hier je output -->
<!DOCTYPE html>
<html>
<head>
<title>PHP Logica</title>
<meta charset="UTF-8">
</head>
<body>
<h1><?php echo $welkom; ?></h1>
</body>
</html>
En mijn leraar informatica maar blijven volhouden dat het hele internet gek is want PHP code moet altijd in de body.. Maar bedankt! heb ik echt wat aan!
Frank Nietbelangrijk op 08/03/2015 01:46:39:
- error reporting
In php ini kan de serverbeheerder instellen of er foutmeldingen getoond moeten worden. Bij veel providers staat deze optie uit omdat zij er van uitgaan dat een website die bij hun gehost wordt uitontwikkeld is. Echter moet je deze dus wel aanzetten als je bijvoorbeeld witte pagina's krijgt of als je wilt debuggen. Gelukkig kun je deze instelling overrulen door aan het begin van je code het volgende te zetten:
In php ini kan de serverbeheerder instellen of er foutmeldingen getoond moeten worden. Bij veel providers staat deze optie uit omdat zij er van uitgaan dat een website die bij hun gehost wordt uitontwikkeld is. Echter moet je deze dus wel aanzetten als je bijvoorbeeld witte pagina's krijgt of als je wilt debuggen. Gelukkig kun je deze instelling overrulen door aan het begin van je code het volgende te zetten:
Dit kan ik ook heel goed gebruiken. Kreeg ik inderdaad vaak!
Frank Nietbelangrijk op 08/03/2015 01:46:39:
-include
de include functie is niet bedoeld om een link naar een andere website te bewerkstelligen. include gebruik je om je php applicatie onder te verdelen in meerdere bestanden. Met een include komt alles wat in het in te voegen bestand staat op de plek waar de include regel staat.
Deze twee bestanden ...
is hetzelfde als:
de include functie is niet bedoeld om een link naar een andere website te bewerkstelligen. include gebruik je om je php applicatie onder te verdelen in meerdere bestanden. Met een include komt alles wat in het in te voegen bestand staat op de plek waar de include regel staat.
Deze twee bestanden ...
is hetzelfde als:
Zoals ik hiet boven zeg. Wat is dan slim om te doen als je wilt inloggen enzo?
Frank Nietbelangrijk op 08/03/2015 01:46:39:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<?php
// initialisatie
$ingelogd = FALSE;
$bericht = 'U bent niet ingelogd.';
// start sessie
session_start();
// als het formulier verstuurd is
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// als er op de login knop gedrukt is
if($_POST['submit'] == 'login')
{
// sla een variabele 'ingelogd' op in de sessie met de waarde TRUE
// sla een variabele 'naam' op in de sessie met de waarde uit het formulier
$_SESSION['ingelogd'] = TRUE;
$_SESSION['naam'] = $_POST['naam'];
// anders is er op de logout knop gedrukt
} else {
// sla een variabele 'ingelogd' op in de sessie met de waarde FALSE
// verwijder de variabele 'naam' uit de sessie
$_SESSION['ingelogd'] = FALSE;
unset( $_SESSION['naam']);
}
}
// (einde afhandeling formulier)
// kijk of de variabele 'ingelogd' bestaat in de sessie met de functie isset()
if(isset($_SESSION['ingelogd'])) {
// lees de variabele uit
$ingelogd = $_SESSION['ingelogd'];
}
if($ingelogd === TRUE)
$bericht = 'U bent ingelogd als ' . $_SESSION['naam'];
?>
<!DOCTYPE html>
<html>
<head>
<title>Sessions</title>
<meta charset="UTF-8">
</head>
<body>
<h3><?php echo $bericht; ?></h3>
<form action="" method="post">
<?php if($ingelogd === TRUE) { ?>
<!-- indien ingelogd -->
<button type="submit" name="submit" value="logout">Logout</button>
<?php } else { ?>
<!-- indien nog niet ingelogd -->
<label for="naam">Uw Naam?</label>
<input type="text" id="naam" name="naam" />
<button type="submit" name="submit" value="login">Login</button>
<?php } ?>
</form>
<!-- voor leerdoeleinden -->
<h3>Dit staat er in de sessie</h3>
<pre>
<?php print_r($_SESSION); ?>
</pre>
</body>
</html>
// initialisatie
$ingelogd = FALSE;
$bericht = 'U bent niet ingelogd.';
// start sessie
session_start();
// als het formulier verstuurd is
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// als er op de login knop gedrukt is
if($_POST['submit'] == 'login')
{
// sla een variabele 'ingelogd' op in de sessie met de waarde TRUE
// sla een variabele 'naam' op in de sessie met de waarde uit het formulier
$_SESSION['ingelogd'] = TRUE;
$_SESSION['naam'] = $_POST['naam'];
// anders is er op de logout knop gedrukt
} else {
// sla een variabele 'ingelogd' op in de sessie met de waarde FALSE
// verwijder de variabele 'naam' uit de sessie
$_SESSION['ingelogd'] = FALSE;
unset( $_SESSION['naam']);
}
}
// (einde afhandeling formulier)
// kijk of de variabele 'ingelogd' bestaat in de sessie met de functie isset()
if(isset($_SESSION['ingelogd'])) {
// lees de variabele uit
$ingelogd = $_SESSION['ingelogd'];
}
if($ingelogd === TRUE)
$bericht = 'U bent ingelogd als ' . $_SESSION['naam'];
?>
<!DOCTYPE html>
<html>
<head>
<title>Sessions</title>
<meta charset="UTF-8">
</head>
<body>
<h3><?php echo $bericht; ?></h3>
<form action="" method="post">
<?php if($ingelogd === TRUE) { ?>
<!-- indien ingelogd -->
<button type="submit" name="submit" value="logout">Logout</button>
<?php } else { ?>
<!-- indien nog niet ingelogd -->
<label for="naam">Uw Naam?</label>
<input type="text" id="naam" name="naam" />
<button type="submit" name="submit" value="login">Login</button>
<?php } ?>
</form>
<!-- voor leerdoeleinden -->
<h3>Dit staat er in de sessie</h3>
<pre>
<?php print_r($_SESSION); ?>
</pre>
</body>
</html>
if(isset($_SESSION['ingelogd'])) {
// lees de variabele uit
$ingelogd = $_SESSION['ingelogd'];
Toevoeging op 08/03/2015 16:43:02:
nog iets, in een php bestand hoeft dus helemaal geen html te staan inprincipe? als je het gebruikt met include bijv.
Het is (zoals met alles) een tradeoff.
Persoonlijk zou ik zo min mogelijk "aliassen" / dummy-/hulp-variabelen introduceren om je code transparant te houden.
Maar soms kan het handig zijn om een shorthand te introduceren, die beter omschrijft wat het doet of waar je het voor gebruikt. Als ik het op een gegeven moment irritant vind worden om een var helemaal uit te schrijven omdat ik deze vaak gebruik en/of de naam lang of complex is introduceer ik meestal een alias.
Zo ook met stukken code die zich herhalen: als je vaker dezelfde code-passages aan het schrijven bent is het wellicht tijd om een (hulp)functie te introduceren.
En ook (wederom persoonlijke voorkeur, wellicht) zou ik niet zo gauw expliciet op de boolean TRUE controleren, maar enkel (als ik al controleer) op FALSE, om uit te sluiten dat er dingen echt fout zijn.
false is namelijk wat makkelijker te lezen dan een uitroepteken (!).
EDIT2: als je een variabele introduceert met als specifiek doel om als waarde true/false te hebben, dan is het niet echt nodig hier vervolgens expliciet op te controleren. Ook kun je de "ja/nee" waarde laten blijken uit de naam, zo zou je bijvoorbeeld de naam voor het ingelogd zijn kunnen veranderen naar $isIngelogd - de naamgeving geeft al min of meer aan dat de waarde een boolean is. Dan is het niet nodig om nog eens expliciet te controleren op TRUE of FALSE.
Gewijzigd op 08/03/2015 17:00:29 door Thomas van den Heuvel
- Hetgeen je wilt laten zien aan de gebruiker kan afhangen van je php logica. Andersom niet.
- Sommige zaken zoals een redirect of het wijzigen van de headers werken alleen naar behoren als er nog geen output geweest is
- Je code is veel maar dan ook veel beter leesbaar
- Je raakt niet in de knoop. Halverwege een output erachter komen dat er eigenlijk iets anders moet gebeuren etc. (Denk aan gaan rijden in de auto en na een kwartier rijden denk je pas van verrek ik hoef helemaal niet deze kant op want ik wil namelijk de andere kant op. Niet logisch toch? :p )
Grotere systemen gebruiken een aparte view. De view is dan de output of HTML. De logica staat dan in een Controller. In die Controller kun je tevens nog bepalen welke view er geladen wordt. Je kunt dan bijvoorbeeld een view hebben voor ingelogde gebruikers en een view voor niet ingelogde gebruikers. Je raakt dan dat lelijke kwijt tussen je HTML.
Inderdaad kun je de code/logica en HTML/view scheiden van elkaar en Met include kun je die weer invoegen @runtime.
Gewijzigd op 08/03/2015 17:05:06 door Frank Nietbelangrijk
ik ga denk ik maar volledig opnieuw beginnen. nieuwe structuur en gewoon de grote dele kopieren maar als je met 0 php verstand aan een website begint is er oop het eind niks meer van te snappen:P
Ja goed. Als je de eerste keer gaat skiën dan lig je meer in de sneeuw dan je op de latten staat en met PHP is dat ook gewoon zo. Geeft niks, je bent leergierig en je bijt je er in vast. Dat is voldoende om het onder de knie te krijgen.
Daarna kun je gaan denken over sneller/beter/technisch geavanceerder.
er komen de komende 2 weken vast meer vragen hier(moet over 2 weken me opdracht inleverne:)). want jullie geven prima antwoord(helden:D ). Ik zal ook wel mijn website (wesselschuurman.nl) showen dan.
Is goed Wessel, veel succes en tot gauw.
ik zit nu een beetje na te denken. Is het nou slim om alles op 1 pagina te doen of op meerdere pagina's(en gebruik maken van $_SESSION )
Leg eens uit wat je nu wilt maken?
Als je je mail niet wil geven valideer ik het account wel voor je.