submit + redirect

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Jarco voorhees

jarco voorhees

18/02/2008 13:39:00
Quote Anchor link
Ik heb het volgende probleem:

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?
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?
 
PHP hulp

PHP hulp

12/01/2025 06:27:55
 
Frank -

Frank -

18/02/2008 13:42:00
Quote Anchor link
Waarom begin je op regel 4 met <html> wanneer je weet dat je verderop in je code wellicht nog een header() wilt geven? Ga eerst de logica afhandelen en dan als allerlaatste nog even de boel op het scherm zetten. Mocht dat nodig zijn.

Ps. Een beetje foutafhandeling kan geen kwaad, bovenstaande code is namelijk nog láng niet af! De basis, de foutafhandeling, ontbreekt...
 
Erik Rijk

Erik Rijk

18/02/2008 13:42:00
Quote Anchor link
Je zou ipv header gewoon een meta refresh kunnen gebruiken.
 
Robert Deiman

Robert Deiman

18/02/2008 13:43:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?
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');

        };

...

?>
 
Jeffrey

Jeffrey

18/02/2008 13:43:00
Quote Anchor link
Jazeker,

Verander de laatste regel:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
header('Location: domain.php?domain=$add_domain');


naar:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
 
Patrick Niezen

Patrick Niezen

18/02/2008 13:45:00
Quote Anchor link
Hallo Jarco,

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
 
Frank -

Frank -

18/02/2008 13:47:00
Quote Anchor link
Patrick Niezen schreef op 18.02.2008 13:45:
Hallo Jarco,

Je zou eventueel ook de functies ob_start en ob_flush kunnen gebruiken.
ob is voor je vriendin, een PHP-script bloedt niet en heeft dus geen ob nodig.
 
Jeffrey

Jeffrey

18/02/2008 13:49:00
Quote Anchor link
Haha Frank,

ob_flush raakt je toilet zeker verstopt van? ;)
 
Jarco voorhees

jarco voorhees

18/02/2008 13:50:00
Quote Anchor link
Ok het is gelukt met het javascriptje :)

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
 
Patrick Niezen

Patrick Niezen

18/02/2008 13:50:00
Quote Anchor link
Hahaha xD die houden wij er in

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
 
Robert Deiman

Robert Deiman

18/02/2008 13:55:00
Quote Anchor link
@Jarco

Die header refresh in mijn voorbeeld werkt in principe altijd, JavaScript kan je uitschakelen, daar heb je dus niets aan!
 
Jeffrey

Jeffrey

18/02/2008 13:58:00
Quote Anchor link
Dat is inderdaad waar en dat hoor ik van meerdere mensen...

Maar waarom zou men Javascript uitschakelen, wat is daar het voordeel van?
Zijn er uberhaupt mensen die JS uitschakelen?
 
Frank -

Frank -

18/02/2008 14:04:00
Quote Anchor link
Jeffrey schreef op 18.02.2008 13:58:
Maar waarom zou men Javascript uitschakelen, wat is daar het voordeel van?
Zijn er uberhaupt mensen die JS uitschakelen?
Om een website te hacken.

Vele programmeurs maken de fout dat ze vertrouwen op js, daar worden dus ook vele fouten gemaakt.
 
Jeffrey

Jeffrey

18/02/2008 14:12:00
Quote Anchor link
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?
 
Patrick Niezen

Patrick Niezen

18/02/2008 14:23:00
Quote Anchor link
Jeffrey,

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
 
Jeffrey

Jeffrey

18/02/2008 14:33:00
Quote Anchor link
Ok, handig om te weten, want ik heb wat formuliertjes die ik met Javascript controleer op lege velden en emailvalidatie e.d.

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?
 
Patrick Niezen

Patrick Niezen

18/02/2008 14:39:00
Quote Anchor link
Je kunt ook en Javascript doen, en PHP :-) Daarnaast hoeft je niet de waarde van een POST-request in een sessie te stoppen om vervolgens weer in te vullen als value in input-elementen. Je kunt ook meteen de POST-waarden invullen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
 
Jeffrey

Jeffrey

18/02/2008 14:48:00
Quote Anchor link
Om direct de $_POST in te voeren, is het wel noodzakelijk dat zowel het formulier als in één bestand staan.

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"
 
Robert Deiman

Robert Deiman

18/02/2008 15:04:00
Quote Anchor link
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?

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.
 
Frank -

Frank -

18/02/2008 15:08:00
Quote Anchor link
Patrick Niezen schreef op 18.02.2008 14:39:
Ps. Bij emailvalidatie zou je waarschijnlijk het e-mailadres moeten controleren in de database, dat deze al bestaat of niet - vergeet dat niet.
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.

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.
 
Jeffrey

Jeffrey

18/02/2008 15:12:00
Quote Anchor link
Robert_Deiman schreef op 18.02.2008 15:04:
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?

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.
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.