Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP viestin lähetys

Sivun loppuun

hant [27.11.2008 19:46:51]

#

// Eli ongelmani on yksinkertaisesti, että ei toimi. Voisiko joku ystäväällisesti jelppiä?

<?php
ob_start();
session_start();
/////////////// Asetukset ///////////////////
$omaoso = "harri.manu@hotmail.com"; // Sähköpostiosoite,ohon palaute tulee
$otsikko = "Palautetta kotisivulta"; // Palautteen otsikko
$koti = "http://www.sivusi.org"; // Palautteen lähetyksen jälkeinen poistumissivu
$flood = "10"; // Floodaussuoja-aika sekunneissa
//////////////////// Palauteluokat / Lisää uusi rivi mallilla
  //////////////////////
$sukupuoli[] = "Nainen";
$sukupuoli[] = "Mies";

$ika[] = "alle 15";
$ika[] = "15-19";
$ika[] = "21-29";
$ika[] = "30-39";
$ika[] = "40-49";
$ika[] = "50-59";
$ika[] = "60-69";
$ika[] = "70-->";

$asuinpaikka[] = "alle 50 km";
$asuinpaikka[] = "yli 50 km";

$ostoksillakaynti[] = "arkisin  klo 9-12";
$ostoksillakaynti[] = "arkisin klo 12-15";
$ostoksillakaynti[] = "arkisin klo 15-18";
$ostoksillakaynti[] = "arkisin klo 18-21";
$ostoksillakaynti[] = "lauantaisin klo 9-12";
$ostoksillakaynti[] = "lauantaisin klo 12-15";
$ostoksillakaynti[] = "lauantaisin klo 15-18";
////////////////////////////////////////////
if(!$_GET['act']){
$tarkastus = rand(1,5);
session_register("tark");
$_SESSION['tark'] = $tarkastus;
    echo'
    <h3>Kysely</h3>
    <form method="post" action="'.$_SERVER['PHP_SELF'].'?act=laheta" style="margin:0;">


<table width="500" border="0">
  <tr>
    <td>1. Sukupuoli</td>
    <td>    <select name="sukupuoli">
    <option value="">-- Valitse --';
    foreach($sukupuoli as $lomake){
        $a = explode(":",$lomake);
        echo'<option value="'.$a[0].'">'.$a[0].'';
    }
    echo'</select><br>
</td>

  </tr>
  <tr>
    <td>2. Ikä</td>
    <td><select name="ika">
    <option value="">-- Valitse --';
    foreach($ika as $lomake){
        $b = explode(":",$lomake);
        echo'<option value="'.$b[0].'">'.$b[0].'';
    }
    echo'</select><br>
</td>
  </tr>

  <tr>
    <td>3. Kengän kokoni on:</td>
    <td><input type="text" name="kengankoko" size="30"

maxlength="10"<br>
</td>
  <tr>


  </tr>

  <tr>
    <td>4. Asuinpaikka Iisalmesta </td>
    <td>    <select name="asuinpaikka">
    <option value="">-- Valitse --';
    foreach($asuinpaikka as $lomake){
        $c = explode(":",$lomake);
        echo'<option value="'.$c[0].'">'.$c[0].'';

    }
    echo'</select><br>
 </td>
  </tr>


  <tr>
    <td>5. Käyn mieluiten ostoksilla</td>
    <td><select name="ostoksillakaynti">
    <option value="">-- Valitse --';
    foreach($ostoksillakaynti as $lomake){
        $d = explode(":",$lomake);
        echo'<option value="'.$d[0].'">'.$d[0].'';

    }
    echo'</select><br>
 </td>
  </tr>
</table>

6. Valitessani kenkiä ja laukkuja minulle on tärkeintä

(laita tärkeysjärjestykseen numerot 1-7):
<table width="500" border="0">
  <tr>
    <td></td>
    <td>ulkonäkö </td>
    <td><input type="text" name="tarkeys" size="30"

maxlength="10"; </td>

  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>hinta</td>
    <td><input type="text" name="tarkeys" size="30"

maxlength="10"; ;</td>
    <td>&nbsp;</td>
</tr>
  <tr>
    <td>&nbsp;</td>
    <td>lestin istuvuus </td>
    <td><input type="text" name="tarkeys" size="30"

maxlength="10";</td>

  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>myyjän suositus</td>
    <td>    <input type="text" name="tarkeys"

size="30" maxlength="10"; </td>

  </tr>

  <tr>
    <td>&nbsp;</td>
    <td>materiaali </td>
    <td><input type="text" name="tarkeys" size="30"

maxlength="10"; </td>

  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>kotimaisuus</td>
    <td>     <input type="text" name="tarkeys"

size="30" maxlength="10";</td>

  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>myymälän viihtyisyys</td>
    <td><input type="text" name="tarkeys" size="30"

maxlength="10"; </td>

  </tr>
  <tr>
    <td>&nbsp;</td>
    <td></td>
    <td></td>

  </tr>

</table>





<br>


<br>




    <input type="checkbox" name="hvast"> Haluan

vastauksen<br><br>
    Ruksaa suluissa oleva<br>';

    for($i = 0;$i < 5;$i++){
        $value = $i+1;
        if($_SESSION['tark'] == $value){
            echo'(<input type="radio" name="check"

value="'.$value.'">)';
        } else {
            echo'<input type="radio" name="check"

value="'.$value.'">';
        }
    }
    echo'
    <br>
    <input type="submit" name="tark" value="Lähetä"><br><br>
    * = Pakollinen kenttä
    </form>
    <small>GLPalaute by <a

href="http://www.glweb.org">GLWeb</a></small>';
}
if($_GET['act'] == "laheta"){
    $t = $_SESSION['tark'];
    if(isset($_POST['check']) == $t){
        if(isset($_POST['tark'])){



            if(isset($_COOKIE['palflood'])) exit

("Floodisuoja. <a href=\"javascript:history.go(-1)\">Takaisin</a>");
          ;  $palaute = stripslashes($palaute);
            $palaute = str_replace("<br>","",$palaute);

            $to = "$omaoso";
            $ots = "$otsikko"; ";

Nimi;
    Sukupuoli: $sukupuoli
    Ikä: $ika
    Kengännumero: $kengannumero
    ----------------------------------------------------


    $palaute
    ----------------------------------------------------


    Haluaako vastauksen: $hvast";
            $ken = "from: $nimi<$email>\r\n";
            mail($to,$ots,$mess,$ken);
            setcookie("palflood","jee",time()+$flood);
            session_unset("tark");
            echo'<h3>Palaute onnistuneesti lähetetty</h3>
            <a href="'.$koti.'">Poistu</a>';
        }
    } else {
        session_unset("tark");
        echo'Palautteen lähetys epäonnistui, koska et

ruksannut oikeaa ruudukkoa<br><br>
        <a href="'.$koti.'">Poistu</a>
        ';
    }
}
ob_end_flush();
?>

Mod. lisäsi kooditagit

Lebe80 [27.11.2008 19:57:31]

#

Oletko testannut meneekö skripti tuohon mail() -funktioon asti?

Teuro [27.11.2008 19:59:42]

#

Miten se ei toimi? kerro toki tarkemmin ja laita pasteen vain kohta, joka ei mielestäsi toimi. Rivillä 34 on alustamaton muuttuja 'act', joten muuta vertailu mielummin vaikkapa

<?php
isset($_GET['act'])

riviltä 215 sama juttu muotoon

if(isset($_GET['act']) && $_GET['act'] == "laheta"){

POST muuttujat tulee kaivaa $_POST taulukosta, joten nykyisellään tuo aiheuttaa kasan virheitä. Et tarkista mail() funktion onnistumistam joten lähetyksen onnistumisesta ilmoittaminen on ainakin kyseenalaista.

hant [27.11.2008 20:02:46]

#

Tuota noin. Se lähettää viestin mailiin, mutta ei mitään tietoja. Ja ISO kiitos

http://www.hmanu.com/niina/kysely/kokeilu.php

Andu [27.11.2008 20:06:39]

#

Ainakin mess-muuttuja näyttää olevan tyhjä. Teksti tuossa melko lopussa ilmeisesti kuuluisi laittaa sinne.

Teuro [27.11.2008 20:06:50]

#

hant kirjoitti:

Tuota noin. Se lähettää viestin mailiin, mutta ei mitään tietoja. Ja ISO kiitos

http://www.hmanu.com/niina/kysely/kokeilu.php

Tulee vain tyhjä sivu, ei mitään muuta.

hant [27.11.2008 20:10:15]

#

Lebe80 kirjoitti:

Oletko testannut meneekö skripti tuohon mail() -funktioon asti?

Joo ennekuin muutin noi GET jutut näytti sentään sivun=(

Teuro [27.11.2008 20:13:37]

#

hant kirjoitti:

Lebe80 kirjoitti:

Oletko testannut meneekö skripti tuohon mail() -funktioon asti?

Joo ennekuin muutin noi GET jutut näytti sentään sivun=(

Muuta samalla muuttujat, joista tulkki herjaa oikeaoppisiksi. POST muuttujat kaivetaan $_POST taulukosta, jolloin ollaan lähempänä ratkaisua, mutta voisin silti suositella, että yrität pitää html:n ja php:n erillään toisistaan, jolloin molempien luettavuus paranee.

hant [27.11.2008 20:15:39]

#

Teuro kirjoitti:

hant kirjoitti:

Lebe80 kirjoitti:

Oletko testannut meneekö skripti tuohon mail() -funktioon asti?

Joo ennekuin muutin noi GET jutut näytti sentään sivun=(

Muuta samalla muuttujat, joista tulkki herjaa oikeaoppisiksi. POST muuttujat kaivetaan $_POST taulukosta, jolloin ollaan lähempänä ratkaisua, mutta voisin silti suositella, että yrität pitää html:n ja php:n erillään toisistaan, jolloin molempien luettavuus paranee.

Nyt se tulostaa sivun, muta lähettää mailiin tyhjää

Teuro [27.11.2008 20:21:20]

#

Teeppäs seuraava:

<?php
foreach($_POST AS $nimi => $muuttuja){
echo" $nimi = $muuttuja <br />";
}

mitäs tulee tulostukseen? Ja mikä on $palaute muuttuja, et aseta sille mitään arvoa, mutta yrität käyttää sitä?

hant [27.11.2008 20:26:13]

#

Millekä riville?

Teuro [27.11.2008 20:28:31]

#

hant kirjoitti:

Millekä riville?

<?php
if(isset($_GET['act']) && $_GET['act'] == "laheta"){
	foreach($_POST AS $nimi => $muuttuja){
		echo" $nimi = $muuttuja <br />";
	}
}
?>

Andu [27.11.2008 20:29:46]

#

Epäilisin edelleenkin tätä kohtaa koodissa:

<?php

            $to = "$omaoso";
            $ots = "$otsikko"; ";

Nimi;
    Sukupuoli: $sukupuoli
    Ikä: $ika
    Kengännumero: $kengannumero
    ----------------------------------------------------


    $palaute
    ----------------------------------------------------


    Haluaako vastauksen: $hvast";
            $ken = "from: $nimi<$email>\r\n";
            mail($to,$ots,$mess,$ken);

?>

hant [27.11.2008 20:30:28]

#

Nyt antaa vaan virheitä=(

Teuro [27.11.2008 20:33:05]

#

@andu olet takuulla oikeassa.

Laitapa tuo minun koodi tarkalleen noin, kuten se tuossa on eli kaikki muu tauhka huis pois kokonaan, jotta saat selville mitä kamaa noihin muuttujiin on tallentunut.

hant [27.11.2008 20:33:49]

#

Andu kirjoitti:

Epäilisin edelleenkin tätä kohtaa koodissa:

<?php

            $to = "$omaoso";
            $ots = "$otsikko"; ";

Nimi;
    Sukupuoli: $sukupuoli
    Ikä: $ika
    Kengännumero: $kengannumero
    ----------------------------------------------------


    $palaute
    ----------------------------------------------------


    Haluaako vastauksen: $hvast";
            $ken = "from: $nimi<$email>\r\n";
            mail($to,$ots,$mess,$ken);

?>

Nyt se tulostaa näytölle
Array =
Array =
Array = 43
Array =
Array =
Array =
Array = 5
Array = Lähetä
Palaute onnistuneesti lähetetty
Poistu

Teuro [27.11.2008 20:41:00]

#

Minulla se antaa seuraavan tulostuksen

sukupuoli = Mies
ika = 21-29
kengankoko = 44
asuinpaikka = yli 50 km
ostoksillakaynti = arkisin klo 18-21
tarkeys = 1
check = 3
tark = Lähetä

Suosittelen lämpimästi kirjoittamaan tuon php osuuden ainakin kokonaan uusiksi, koska se on sinulle selkeästi hankalaa. Opettele kunnolla tarkastamaan lomake, jotta mailin lähetys olisi edes mahdollista.

hant [27.11.2008 20:42:21]

#

Niinhän se on mutta kun oon kirjoittanut jo monta kertaa ja aina pieleen=(

Teuro [27.11.2008 20:48:12]

#

hant kirjoitti:

Niinhän se on mutta kun oon kirjoittanut jo monta kertaa ja aina pieleen=(

Sillon vartti pois vauhtia ja kunnon miettimistä mikä menee pieleen, eikä summassa muutella jotakin. Voisit vaikka aloittaa siirtämällä lomakkeen omaan html tiedostoon, josta action="tarkasta.php" ja seuraavaksi teet tarkasta.php tiedoston, johon kirjoitat ainoastaan tuon $_POST muuttujien tulostamisen.

Tästä seuraava vaihe voisi olla muuttujien sisällön oikeellisuuden varmistaminen. Lopuksi teet vielä vaikka $viesti muuttujan, johon lisäät tarvittavat muuttujat ja tulostat muuttujan sisällön. Lopuksi teet mail() toteutuksen ja muistat tarkistaa onnistuiko lähetys.

Lebe80 [27.11.2008 21:48:53]

#

Joo, ei kukaan ole seppä syntyessään. Ohjelmointi vaatii paljon keskittymistä ja koodin ymmärtämistä. Joskus menee vaan pieleen, mutta siitä ei silti kannata lannistua.

ville-v [28.11.2008 10:30:54]

#

mail($to,$ots,$mess,$ken);

Missä alustetaan $mess? En löytänyt sitä mistään muualta koodista.

Lebe80 [28.11.2008 10:57:59]

#

Muutenkin olisi suositeltavaa tulostella selaimelle muuttujia ennen umpimähkäistä sähköpostien lähettelyä ja varmistaa, että kaikki tarvittavat tiedot ovat halutuissa muuttujissa.

Kun ollaan varmoja, että kaikki on kunnossa, laitetaan mailit lähtemään, eikä siis sorkita sokkona ja toivota että kaikki toimii heti ensimmäisellä kerralla.

Tässä pari ystävää:
Tulostaa halutun muuttujan arvon (tässä nimetty $x)
echo "muuttuja x: $x";


Tulostaa kaikki lomakkeen tiedot (post-muodossa).
echo '<pre>'.print_r($_POST,true).'</pre>';
die();


Sivun alkuun

Vastaus

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

Tietoa sivustosta