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"> Osoite:<input type="text" name="vastaanottaja_os1" size="30"> <br> Nimi:<input type="text" name="vastaanottaja2" size="30"> Osoite:<input type="text" name="vastaanottaja_os2" size="30"> <br> Nimi:<input type="text" name="vastaanottaja3" size="30"> 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"> <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
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....
Voisit kertoa myös, millä tavalla tuo ei toimi, mitä virheilmoituiksia antaa, sitten osaisi kertoa paremmin onko vika koodissa vaiko kenties palvelimen asetuksissa.
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?
Kysymyksiisi sen enempää kantaa ottamatta kerron, että cookie pitää määritellä näin;
$_COOKIE['id'];
Ei näin:
$_COOKIE('id);
Kiitos. :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.