Moro,
mietin, että mikä mahtaisi olla syynä kun muutama päivä sitten niin hyvin toimiva palautelaatikkosysteemi on heittäny yhtäkkiä toimimasta ilman mitään näkyvää syytä. Nyt kun yritän lähettää palautetta niin selain menee joka kerta error-sivulle, kiitos-sivun sijaan ja mailipoksi pysyy tyhjänä. Palautelaatikkotiedostoon ei oltu siinä välillä koskettu mitenkään. Nyt kun lopputestasin uusia sivuja niin eipäs tuo laatikko toiminutkaan enää. Aivan käsittämätöntä. Tuossa vielä alla tuo yhden tiedoston, hyvin toiminut palautelaatikkokoodi:
<?php if (isset($_POST['name']) && ($_POST['name'])) { $name = $_POST['name']; // Remove unnecessary slashes $name = stripslashes($name); // Remove any html-tag used $name = htmlspecialchars($name); // Remove unnecessary enters $name = trim($name); } else { $name = ""; } if (isset($_POST['email']) && ($_POST['email'])) { $email = $_POST['email']; // Remove unnecessary slashes $email = stripslashes($email); // Remove any html-tag used $email = htmlspecialchars($email); // Remove unnecessary enters $email = trim($email); // Replace (at) -> @ if there is $email = str_replace("(at)","@",$email); } else { $email = ""; } if (isset($_POST['message']) && ($_POST['message'])) { $message = $_POST['message']; // Remove unnecessary slashes $message = stripslashes($message); // Remove any html-tag used $message = htmlspecialchars($message); // Remove unnecessary enters $message = trim($message); // Remove messages longer than 5000 characters if(strlen($message)>5000) { $message = ""; } } else { $message = ""; } // Is name- and message-field filled if ($name && $message) { // Time when message sent $time = time(); // Modifying time $clock = date("d.m.Y H:i", $time); //Sender IP-address $ip = getenv("REMOTE_ADDR"); if ($email == "") { $email = "Not entered"; } // Modifying the feedback: $feedback = "$message\r\n\r\n******************************\r\n - Name: $name\r\n - E-mail: $email\r\n - Time: $clock\r\n - IP-address: $ip\r\n******************************"; $confirm = mail("palauteosoite@example.com", "Feedback from homepages", "$feedback", "From: $name"); if ($confirm) { // Say thank you to sender: header("Location: thanks.php"); } // Otherwise go to error site: else { header("Location: error.php"); } } if (!$name && !$email && !$message) { ?> <?php include "header.php"; ?> <h2>Feedback</h2> <form method="post" action="feedback.php"> <fieldset> <p> <label for="name">*Your name:</label> <br/> <input name="name" id="name" type="text" maxlength="25" size="26" value=""/> </p> <p> <label for="email">Your e-mail:</label> <br/> <input name="email" id="email" type="text" maxlength="45" size="26" value=""/> </p> <p> <label for="message">*Your message:</label> <br/> <textarea name="message" id="message" rows="5" cols="40"></textarea> </p> <p> <input type="submit" value="Send"/> <input type="reset" value="Reset"/> <b class="mandatory">* mandatory</b> </p> </fieldset> </form> <p> Your feedback will be send to: <a href="personnel.php" class="links">Eija Tuominen</a> </p> <?php include "footer.php"; ?> <?php } else { ?> <?php include "header.php"; ?> <h2>Feedback</h2> <form method="post" action="feedback.php"> <fieldset> <p> <label for="name"> <?php if (!$_POST['name']) { echo "<b>Name is mandatory:</b>"; } else { echo "*Your name:"; } ?> </label> <br/> <input name="name" id="name" type="text" maxlength="25" size="26" value=""/> </p> <p> <label for="email">Your e-mail:</label> <br/> <input name="email" id="email" type="text" maxlength="45" size="26" value=""/> </p> <p> <label for="message"> <?php if (!$_POST['message']) { echo "<b>Message is mandatory:</b>"; } else { echo "*Your message:"; } ?> </label> <br/> <textarea name="message" id="message" rows="5" cols="40"></textarea> </p> <p> <input type="submit" name="send" value="Send"/> <input type="reset" name="reset" value="Reset"/> <b class="mandatory">* mandatory</b> </p> </fieldset> </form> <p> Your feedback will be send to: <a href="personnel.php" class="links">Eija Tuominen</a> </p> <?php include "footer.php"; ?> <?php } ?>
Jos koodiin ei ole koskettu, niin ei auta sitten muu kuin debuggia peliin.
Eli laittelen noihin tarkistuksien väliin koodia, joka kirjottaa muuttujien arvoja esim. tiedostoon tai ruudulle.
Katsot että tuleeko esim. sähköposti osoitteet läpi, mikä voisi aiheuttaa ettei viestiä lähetetäkään (ts. mail() palauttaa arvon false )
Lisäksi ihmetytti raaka toimenpide:
joka voisi olla paremmin toimiva, jos liian pitkät viestit vain pätkäistäisiin lyhemmäksi (esim. 5000 ensimmäistä merkkiä). Pitkä, asiallisen viesti hukkuu nyt bittiavaruuteen eikä siitä tiedä kukaan sen koommin.
edit:
Korjaa muuten nuo hakasulut ja sisennykset kohdilleen, muutama hakasulku on samassa tasossa ylemmän tason hakasulkujen kanssa. Varsinkin tuon lainaamani if-lauseen kohdalla hakasulkuja on missä sattuu, ja koodi näyttää erittäin epäselvältä ilman sisennystä.
edit:
kerkesinkin itse:
<?php if (isset($_POST['name']) && ($_POST['name'])) { $name = $_POST['name']; // Remove unnecessary slashes $name = stripslashes($name); // Remove any html-tag used $name = htmlspecialchars($name); // Remove unnecessary enters $name = trim($name); } else { $name = ""; } if (isset($_POST['email']) && ($_POST['email'])) { $email = $_POST['email']; // Remove unnecessary slashes $email = stripslashes($email); // Remove any html-tag used $email = htmlspecialchars($email); // Remove unnecessary enters $email = trim($email); // Replace (at) -> @ if there is $email = str_replace("(at)","@",$email); } else { $email = ""; } if (isset($_POST['message']) && ($_POST['message'])) { $message = $_POST['message']; // Remove unnecessary slashes $message = stripslashes($message); // Remove any html-tag used $message = htmlspecialchars($message); // Remove unnecessary enters $message = trim($message); // Remove messages longer than 5000 characters if(strlen($message)>5000) { $message = ""; } } else { $message = ""; } // Is name- and message-field filled if ($name && $message) { // Time when message sent $time = time(); // Modifying time $clock = date("d.m.Y H:i", $time); //Sender IP-address $ip = getenv("REMOTE_ADDR"); if ($email == "") { $email = "Not entered"; } // Modifying the feedback: $feedback = "$message\r\n\r\n******************************\r\n - Name: $name\r\n - E-mail: $email\r\n - Time: $clock\r\n - IP-address: $ip\r\n******************************"; $confirm = mail("palauteosoite@example.com", "Feedback from homepages", "$feedback", "From: $name"); if ($confirm) { // Say thank you to sender: header("Location: thanks.php"); } else { // Otherwise go to error site: header("Location: error.php"); } } ?>
Moro,
Kiitoksia, en itse vielä ole kerinnyt "standardoida" tuota sisennysjuttua tuossa koodissa, mutta noin itsekin ne ruukaan yleensä merkitä. Näyttää jo paljon paremmalta.
Itsekin olen miettinyt tuota pitkän viestin lähetysjuttua. Kuitenkin kun jokin rajoitus siinä olisi hyvä olla. Mites teen sen niin, että se vain pätkäistään lyhyemmäksi?
Debuggailen tässä nyt ja luulen, että vika on tuossa mail-funktiossa. Tein skriptin jossa ei ole kuin rivit:
<?php $feedback = "Testiä"; mail("palauteosoite@example.com", "Feedback from homepages", "$feedback"); ?>
Ei vain lähde maili liikkeelle. Olisiko palvelimella säädetty jotain... ihme juttu.
EDIT:
Sama koodi toimii toisella palvelimella ihan hyvin. Mitäs nyt teen? Ovatko säätäneet tuolla hipin palvelimilla jotain, että tuo mail-funktio ei toimi vai pitääkö tässä alkaa määrittämään jotain asetuksia?
Tekstirimpsun pätkäisyä:
https://www.php.net/manual/en/function.substr.
Oletko varma ettei lomakettasi ole käytetty väärin, esim. spämmaamiseen, jonka takia sen käyttö olisi estetty?
Ainakin kaikista kentistä pitäisi siivota mahdollisuus käyttää niitä spämmaamiseen:
http://www.securephpwiki.com/index.php/
edit...
hmmmm
joku bugi urli tägeissä, kun viesti oli jäänyt näkymättä, tägit olin kuitenkin sulkenut... no nyt kuitenkin ilman urli tägejä
Mielestäni noita spämmäys ym. juttuja olen ehkäissyt jo omassa koodissani poistamalla html-merkinnät ja rajoittamalla email-osoitteen ja nimen pituutta. Ajattelin pätkäistä tuon tekstin lukemalla sen taulukkoon ja poimimalla sitten siitä vain 5000 ensimmäistä alkiota.
Tuon ip-osoitteen voisi varmaan tallentaa ja ehkäistä viestin uudelleen lähettämisen jonkin tietyn ajan, esim. minuutin sisällä. Noh, pitää tutkia. Tuo minua silti askarruttaa, että mailin lähetys toimii toisella palvelimella, mutta ei toisella. Mistä tuo johtuu?
"Vika" on varmaankin palvelimella.
Aihe on jo aika vanha, joten et voi enää vastata siihen.