Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Palautelomake (PHP) ongelma

Sivun loppuun

tsehov [08.02.2008 01:18:09]

#

Osaisiko tai viitsisikö joku tietävä auttaa ongelmassani. Olen tekemässä nettisivuille palautelomaketta täältä Ohjelmointiputkasta löytämääni PHP -skriptiä käyttäen. Skripti löytyy tuolta:

https://www.ohjelmointiputka.net/koodivinkit/24578-php-palautelomake

Jos laitan koodin niine hyvineen sivustolleni painettuani lähetä-namikkaa saan tylyn vastauksen:

"Parse error: syntax error, unexpected T_STRING in /var/www/customers/omasivunifi/public_html/kritiikki/kritiikki.php on line 9"

Mutta jos laitan tuon rivin 9 eteen // -merkit homma tuntuu muuten toimivan mutta saamassani s-postiviestissä ei lue tekstikenttään kirjoitettua viestiä eikä liioin valinta 'haluan tai en halua vastausta' vaikuta mitään eikä näy koko viestissä.

Seuraavassa muodossa siis tyhjä viesti lähtee:

<?php
//Käyttäjän IP-osoite
$ip = getenv("REMOTE_ADDR");

// Estää täysin tyhjät viestit
if(trim($palaute) == " ") die("Ei tyhjiä viestejä!");

// Tarkistetaan, ettei viesti ole liian pitkä
//if(strlen($palaute) > 2000) die("Viestisi on liian pitkä!");    <------ Rivi 9

// Tarkistetaan ettei käyttäjä ole kirjoittamassa toista palautetta heti perään
$tiedosto = fopen("ipt2.txt", "r");
$ip2 = trim(fgets($tiedosto));
fclose($tiedosto);

if ($ip == $ip2) die("Et voi lähettää kahta viestiä peräkkäin!");

// Muotoillaan viesti lähetystä varten
$viesti = "$palaute\r\n\r\n $ip | Vastaus: $vastaus | e-mail: $email";

// Vaihda oma e-mail-osoitteesi alle
if(mail("omaosoite@omadomain.com", "Palautetta", "$viesti", "From: $nimi")){

// Kirjoittajan IP lisätään ipt.txt-tiedostoon
$tiedosto = fopen("ipt2.txt", "w");
fwrite($tiedosto, $ip);
fclose($tiedosto);

// Ohjataan kiitossivulle, jos sellainen on
header("Location: index.php?sivu=kiitos");
}
?>

Olen jo etukäteen hyvin kiitollinen kaikesta avusta.

Merri [08.02.2008 06:38:40]

#

Tuo esimerkki on auttamatta vanhentunut eikä tee tarkistuksia kovinkaan hyvin.

Tässä palaute.php:

<?php
    $virheet = array();
    if( isset($_POST['palaute']) ) {
        $nimi = trim(stripslashes($_POST['nimi']));
        $email = trim(stripslashes($_POST['email']));
        $palaute = trim(stripslashes($_POST['palaute']));
        if( strlen($palaute) < 3 ) $virheet[] = 'Viestisi on liian lyhyt.';
        if( strlen($nimi) < 3 ) $virheet[] = 'Anna nimesi.';
        if( strpos($email, '@') === false ) $virheet[] = 'Anna toimiva sähköpostiosoite.';
        if( !count($virheet) ) {
            $ip = $_SERVER['REMOTE_ADDR'];
            // Muotoillaan viesti lähetystä varten
            $viesti = $palaute."\r\n\r\n $ip | Vastaus: $vastaus | e-mail: $email";
            // Vaihda oma e-mail-osoitteesi alle
            if( mail("email@osoite.org", "Palautetta", $viesti, "From: $nimi <$email>") ) {
                // Kirjoittajan IP lisätään ipt.txt-tiedostoon
                $tiedosto = fopen("ipt2.txt", "w");
                fwrite($tiedosto, $ip);
                fclose($tiedosto);
                header('Location: kiitos.php');
                exit;
            } else {
                $virheet[] = 'Sähköpostiviestin lähettäminen ei onnistunut.';
            }
        }
    } else {
        $nimi = '';
        $email = '';
        $palaute = '';
    }
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fi">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
        <title>Palautelomake</title>
    </head>
    <body>
<?php if( count($virheet) ) { ?>
        <h2>Virhe lomakkeen lähettämisessä</h2>
        <ul>
<?php   for($i = 0, $maxi = count($virheet); $i < $maxi; $i++) { ?>
            <li><?php echo htmlspecialchars($virheet[$i]); ?></li>
<?php   } ?>
        </ul>
<?php } ?>
        <h2>Palautelomake</h2>
        <form action="palaute.php" method="post">
            <fieldset><legend></legend>
                 <p class="text">
                     <label for="nimi">Nimi:</label>
                     <input id="nimi" name="nimi" type="text" value="<?php echo htmlspecialchars($nimi); ?>" />
                 </p>
                 <p class="text">
                     <label for="email">Sähköposti:</label>
                     <input id="email" name="email" type="text" value="<?php echo htmlspecialchars($email); ?>" />
                 </p>
                 <p class="textarea">
                     <label for="palaute">Palaute:</label>
                     <textarea id="palaute" name="palaute" cols="40" rows="5"><?php echo htmlspecialchars($palaute); ?></textarea>
                 </p>
            </fieldset>
            <p class="submit"><input type="submit" value="Lähetä" /></p>
        </form>
    </body>
</html>

tsehov [08.02.2008 16:33:49]

#

Tuhannet kiitokset erittäin nopeasta vastauksesta. Nyt kun asentelin tämän 'palautteen' saan lähetä-nappia painettuani virheilmoituksen:

Parse error: syntax error, unexpected T_VARIABLE in /var/www/customers/omasivufi/public_html/palaute/palaute.php on line 2

Eli siis rivillä:    $virheet = array();

Mikähän nyt on vialla?

Lebe80 [08.02.2008 16:47:18]

#

Virhe on varmaankin juuri ylemmällä rivillä. Puuttuisiko sieltä puolipiste?

tsehov [08.02.2008 17:10:37]

#

Nyt en oikein ymmärrä. Ylemmällä rivillä ei ole muuta kuin '<?php '. Vai ymmärsinkö väärin, mitä tarkoitit?

Kiitos kuitenkin.

tsehov [08.02.2008 21:04:26]

#

Tuo ylläoleva taitaa olla minulle liian monimutkainen saada toimimaan. No, löysin paljon yksinkertaisemman, mutta en saa sitäkään toimimaan kunnolla.

Skripti:

<html>
<head>
<title> Palaute php </title>
</head>
<body>
<table width="400" align="center">
<tr>
 <td align="center">

<?php
$posti = array(nimi=>$_POST['nimi'], email=>$_POST['email'], viesti=>$_POST['viesti'] );

foreach($posti as $arvo)
{
 if(empty($arvo))
 {
  die("Kirjoita nimesi, e-mailisi ja viestisi!");
  }
}

$osoite = "OMAOSOITE@gmail.com";
$otsikko = "Palautetta kotisivulta";
$viesti = "Nimi: ".$_POST['nimi']."
E-mail: ".$_POST['email']."
Viesti: ".$_POST['viesti']."";

mail ($osoite, $otsikko, $viesti, "From: Palautteet@palaute.fi");

echo "Kiitos palautteestasi!";
?>

 </td>
</tr>
</table>
</body>
</html>

Tämä antaa erroriksi: 'Parse error: syntax error, unexpected T_AS in /var/www/customers/soapfactoryfi/public_html/palaute/palaute.php on line 13'

Jos merkitsen seitsemän riviä kohdasta 'foreach' alkaen // -merkeillä saan skriptin toimimaan, mutta silloinhan se ei tarkista onko viestiä edes kirjoitettu.


Jälleen suuret kiitokset jos joku viitsii auttaa minua.

peg [09.02.2008 00:32:00]

#

Kannattaisi katsoa tuota putkan vinkkiä ja kun sen toiminnan ymmärtää niin kaltaisia juttuja löytyy vinkeistä ja keskusteluista joita kannattaa tonkia ideoiden vuoksi. Kun jotain ei sitten niissä ymmärrä niin kyselee täältä,
mutta se on helpoimmasta päästä.
https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=phpj6

Antti Laaksonen [09.02.2008 23:07:52]

#

Tuossa on palauteskripti, jonka testasin toimivaksi.

*** palaute.html
<form action="palaute.php" method="post">
<p>Nimi:<br>
<input type="text" name="nimi"></p>
<p>Sähköposti:<br>
<input type="text" name="sposti"></p>
<p>Viesti:<br>
<textarea name="viesti"></textarea></p>
<p><input type="submit" value="Lähetä"></p>
</form>
*** palaute.php
<?php
$nimi = $_POST["nimi"];
$sposti = $_POST["sposti"];
$viesti = $_POST["viesti"];

$osoite = "antti.laaksonen@mbnet.fi";
$otsikko = "Palauteviesti";
$teksti = "Nimi: $nimi\nSähköposti: $sposti\n\n$viesti";

mail($osoite, $otsikko, $teksti);

echo "Kiitos palautteesta!";
?>

tsehov [13.02.2008 17:06:28]

#

Tuhannet kiitokset. Tämä toimii.


Sivun alkuun

Vastaus

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

Tietoa sivustosta