Hulp gezocht bij foutopsporing na serverupgrade PHP 5.6 naar 7.2

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Arne Fauche

Arne Fauche

06/06/2020 12:50:02
Quote Anchor link
Ik heb een php-html bestand die als inschrijvingsformulier werkt voor onze clubleden.
Dit formulier is nog door mijn voorhanger opgesteld (ikzelf ken er te weinig van om het ten gronde te analyseren)
Sinds ik de PHP-software op de server naar 7,2 moest laten upgraden (ivm phpBB-forumsoftware) werkt dit formulier niet meer.
Het formulier wordt getoond en kan worden ingevuld maar bij het versturen wordt een blanco pagina gegenereerd. De verzonden gegevens bereiken ook niet het mailadres waaraan ze worden gestuurd.

Onderstaand de code, let wel: vrij groot bestand (607 regels)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
<?php
#########################
#  Start Configuration  #
#########################


$sWebsitenaam = "www..."; //vul hier de naam van jouw website in

$sMail = "..."; //Het e-mailadres waarnaar de mail word gestuurd. Voor meerdere adressen, scheid de emailadressen met een komma.
$bHTML = FALSE; //Bij TRUE word er een HTML-mail gestuurd. Bij FALSE een plain-text-mail
$sOnderwerp = "Inschrijving Clublid FJRijders"; //Vul hier een onderwerp in. Dit word het onderwerp wanneer er geen ondewerp is opgegeven of als $bOnderwerp op TRUE staat
$bOnderwerp = TRUE; //TRUE als bovenstaand onderwerp altijd gebruikt zal worden. FALSE wordt er eerst gekeken of er een onderwerp in het formulier voor komt

$bBedanktmail = TRUE; //Moet er een bedankt mailtje gestuurd worden aan die gene die verstuurde? (e-mail invoerveld is dan dus verplicht)
$sBedanktmail = "Beste,

Het Bestuur van FJRijders wenst u te bedanken voor uw (her)inschrijving bij FJRijders België."
; //de tekst van het bedank mailtje
$sBedanktfrom = "..."; //vanaf welk adres moet dit bedankmailtje vestuurd worden?
$sBedanktsubj = "Ontvangsbevestiging:  Uw inschrijving als Clublid."; //dit is het ondewerp van het bedanktmailtje

$bBedanktTxt = FALSE; //TRUE als onderstaande tekst als bedankje moet worden weergegeven, FALSE als er moet worden doorgestuurd naar de pagina welke hieronder is aangegeven
$sBedanktTxt = "Uw inschrijvingsformulier is verzonden."; //bedankt text
$sBedanktURL = "http://www...jstantw.htm"; //bedankt url

#########################
#   End Configuration   #
#########################


if (count($_POST) > 0)
{

  //controleer of de $bHTML wel fatsoenlijk is ingesteld
  if(!is_bool($bHTML))
  {

    print("De configuratie is onjuist. Zorg dat je bij <font color=blue><i>$bHTML</i></font> een booleaanse waarde (TRUE of FALSE) hebt ingevuld. Letop: Hier moeten geen quotes ( \" of ') omheen!");
    exit;
  }

  $errors = array();//definieer arrray voor de errormeldingen
  $aKeys = array_keys($_POST); //pak alle arraykeys in een arraytje
  foreach($_POST as $key=>$value)
  {

    $_POST[$key] = trim($value); //maak alle waarden netjes  
  }
  foreach($aKeys as $key=>$value)
  {

    $aKeys[$key]=strtolower($value);//maak alle waarden in kleine letters
  }
  
  $aMail = explode(",",$sMail);
  $aDomein = explode("@",$sMail[0]);  
  $sDomein = $aMail[1];  
  
  //mail detectie
      if (in_array("mail",$aKeys)) { $sFrom = $_POST['mail']; }
  elseif (in_array("email",$aKeys)) { $sFrom = $_POST['email']; }
  elseif (in_array("e-mail",$aKeys)) { $sFrom = $_POST['e-mail']; }
  elseif (in_array("1mail",$aKeys)) { $sFrom = $_POST['1mail']; }
  elseif (in_array("1email",$aKeys)) { $sFrom = $_POST['1email']; }
  elseif (in_array("1e-mail",$aKeys)) { $sFrom = $_POST['1e-mail']; }
  else    
  {  
    $sFrom = "...@".$sDomein;
    $bBedanktmail = FALSE;
  }

  
  if ($bOnderwerp)
  {

    $sSubject = $sOnderwerp;
  }

  else
  {
        if (in_array("onderwerp",$aKeys)) { $sSubject = $_POST['onderwerp']; }
    elseif (in_array("subject",$aKeys)) { $sSubject = $_POST['subject']; }
    elseif (in_array("1onderwerp",$aKeys)) { $sSubject = $_POST['1onderwerp']; }
    elseif (in_array("1subject",$aKeys)) { $sSubject = $_POST['1subject']; }
    else { $sSubject = $sOnderwerp; }
  }

  
  //controle emailadres
  if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$",$sFrom))
  {

    $error[] = "Het opgegeven e-mail adres is niet geldig.";
  }

  //check alle verplichte velden
  foreach($_POST AS $key => $value)
  {

    if(substr($key,0,1) == 1)
    {

      if (empty($_POST[$key]))
      {

        $name = substr($key,1);
        $error[] = "Het veld <i>'".$name."'</i> is verplicht en moet worden ingevuld.";
      }
    }
  }

  
  //als er een error was
  if (isset($error) && count($error) > 0)
  {

    //poep alle errors uit
    print("<ul style=\"list-style: none; color: red;\">\n");
    foreach($error as $value)
    {

      print("\t<li>".$value."</li>\n");
    }

    print("</ul>");
  }

  else
  {
    $headers  = "MIME-Version: 1.0\n";  
    $headers .= "From: Clublid <...>\n";
    $headers .= "Reply-to: ...\n";
    $headers .= ($bHTML) ? "Content-Type: text/html; charset=iso-8859-1\n" : "Content-Type: text/plain; charset=iso-8859-1\n";
    
    $sContent = "Dit is een automatisch gegenereerd e-mailbericht die vanaf www... is verstuurd.
    Gelieve hier niet op te antwoorden\n\n"
;
    foreach($_POST as $key => $value)
    {

      if (substr($key,0,1) == 1) { $key = substr($key,1); }
      $sContent .= ucfirst(strtolower($key)).": ".$value."\n\n";
    }

    $sContent .= "Tijdstip: ".date("D j M, Y G:i")."\n\n";
    
    $enter = "
"
;
    $sContent = ($bHTML) ? nl2br(htmlspecialchars($sContent)) : str_replace("\n",$enter,$sContent) ;
    
    foreach ($aMail as $sMailAdress)
    {

      mail(trim($sMailAdress),$sSubject,$sContent,$headers);  
    }
  
    
    if ($bBedanktmail)
    {

      $sBedanktmail = ($bHTML) ? nl2br(htmlspecialchars($sBedanktmail)) : str_replace("\n",$enter,$sBedanktmail) ;
       mail($sFrom,$sBedanktsubj,$sBedanktmail,$headers);
    }
  
                
?>
Gewijzigd op 06/06/2020 14:29:16 door Arne Fauche
 
PHP hulp

PHP hulp

28/07/2021 12:37:57
 
- Ariën -
Beheerder

- Ariën -

06/06/2020 12:59:40
Quote Anchor link
Gelieve de code te beperken tot relevante code, en deze tussen code-tags te plaatsen. De HTML-code is niet relevant.

Zie ook de opmaakcodes bij de Veelgestelde Vragen.

Ook is het niet verstandig om je mailadres het op het forum te plaatsen, tenzij je graag spam wilt.

Over je probleem:

Zet dit bovenaan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
?>


Dan moet je hopelijk wel foutmeldingen zien.
Gewijzigd op 06/06/2020 13:02:25 door - Ariën -
 
Arne Fauche

Arne Fauche

06/06/2020 14:30:28
Quote Anchor link
Ondertussen opgeruimd en de foutcode laten genereren:

Fatal error: Uncaught Error: Call to undefined function eregi() in /...Clublid.php:85 Stack trace: #0 {main} thrown in /...Clublid.php on line 85

Maar zoals eerder aangegeven: ik snap er de ballen van.
Gewijzigd op 06/06/2020 14:32:58 door Arne Fauche
 
- Ariën -
Beheerder

- Ariën -

06/06/2020 14:36:49
Quote Anchor link
eregi() functie is al een poosje preg_match() met een 'delimiter' in je expressie.

Maar het is zinvoller om een filter uit filter_var() te gebruiken:
https://www.w3schools.com/PHP/filter_validate_email.asp

Met eigen gebakken reguliere expressies sluit je vaak diverse formaten mailadressen uit. In jouw geval zou je nu ikbenpietje@uit.amsterdam al niet eens toestaan.
Gewijzigd op 06/06/2020 14:38:04 door - Ariën -
 
Arne Fauche

Arne Fauche

06/06/2020 14:43:39
Quote Anchor link
Euh... ik snap er echt niets van...
Voelt er iemand zich geroepen om dit script aan te passen zodat het met PHP 7.2 werkt.
 
- Ariën -
Beheerder

- Ariën -

06/06/2020 14:54:26
Quote Anchor link
Heb je al de link bekeken?
Daar staat de werking van filter_var. Pas de eregi controle in dit aan, en voila...

Probeer eens, anders maak ik wel even een voorbeeld.
Gewijzigd op 06/06/2020 14:58:46 door - Ariën -
 
Bart V B

Bart V B

06/06/2020 18:13:51
Quote Anchor link
Lijn 78:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$",$sFrom))
?>


veranderen naar:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
if (!filter_var($sFrom, FILTER_VALIDATE_EMAIL))
?>
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.