Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP Palautelomake ongelma?

Sivun loppuun

Nimble [04.04.2008 13:15:45]

#

Elikkä tarkoitus olisi tehdä laajempi kaavake mihin tulisi radiobuttoneita yms.. Niissä nyt ei ole mitään ongelmaa vaan lähinnä siinä että saisin toimimaan sen lähetyksen viisaasti. Elikkä haluaisin silleen että jos jotain tietoja puuttuu listalta niin menisi vaikka virhe.htm sivulle jossa lukisi että "tiedoista puuttuu jotain pakollista" tjms... Ja sit tietenkin silleen että kun saanut lähetettyä niin se menee vaikka kiitos.htm sivulle.... Olen käyttänyt pohjana http://jaaari.no-ip.com/foorumi/viewtopic51659.html sivun koodia mutta tuo die("Kirjoita nimesi, e-mailisi ja viestisi!"); sekoittaa koko sivun jos sattuu joku tieto puuttumaan. Siksi haluaisin tehdä edellämainitsemani muutoksen sivuun. Kuinka tälläinen onnistuu?

Olen kokeillut ohjelmointiputkassa olevia palaute lomakkeita mutta jostain syystä ne eivät toimi?

peg [04.04.2008 13:27:34]

#

auttaisko tämä https://www.ohjelmointiputka.net/keskustelu/16611-php5-lomakkeen-käsittely

Nimble [04.04.2008 13:32:12]

#

ei taida helpottaa :D

hauki [04.04.2008 13:33:37]

#

php:llä tehtynä vaati jotain tällästä:

$nimi=$_POST['nimi'];
if(empty($nimi)) header("location:virhe.php");

sitten tallennus: ...

ja kiitos sivulle:

header("location:kiitos.php");

javascriptillä sais niin että tiedot lomakkeesta ei katoa(Opera säilyttää muutenkin)mutta jostain syystä kaikkilla ei ole javascrip päällä.

Nimble [04.04.2008 13:58:13]

#

<?
$posti = array
  (
  nimi=>$_POST['nimi'],
  syntymäaika=>$_POST['saika'],
  lähiosoite=>$_POST['osoite'],
  postinumero=>$_POST['postin'],
  postitoimipaikka=>$_POST['postit'],
  puhelinnumero=>$_POST['puh'],
  paikka=>$_POST['paikka'],
  kokemus=>$_POST['radio'],
  itsestä=>$_POST['itse']
  );

foreach ($posti as $arvo)
{
  if (empty($arvo))
  {
  die("Joku tiedoistasi puuttuu");
  }
}
?>

Yritin if(empty($nimi)) header("location:virhe.php"); survoa joka väliin mutta ei pelannu :D

Mod. lisäsi kooditagit

Short Php [04.04.2008 13:59:09]

#

header("Location: jokutiedoistapuuttuu.html");

Nimble [04.04.2008 14:04:39]

#

<?
$posti = array
(
nimi=>$_POST['nimi'],
syntymäaika=>$_POST['saika'],
lähiosoite=>$_POST['osoite'],
postinumero=>$_POST['postin'],
postitoimipaikka=>$_POST['postit'],
puhelinnumero=>$_POST['puh'],
paikka=>$_POST['paikka'],
kokemus=>$_POST['radio'],
itsestä=>$_POST['itse']
);

foreach ($posti as $arvo)
{
if (empty($arvo))
{
header("Location: virhe.html");
}
}
?>

Eli jos sen pitäisi noin toimia niin ei toimi :S Pystyy lähettää tyhjän lomakkeen.. Ei hyva..
Voi voi.. Itkun kohta väännän tämän takia :D

Mod. lisäsi kooditagit

peg [04.04.2008 14:35:55]

#

pitäisikö sen toimia näin?
http://62.44.216.148/harkat/lomakkeet/lomake_tarkistus.php

Vasta_alkaja [04.04.2008 22:36:53]

#

Tässä tietokantapohjainen esimerkki, jota voit lähteä työstämään paremmaksi.

<?php
/******************************************************************************/
if(headers_sent() == false)
{
  header("Expires: -1");
  header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  header("Cache-Control: no-store, no-cache, must-revalidate");
  header("Cache-Control: post-check=0, pre-check=0", false);
  header("Pragma: no-cache");
}
/******************************************************************************/
$conn = mysql_connect(localhost, tunnus, salasana) or die ("Yhteys tietokantaan epäonnistui");
if(!mysql_select_db(tietokanta,$conn)){
  die();
}
/******************************************************************************/
if(!empty($_REQUEST['tallenna']) && $_REQUEST['tallenna'] == 'tallenna'){
 TallennaTiedot();
}
/******************************************************************************/
?>
<html>
<head>
<style>
table{
 border:1px solid black;
 padding:4px;
}
table td{
 background:whitesmoke;
}

input:hover{
 background:yellow;
}
.otsikko {
 text-align:center;
 background:black;
 color:yellow;
 font-weight:bold;
}
</style>
</head>
<body>
<form name="esimerkki" method="post">
<input type="hidden" value="tallenna" name="tallenna">
<?
/******************************************************************************/
LuoTaulu();
/******************************************************************************/
function LuoTaulu()
{
 $taulu = array(
  '1'=>'etunimi',
  '2'=>'sukunimi',
  '3'=>'lahiosoite',
  '4'=>'postinumero',
  '5'=>'postitoimipaikka'
 );

 echo '<table cellspacing="0">';
 echo '<tr><td colspan="2" class="otsikko"> For silmukalla luotu taulu<td></tr>';

 foreach($taulu as $id => $tiedot)
 {
  echo '<tr><td>' . ucfirst($tiedot) .'</td>';
  echo '<td><input type="text" id="'. $id .'" name="' .$tiedot .'" value=""></td></tr>';
 }
 echo '</table>';

 echo '<br />';

 echo '<table>';
 echo '<tr><td colspan="2" style="background:black;"><input size="30" type="submit" value="Tallenna tiedot"><td></tr>';
 echo '</table>';
}
/******************************************************************************/
function TallennaTiedot()
{
  if(empty($_REQUEST['etunimi']))
  {
    echo 'Etunimi on ainakin täytettävä, tai tullee virhettä peliin.';
    return;
  }

  $k = sprintf("REPLACE INTO taulu SET
  etunimi='%s',
  sukunimi='%s',
  lahiosoite='%s',
  postinumero=%d,
  postitoimipaikka='%s',
  luotu=NOW()",
  htmlspecialchars($_REQUEST['etunimi']),
  htmlspecialchars($_REQUEST['sukunimi']),
  htmlspecialchars($_REQUEST['lahiosoite']),
  intval($_REQUEST['postinumero']),
  htmlspecialchars($_REQUEST['postitoimipaikka'])
  );

  $t = mysql_query($k);
  if(!$t){
    echo mysql_error();
  }
  else{
    echo '<p style="border:1px solid black; padding:4px;  background:whitesmoke;"> Tiedon tallentaminen onnistui </p>';
  }
}
/******************************************************************************/
?>
</form>
</body>
</html>

Tietokanta

 CREATE TABLE `taulu` (
  `jarjestysnumero` int(2) NOT NULL auto_increment,
  `etunimi` char(20) default NULL,
  `sukunimi` char(35) default NULL,
  `lahiosoite` char(25) default NULL,
  `postinumero` int(5) unsigned zerofill default '00000',
  `postitoimipaikka` char(20) default NULL,
  `luotu` datetime NOT NULL,
  PRIMARY KEY (`jarjestysnumero`),
  UNIQUE KEY `etunimi` (`etunimi`,`sukunimi`,`lahiosoite`,`postinumero`,`postitoimipaikka`)
  )

Nimble [05.04.2008 18:07:49]

#

Taitaa olla joku härö palvelimella kun toi php ei pelaa ollenkaan? Mut se koodi taas pelaa mitä aijemmin käytin (jota en haluais käyttää) :D

Vasta_alkaja [05.04.2008 21:50:52]

#

Tätä siis vissiin käytit. Eli muutokset tähän. Huom.. Ei testattu.

<html>
<head>
<title> Palaute html </title>
</head>
<body>
<?php
// Tarkistus ja action
if(empty($_REQUEST['nimi'])){
// Tänne jos nimi on tyhjä
$action = 'virhe.html';
}
else{
// Tänne siis jos nimi ei ole tyhjä
$action = 'palaute2.php';
}
?>

<form action="<?php echo $action; ?>" method="post">
<table width="400" border="0" align="center">
<tr>
<td>Nimesi:<br><input type="text" name="nimi" size="60"></td>
</tr>

<tr>
<td>E-mailisi:<br><input type="text" name="email" size="60"></td>
</tr>

<tr>
<td>Viestisi:<br><textarea name="viesti" cols="45" rows="4"></textarea></td>
</tr>
<tr>
<td align="center"><input type="submit" value="Lähetä posti"> <input type="reset" value="Tyhjennä kentät"></td>
</tr>
</table>
</form>

</body>
</html>

Tämä siis sivulla palaute2.php

<html>
<head>
<title> Palautelomake </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 = "omaosoitteeni@hotmail.com";
$otsikko = "Palautetta kotisivulta";
$viesti = "Nimi: ".$_POST['nimi']."
E-mail: ".$_POST['email']."
Viesti: ".$_POST['viesti']."";

mail ($osoite, $otsikko, $viesti, "From: omaosoitteeni@hotmail.com");

echo "Kiitos palautteestasi!";
?>
</td>
</tr>
</table>
</body>
</html>

virhe.html

<html>
<head>
</head>
<body>
Virhe tapahtui :: Jee
</body>
</html>

tsuriga [05.04.2008 22:13:35]

#

Käytät tuossa $posti-taulukon avaimina vakioita, et merkkijonoja (nimi != 'nimi'). Tosin miksi edes kopioit ne omaan taulukkoon, voithan loopata tuota $_POST-taulua. Lisäksi tuolta puuttunee $viesti-muuttujan määrittelystä muutamat pisteet mikäli siihen on tarkoitus mahduttaa myös lähetetty email-osoite ja itse viesti tuon nimen lisäksi. Molemmista virheistä kyllä tulkkikin valittaa, luetaan niitä virheilmoituksia.

Miksi laitat testaamattomana jotain noinkin pitkää?


Sivun alkuun

Vastaus

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

Tietoa sivustosta