Ongelmana on, että skripti ei päästä läpi lainkaan. Kertoo vain asettamani virhesanoman, että kentät ovat pakollisia...
Mitä skriptissä on väärin? Sen pitäisi päästää läpi, jos vaaditut kentät ovat täytetty.
Alla lomake ja skripti.
HTML-lomake:
<form action="suorittaja.php" method="POST" enctype="application/x-www-form-urlencoded"> <p>Nimesi:</p> <input type="text" name="nimi" title="Nimi" /> <p>Sähköpostisi:</p> <input type="text" name="sposti" title="Sähköposti" /> <p>Kotisivusi:</p> <input type="text" name="kotisivu" title="Kotisivu" /> <p>Viesti:</p> <textarea name="viesti" value="Viesti" title="Viesti"></textarea> <input type="submit" title="Lähetä" /> </form>
PHP-skripti:
<?php if((!$nimi) || ($sposti) || ($viesti)){ $error = "<p><strong>Nimi, sähköposti ja viesti ovat pakollisia!</strong></p>"; $linkki = "<a href=\"http://osoite.takaisin.com/\">Takaisin</a>"; $display = $error."<br />".$linkki; } else{ $nimi = $_POST['nimi']; $sposti = $_POST['sposti']; $kotisivu = $_POST['kotisivu']; $viesti = $_POST['viesti']; $file = "tallennus.html"; while(file_exists($file)){ $write = fopen($file, "a"); fwrite($write, "<table border=\"0\">"); fwrite($write, "<tr><th>Hakemus</th></tr>"); fwrite($write, "<tr><td>".$nimi."</td></tr>"); fwrite($write, "<tr><td>".$sposti."</td></tr>"); fwrite($write, "<tr><td>".$kotisivu."</td></tr>"); fwrite($write, "<tr><td>".$viesti."</td></tr>"); fwrite($write, "</table>"); fclose($write); if($write == TRUE){ foreach($_POST as $text){ mail("mail@mail.com","Uusi Hakemus!","Uusi hakemus tullut!"); /*header("Location: http://osoite.takaisin.com/");*/ $display = "<p><strong>Hakemuksen lähetys onnistui! <a href=\"http://osoite.takaisin.com\">Palaa tästä takaisin</a>.</strong></p>"; } } } } echo $display; ?>
Kokeileppas:
Not working.....
Bandido89 kirjoitti:
Not working.....
antaako saman herjan?
*Pikkusen korjasin ensimmäistä viestiä*
Et ole asettanut muuttujia ennen tarkistusta, eli siirrä esittelyt:
$nimi = $_POST['nimi']; $sposti = $_POST['sposti']; $kotisivu = $_POST['kotisivu']; $viesti = $_POST['viesti'];
ihan skriptin alkuun niin tarkistuksetkin toimivat (tosin omassa koodissasi ehdot näyttäisivät olevan hieman väärin, Extremellä näyttäisi olevan tarkistusehdot jo toiminnaltaan oikein).
Sillä ei monesti ole merkitystä, että mihin ne laittaa, kun PHP-prosessori lukee tiedoston kertaalleen läpi ennen suorittamista. Ja tuo on melko varmaa tietoa. Ei toimi edelleenkään : /
Lisäys: Ja kummempaa on, että olen saanut tämän vielä toimimaan joskus ihan samalla koodilla, mitä minulla nyt on. Tuo tosin on väärin tuossa kirjotettuna, ei ole oikein nuo ehdot. Päivitän ne...
<?php $nimi = $_POST['nimi']; $sposti = $_POST['sposti']; $kotisivu = $_POST['kotisivu']; $viesti = $_POST['viesti']; if($nimi=="" || $posti=="" || $viesti==""){ $errors=1; $error.="Et täyttänyt vaadittavia kenttiä"; if($errors==1) echo $error; } else { $file = "/home/finwe/domains/finwe.arkku.net/public_html/hakemukset/hakemukset.html"; while(file_exists($file)){ $write = fopen($file, "a"); fwrite($write, "<table border=\"0\">"); fwrite($write, "<tr><th>Hakemus</th></tr>"); fwrite($write, "<tr><td>".$nimi."</td></tr>"); fwrite($write, "<tr><td>".$sposti."</td></tr>"); fwrite($write, "<tr><td>".$kotisivu."</td></tr>"); fwrite($write, "<tr><td>".$viesti."</td></tr>"); fwrite($write, "</table>"); fclose($write); echo "Toiminto onnistui!"; if($write == TRUE){ foreach($_POST as $text){ mail("goldendragonmaster@gmail.com","Uusi Hakemus!","Uusi hakemus tullut!"); /*header("Location: http://finwe.arkku.net/index.php?sivu=palvelut");*/ $display = "<p><strong>Hakemuksen lähetys onnistui! <a href=\"http://finwe.arkku.net/index.php?sivu=palvelut\">Palaa tästä takaisin</a>.</strong></p>"; } } } } ?> <?php echo $display; ?>
Tuollainen se on nyt.
-Lisää tekstit putkeen ja kirjoita vain kerran tuolla fwritellä, tässä tilanteessa ehkä parempi ratkaisu.
-whilen sijaan if, eihän tuossa loopata kuitenkaan tarvitse
-Kannattaa laittaa muuttujat, joita käytetään läpi skriptin / ei muuteta skriptin aikana koodin alkuun, jotta niitä on helppo muokata myöhemmin
-if ($write == TRUE) { sijaan käytä if (fwrite($write..))
Bandido89 kirjoitti:
Sillä ei monesti ole merkitystä, että mihin ne laittaa, kun PHP-prosessori lukee tiedoston kertaalleen läpi ennen suorittamista.
Eikö? Kyllä minusta
$muuli = 'palle'; echo $muuli;
on ihan eri asia kuin
echo $muuli; $muuli = 'palle';
Bandido89 kirjoitti:
foreach($_POST as $text){
Öh? Haluatko tosiaan lähettää tuon mailin niin monta kertaa, kuin POST-muuttujia sattuu olemaan? o_O
Blaze kirjoitti:
Bandido89 kirjoitti:
Sillä ei monesti ole merkitystä, että mihin ne laittaa, kun PHP-prosessori lukee tiedoston kertaalleen läpi ennen suorittamista.
Eikö? Kyllä minusta
$muuli = 'palle'; echo $muuli;on ihan eri asia kuin
echo $muuli; $muuli = 'palle';Bandido89 kirjoitti:
foreach($_POST as $text){
Öh? Haluatko tosiaan lähettää tuon mailin niin monta kertaa, kuin POST-muuttujia sattuu olemaan? o_O
Koodi on toiminut noin oikein hyvin ja tarkoitin tuossa muutujien paikka jutussa, oikeastaan, että ei aina vaan joskus. Koodin muuttujamäärittelyt olivatkin kodauksen alkaessa aivan alussa, mutta ne kulkeutuivat tuonne jossakin vaiheessa X) eivät kyllä vaikuttaneet koodin suoritukseen. Ja niiden järjestyksellä ei aina ole merkitystä. Tämä on ihan luettu juttu. Tosin se riippuu ihan tilanteesta.
Ja tuo viimeinen foreach osa toimii myöskin hyvin. Sen on vain tarkoitus hälyttää uudesta hakemuksesta. :P
Jos se toimii kerran "hyvin" niin oletettavasti koodisi ei näytä oikeasti aivan tuolta. Muutenhan tuota mail-funkkaria kutsutaan niin monta kertaa kuin käyttäjä määrittää (oman lomakkeen mahdollisuus).
tsuriga kirjoitti:
Jos se toimii kerran "hyvin" niin oletettavasti koodisi ei näytä oikeasti aivan tuolta. Muutenhan tuota mail-funkkaria kutsutaan niin monta kertaa kuin käyttäjä määrittää (oman lomakkeen mahdollisuus).
Nimenomaan se näyttää tuolta viimeisimmältä esimerkiltä :P. Kumma kyllä. Itseasiassa tuo olisi itsekin pitänyt tajuta. :O
Mutta ihan yhden mailin se lähetää..Jokatapauksessa muokkaan sen niin, että ei lähetä mitään muuta kuin varoituksen, ilma tuota foreach komentoa. Alunperin piti lähettää koko hakemus, mutta lopulta päätin, ettei sitä lähetetä. Siitä tuli tuollainen raato. Tämä skripti onkin vasta asteella, että saataisiin perustasolla toimimaan ;)
Sain toimimaan oikein tekemällä näin. Välissä unohtui koko homma:
<?php if(!isset($_POST['nimi']) || !isset($_POST['sposti']) || !isset($_POST['kotisivu']) || !isset($_POST['viesti'])){ echo "Et täyttänyt vaadittuja kenttiä! Kaikki kentät vaaditaan."; exit; } else{ $nimi = $_POST['nimi']; $sposti = $_POST['sposti']; $kotisivu = $_POST['kotisivu']; $viesti = $_POST['viesti']; if(empty($nimi) && empty($sposti) && empty($viesti)) die("Kaikki kentät ovat pakollisia"); if(empty($nimi)) die('Et antanut nimeä!'); if(empty($sposti)) die('Et antanut Sähköpostiasi!'); if(substr_count($sposti, "@") == 0 || substr_count($sposti, "@") > 1) die("Sähköpostisi ei ole kunnollinen. Anna toimiva sähköpostiosoite!"); if(empty($viesti)) die('Et antanut viestiä!'); if(substr_count($kotisivu, "http://") == 0 || substr_count($kotisivu, "http://") > 1) die("Kotisivuosoitteesi ei ole kunnollinen!"); $file = "/polku/hakemistoon/hakemukset.html"; if(file_exists($file)){ nl2br($viesti); strip_tags($nimi); strip_tags($kotisivu); strip_tags($viesti); htmlentities($nimi); htmlentities($kotisivu); htmlentities($viesti); $write = fopen($file, "a"); fwrite($write, "\n<table border=\"0\"><tr><th>".date("d.m.Y H:i:s")."</th></tr><tr><th>Hakemus</th></tr><tr><td>".$nimi."</td></tr><tr><td><a href=\"mailto:".$sposti."\">".$sposti."</a></td></tr><tr><td><a href=\"".$kotisivu."\">".$kotisivu."</a></td></tr><tr><td>".$viesti."</td></tr></table>"); fclose($write); echo "Toiminto onnistui!"; if($write == TRUE){ mail("maili@maili.com","Uusi Hakemus!","Uusi hakemus tullut!"); /*header("Location: osoite");*/ $display = "<p><strong>Hakemuksen lähetys onnistui! <a href=\"linkki_takaisin\">Palaa tästä takaisin, jos haluat käyttää sivuani perinteisellä ulkoasulla</a>.</strong></p>"; } } } ?> <?php echo $display; exit; ?>
Siinä, jos jotakin vaikka auttaisi...
Bandido89 kirjoitti:
Koodi on toiminut noin oikein hyvin ja tarkoitin tuossa muutujien paikka jutussa, oikeastaan, että ei aina vaan joskus.
Ehkä sinulla on ollutkin vain Register_Globals päällä, jolloin $_POST ja $_GET -muuttujista tallennetaan automaattisesti arvot muuttujiin scriptin alussa. Jos väittämäsi tallentava esilukijasi toimii ei ohjelmoinnissa ole mitään logiikkaa. Ohjelmoitaessa oletetaan että jokainen rivi luetaan järjestyksessä ylhäältä alaspäin (ellei erilaisiä tarkoituksellisia "hyppyjä" ja "silmukoita" tehdä).
Aihe on jo aika vanha, joten et voi enää vastata siihen.