Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: rivinvaihto php

Sivun loppuun

volume [26.01.2011 12:53:43]

#

heippa taas,

kun kirjoitan www-sivulla olevalle lomakkeelle teksti vaikkapa seuraavasti:

Hei!(tässä enter)
Ja sitten jatkan itse tekstiä...

niin emailissa vastaavalla kohdalla on:

Hei!\r\nJa sitten jatkan itse tekstiä...

elikäs miten saankaan selaimen näyttämään lomakkeelle tehty rivinvaihto?

Chiman [26.01.2011 12:58:04]

#

Esim. https://www.php.net/manual/en/function.nl2br.php

volume [26.01.2011 13:54:41]

#

Chiman kirjoitti:

Esim. https://www.php.net/manual/en/function.nl2br.php

oon varmaankin ihan pönttö, mutta kun käytän nl2br-funkkaria, niin testissä saan rivinvaihdon selaimen näytössä meneen ihan ok, mutta kun laitan sen oikeeseen ohjelmaan ja katson lopputulosta emailistä, niin siellä oleilee edelleen ihan komeesti

Hei!\r\n

Chiman [26.01.2011 14:16:00]

#

Kysyit miten saat selaimen näyttämään rivinvaihdot, siihen nl2br on toimiva keino. Jos emailiin tulostuu eri tavalla, käytät ehkä addslashes-funktiota jossain vaiheessa. Katso ongelmallisen sähköpostin lähdekoodia ja pastea siitä oleelliset osat tänne.

volume [26.01.2011 14:23:37]

#

<?php

// Avataan tietokantayhteydet

// Emailosoitteen tarkastaminen
function validate_email($email) {
  return filter_var($email, FILTER_VALIDATE_EMAIL);
}

// Lähettää sähköpostiin viestin
function mail_utf8($to, $subject, $message, $header) {
  $header_ = 'MIME-Version: 1.0' . "\r\n" . 'Content-type: text/plain; charset=UTF-8' . "\r\n";
  mail($to, "=?UTF-8?B?".base64_encode($subject).'?=', $message, $header_ . $header);
}

// Tarkastetaan, että kaikkiin vaadittaviin kenttiin on annettu syöttötieto
$tiedot_ok = true;
if ((!$_POST['nimi']) || (!$_POST['otsikko']) || (!$_POST['teksti']) || (!$_POST['emaili']) || (!$_POST['kenelle'])) {
    require "...";
    $tiedot_ok = false;
}

// Varmistetaan lomakkeelta tuleva syöte
$nimi     = mysql_real_escape_string(stripslashes($_POST['nimi']));
$otsikko  = strtoupper(mysql_real_escape_string(stripslashes($_POST['otsikko'])));
$teksti   = mysql_real_escape_string(stripslashes($_POST['teksti']));
$kenelle  = mysql_real_escape_string(stripslashes($_POST['kenelle']));
$vastaus  = mysql_real_escape_string(stripslashes($_POST['vastaus']));
$emaili   = mysql_real_escape_string(stripslashes($_POST['emaili']));
$phone    = mysql_real_escape_string(stripslashes($_POST['phone']));

// Jos email-osoite on annettu, sen muoto tarkastetaan
$emailOK = true;
if ($_POST['emaili']) {
  $emailOK = validate_email($emaili);
}

// Tänne jos puuttuu vaadittavia syöttötietoja tai annettu email-osoite ei kelpaa
if (!$tiedot_ok or !$emailOK) {require "...";}

// Lähetetään palaute jos lomaketiedot ja email-osoite molemmat ovat kunnossa
$teksti = nl2br($teksti);
if ($tiedot_ok and $emailOK) {
   $to = "...";
   $subject = "Palautetta";
   $message = "Otsikko.....: ".$otsikko."\n\rNimi........: ".$nimi."\nVastataanko.: ".$vastaus."\nEmail.......: ".$emaili."\nPuhelin.....: ".$phone."\n\r$teksti";

   // Mailin lähetys
   mail_utf8($to, $subject, $message, $header);
   require "...";
}

?>

Chiman [26.01.2011 14:31:23]

#

volume kirjoitti:

$teksti   = mysql_real_escape_string(stripslashes($_POST['teksti']));

Tuossahan se syy taitaa olla. Käsittelet mailitse lähetettävän tekstin tietokantaan lisäystä varten, jolloin sen muoto muuttuu vääräksi.

volume [26.01.2011 14:55:19]

#

Chiman kirjoitti:

volume kirjoitti:

$teksti   = mysql_real_escape_string(stripslashes($_POST['teksti']));

Tuossahan se syy taitaa olla. Käsittelet mailitse lähetettävän tekstin tietokantaan lisäystä varten, jolloin sen muoto muuttuu vääräksi.

onko siis niin, että mailitse lähetettäviä kenttiä ei "tarvitse" tarkastaa lainkaan ko. funkkareilla?

-tossu- [26.01.2011 15:04:41]

#

volume kirjoitti:

onko siis niin, että mailitse lähetettäviä kenttiä ei "tarvitse" tarkastaa lainkaan ko. funkkareilla?

Mysql_real_escape_string on lähetettävän tekstin kanssa aivan turha, mutta stripslashes:ia tarvitset, jos Magic Quotes on päällä. Käyttäjältä tulevaa dataa ei kylläkään kannata laittaa suoraan headereihin, mutta et näytä niin tekevänkään.

volume [26.01.2011 15:11:17]

#

nyt ok. mysql_real_escape_string-funktion poisto taulukkomuuttujasta ($_POST['teksti']) auttoi. ei näytä tarvittavan enää nl2br-funkkaria. Kiitos avusta!


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta