Kirjautuminen

Haku

Tehtävät

Kilpailu

Putka Open 2025
Alkuerät ovat ohi.

Keskustelu: Koodit: PHP tulostusongelma

Tittis [11.12.2025 18:06:17]

#

Pitäisi saada rivinvaihtonuoli Viopessa näkymään rivin jälkeen omalla rivillään, ei rivin perässä.

Voisko joku jeesiä, kiitos!

EDIT: jotenkin \r\n joko muuttujaan tallennettuna ja/tai echo tulostettuna
mutta miksi ei toimi eri testailujen mukaan (Windows-ympäristö (ja Viope) odottaa usein CRLF-rivinvaihtoa)

ps. olen tänä vuonna pikkuhiljaa tutustunut tähän PHP-kieleen - joskus tutustunut C- ja Java-kieliin mutta niistä aikaa

<?php

// Määritä tiedoston nimi
$tiedosto = 'asiakasrekisteri.txt';

// Lue GET-parametrit
$mode          = $_GET['mode'] ?? '';
$asiakasnumero = $_GET['asiakasnumero'] ?? ($_GET['asiakas'] ?? '');
$nimi          = $_GET['nimi'] ?? '';
$osoite        = $_GET['osoite'] ?? '';

// Jos mode on "save": lisätään asiakas
if ($mode === 'save') {
    // Puhdista syötteet
    $asiakasnumero = trim(strip_tags($asiakasnumero));
    $nimi          = trim(strip_tags($nimi));
    $osoite        = trim(strip_tags($osoite));

    // Jos kaikki kentät ovat ei-tyhjiä
    if ($asiakasnumero !== '' && $nimi !== '' && $osoite !== '') {
        // Muodosta rivi muodossa asiakasnumero##nimi##osoite
        $rivi = $asiakasnumero . "##" . $nimi . "##" . $osoite . "\n";

        // Avaa tiedosto lisäystilassa ('a')
        $viite = fopen($tiedosto, 'a');
        if ($viite) {
            // Kirjoita rivi tiedoston loppuun
            fwrite($viite, $rivi);
            // Sulje tiedosto
            fclose($viite);
        }
    }

} elseif ($mode === 'delete') {
    // Asiakkaan poisto
    if ($asiakasnumero !== '' && file_exists($tiedosto)) {
        // Avaa tiedosto lukutilassa ('r')
        $viite = fopen($tiedosto, 'r');
        $uudet = []; // Luo uusi lista

        if ($viite) {
            // Lue rivit yksi kerrallaan
            while (($rivi = fgets($viite)) !== false) {
                $rivi = trim($rivi);
                if ($rivi === '') continue;

                // Erottele kentät rivistä
                $osat = explode("##", $rivi, 3);

                // Jos rivin asiakasnumero ei ole sama kuin poistettava
                if ($osat[0] !== $asiakasnumero) {
                    $uudet[] = $rivi;
                }
            }
            fclose($viite);
        }

        // Avaa tiedosto kirjoitustilassa ('w')
        $viite = fopen($tiedosto, 'w');
        if ($viite) {
            // Kirjoita uudet rivit tiedostoon
            foreach ($uudet as $rivi) {
                fwrite($viite, $rivi . "\n");
            }
            fclose($viite);
        }
    }

} else {
    // Asiakkaan haku
    if ($asiakasnumero !== '' && file_exists($tiedosto)) {
        // Avaa tiedosto lukutilassa ('r')
        $viite = fopen($tiedosto, 'r');
        if ($viite) {
            // Lue rivit yksi kerrallaan
            while (($rivi = fgets($viite)) !== false) {
                $rivi = trim($rivi);
                if ($rivi === '') continue;

                // Erottele kentät rivistä
                $osat = explode("##", $rivi, 3);

                // Jos kenttiä on kolme ja asiakasnumero täsmää
                if (count($osat) === 3 && $osat[0] === $asiakasnumero) {
                    $nimi   = trim($osat[1]);
                    $osoite = trim($osat[2]);

                    // Tulosta täsmälleen muodossa
                    echo "Asiakas: " . $nimi . ", " . $osoite . "\n";

                    break; // vain yksi osuma
                }
            }
            fclose($viite);
        }
    }
}
?>

Vastaus

Muista lukea kirjoitusohjeet.
Tietoa sivustosta