Ekaa kertaa koitin PHP:tä käyttää. Osaisiko joku siis neuvoa, että mitä vikaa alla-olevassa php -koodissa on?
Valittaa, että 12 rivillä on jotain vikaa. (En ole kuitenkaan koko koodia aivan itse tehnyt)
<?php //otetaan post muuttujat ja lisätään ne muuttujiin jossa $muuttuja=jos_post_olemassa?post_arvo:jos_ei_olemassa $sahkoposti=$_POST['sahkoposti']?$_POST['sahkoposti']:""; $nimesi=$_POST['nimesi']?$_POST['nimesi']:""; $palaute=$_POST['palaute']?$_POST['palaute']:""; if(!empty($sahkoposti) && !empty($nimesi) && !empty($palaute)){ $kohdeosoite= "sahkoposti@sahkoposti.fi";//maili johon lähtee $headers = 'From: sahkoposti@sahkoposti.fi' . "\r\n" . 'Reply-To: sahkoposti@sahkoposti.fi' . "\r\n" . 'X-Mailer: PHP/' . phpversion(); if(mail($kohdeosoite, $sahkoposti, $nimesi, $palaute, $headers)){ echo "Palautteen lähettäminen onnistui."; }else{ echo "Palautteen lähettäminen ei onnistunut."; } }else{ if($_POST['send'])echo "Täytä kaikki kentät"; echo "<form method=\"post\">"; echo "<table>"; echo "<tr><td>Sähköposti:</td></tr>"; echo "<tr><td><input type=\"text\" name=\"sahkoposti\" maxlength=\"50\" value=\"$sahkoposti\" /></td></tr>"; echo "<tr><td>Nimesi:</td></tr>"; echo "<tr><td><input type=\"text\" name=\"nimesi\" maxlength=\"50\" value=\"$nimesi\" /></td></tr>"; echo "<tr><td>Palaute foorumistamme:</td></tr>"; echo "<tr><td><textarea name=\"palaute\" rows=\"6\" cols=\"60\">$palaute</textarea></td></tr>"; echo "<tr><td><input type=\"submit\" name=\"send\" value=\"lähetä\" /></td></tr>"; echo "</table>"; echo "</form>"; } ?>
Laita koodi mieluummin tällä tavalla näkyviin:
<?php //otetaan post muuttujat ja lisätään ne muuttujiin jossa $muuttuja=jos_post_olemassa?post_arvo:jos_ei_olemassa $sahkoposti=$_POST['sahkoposti']?$_POST['sahkoposti']:""; $nimesi=$_POST['nimesi']?$_POST['nimesi']:""; $palaute=$_POST['palaute']?$_POST['palaute']:""; if(!empty($sahkoposti) && !empty($nimesi) && !empty($palaute)) { $kohdeosoite= "sahkoposti@sahkoposti.fi";//maili johon lähtee $headers = 'From: sahkoposti@sahkoposti.fi' . "\r\n" . 'Reply-To: sahkoposti@sahkoposti.fi' . "\r\n" . 'X-Mailer: PHP/' . phpversion(); if(mail($kohdeosoite, $sahkoposti, $nimesi, $palaute, $headers)) { echo "Palautteen lähettäminen onnistui."; } else { echo "Palautteen lähettäminen ei onnistunut."; } } else { if($_POST['send']) echo "Täytä kaikki kentät"; echo "<form method=\"post\">"; echo "<table>"; echo "<tr><td>Sähköposti:</td></tr>"; echo "<tr><td><input type=\"text\" name=\"sahkoposti\" maxlength=\"50\" value=\"$sahkoposti\" /></td></tr>"; echo "<tr><td>Nimesi:</td></tr>"; echo "<tr><td><input type=\"text\" name=\"nimesi\" maxlength=\"50\" value=\"$nimesi\" /></td></tr>"; echo "<tr><td>Palaute foorumistamme:</td></tr>"; echo "<tr><td><textarea name=\"palaute\" rows=\"6\" cols=\"60\">$palaute</textarea></td></tr>"; echo "<tr><td><input type=\"submit\" name=\"send\" value=\"lähetä\" /></td></tr>"; echo "</table>"; echo "</form>"; } ?>
Lisäksi kerro, mitä se valittaa. Ongelmahan voi olla, että se ei saa lähetettyä sähköpostia, minkä tuo mail(...)-juttu rivin 12 paikkeille yrittää tehdä.
if(mail($kohdeosoite, $sahkoposti, $nimesi, $palaute, $headers)){ echo "Palautteen lähettäminen onnistui."; }else{ echo "Palautteen lähettäminen ei onnistunut."; } }else{ if($_POST['send'])echo "Täytä kaikki kentät";
Kaksi else-lausetta peräkkäin, siinä virhe.
Ihan oikeinhan tuo else kohta on..?
Alkuperäinen koodi oli tälläinen, mutta miten saan siihen lisättyä jonkun uuden kohdan. (Esim. sähköpostikohdan)Toivottavasti joku nyt ymmärsi..
<?php //otetaan post muuttujat ja lisätään ne muuttujiin jossa $muuttuja=jos_post_olemassa?post_arvo:jos_ei_olemassa $nimesi=$_POST['nimesi']?$_POST['nimesi']:""; $palaute=$_POST['palaute']?$_POST['palaute']:""; if(!empty($nimesi) && !empty($palaute)){ $kohdeosoite= "oma@sahkoposti";//maili johon lähtee $headers = 'From: oma@sahkoposti' . "\r\n" . 'Reply-To: oma@sahkoposti' . "\r\n" . 'X-Mailer: PHP/' . phpversion(); if(mail($kohdeosoite, $nimesi, $palaute, $headers)){ echo "Palautteen lähettäminen onnistui."; }else{ echo "Palautteen lähettäminen ei onnistunut."; } }else{ if($_POST['send'])echo "Täytä molemmat kentät"; echo "<form method=\"post\">"; echo "<table>"; echo "<tr><td>Nimesi:</td></tr>"; echo "<tr><td><input type=\"text\" name=\"Nimesi\" maxlength=\"50\" value=\"$Nimesi\" /></td></tr>"; echo "<tr><td>Palaute foorumistamme:</td></tr>"; echo "<tr><td><textarea name=\"Palaute\" rows=\"6\" cols=\"60\">$Palaute</textarea></td></tr>"; echo "<tr><td><input type=\"submit\" name=\"send\" value=\"Lähetä\" /></td></tr>"; echo "</table>"; echo "</form>"; } ?>
Heität siihen samanlaisen input textin ja käsittelet kuten nimi- ja palautekentänkin.
$email=$_POST['email']?$_POST['email']:"";
ja "lomakkeeseen" kenttä sähköpostille:
<input type="text" name="email" />
Lisäksi kaikki lähetetyt ($_POST) tiedot täytyy siivota mahdollisista ylimääräisistä merkeistä. Itse tykkään että teksti saa sisältää vain kirjaimia, numeroita, pisteitä ja pilkkuja. Lisäksi sähköpostikenttä saa sisältää yhden @ -merkin.
Haluaisitko näyttää mallia, että miten ($_POST) tiedot siivotaan aikaisemmasa esimerkissä.? :D
Kiitos.
Suosittelisin kyllä ohjelmointiputkan omaa PHP-opasta. Sieltä löytyy vastauksia noihin kysymyksiin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.