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.
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>
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/
Eli siis rivillä: $virheet = array();
Mikähän nyt on vialla?
Virhe on varmaankin juuri ylemmällä rivillä. Puuttuisiko sieltä puolipiste?
Nyt en oikein ymmärrä. Ylemmällä rivillä ei ole muuta kuin '<?php '. Vai ymmärsinkö väärin, mitä tarkoitit?
Kiitos kuitenkin.
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/
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.
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.
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>
Tuhannet kiitokset. Tämä toimii.
Aihe on jo aika vanha, joten et voi enää vastata siihen.