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); } } ?>
Määrittele funktio if-lohkon ulkopuolella.
Kai nyt olet joskus funktioita käyttänyt? Laita se mail_utf8-funktion toteutus koodisi alkuun.
Grez kirjoitti:
Määrittele funktio if-lohkon ulkopuolella.
aika outoa, että funktio ei löydy if-lohkon sisältä?
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ä?
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.
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?
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.
$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);
kiitos rakentavasta palautteestasi :-)
Aihe on jo aika vanha, joten et voi enää vastata siihen.