Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Ei keksejä aloittelijoille?

adjpg [12.10.2004 09:20:48]

#

Hei, olen täysin noviisi php:n kanssa.
Tarkoituksenani on tehdä ohjelmapätkä, joka html-lomakkeesta lähettäisi kaksi erityyppistä sähköpostia, 4 eri osoitteeseen. Samalla ohjelma tarkistaisi käyttäjän id_n, joko niin että käyttäjä tulee sen kanssa lomakkeelle (sivu.php?id=numerosarja) tai lomake luo uuden id_n.

Ongelmani on, että kun lomakkeelta joudun tarkistamaan id_n, niin en saa sitä siirrettyä $_POST metodilla, vaan joudun kirjoittamaan cookien ja tämän jälkeen ohjelma ei toimikaan.

Jos on mahdollista niin lähetän tässä ensin lomakkeen ja jos joku viitsii kertoa minkä virheen teen ja myöhemmin lähetän php-postikäsittelijän.

Kiitoksia.

<?php

//tyhjennän idn
setcookie("id", "");

if ($id="0") {
		$id=rand(0, 1000000)*date('s')*date('m')*date('h');
		$suosittelija1 = "tyhjä";
		$suosittelija2 = "tyhjä";
		$suosittelija3 = "tyhjä";
	}
else
	$file="file.dat";

	$file_handle = fopen($file,"r");
	$line= 0;

	while (!feof ($file_handle) ){
		$teksti = fgets($file_handle,filesize($file));
		$line = $line + 1;
		$teksti_=chop($merkit);
		$sarake = preg_split("/####/",$teksti);
		if ($sarake[0]==$id) {
			$sarake[0].=$id; //tunnistenumero
			$sarake[1].=$suosittelija1; //suosittelija 1
			$sarake[2].=$suosittelija2; //suosittelija 2
			$sarake[3].=$suosittelija3; //suosittelija 3
			}
}
$master_id=$id;
setcookie("id", $master_id);
setcookie("suosittelija1", $suosittelija1);
setcookie("suosittelija2", $suosittelija2);
setcookie("suosittelija3", $suosittelija3);

fclose($file_handle);

?>

<html>
<head>
      <title>tilaus- ja suosittelulomake</title>
</head>

<body  background="tausta.gif">
	<b>
		<font color="#1B5433" face="Arial" size="3"><br>
		TILAUSLOMAKE
		</font>
	</b>


<FORM NAME="redir" enctype="application/x-httpd-php" action="posti.php"
METHOD="post">
<input type=hidden name="required"
value="tilauslaji,nimi,osoite,postitoimipaikka">
<input type=hidden name="redir" value= "kiitos.html">

<table border="0" cellpadding="0" cellspacing="0" width="568">
    <tr>
        <td width="203">
<font face="Arial" size="2">Tilaus:</font>
</td>
            <td width="361">
<select size="1" name="tilauslaji"><option selected>- valitse tilauslaji - </option><option>1</option><option>2</option><option>3</option><option>4</option><option>5</option></select>*
</td>
        </tr>
<tr>
<td width="203">
<font face="Arial" size="2">Nimi:</font></td>
            <td width="361">
<input type="text" name="nimi" size="35">*
</td>
</tr>
        <tr>
            <td width="203">
<font face="Arial" size="2">Osoite:</font>
</td>
            <td width="361">
<input type="text" name="osoite" size="35">*
</td>
        </tr>
        <tr>
            <td width="203">
<font face="Arial" size="2">Postitoimipaikka
ja -numero:</font>
</td>
            <td width="361">
<input type="text" name="postitoimipaikka"
size="20">*
</td>
        </tr>
        <tr>
            <td width="203">
<font face="Arial" size="2">Puhelin:</font>
</td>
            <td width="361">
<input type="text" name="puhelinnumero"
size="20">
</td>
        </tr>
<tr>
<td colspan="2" width="564">
<font face="Arial" size="2">* merkityt ovat pakollisia.
<br>
<br>
<br>
<hr>
Jos maksaja on eri kuin tilaaja, täytetään nämä:
<br>
<br>
</font>
</td>
</tr>
        <tr>
            <td width="203">
<font face="Arial" size="2">Maksajan nimi:</font>
</td>
            <td width="361">
<input type="text" name="maksajan_nimi"
size="35">
</td>
        </tr>
        <tr>
            <td width="203">
<font face="Arial"
size="2">Laskutusosoite:</font>
</td>
            <td width="361">
<input type="text" name="laskutusosoite"
size="35">
</td>
        </tr>
        <tr>
            <td width="203">
<font face="Arial" size="2">Puhelin:</font>
</td>
            <td width="361">
<input type="text"
name="maksajan_puhelinnumero" size="20">
</td>
        </tr>
<tr>
<td colspan="2" width="564">
<font face="Arial" size="2">
<br>
<br>
<br>
<hr>
<b><u>Suosittele sähköpostitse tuttavallesi:</u></b>
</i>
<br>
<br>
Nimi:<input type="text"
name="vastaanottaja1" size="30">&nbsp;&nbsp;&nbsp;Osoite:<input type="text"
name="vastaanottaja_os1" size="30">
<br>
Nimi:<input type="text"
name="vastaanottaja2" size="30">&nbsp;&nbsp;&nbsp;Osoite:<input type="text"
name="vastaanottaja_os2" size="30">
<br>
Nimi:<input type="text"
name="vastaanottaja3" size="30">&nbsp;&nbsp;&nbsp;Osoite:<input type="text"
name="vastaanottaja_os3" size="30">
<br>
</font>
</td>
</tr>
    <tr>
<td colspan="2" width="564">
<font face="Arial" size="2">
<br>
<br>
<br>
<input type="submit" size="20" value="Valmis - Tilaa painamalla tästä" name="LahetaTilaus">
&nbsp;&nbsp;<input type="reset" value="Tyhjennä lomake" name="TyhjennaLomake" size="20">
</font>
</td>
</tr>




</FORM>




</body>
</html>

Ai niin, unohdin mainita, että koodaus ei ole vielä pää-asiallinen tietokoneeni käyttömuoto, mutta kiinnostus on kovin kasvanut.

Enkä pyydä mitään valmiita vastauksia, vaan minulle voi kirjoittaa ihan suomeksi ehdotuksia ongelmanratkaisuksi.

Kiitos etukäteen.

Tämä muuten on paras suomenkielinen ohjelmointisivusto mitä tiedän....:D

adjpg [12.10.2004 23:42:14]

#

Ihan tällainen typerä kysymys, mutta eikö yllämainitun pätkän pitäisi toimia?

Siis joko niin että sivulle tullaan http-osoite/sivu.php?id=nrosarja tai pelkästään osoittella http-osoite/sivu.php ?

Pahoittelen että meikäläisen ohjelmointiaivolohkosta löytyy paljon mustia aukkoja....

Tempfile [13.10.2004 00:29:09]

#

Voisit kertoa myös, millä tavalla tuo ei toimi, mitä virheilmoituiksia antaa, sitten osaisi kertoa paremmin onko vika koodissa vaiko kenties palvelimen asetuksissa.

adjpg [13.10.2004 10:10:36]

#

Call to undefined function: array() in /hakemistot/post.php on line 43

joka taas sisältää seuraavan tiedon rivillä 43

$master_id = $_COOKIE("id");

Ongelmani on siis mm. se, että kun tilaus.php:n id_tunnus pitäisi siirtää sinne post.php:lle joka taas lähettää tiedot eteenpäin mail komennolla. (itse posti osoitteeseen 1 lähtee ihan ok, mutta mitään id / suosittelija tietoja ei lähde.)

Listaan tähän nyt tuon post.php:n kanssa.

<?php

$errors=false;
$errmsg="";

@extract($_POST);
$tilauslaji = stripslashes($tilauslaji);
$nimi = stripslashes($nimi);
$osoite = stripslashes($osoite);
$postitoimipaikka = stripslashes($postitoimipaikka);
$puhelinnumero = stripslashes($puhelinnumero);
$maksajan_nimi = stripslashes($maksajan_nimi);
$laskutusosoite = stripslashes($laskutusosoite);
$maksajan_puhelinnumero = stripslashes($maksajan_puhelinnumero);
$vastaanottaja1 = stripslashes($vastaanottaja_1);
$vastaanottaja2 = stripslashes($vastaanottaja_2);
$vastaanottaja3 = stripslashes($vastaanottaja_3);
$vastaanottaja_os1 = stripslashes($vastaanottajan_os1);
$vastaanottaja_os2 = stripslashes($vastaanottajan_os2);
$vastaanottaja_os3 = stripslashes($vastaanottajan_os3);
if (empty($tilauslaji)) {
		$errors = true;
		$errmsg .="Valitse tilauslaji<br/>";
		}

if (empty($nimi)) {
		$errors = true;
		$errmsg .="Nimi puuttuu<br/>";
		}

if (empty($osoite)) {
		$errors = true;
		$errmsg .="Osoite puuttuu<br/>";
		}

if (empty($postitoimipaikka)) {
		$errors = true;
		$errmsg .="Postitoimipaikka ja -numero puuttuvat<br/>";
		}

$master_id = $_COOKIE("id");
$suosittelija1 = $_COOKIE("suosittelija1");
$suosittelija2 = $_COOKIE("suosittelija2");
$suosittelija3 = $_COOKIE("suosittelija3");

$id_varm=$master_id;

$osoite1 = "oma@posti.fi";

$file2="suos.dat";
$file_handle2 = fopen($file2,"r");
$rivi= 0;
while (!feof ($file_handle2) ){
	$teksti = fgets($file_handle2,filesize($file2));
	$rivi = $rivi + 1;
	$teksti_=chop($merkit);
	$sarake = preg_split("/####/",$teksti);
        if ($sarake[0]==$id_varm) {
        sarake[0].=$id;
	$sarake[1].=$suosittelija1;
	$sarake[2].=$suosittelija2;
	$sarake[3].=$suosittelija3;
	$sarake[4].=$master_id;
	}

$aihe1="otsikko1";
$vakioviesti1="Suosittelijat: $id, $master_id, $suosittelija1, $suosittelija2, $suosittelija3\n\nTilaaja: $nimi, $osoite, $postitoimipaikka, $puhelinnumero,\n\n $maksajan_nimi, $laskutusosoite, $maksajan_puhelinnumero, $tilauslaji.\n";

$body1=$vakioviesti1;
fclose($file_handle2);




$file="suos.dat";
$file_handle = fopen($file,"r");
$line = 0;
while (!feof ($file_handle) ){
$teksti = fgets($file_handle,filesize($file));
	$line = $line + 1;
	$teksti_=chop($merkit);
	$sarake = preg_split("/####/",$teksti);
	if ($sarake[0]==$id) {
	$sarake[2].=$vs_suosittelija1;
	$sarake[3].=$vs_suosittelija2;
	}
	$nimi = $vs_suosittelija3;
}
$aihe="$vs_suosittelija1,nbsp;$vs_suosittelija2,nbsp;$vs_suosittelija3, viesti";
$vakioviesti="Hei, $nimi,\nviesti\nAlla olevasta linkistä pääset suoraan tilaamaan.\n\n Terveisin,\n $vs_suosittelija1, $vs_suosittelija2, $vs_suosittelija3";
fclose($tiedosto_kahva);

$kotisivu="/kotisivu/tilaus.php?id=";

$satunnaisluku=rand(0, 1000000)*date('s')*date('m')*date('h');

$body=$vakioviesti.$kotisivu.$satunnaisluku;


if ( ! $errors ) {
     mail($vastaanottaja_os1,$aihe,$body);
     mail($vastaanottajan_os2,$aihe,$body);
     mail($vastaanottajan_os3,$aihe,$body);
     mail($osoite,$aihe1,$body1);
}

$tiedosto_kahva = fopen($tiedosto,"r") or die("Tekstitiedostoa ei löydy");
$rivit = fread($tiedosto_kahva,filesize($tiedosto));
fclose($tiedosto_kahva);

$tiedosto_kahva = fopen($tiedosto, "r+");
$lukko = flock($tiedosto_kahva, 1);
	if ($lukko) {
	fputs($tiedosto_kahva, "$satunnaisluku####$vs_suosittelija1####$vs_suosittelija2####$vs_suosittelija3####$master_id");
	$lukko = flock($tiedosto_kahva,3);
	}
fclose($tiedosto_kahva);
if ( $errors ) {
    echo("<html><head><title>virhe</title></head>\n");
    echo("<body>\n<b>Lähetys epäonnistui!</b><br/>\n");
    echo($errmsg);
    echo("\n</body></html>");
	}
else {
  header("location: $redir");
}

?>

tuo suos.dat on chmodattu 777.

Muuten, tunnustan, että tuo tiedoston luku/kirjoitus rutiini on alkuperin kotoisin mbnetin nettikortit ohjelmasta, joka mielestäni toi ihan ok ja nuo mail-komentorutiinit olen opetellut rennin hyvästä php-ohjelmasta.

Muistutan että tämä on eka php-ohjelmani (ei voisi niinkuin helpompi olla, näin aluksi), mutta tähän asti olen pärjännyt ilman mitään suurempia ohjelmointeja www-sivujen kanssa. Tietenkään mitään järkeä siinä ei ole, että www-sivut kumisevat staattisuudessaan....:)

Kannattaisko muuten tuossa post.php:ssä laittaa kaikki tiedoston luku-/ ja kirjoitusrutiinit yhteen? Eli samaan syssyyn, eikä avata 3 kertaa samaa tiedostoa?

Tomix [13.10.2004 11:01:45]

#

Kysymyksiisi sen enempää kantaa ottamatta kerron, että cookie pitää määritellä näin;

$_COOKIE['id'];

Ei näin:

$_COOKIE('id);

adjpg [14.10.2004 10:04:47]

#

Kiitos. :)

Vastaus

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

Tietoa sivustosta