Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: lomake/css

Sivun loppuun

samivain [21.10.2006 16:31:07]

#

Minulla on eräillä sivuilla palautesivu, joka sisältää php-lomakkeen. Sivuilla on käytetty css:ää ym. Index.php:ssä on nimetty kaikki sivut tyyliin

$sivut = array("etusivu.html","yritys.html...

Ja itse sivut ovat tyyliä

<div id="asia">
	<div id="header">
	<div id="logo"></div>
	</div><!-- end header -->

	<div id="content">
	<div class="valikko">
	<div class="tasaus_vasen">
	<a href="?sivu=1">Yritys</a> | <a href="?sivu=2"> Rtek kojemallit</a> | <a href="?sivu=3">Referenssit</a> | <a href="?sivu=4">Yhteydenotto</a> | <a href="?sivu=0">Etusivu</a>
	</div><!-- end tasaus_vasen -->
	</div><!-- end valikko -->


	<div class="tasaus_vasen">
<?php


$etunimi = "";
$sukunimi = "";
$vastaus = "";

$lomake_ok = 0;


if ($_POST)
{

    $lomake_ok = 1;


    foreach ($_POST as $kentat =>$kentta) {
       if (strpos($kentta,"cc:")) {
           echo "<p>Lomakkeella oleviin kenttiin ei ole sallittua syöttää merkkijonoa cc:</p>";
           $lomake_ok = 0;
       }
    }

    $etunimi = $_POST['etunimi'];
    $sukunimi = $_POST['sukunimi'];
    $vastaus = $_POST['vastaus'];


    if ($vastaus == "") $lomake_ok = 0;

}


if ($lomake_ok)
{

    $lahettaja = "Etunimi Sukunimi <sampsa@vetelainen.net>";
    $vastaanottaja = "sampsa@vetelainen.net";
    $otsikko = "Viesti lomakkeelta";

    $viesti = "Etunimi: $etunimi\nSukunimi: $sukunimi\nVastaus: $vastaus";


    $headers = "From: " . $lahettaja . "\n";
    $headers .= "MIME-Version: 1.0\n";
    $headers .= "Content-Type: text/plain; charset=iso-8859-1\n";
    $headers .= "Content-Transfer-Encoding: 8bit\n\n";


    $viesti = wordwrap($viesti, 70);
    $lahetyksen_tila = mail($vastaanottaja, $otsikko, $viesti, $headers);


    if ($lahetyksen_tila)
    {
        echo "<h2>Tiedot lähetettiin sähköpostiin</h2>";
    }
    else
    {
        echo "<h2>Lähetys ei onnistunut</h2>";
    }

    echo "<pre>$viesti</pre>";
}
else
{

   ?>

    <h3>Vastaa joka kenttään!</h3>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
        <p>Etunimi: <input type="text" name="etunimi" value="<?php echo $etunimi; ?>"></p>
        <p>Sukunimi: <input type="text" name="sukunimi" value="<?php echo $sukunimi; ?>"></p>
        <p>Mitä pidit kotisivuistani: <input type="text" name="vastaus" value="<?php echo $vastaus; ?>"></p>
        <p><input type="submit" value="Lähetä"></p>
    </form>

    <?php
}
?>
	</div><!-- end tasaus_vasen -->
	</div><!-- end content -->

	<div id="footer">
	</div><!-- end footer -->
	</div>

	</div><!-- end asia -->

Mistä johtuu, että tästä lomakkeesta ei lähde tiedot sähköpostiini, mutta jos laitan tämän sivun vaikkapa johonkin toiseen kansioon, missä tyylisivut ei enää toimi niin tiedot lähtevät hyvin.

Tässä ei toimi http://samivain.propelli.cop.fi/rtek/index.php?sivu=4

Mutta tässä toimii http://samivain.propelli.cop.fi/palaute.php

Missä vika? Kertoisitteko pikaisesti!

(Mod. edit: Käytäthän jatkossa kooditageja.)

Olga [21.10.2006 16:57:46]

#

Sun pitää laittaa tuohon formin action-attribuuttiin mukaan se sivu-muuttuja (tyyliin $_SERVER['PHP_SELF'] . "sivu=" . $_GET['sivu']).

tsuriga [21.10.2006 21:11:53]

#

<form action="
<?php
echo $_SERVER['SCRIPT_NAME'];
if (isset($_GET['sivu']))
    echo htmlentities($_GET['sivu']);
?>
" method="POST">

samivain [21.10.2006 22:24:21]

#

kiitos vastauksista! Ei kuitenkaan vielä toimi. Kokeilin tuota viimeisenä mainittua keinoa, mut nyt lähettämisen jälkeen tulee virheilmoituksia ja selain yrittää hypätä sivulle http://samivain.propelli.cop.fi/rtek/index.php4 eihä tollasta oo olemassakaa

index.php on tämmönen

<!DOCTYPE html public "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Rtek Ilmastointi</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Content-Language" content="fi" />
<link rel="stylesheet" type="text/css" href="tyyli.css">
</head>

<body>

	<table border="0" cellspacing="0" cellpadding="0" width="555px" align="center">
	<tr>
	<td>
   	<div id="body">
     	<?php
     	?>
     	<?PHP
      	if(!isset($_GET['sivu']))
        $_GET['sivu'] = 0; // jos sivu muuttujaa ei laitettu, mennään etusivulle
      	$sivut = array("etusivu.html", "yritys.html", "kojemallit.html", "referenssit.html", "palaute.php", "rpm_levy.html", "rpm_pyoriva.html", "rvm_special.html", "rvm_classic.html", "modul.html");
      	include($sivut[$_GET['sivu']]);
    	?>
   	</div>
	</td>
	</tr>

</body>
</html>

Neuvoisitteko taas, kiitos!

Onko vika index.php:ssä?

(Mod. edit: Eikö sana kuulu? Käytä kooditageja! Lisäksi voisit laittaa pitkiin riveihin koodissa välejä (kuten nyt tuonne array-listaan lisäilin), jotta ne eivät rikkoisi leiskaa vaan rivittyisivät.)

Metabolix [21.10.2006 22:46:14]

#

GET-taulukkoa (ja muita vastaavia) ei ainakaan pitäisi voida muuttaa. Laita siis vaikkapa näin:

$sivu = isset($_GET['sivu']) ? $_GET['sivu'] : 0; // Jos asetettu, otetaan se, muuten laitetaan nolla.
include($sivut[$sivu]);

tsuriga [21.10.2006 22:54:41]

#

Iffistä puuttuu { ja tuo ehtolause pätee nyt vain sitä seuraavaan riviin.

Ps. Edellisestä viestistä unohtui tietysti "?sivu=" sieltä ennen htmlentitiessiä.

Olga [22.10.2006 01:08:47]

#

Ja ittelläni uupui näköjään kysymysmerkki välistä. Ja kyllä GET- ja muiden vastaavien taulukoiden muuttaminen onnistuu siinä missä muidenkin.

tsuriga [22.10.2006 01:56:55]

#

Kyllä se onnistuu, mutta ei ole suotavaa mennä muuttelemaan valmiiksi määriteltyjä taulukoita / muuttujia.

samivain [22.10.2006 02:10:28]

#

tsuriga kirjoitti:

Iffistä puuttuu { ja tuo ehtolause pätee nyt vain sitä seuraavaan riviin.

Ps. Edellisestä viestistä unohtui tietysti "?sivu=" sieltä ennen htmlentitiessiä.

Kertoisitko tarkemmin mihin nuo pitää tarkalleen sijoittaa. Tää on viel hiukan vierasta minulle.

Kiitos tähän astisista vastauksista

tsuriga [22.10.2006 02:53:38]

#

{ määrittelee lohkon alun ja jos ja kun haluat muodostaa ehtolausekkeelle lohkon, laitat aloitusmerkin ehtolauseen jälkeen eli

if (ehto) {
    tähän toiminnot, jotka ajetaan, kun ehto toteutuu
}

.

Tuon jälkimmäisen "?sivu=" sijoituspaikan kerroinkin. Jos ei suoraan aukea, niin tässä sinun tarvitsee vain miettiä, missä kohtaa formia tarvitset osoitteeseen "?sivu" (jos missään, käytin referenssinä edellistä Olgan viestiä). Muutaman kerran kun tulostat sen eri kohtaan ja katselet lähdekoodista, että mihinkäs se nyt sitten tulostuikaan, niin eiköhän se siitä.

Kannattanee tutustua ohjelmoinnin perusteisiin, vaikkapa Putkan PHP-oppaan kautta.

samivain [22.10.2006 11:31:54]

#

Joo nyt sain tuon toimiin!

Muutin kuitenkin lomakkeiden sisältöä niin nyt tiedot ei enää lähdeä sähköpostiin.

Se on siis tässä

<?php


$etunimi = "";
$sukunimi = "";
$vastaus = "";

$lomake_ok = 0;


if ($_POST)
{

    $lomake_ok = 1;


    foreach ($_POST as $kentat =>$kentta) {
       if (strpos($kentta,"cc:")) {
           echo "<p>Lomakkeella oleviin kenttiin ei ole sallittua syöttää merkkijonoa cc:</p>";
           $lomake_ok = 0;
       }
    }

    $yritys = $_POST['yritys'];
    $nimi = $_POST['nimi'];
    $osoite = $_POST['osoite'];


    if ($vastaus == "") $lomake_ok = 0;

}


if ($lomake_ok)
{

    $lahettaja = "Etunimi Sukunimi <sampsa@vetelainen.net>";
    $vastaanottaja = "sampsa@vetelainen.net";
    $otsikko = "Viesti lomakkeelta";

    $viesti = "Etunimi: $yritys\nnimi: $nimi\nosoite: $osoite";


    $headers = "From: " . $lahettaja . "\n";
    $headers .= "MIME-Version: 1.0\n";
    $headers .= "Content-Type: text/plain; charset=iso-8859-1\n";
    $headers .= "Content-Transfer-Encoding: 8bit\n\n";


    $viesti = wordwrap($viesti, 70);
    $lahetyksen_tila = mail($vastaanottaja, $otsikko, $viesti, $headers);


    if ($lahetyksen_tila)
    {
        echo "<h4>Tiedot lähetettiin sähköpostiin</h4>";
    }
    else
    {
        echo "<h3>Lähetys ei onnistunut</h3>";
    }

    echo "<pre>$viesti</pre>";
}
else
{

   ?>


    <form action="<?php echo $_SERVER['PHP_SELF'] . "?sivu=" . $_GET['sivu']; ?>" method="post">
        <table>
	<tr>
	<td width="200"><p>Yritys:</td>
	<td><input type="text" name="yritys" value="<?php echo $yritys; ?>"></p></td>
	</tr>

	<tr>
	<td width="200"><p>nimi: </td>
	<td><input type="text" name="nimi" value="<?php echo $nimi; ?>"></p></td>
	</tr>

	<tr>
	<td width="200"><p>Osoite: </td>
        <td><input type="text" name="osoite" value="<?php echo $osoite; ?>"></p></td>
	</tr>
	<tr>
	<td>
        <p><input type="submit" value="Lähetä"></p></td>
	</tr>
	</table>
    </form>

    <?php
}
?>

tsuriga [22.10.2006 13:33:22]

#

Käytä htmlentitiessiä ja SCRIPT_NAMEa, kuten ylempänä mainitsin.


Sivun alkuun

Vastaus

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

Tietoa sivustosta