17. august 2023 - 20:49Der er
33 kommentarer og 2 løsninger
formularer med Response filer i PHP
Har i mange år brugt dette system: <form action="response.php" method="post" onsubmit="return validate(this)"> <input name="context" value="opret" type="hidden"> <input name="return_page" value="<?php echo $_SERVER['PHP_SELF'] ?>" type="hidden"> <input type="hidden" name="subject" value="Firmabestilling af bogplast" > og dertil en fil i samme bibliotek med navnet response.php.
Denne fil sender en mail til kunden og til firmaet med de bestilte ting fra formularen. problemet er, at der pludselig ikke bliver sendt nogen mails. Der hvor der skulle være en respons, er der kun en blank skærm. Desværre viser fejlen sig også ved andre formularer på hjemmesiden
Jeg tror, du har ret. For et halvt år siden måtte jeg flytte alle filer på webhotellet til en ny server PHP7, da den gamle server var på vej ud. Det underlige er, at det først er nu syntaksfejlene dukker op. Næste puinkt er at finde syntaksfejlene .....
#5: Hvis du skiftede til PHP7 for et halvt år siden, og du ikke har haft problemer, så var min tanke at webhotellet måske er skiftet til PHP8, og det giver problemer.
Vi kan gætte - og det er sjovt , men vi kan ikke hjælpe meget uden flere oplysninger.
Kik i error log eller sær error reporting til, men phpmailer bliver jo ikke "forældet" af sig selv - det kan kun skyldes en ny php version, og det du fortæller, tyder ikke på det.
Selve formulardelen ser ud til at være ok og på den blanke skærm kan man se at det er filen response.php der er på. Det er altså i responsen fejlen skal findes. jeg prøver at finde fejllogen på serveren.
Mit webhotel hedder: php70serv12.webhosting.dk - altså PHP 7,0
Her er koden for maildelen: require_once('class.phpmailer.php'); include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded $mail = new PHPMailer(); //$body = $mail->getFile('contentsbp.php'); //$body = eregi_replace("[\]",'',$body); $mail->IsSMTP(); // telling the class to use SMTP $mail->Host = "smtp.webhosting.dk"; // SMTP server $mail->SMTPDebug = 2; // enables SMTP debug information (for testing) $mail->SMTPsecure = 'TLS'; $mail->SMTPAuth = true; // enable SMTP authentication $mail->Host = "smtp.webhosting.dk"; // sets the SMTP server $mail->Port = 25; // set the SMTP port for the GMAIL server $mail->Username = "info@domæne.dk"; // SMTP account username $mail->Password = "xxxxxxxx"; // SMTP account password $mail->From = "info@domæne.dk"; $mail->FromName = "Firma"; $mail->AddReplyTo("domæne@domæne.dk","firma"); //$mail->AddCC($email, "kunde"); $address = "$email"; $mail->AddAddress($address, "Kunde"); $mail->AddBCC("info@domæne.dk", "firma"); $mail->Subject = ($_POST['subject']); $mail->IsHTML(true); $mail->MsgHTML($body); $address = ($_POST['email']); $mail->AddAddress($address, "Kunde"); //$mail->AddAttachment("images/phpmailer.gif"); // attachment $mail->AddAttachment("images/firma.gif"); // attachment if(!$mail->Send()) { echo "Mailer Error: " . $mail->ErrorInfo; } else { echo "<h2> Formularen er blevet sendt med disse oplysninger: <br/> Navn: ".$navn." ".$adresse." ".$postnummer." ".$by."<br/> E-mail: ".$email." Emne: ".$emne."<br/> om kort tid modtager du en e-mail som bekræftelse.</h2>"; } } } return true; }
Den kode burde udskrive enten "Mailer Error: xxx" eller "Formularen...". Det gør den tilsyneladende ikke. Enten kommer den slet ikke derind eller også går den i står med fejl.
To forslag: (1) Læg nogen sladreudskrifter ind i response.php, så du kan se hvor langt den kommer. (2) Lav et forsimplet script ud af response.php og se om du kan få det til at sende en mail til dig selv
Det er ikke lykkedes mig at finde nogen fejl efter at have brugt mange timer på det. Det jeg konstaterer er, at den ene hjemmeside, jeg servicerer ligger på php70serv12.webhosting.dk. -formularer virker ikke. En anden hjemmeside, som jeg også servicerer ligger på php56serv3.webhosting.dk og her ligger også en formular med samme php-kode og DEN VIRKER perfekt. Måske er der slet ingen fejl? , men php7 accepterer ikke mine koder? Nu vil jeg prøve at sende en mail til webhosting om problemet.
Så er spørgsmålet om jeg skal lave en ny version af mine formularer, som har fungeret fint i årevis, eller jeg skal bede webhosting om at komme tilbage til php 5,6. Kunne egentlig godt tænke mig at se et eksempel på en formular programmeret i PHP 7,0 . hvis der er meget forskel vælger jeg 5,6 ;-)
Så er problemet løst! Jeg har flyttet DNS pegning fra PHP 7.0 til PHP 5,6. Formularerne virker perfekt igen. (jeg kunne jo heller ikke finde nogen fejl. Det foregik smertefrit på Webhostings hjemmeside. Havde jeg bare vidst det for 2 dage siden
#14: Du skal være opmærksom på, at php5.6 opdateres ikke længere: https://www.php.net/eol.php ... og på sigt vil dit webhotel heller ikke understøtte det længere. Så din løsning er midlertidig, og på sigt bør du nok få det til at virke på nyere versioner af php: https://www.php.net/supported-versions.php
Nu skulle jeg lige have løst et akut problem. Men på den lange bane er jeg naturligvis interesseret i forslag til en løsning, der også virker i PHP 7,0 eller 8,0.
I den fil der hedder Class.PHPmailer.php står der version 2.0.4. Det er ikke noget jeg har tænkt over før, men den er vist ikke helt ny ;-) Måske var det en ide at opdatere den?
Foreløbig virker de ikke, så for at beholde kontinuiteten i bestillingerne er jeg gået tilbage til de gamle filer. At de ikke virker skyldes nok uoverensstemmelse mellem de nye filer og PHP5,6. Måske skal jeg også rette denne linje i responsefilen: require_once('class.phpmailer.php'); include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded
Nu har jeg lavet en forsøgsopstilling i responsefilen og download af de tre opdaterede filer. Første forsøg er require 'PHPMailer.php'; require 'SMTP.php'; require 'Exception.php'; $mail = new PHPMailer(); men det gav kun en blank skærm,så jeg prøver igen måske med "use" i stedet for require
Her er hele koden fra starten på response: <?php //header('Content-type: text/html; charset=utf-8'); function createNewUser() { if(isset($_POST['send'])) { //derefter tjekkes felterne i formularen
$v1= ""; if (!empty($_POST)) { if (isset($_POST['Bogplast2_400']) && $_POST['Bogplast2_400']!='') { $v1 = "Bogplast2_400 ".($_POST['Bogplast2_400']."stk. <br/>"); } } // der er 26 efter samme opskrift og derefter defineres felterne formularen
echo "<h2> Formularen er blevet sendt med disse oplysninger: <br/> Navn: ".$navn." ".$adresse." ".$postnummer." ".$by."<br/> E-mail: ".$email." Emne: ".$emne."<br/> om kort tid modtager du en e-mail som bekræftelse.</h2>"; } } } // evt.fejl if (some_error) { return 'Der skete en fejl - bla bla.'; } return true; }
På hjemmesiden: "https://www.1-domain.dk/support/hvordan-sender-jeg-e-mails-med-smtp-auth-php-eksempel/" fandt jeg en opdateret class.PHPMailer.php og class.SMTP.php godt nok fra 2009. Maileren er kompatibel med PHP7,0.så er den da lidt fremtidssikret. Jeg har så lavet en ”sandkasse”, hvor jeg sender bestillinger til mig selv, og det viser sig at virke! Jeg løb ind i problemer med udskiftningen af mailadresser. SMTP-servere er nemlig forskellige efter hvilket firma man bruger til webhotel. Desuden er portene også forskellige. Smtp.webhosting, som jeg bruger, har fx port 25. Koden til maildelen ser nu sådan ud:
require_once('class.phpmailer.php'); include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded $mail = new PHPMailer(); $mail->IsSMTP(); // telling the class to use SMTP $mail->Host = "smtp.webhosting.dk"; // SMTP server $mail->SMTPDebug = 2; $mail->Username = "info@domæne.dk"; // SMTP account username $mail->Password = "xxxxxx"; // SMTP account password $mail->From = "info@domæne.dk"; $mail->FromName = "Arne Firma"; $mail->AddReplyTo("arne@domæne.dk","Arnes Firma"); //$mail->AddCC($email, "kunde"); $address = "$email"; $mail->AddAddress($address, "Kunde"); $mail->AddBCC(arne@skyggebjerg.dk(GMAIL), "Arnes Firma"); $mail->Subject = ($_POST['subject']); $mail->IsHTML(true); $mail->MsgHTML($body); $address = ($_POST['email']); if(!$mail->Send()) { echo "Mailer Error: " . $mail->ErrorInfo; } else { echo "<h2> Formularen er blevet sendt med disse oplysninger: <br/> Navn: ".$navn." ".$adresse." ".$postnummer." ".$by."<br/> E-mail: ".$email." Emne: ".$emne."<br/> om kort tid modtager du en e-mail som bekræftelse.</h2>"; } } } Tak for alle kommentarer og al hjælp.
Jeg slutter tråden her
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.