28 berichten aan het bekijken - 1 tot 28 (van in totaal 28)
  • Q:
    Bijdrager
    Howl

    PHP Beginner

    Hallo,

    Ik ben niet zo lang geleden begonnen met het leren van PHP:)
    Ik heb hier een oefening waar ik een cookie moet maken die gedurende 30dagen zal blijven bestaan.

    Alles is klaar en duidelijk voor mij maar wanneer ik mijn scriptje uitvoer krijg ik dit als foutmelding:

    Warning: Cannot modify header information – headers already sent by (output started at /Applications/MAMP/htdocs/my_projects/first_test_project/cookie1.php:11) in /Applications/MAMP/htdocs/my_projects/first_test_project/cookie1.php on line 15

    mijn php code:

    [code:1:ce0fef338c]$naam = $_POST["naam"] ? $_POST["naam"] : $_COOKIE["cookienaam"];
    if(isset($naam)){
    setcookie("cookienaam", $naam, time()+60*60*24*30);
    echo "Welkom ", $naam;
    }
    else {
    ?>

    <form method="post" action="cookie1.php">
    Hoe heet je? &nbsp;
    <input type="text" name="naam">
    <input type="submit" name="verzenden" value="Verzend">
    </form>

    <?php
    }
    ?>[/code:1:ce0fef338c]

    Doe ik iets verkeerd?

    Bijdrager
    J-R0eN

    [code:1:fc427d6740]ob_start();[/code:1:fc427d6740] Dit toevoegen helemaal boven aan je pagina. Als het goed is moet het dan werken..

    Bijdrager
    Howl

    Ik heb het bovenaan in de php code geplaatst maar het werkt niet:(
    krijg dit nu als error:

    [code:1:396cae42ff]
    Warning: session_start() [function.session-start]: Cannot send session cookie – headers already sent by (output started at /Applications/MAMP/htdocs/my_projects/first_test_project/sessie2.php:11) in /Applications/MAMP/htdocs/my_projects/first_test_project/sessie2.php on line 14

    Warning: session_start() [function.session-start]: Cannot send session cache limiter – headers already sent (output started at /Applications/MAMP/htdocs/my_projects/first_test_project/sessie2.php:11) in /Applications/MAMP/htdocs/my_projects/first_test_project/sessie2.php on line 14[/code:1:396cae42ff]

    Het lijkt wel dat hij steeds opnieuw de gegevens, ik denk dat hij in een loop vast zit.

    Bijdrager
    tjetta

    Is dit de hele code? En welke regel is regel 11/15? Als je de foutmelding goed leest zie je wat er fout is. Hij wil de header info bewerken, maar dat gaat niet, omdat de headers al verzonden zijn. De headers worden verzonden op het moment dat het script iets print.

    Probeer dus even na te gaan of er al iets geprint wordt voordat je de headers wilt bewerken. Misschien dat je <html> en <head> tag etc al geprint zijn?

    Bijdrager
    Howl

    dit is de gehele code, in de header zelf plaats ik totaal niets manueel:

    [code:1:04e7c928ac]<html>

    <head>

    <title></title>

    </head>

    <body>

    <?php

    $naam = $_POST["naam"] ? $_POST["naam"] : $_COOKIE["cookienaam"];
    if($naam){
    setcookie("cookienaam", $naam, time()+60*60*24*30);
    echo "Welkom ", $naam;
    }
    else {
    ?>

    <form method="post" action="cookie1.php">
    Hoe heet je? &nbsp;
    <input type="text" name="naam">
    <input type="submit" name="verzenden" value="Verzend">
    </form>

    <?php
    }
    ?>

    </body>

    </html>[/code:1:04e7c928ac]

    Kzit wat vast daar :|

    Bijdrager
    me.com

    Probeer dit eens?:)

    [code:1:24ccb592d5]<html>
    <head>
    <title></title>
    </head>

    <body>

    <?php

    $naam = $_POST["naam"] ? $_POST["naam"] : $_COOKIE["cookienaam"];
    if(isset($naam)) {
    setcookie("cookienaam", $naam, time()+60*60*24*30);
    echo "Welkom ", $naam;
    } else {
    ?>
    <form method="post" action="<?=$_SERVER[’REQUEST_URI’]?>">
    Hoe heet je? &nbsp;
    <input type="text" name="naam">
    <input type="submit" name="verzenden" value="Verzend">
    </form>

    <?php
    }
    ?>
    </body>

    </html>[/code:1:24ccb592d5]

    Bijdrager
    Howl

    werkt ook niet :cry:

    Bijdrager
    me.com

    Vreemd, hier namelijk wel. Reset je browser eens zodat alle cookies geleegd zijn en probeer het dan nog eens…

    Bijdrager
    tjetta
    ”Howl”

    dit is de gehele code, in de header zelf plaats ik totaal niets manueel:

    Kzit wat vast daar :|

    Dat is niet de header dit ik bedoel. Het gaat niet om de <head> sectie van HTML, maar de HTTP-headers die de server verstuurt. De headers worden al verstuurd na je eerste regel code (omdat je daar <html> print), dus als je iets aan de headers wilt veranderen, zul je dat moeten doen vóórdat je <html> print.

    En om je nog even op weg te helpen: een cookie wordt gedefinieerd doordat de server in de header (*hint hint*) een ‘signaaltje’ meestuurt. Met andere woorden: je moet je cookie definieren voordat de headers verstuurd worden, met nog andere woorden: je moet je cookie definieren voordat je script iets anders print.

    Ik ga de code niet bewerken en hier plakken, je leert er een hoop meer van als je zelf de logica hierachter begrijpt. Ik hoop dat het duidelijk is wat ik hierboven bedoel:)

    Bijdrager
    Zeekomkommer

    Wat de foutmelding zegt is dat de headers al verzonden zijn. Probeer de PHP code om de cookie te zetten helemaal bovenaan je code te zetten. Dus nog voor <html>.

    Inactief
    Anoniem

    Die melding krijg je wanneer er voor dat je jouw header verzend al iets geoutput word

    Bijdrager
    Howl

    ooooh OK!

    nu werkt het ja:)
    hierover had staat er geen uitleg over in het boek dat ik had gekocht :o

    bedankt:)

    Bijdrager
    tjetta

    Fijn:)

    Het is (qua opbouw van het script) altijd verstandiger om eerst dit soort basistaken uit te voeren (het checken van een geldige sessie, het wijzigen van gegevens in de database, etc), zodat je op basis van dat resultaat de gebruiker kunt doorsturen naar een andere pagina, de layout van de pagina kunt veranderen, een extra script/css in de <head>-sectie kunt plaatsten etc etc. Maar wanneer je wat langer met PHP bezig bent, kom je vanzelf bepaalde problemen tegen die om een goede oplossing schreeuwen. Al doende leer je een hele hoop!:)

    Bijdrager
    cmug

    Tip: heb altijd veel tips kunnen vinden op phphulp.nl.

    Bijdrager
    Howl

    Hoi,

    ik heb een vraagje, ik ben hier een testje aan het maken waar dat iemand de mogelijkheid heeft om zich “in te schrijven” op een website.
    Hij geeft gewoon zijn email adres in en dit wordt dan via mijn scriptje in een txt file geplaatst.

    Dit werkt wel allemaal goed maar ik merk op als er meer dan 1 mail adressen ingevoegd worden, dat deze niet “verdeeld” zijn, ze zijn namelijk allemaal aan mekaar geplakt zonder spaties :?

    mijn script die de gegevens in de file wegschrijft:

    [code:1:c7780e65ef]$bestandsnaam = "mailadressen.txt";
    $filehandle = fopen("$bestandsnaam", "a");
    fwrite($filehandle, $_POST["mailadres"]);
    fclose($filehandle);
    echo "Bedankt, u bent aangemeld op ". $_POST["mailadres"]. "<br />";[/code:1:c7780e65ef]

    Ik zou dus ergens moeten kunnen bijzetten dat hij voor elke invoer een nieuwe lijn neemt/maakt, maar weet niet welke code hiervoor gebruikt moet worden en op de site phphulp.nl vind ik niet zo direct iets :?

    Weet iemand het?

    Bijdrager
    Zeekomkommer

    n maakt een nieuwe lijn.

    Dus emailadres1nemaildres2 zorgt er voor dat de twee emailadressen onder elkaar komen.

    Bijdrager
    Rub3n

    [code:1:60a1128cb9]$bestandsnaam = "mailadressen.txt";
    $filehandle = fopen("$bestandsnaam", "a");
    fwrite($filehandle, $_POST["mailadres"]);
    fclose($filehandle);
    echo "Bedankt, u bent aangemeld op ". $_POST["mailadres"]. "n";[/code:1:60a1128cb9]

    Probeer dit eens?
    [code:1:60a1128cb9]n ipv <br />[/code:1:60a1128cb9]

    En txt file ziet natuurlijk geen [code:1:60a1128cb9]<br />[/code:1:60a1128cb9]:P

    Bijdrager
    Howl

    Hoi,

    Dit werkt niet :?

    Bijdrager
    Zeekomkommer

    Wat werkt er niet? Als je nu de tekst file opent, wat zie je dan?

    PS.

    Wel deze regel veranderen he:
    [code:1:b805f274c9]fwrite($filehandle, $_POST["mailadres"]);[/code:1:b805f274c9]

    Zoiets bijvoorbeeld:
    [code:1:b805f274c9]fwrite($filehandle, $_POST["mailadres"]."n");[/code:1:b805f274c9]

    Bijdrager
    Howl

    wel de gegevens komen wel mooi in de tekst file terecht, maar alles komt op 1 lijn terecht.

    en ja had degelijk de lijn

    [code:1:969cf09100]fwrite($filehandle, $_POST["mailadres"]);[/code:1:969cf09100]

    aangepast naar:

    [code:1:969cf09100]fwrite($filehandle, $_POST["mailadres"]."n");[/code:1:969cf09100]

    de gegevens worden namelijk op deze manier in de file weggeschreven:

    @mail.commail2">mail@mail.commail2@mail2.cometc etc etc ..

    Bijdrager
    Zeekomkommer

    Dat is vreemd.

    En als je er dit van maakt:
    [code:1:78580d9e81]fwrite($filehandle, $_POST["mailadres"]."pindakaas");[/code:1:78580d9e81]

    Komt er dan wel pindakaas tussen de adressen te staan?

    Bijdrager
    Howl

    lol :lol:

    Wel nu zet hij gewoon de “pindakaas” achteraan ook aanmekaar
    :x

    Bijdrager
    Howl

    OK het is gelukt, heb even de file helemaal geledigd en opnieuw een paar mail adressen ingegeven en het werkt nu:)

    Bijdrager
    Zeekomkommer

    Ok, dan staat die n er dus ook maar dan laat het programma dat je gebruikt om de tekstfile te bekijken hem niet zien.
    Probeer eventueel rn in plaats van alleen n.

    Bijdrager
    Zeekomkommer
    ”Howl”

    OK het is gelukt, heb even de file helemaal geledigd en opnieuw een paar mail adressen ingegeven en het werkt nu:)

    Ok, mooi!

    Bijdrager
    Rub3n

    [code:1:afe72c6126]fwrite($filehandle, $_POST["mailadres"])."n";[/code:1:afe72c6126]

    Bijdrager
    Zeekomkommer
    ”Rub3n”

    [code:1:9c9e6edf03]fwrite($filehandle, $_POST["mailadres"])."n";[/code:1:9c9e6edf03]

    Dat is sowieso fout. Oplossing staat verder naar boven.

    Bijdrager
    Sven van de Scheur

    het is verstandiger dit soort data te planten in een database, is sws veel makkelijker te onderschijden, het is niet moeilijk als je jezelf een dagje gunt het te leren met tutorials.

    het eerste probleem wordt veroorzaakt doordat jij headers wil aanpassen terwijl die al verstuurd zijn dit kan niet, een oplossing was het tegengaan dat php al headers gaat sturen volgens mij.

    dit kon je op een manier fixen dacht ik, volgens mij deed je dat doro session_start(); aan het einde van php file te planten.

28 berichten aan het bekijken - 1 tot 28 (van in totaal 28)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.