submit + redirect
Warning: Cannot modify header information - headers already sent by (output started at /var/www/inventory/index.php:11) in /var/www/inventory/index.php on line 36
Dit komt doordat header niet als eerste verzonden word naar de browser heeft google me al geleerd.
ziehier de code:
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
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
<?
include('connect.php');
?>
<html>
<head>
<link rel="stylesheet" type="text/css" href="basic.css">
</head>
<body>
<h1>Domains</h1>
<h2>List of the domains</h2>
<?
$requete = "SELECT COUNT(DISTINCT zone) FROM dns_records";
$res = mysql_query($requete);
$ligne = mysql_fetch_array($res);
echo '<p>There are ' .$ligne["COUNT(DISTINCT zone)"]. ' domains.</p>';
?>
<p>Add a new domain :</p>
<form action="index.php" method="post">
<input type="text" name="add_domain">
<input type="submit" value="Add" name="add_domains" />
</form>
<?
if ($_POST['add_domains'])
{
$add_domain=$_POST['add_domain'];
$req = "SELECT COUNT(DISTINCT zone) FROM dns_records where zone like '$add_domain'";
$res = mysql_query($req);
$ligne = mysql_fetch_array($res);
$zone=$ligne["COUNT(DISTINCT zone)"];
if ($zone != 0) { echo "<p>This domain already exists!!!</p>"; } else
{
$requete = "INSERT INTO dns_records VALUES('0','$add_domain','@','86400','SOA','','ns1.webcommercedns.be.','peter.','2','28000','2800','64800','10'),
('0','$add_domain','@','86400','NS','','ns1.webcommercedns.be.','','','','','',''),
('0','$add_domain','@','86400','NS','','ns2.webcommercedns.be.','','','','','','')";
mysql_query($requete) or die ('Erreur lors de l\'insertion');
header('Location: domain.php?domain=$add_domain');
};
...
[/code]
Kan ik dit dan op een andere manier nog doen of zien jullie een oplossing?
include('connect.php');
?>
<html>
<head>
<link rel="stylesheet" type="text/css" href="basic.css">
</head>
<body>
<h1>Domains</h1>
<h2>List of the domains</h2>
<?
$requete = "SELECT COUNT(DISTINCT zone) FROM dns_records";
$res = mysql_query($requete);
$ligne = mysql_fetch_array($res);
echo '<p>There are ' .$ligne["COUNT(DISTINCT zone)"]. ' domains.</p>';
?>
<p>Add a new domain :</p>
<form action="index.php" method="post">
<input type="text" name="add_domain">
<input type="submit" value="Add" name="add_domains" />
</form>
<?
if ($_POST['add_domains'])
{
$add_domain=$_POST['add_domain'];
$req = "SELECT COUNT(DISTINCT zone) FROM dns_records where zone like '$add_domain'";
$res = mysql_query($req);
$ligne = mysql_fetch_array($res);
$zone=$ligne["COUNT(DISTINCT zone)"];
if ($zone != 0) { echo "<p>This domain already exists!!!</p>"; } else
{
$requete = "INSERT INTO dns_records VALUES('0','$add_domain','@','86400','SOA','','ns1.webcommercedns.be.','peter.','2','28000','2800','64800','10'),
('0','$add_domain','@','86400','NS','','ns1.webcommercedns.be.','','','','','',''),
('0','$add_domain','@','86400','NS','','ns2.webcommercedns.be.','','','','','','')";
mysql_query($requete) or die ('Erreur lors de l\'insertion');
header('Location: domain.php?domain=$add_domain');
};
...
[/code]
Kan ik dit dan op een andere manier nog doen of zien jullie een oplossing?
Ps. Een beetje foutafhandeling kan geen kwaad, bovenstaande code is namelijk nog láng niet af! De basis, de foutafhandeling, ontbreekt...
header gewoon een meta refresh kunnen gebruiken.
Je zou ipv 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
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
<?
header("Refresh: 2; url=idomain.php?domain=".$add_domain);
include('connect.php');
?>
<html>
<head>
<link rel="stylesheet" type="text/css" href="basic.css">
</head>
<body>
<h1>Domains</h1>
<h2>List of the domains</h2>
<?
$requete = "SELECT COUNT(DISTINCT zone) FROM dns_records";
$res = mysql_query($requete);
$ligne = mysql_fetch_array($res);
echo '<p>There are ' .$ligne["COUNT(DISTINCT zone)"]. ' domains.</p>';
?>
<p>Add a new domain :</p>
<form action="index.php" method="post">
<input type="text" name="add_domain">
<input type="submit" value="Add" name="add_domains" />
</form>
<?
if ($_POST['add_domains'])
{
$add_domain=$_POST['add_domain'];
$req = "SELECT COUNT(DISTINCT zone) FROM dns_records where zone like '$add_domain'";
$res = mysql_query($req);
$ligne = mysql_fetch_array($res);
$zone=$ligne["COUNT(DISTINCT zone)"];
if ($zone != 0) { echo "<p>This domain already exists!!!</p>"; } else
{
$requete = "INSERT INTO dns_records VALUES('0','$add_domain','@','86400','SOA','','ns1.webcommercedns.be.','peter.','2','28000','2800','64800','10'),
('0','$add_domain','@','86400','NS','','ns1.webcommercedns.be.','','','','','',''),
('0','$add_domain','@','86400','NS','','ns2.webcommercedns.be.','','','','','','')";
mysql_query($requete) or die ('Erreur lors de l\'insertion');
};
...
?>
header("Refresh: 2; url=idomain.php?domain=".$add_domain);
include('connect.php');
?>
<html>
<head>
<link rel="stylesheet" type="text/css" href="basic.css">
</head>
<body>
<h1>Domains</h1>
<h2>List of the domains</h2>
<?
$requete = "SELECT COUNT(DISTINCT zone) FROM dns_records";
$res = mysql_query($requete);
$ligne = mysql_fetch_array($res);
echo '<p>There are ' .$ligne["COUNT(DISTINCT zone)"]. ' domains.</p>';
?>
<p>Add a new domain :</p>
<form action="index.php" method="post">
<input type="text" name="add_domain">
<input type="submit" value="Add" name="add_domains" />
</form>
<?
if ($_POST['add_domains'])
{
$add_domain=$_POST['add_domain'];
$req = "SELECT COUNT(DISTINCT zone) FROM dns_records where zone like '$add_domain'";
$res = mysql_query($req);
$ligne = mysql_fetch_array($res);
$zone=$ligne["COUNT(DISTINCT zone)"];
if ($zone != 0) { echo "<p>This domain already exists!!!</p>"; } else
{
$requete = "INSERT INTO dns_records VALUES('0','$add_domain','@','86400','SOA','','ns1.webcommercedns.be.','peter.','2','28000','2800','64800','10'),
('0','$add_domain','@','86400','NS','','ns1.webcommercedns.be.','','','','','',''),
('0','$add_domain','@','86400','NS','','ns2.webcommercedns.be.','','','','','','')";
mysql_query($requete) or die ('Erreur lors de l\'insertion');
};
...
?>
Verander de laatste regel:
naar:
Code (php)
1
echo "<script type=\"text/javascript\">window.location='domain.php?domain=$add_domain'";</script>
EDIT: Of idd bovenstaande oplossingen.
Gewijzigd op 01/01/1970 01:00:00 door Jeffrey
Je zou eventueel ook de functies ob_start en ob_flush kunnen gebruiken. Wat eigenlijk gebeurd hierbij is dat de server de output vasthoudt totdat hij klaar is (of wanneer de ob_flush wordt aangeroepen). Pas dan stuurt hij de output terug naar de client (browser), de headers zijn dan niet verzonden :-)...
Patrick Niezen
Patrick Niezen schreef op 18.02.2008 13:45:
ob is voor je vriendin, een PHP-script bloedt niet en heeft dus geen ob nodig.Hallo Jarco,
Je zou eventueel ook de functies ob_start en ob_flush kunnen gebruiken.
Je zou eventueel ook de functies ob_start en ob_flush kunnen gebruiken.
ob_flush raakt je toilet zeker verstopt van? ;)
de code is inderdaad nog niet af want het is een work in progress dus foutafhandeling enz zit er nog niet in.
Bedankt iedereen voor alle tips :D
Zonder gekheid;
nu ik zo de andere oplossingen lees, ga ik die in de toekomst proberen. Ik heb eerder altijd ob_start() en ob_flush gebruikt... ik had dan meestal wel het gevoel dat het niet nodig was (en eigenlijk zonde was van het geheugen op de server).
Patrick Niezen
Die header refresh in mijn voorbeeld werkt in principe altijd, JavaScript kan je uitschakelen, daar heb je dus niets aan!
Maar waarom zou men Javascript uitschakelen, wat is daar het voordeel van?
Zijn er uberhaupt mensen die JS uitschakelen?
Jeffrey schreef op 18.02.2008 13:58:
Om een website te hacken.Maar waarom zou men Javascript uitschakelen, wat is daar het voordeel van?
Zijn er uberhaupt mensen die JS uitschakelen?
Zijn er uberhaupt mensen die JS uitschakelen?
Vele programmeurs maken de fout dat ze vertrouwen op js, daar worden dus ook vele fouten gemaakt.
Dus als ik het goed begrijp, heeft bijvoorbeeld formulier controle met Javascript geen zin, want als je het uitschakelt, negeert hij dat en zal het formulier gewoon posten?
Dat klopt, je moet ALTIJD input van de user controleren, ga er ALTIJD van uit dat er mensen zijn die je website schade willen aanrichten - dan ben je voorbereid. Ik heb hier een link naar een artikel dat dateert uit 2005, desalniettemin is het toch erg interessant en nog steeds aan de orde.
De 7 grootste PHP security blunders op een rij:
http://www.sitepoint.com/article/php-security-blunders
Patrick Niezen
Edit: woordkeuze wat veranderd :-)
Gewijzigd op 01/01/1970 01:00:00 door Patrick Niezen
Voorheen gebruikte ik gewoon php om velden te checken, maar als er dan 1 veld niet ingevuld is, krijg ik dus een foutmelding terug, maar zijn alle velden weer leeg.
Dit had ik dan weer opgelost door alle velden in een sessie te zetten en dit in de value van desbetreffend veld te zetten, maar ik dacht dat dat niet erg efficient was en veel resources gebruikt.
Dus ik kan toch beter bij php form validatie blijven?
Code (php)
1
<input type="text" name="veldnaam" value="<?php if(isset($_POST['veldnaam'])) echo htmlentities($_POST['veldnaam']); ?>"/>
Patrick Niezen
Edit:
Ps. Bij emailvalidatie zou je waarschijnlijk het e-mailadres moeten controleren in de database, dat deze al bestaat of niet - vergeet dat niet.
Gewijzigd op 01/01/1970 01:00:00 door Patrick Niezen
Ik heb namelijk ook scripts waarbij het formulier als de afhandeling ervan een apart bestand zijn.
Dus bijv. formulier.html met als afhandeling bijv. action="processForm.php"
Jeffrey schreef op 18.02.2008 14:12:
Ok, duidelijk.
Dus als ik het goed begrijp, heeft bijvoorbeeld formulier controle met Javascript geen zin, want als je het uitschakelt, negeert hij dat en zal het formulier gewoon posten?
Dus als ik het goed begrijp, heeft bijvoorbeeld formulier controle met Javascript geen zin, want als je het uitschakelt, negeert hij dat en zal het formulier gewoon posten?
Het kan best zin hebben, je kan bijvoorbeeld een melding geven meteen met JavaScript, als dingen niet zijn ingevuld. Maar je moet nooit Alléén op javascript vertrouwen en altijd op de server de zaken nog eens langslopen.
Het voordeel van met JS controleren is dat er nog niets is gepost, maar er wel al meldingen kunnen worden gegeven. Hoe weinig ook, het scheelt wel wat in dataverkeer en ik vind het in sommige gevallen zelfs gebruiksvriendelijker.
Patrick Niezen schreef op 18.02.2008 14:39:
Daar heb je een UNIQUE-constraint voor, maar wanneer er toch al fouten zijn opgetreden kan een extra controle geen kwaad. Het is nogal lullig dat men daar dan in 2e instantie alsnog een foutmelding op krijgt.Ps. Bij emailvalidatie zou je waarschijnlijk het e-mailadres moeten controleren in de database, dat deze al bestaat of niet - vergeet dat niet.
Een SELECT-query is echter niet 100% betrouwbaar, je hebt namelijk geen flauw idee van wat er op hetzelfde moment allemaal op jouw database wordt uitgevoerd. Een UNIQUE is dus verplicht.
Robert_Deiman schreef op 18.02.2008 15:04:
Het kan best zin hebben, je kan bijvoorbeeld een melding geven meteen met JavaScript, als dingen niet zijn ingevuld. Maar je moet nooit Alléén op javascript vertrouwen en altijd op de server de zaken nog eens langslopen.
Het voordeel van met JS controleren is dat er nog niets is gepost, maar er wel al meldingen kunnen worden gegeven. Hoe weinig ook, het scheelt wel wat in dataverkeer en ik vind het in sommige gevallen zelfs gebruiksvriendelijker.
Jeffrey schreef op 18.02.2008 14:12:
Ok, duidelijk.
Dus als ik het goed begrijp, heeft bijvoorbeeld formulier controle met Javascript geen zin, want als je het uitschakelt, negeert hij dat en zal het formulier gewoon posten?
Dus als ik het goed begrijp, heeft bijvoorbeeld formulier controle met Javascript geen zin, want als je het uitschakelt, negeert hij dat en zal het formulier gewoon posten?
Het kan best zin hebben, je kan bijvoorbeeld een melding geven meteen met JavaScript, als dingen niet zijn ingevuld. Maar je moet nooit Alléén op javascript vertrouwen en altijd op de server de zaken nog eens langslopen.
Het voordeel van met JS controleren is dat er nog niets is gepost, maar er wel al meldingen kunnen worden gegeven. Hoe weinig ook, het scheelt wel wat in dataverkeer en ik vind het in sommige gevallen zelfs gebruiksvriendelijker.
Inderdaad ben ik met je eens.
In het laatste formulier die ik gemaakt heb, controleer ik live hetgeen wat ingevuld wordt nog voordat er uberhaupt gepost wordt en via een alert krijgt de gebruiker te zien welke velden incorrect zijn. Zo blijven alle correcte velden netjes ingevuld en highlight ik alle foute velden door met javascript de randen rood te schilderen.