Avatar billede Asky Forsker
17. august 2023 - 20:49 Der 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
Avatar billede erikjacobsen Ekspert
17. august 2023 - 22:24 #1
Det kunne tyde på at PHP er opgraderet, og at der nu er syntaksfejl i PHP-filen.

1) Kan du finde ud om PHP er opgraderet til f.eks. version 7?
2) Kan du se i serverens logfiler om den siger syntaksfejl?
Avatar billede Asky Forsker
18. august 2023 - 09:11 #2
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 .....
Avatar billede erikjacobsen Ekspert
18. august 2023 - 09:34 #3
Og så er der jo PHP8 fra 2020. Måske er dit problem et skifte fra 7 til 8.
Avatar billede acore Ekspert
18. august 2023 - 09:45 #4
Nogle webhoteller har mulighed for at vælge php-version.

På den anden side, hvis det skulle være problemet, så ville fejlene være dukket op med det samme, og ikke først nu.

Ved du, om din kode overhovedet kan sende en mail nu i nogen kontekst? Hvis ikke, kunne det være der fejlen lå.
Avatar billede Asky Forsker
18. august 2023 - 09:45 #5
Mine formularer har virket i årevis,  men virker lige pludselig ikke i php7. Tror du så det bliver bedre i php8?
Avatar billede Asky Forsker
18. august 2023 - 09:54 #6
En anden teori er, om filerne class.phpmailer.php og class.smtp.php er forældede- deprecated?
Avatar billede erikjacobsen Ekspert
18. august 2023 - 10:07 #7
#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.
Avatar billede acore Ekspert
18. august 2023 - 10:08 #8
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.
Avatar billede Asky Forsker
18. august 2023 - 14:01 #9
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;
}
Avatar billede acore Ekspert
18. august 2023 - 14:09 #10
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
Avatar billede Asky Forsker
19. august 2023 - 10:47 #11
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.
Avatar billede erikjacobsen Ekspert
19. august 2023 - 10:59 #12
Der er mange ændringer fra 5.6 til 7. Formentlig i den del af koden du ikke viser os.
Avatar billede Asky Forsker
19. august 2023 - 12:44 #13
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 ;-)
Avatar billede Asky Forsker
19. august 2023 - 14:10 #14
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
Avatar billede acore Ekspert
21. august 2023 - 07:49 #15
Ja, fejl er altid så åbenlyse, når man først har fundet dem. Problemet var endda nævnt i det første svar.
Avatar billede ejvindh Ekspert
21. august 2023 - 11:46 #16
#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
Avatar billede Asky Forsker
21. august 2023 - 14:34 #17
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.
Avatar billede acore Ekspert
21. august 2023 - 15:14 #18
Hvilken version af phpmailer bruger du?,
Avatar billede Asky Forsker
21. august 2023 - 17:26 #19
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?
Avatar billede acore Ekspert
21. august 2023 - 18:02 #20
Bestemt.  Måske løser det problemerne
Avatar billede Asky Forsker
21. august 2023 - 21:02 #21
Kan eksperterne nævne en relevant hjemmeside til download af en opdateret webmailer?
Avatar billede acore Ekspert
22. august 2023 - 07:36 #22
Avatar billede Asky Forsker
22. august 2023 - 09:56 #23
Nu har jeg downloaded PHPmailer.php og SMTP.php version 6.8.0
Nu spørger jeg lidt dumt: skal jeg selv sætte class. foran? Eller bruge dem som de er.
Avatar billede acore Ekspert
22. august 2023 - 11:00 #24
Brug dem som de er
Avatar billede Asky Forsker
22. august 2023 - 11:09 #25
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
Avatar billede acore Ekspert
22. august 2023 - 11:51 #26
Se https://github.com/PHPMailer/PHPMailer og følg anvisningerne. Hvis det ikke virker umiddelbart, så prøv med eksemplet, og se om det virker.
Avatar billede ejvindh Ekspert
22. august 2023 - 13:56 #27
Nyeste phpmailer burde nu være kompatibel med php5.6:
"Compatible with PHP 5.5 and later, including PHP 8.2"
...men ja, dine requires skal ændres:

https://github.com/PHPMailer/PHPMailer/blob/master/UPGRADING.md
Avatar billede Asky Forsker
23. august 2023 - 11:42 #28
Lige nu er der andre presserende arbejdsopgaver, men jeg vender tilbage til opgraderingen af PHPMailer :-)
Avatar billede Asky Forsker
23. august 2023 - 13:49 #29
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
Avatar billede erikjacobsen Ekspert
23. august 2023 - 14:05 #30
Som skrevet før:

Der er kode før mail-delen - fejlen kan ligge der.

Du må kunne se en fejl-log et sted på din hosting side. Det er ulige meget nemmere at finde og rette fejlen, når vi har en fejlbesked.
Avatar billede acore Ekspert
23. august 2023 - 17:42 #31
Så er det videre med 2. sætning i #26 (eksemplet).
Avatar billede acore Ekspert
23. august 2023 - 17:43 #32
.....hvis du ikke vil prøve (1) i #10
Avatar billede Asky Forsker
23. august 2023 - 20:09 #33
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

else {

$emne = ($_POST['subject']);
$navn = ($_POST['navn']);
$adresse = ($_POST['adresse']);
$postnummer = ($_POST['postnummer']);
$by = ($_POST['by']);
$telefon = ($_POST['telefon']);
$email = $_POST['email'];
$bem = $_POST['bem'];
// så kommer mail -delens design og indhold (svar fra felterne i formularen
$body ="<html>
<head>
    <meta http-equiv='content-type' content='text/html; charset=utf-8'/>
<style type='text/css'>
#body{
h1 {font-family : Verdana, Tahoma, sans-serif; font-size: 16px ;  text-align : left; color:#000000;}
h2 {font-family : Verdana, Tahoma, sans-serif; font-size 14px; text-align : left;}
h3 {font-family : Verdana, Tahoma, sans-serif; font-size: 12px/1,5 ; text-align : left; color : #000000;}
h4  {font-family : Verdana, Tahoma, sans-serif; font-size: 10px/1,5 ;  text-align : left; }
p {font-family : Verdana, Tahoma, sans-serif; font-size: 12px/1,3 ;  text-align : left; color :#000000;}
}
</style>
</head>
<body>
<h1>Hej $navn, <br/>her er din $emne</h1>"."<h3><br/>".$v1. " ".$v2." ".$v3." ".$v4." ".$v5." ".$v6." ".$v7."<br/> ".$v8." ".$v9." ".$v10." ".$v11. " ".$v12. " ".$v13." ".$v14."<br/>".$v15." ".$v16." ".$v17." ".$v18." ".$v19." ".$v20." ".$v21."<br/> ".$v22." ".$v23." ".$v24." ".$v25." ".$v26."<br/>".$navn." \r\n Adresse: ".$adresse. "\r\n Postnummer: " .$postnummer. " By: " .$by."\r\n Mobil: " .$telefon." Mail: ".$email."\n\r<br/> Bemærkninger:  " .$bem."<br/><br/>Venlig hilsen<br/></h3><h1>Firma</h1></body></html>";

// Så kommer selve afsendelsen til Firma og til kunde
require 'PHPMailer.php';
require 'SMTP.php';
require 'Exception.php';
$mail            = new PHPMailer();

$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->SMTPAuth  = true; // enable SMTP authentication
$mail->SMTPsecure = 'TLS'; // sikkerhed med TLS               
$mail->Host      = "smtp.webhosting.dk"; // sets the SMTP server
$mail->Port      = 25;                    // set the SMTP port for the GMAIL server
$mail->Username  = "navn@domæne.dk"; // SMTP account username
$mail->Password  = "xxxxxx";        // SMTP account password
$mail->From    = "navn@domæne.dk";
$mail->FromName = "Arnes Firma";
$mail->AddReplyTo("arne@asky.dk","Firma");
//$mail->AddCC($email, "kunde");
$address = "$email";
$mail->AddAddress($address, "Kunde");
$mail->AddBCC("Arne@asky.dk", "Arnes Firma");
$mail->Subject = ($_POST['subject']);

$mail->IsHTML(true);
$mail->MsgHTML($body);
$address = ($_POST['email']);
$mail->AddAttachment("images/phpmailer_mini.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&aelig;ftelse.</h2>";
        }
}
}
// evt.fejl
if (some_error) {
        return 'Der skete en fejl - bla bla.';
    }
return true;
}

?>
Avatar billede acore Ekspert
24. august 2023 - 07:50 #34
Jeg står af her
Avatar billede Asky Forsker
25. august 2023 - 21:36 #35
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
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester