Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: palautteen lähetys

Sivun loppuun

volume [22.01.2011 15:52:10]

#

Tulleepi alla oleva herja:
Fatal error: Call to undefined function mail_utf8() in /xxxx/xxxx/xxxx/xxxx/xxxx/laheta.php on line 34

Tästä koodista:

<?php

// Avataan tietokantayhteydet
require "/xxxx/xxxx...";
$yhteys = AvaaTietokanta();

// Varmistetaan lomakkeelta tuleva syöte
$phone_no = mysql_real_escape_string(stripslashes($_POST['phone_no']));
$email    = mysql_real_escape_string(stripslashes($_POST['email']));
$palaute  = mysql_real_escape_string(stripslashes($_POST['palaute']));

// Jos kaikki tai yksikin lomakkeen kenttä on tyhjä, ohjataan käyttäjä virhesivulle
$lomaketiedotOK = true;
if ((!$phone_no) or (!$email) or (!$palaute)) {
  require "/xxxx/xxxx...";
  $lomaketiedotOK = false;
}

$emailOK = validate_email($email);

// Email-osoitteen tarkastaminen
function validate_email($email) {
  return filter_var($email, FILTER_VALIDATE_EMAIL);
}

// Tänne jos email-osoite ei ole hyväksyttävässä muodossa mutta kaikki lomakkeen kentät on annettu
if ($emailOK == false and $lomaketiedotOK == true) {require "/xxx/xxxx...";}

// Lähetetään palaute jos lomaketiedot ja email-osoite molemmat ovat kunnossa
if (($lomaketiedotOK == true) and ($emailOK == true)) {
   $to = "oma@osoite.fi";
   $subject = "Palautetta";
   $message = "Puhelin: ".$phone_no."\nE-mail: ".$email."\nPalaute: ".$palaute."\n ";
   $ilmoitus = mail_utf8($to, $subject, $message, $header);

   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);
   }
}

?>

Grez [22.01.2011 15:53:57]

#

Määrittele funktio if-lohkon ulkopuolella.

Metabolix [22.01.2011 15:55:19]

#

Kai nyt olet joskus funktioita käyttänyt? Laita se mail_utf8-funktion toteutus koodisi alkuun.

volume [22.01.2011 15:55:29]

#

Grez kirjoitti:

Määrittele funktio if-lohkon ulkopuolella.

aika outoa, että funktio ei löydy if-lohkon sisältä?

Metabolix [22.01.2011 15:57:33]

#

Miten niin outoa? Minusta on nimenomaan loogista, että funktiota voi käyttää vasta sen määrittelyn jälkeen. Yhtä hyvin voisit ihmetellä tätä:

echo $x;
$x = 1; // Onko kumma juttu, ettei tämä $x näy tuossa ylempänä?

Grez [22.01.2011 16:00:50]

#

Siinä mielessä tuo muttujaesimerkki ei ole minusta täysin relevantti, että funktiota voi kyllä käyttää ennen sen määrittelyäkin, jos se ei ole if:ssä.

Sen sijaan funktion määritteleminen if:n sisällä yleisesti on vähän...

Mutta, jos nyt on ihan pakko määritellä funktio iffin sisällä, niin laita siinä tapauksessa sen kutsuminen vasta määrittelyn jälkeen.

volume [22.01.2011 16:01:41]

#

niinhän se taitaa olla. suurkiitos taas vinkeistä. sitä joskus näköala kaventuu kun näitä puurtaa :-)

noin yleisesti ja silmällä katsoen onko koodissani pielessä tai hölmösti paljonkin muuta?

progo [22.01.2011 18:41:43]

#

volume kirjoitti:

noin yleisesti ja silmällä katsoen onko koodissani pielessä tai hölmösti paljonkin muuta?

Tyypillistä PHP-koodaajan tuotosta, ei siinä sen ihmeempiä.

Boolean-arvoja testataan yleensä ilman == false tai == true -määreitä, kuten olet rivillä 14 tehnyt. Sitten kuitenkin vaihtuu käytäntö tuossa riveillä 27 ja 30.

The Alchemist [22.01.2011 19:03:29]

#

$phone_no = mysql_real_escape_string(stripslashes($_POST['phone_no']));
$email    = mysql_real_escape_string(stripslashes($_POST['email']));
$palaute  = mysql_real_escape_string(stripslashes($_POST['palaute']));

Miksi stripslashes()? Oletko varma, että palvelimella on magic quotes päällä? Magic quotes on muutenkin vanhentunut ominaisuus, joten sitä ei pitäisi käyttää ollenkaan. Koodin siirrettävyys on joka tapauksessa huono, mikäli et vähintään tarkasta sitä ajonaikaisesti.

On myös huono tapa olettaa, että formille laittamasi kentät automaattisesti löytyvät $_POST-taulukosta. Sinun pitäisi tarkistaa kyseisen kenttien olemassaolo esim. seuraavasti:

$phone_no = !empty($_POST['phone_no']) ? $_POST['phone_no'] : null;
$phone_no = mysql_real_escape_string($phone_no);

volume [23.01.2011 22:33:36]

#

kiitos rakentavasta palautteestasi :-)


Sivun alkuun

Vastaus

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

Tietoa sivustosta