Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

[PHP] array writen

BasHamar
5 antwoorden
  • Hallo,

    Ik ben bezig om een gastenboek achtig reactie systeem maken,
    maar het lukt niet erg,
    ik wil de gegevens opslaan in een array,
    en dan die array in een .txt bestand opslaan, zodat ik die later kan uitlezen.

    dit is mijn code:
    [code:1:507d188634]
    $formname = $_REQUEST['name'] ;
    $formemail = $_REQUEST['email'] ;
    $formmessage = $_REQUEST['message'] ;

    if ( ( !$formemail ) ||
    ( strlen($_POST['formemail']) > 200 ) ||
    ( !preg_match("#^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$#", $formemail) )
    )
    { die("Verkeerd e-mail adres ingevuld"); }

    else {
    $file = fopen("reacties.txt", "a");

    $content[name] = $formname;
    $content[email] = $formemail;
    $content[message] = $formmessage;


    $contenttowrite = print_r($content);

    fwrite($file, "
    $contenttowrite");
    fclose($file);
    }[/code:1:507d188634]

    wat doe ik verkeerd.??
    als ik in het txt bestand kijk
    staat er 1.

    Alvast Hartelijk dank.
  • $contenttowrite is een print_r. Zoals je hier in de documentatie kunt lezen is de parameter voor return een boolean true of false. Onder het kopje return values staat:
    [quote:f4952bf93b]When the return parameter is TRUE, this function will return a string. Otherwise, the return value is TRUE. [/quote:f4952bf93b]. Aangezien je de return parameter niet hebt gespecificeerd, resulteert dat dus in een 1, wat simpelweg aangeeft dat het printen [i:f4952bf93b]naar die variabele[/i:f4952bf93b] gelukt is.
    Oplossing is in dit geval om de return value wel te specificeren.

    Overigens zou ik je script nog wel even flink onder handen nemen. Je gebruikt $_REQUEST terwijl dat voor zowel GET, POST en COOKIE kan gelden. Mensen kunnen daardoor een hoop ongein uithalen. Houdt het gewoon bij $_POST zou ik zeggen. Verder kan een addslashes geen kwaad om te voorkomen dat zaken in het honderd lopen.
  • Je schrijft de waarde die print_r oplevert naar het bestand. Standaard is dit TRUE (gerepresenteerd als 1).
    Je kan aan print_r true meegeven als tweede parameter, dan levert het de uitvoer van print_r op, dit wordt dan:
    [code:1:9137463ad5]$contenttowrite = print_r($content, true);[/code:1:9137463ad5]

    Overigens denk ik niet dat het handig is om de uitvoer van print_r te gebruiken, het lijkt me erg lastig om de uitvoer weer in te lezen in een array.


    Nog even wat over je code. Hoewel dit werkt:
    [code:1:9137463ad5]$content[name] = $formname;
    $content[email] = $formemail;
    $content[message] = $formmessage;[/code:1:9137463ad5]
    moet je eigenlijk aanhalingstekens om de keys zetten:
    [code:1:9137463ad5]$content['name'] = $formname;
    $content['email'] = $formemail;
    $content['message'] = $formmessage;[/code:1:9137463ad5]
    Ook zou ik je willen aanraden om htmlspecialchars te gebruiken bij op de "name" en "message" om te voorkomen dat iemand HTML kan invoeren en je risico loopt op Cross-site scripting.

    [edit]Ger was me voor.[/edit]
  • Ik heb jullie advies opgevold en het write nu een goede array
    maar ik had inderdaad nog niet over het inlezen nagedacht.
    wat is dan een handigere manier om het te writen?

    MVG,,

    [code:1:fa623fbbea]
    $formname = $_POST['name'] ;
    $formemail = $_POST['email'] ;
    $formmessage = $_POST['message'] ;

    if ( ( !$formemail ) ||
    ( strlen($_POST['formemail']) > 200 ) ||
    ( !preg_match("#^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$#", $formemail) )
    )
    { die("Verkeerd e-mail adres ingevuld"); }

    else {
    $file = fopen("reacties.txt", "a");

    $content['name'] = addslashes(htmlspecialchars($formname));
    $content['email'] = $formemail;
    $content['message'] = addslashes(htmlspecialchars($formmessage));

    $contenttowrite = print_r($content, true);

    fwrite($file, "
    $contenttowrite");
    fclose($file);
    }[/code:1:fa623fbbea]
  • Of is het misschien handiger om het in een database te zetten?

    MVG,,

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.