graag verificatie van dit script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2

Bruintje Negrito

Bruintje Negrito

05/03/2018 17:43:00
Quote Anchor link
Dankje heren, om een nitwit kennis bij te geven.
Hoe worden headers gegroepeerd?
En dus moet er consequent altijd \r\n staan waar nu \n staat?
Die log.txt lijkt me zinloos, want ik zal het nooit weten wanneer een mail niet toekomt. Dan heb ik gewoon een ontevreden klant die denkt dat hij me niet interesseert.
Ik werk via One.com, en hier vind je het formulier: https://www.lichaamengeest.be/nieuw.php
Wat moet er nog allemaal aangepast worden?
 
PHP hulp

PHP hulp

25/12/2024 03:02:11
 
- Ariën  -
Beheerder

- Ariën -

05/03/2018 17:50:33
Quote Anchor link
De headers kan je prima bij elkaar zetten in de code, en is dus geen technische term ofzo. Het gaat puur om de logica goed bijelkaar te te houden. Ikzelf zou de voor de mail() functie plaatsen, omdat het daar ook betrekking bij heeft.

En die log kan zeker interessant zijn. Je weet immers niet van te voren of een mail wel of niet wordt verstuurd. Misschien kan je bij een hoop 'fails' wel een logica erin vinden die je op pad kan helpen om de oorzaak te vinden.
Gewijzigd op 05/03/2018 17:51:08 door - Ariën -
 
Bruintje Negrito

Bruintje Negrito

05/03/2018 17:58:47
Quote Anchor link
De headers staan toch allemaal mooi samen?

$headers = 'From: ' . $website_naam . ' <' . $eigen_emailadres . '>' . "\r\n";
$headers .= 'Reply-To: ' . $naam_verzender . ' <' . $email_verzender . '>' . "\r\n";
$headers .= 'Return-Path: Mail-Error <' . $error_emailadres . '>' . "\r\n";
$headers .= ($bcc_emailadres != '') ? 'Bcc: ' . $bcc_emailadres . "\r\n" : '';
$headers .= 'X-Mailer: PHP/' . phpversion() . "\r\n";
$headers .= 'X-Priority: Normal' . "\r\n";
$headers .= ($html) ? 'MIME-Version: 1.0' . "\r\n" : '';
$headers .= ($html) ? 'Content-type: text/html; charset=iso-8859-1' . "\r\n" : '';
$headers .= ($html) ? "Content-Type: multipart/mixed;\r\n" .
$headers .= ($html) ? "boundary=\"{$mime_boundary}\"";


Dus dan maak ik een www.domain.com/logs/log.txt aan, pas de url aan in de code en zien wat er te lezen valt?
 
- Ariën  -
Beheerder

- Ariën -

05/03/2018 18:19:54
Quote Anchor link
In je laatste code die je hebt laten zien staan de $headers bovenaan.
Ikzelf zou ze liever bovenaan je mail-functie plaatsen, zodat je niet straks rot hoeft te zoeken in je code.
De variabelen voor de waardes die je invoert zou ik dan bovenaan zetten.

Verder zou ik je log niet zichtbaar hebben voor jan-en-alleman. En dus buiten de webroot (htdocs, public_html etc...).
Gewijzigd op 05/03/2018 18:21:52 door - Ariën -
 
Bruintje Negrito

Bruintje Negrito

05/03/2018 18:27:13
Quote Anchor link
Waar staat de "mail() functie"? Is dat "if(mail($to, $subject, $message, $headers))"?
public_html heb ik niet; htdocs geen idee ... Bij One.com heb ik dat niet.

Is dit beter?


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
138
139
140
141
142
143
144
145
146
147
<?php

$_POST
['name'];
$_POST['phone'];
$_POST['email'];
$_POST['website'];
$_POST['beschrijving'];
$_POST['socialURL'];
$_POST['cmname'];
$_POST['faciliteit'];
$_POST['add'];
$_POST['city'];
$_POST['zip'];
$_POST['keywords1'];
$_POST['keywords2'];
$_POST['keywords3'];
$_POST['keywords4'];
$_POST['keywords5'];
$_POST['keywords6'];
$_POST['prijslijst'];
$_POST['openingsuren'];
$_POST['klikbaar'];
$_POST['socialFB'];
$_POST['socialTW'];
$_POST['socialIN'];
$_POST['socialGP'];
$_POST['opmerking'];

// append data to a log file
function _log($log_file,$ip,$email,$message)
{

    $str = date('Y-m-d H:i:s') . " IP:$ip, EM:$email, $message\r\n";
    file_put_contents($log_file,$str,FILE_APPEND);
}


$log_file = 'http://www.domain.com/logs/log.txt'; // log text file name

$ip = $_SERVER['REMOTE_ADDR']; // get ip to short variable name for logging purposes

$website_naam = 'Mijn Site';
$eigen_emailadres = '[email protected]';
$error_emailadres = '[email protected]';
$naam_verzender = 'Afzender';
$email_verzender = 'emailadres_van_verzender@zijn_domein.nl';
$bcc_emailadres = '[email protected]';
$html = true;

$to = "[email protected]";
$subject= "inschrijving";
$message = "
Faciliteit: $_POST['faciliteit'];
Naam bedrijf: $_POST['cmname'];
Adres: $_POST['add']; $_POST['zip']; $_POST['city'];

Beschrijving:
$_POST['beschrijving'];

Video:
$_POST['socialURL'];

Kernwoorden:
$_POST['keywords1'];
$_POST['keywords2'];
$_POST['keywords3'];
$_POST['keywords4'];
$_POST['keywords5'];
$_POST['keywords6'];

Prijslijst:
$_POST['prijslijst'];


Openklikbare tekst:
$_POST['klikbaar'];


Contactpersoon: $_POST['name'];
Telefoon: $_POST['phone'];
Email: $_POST['email'];
Website: $_POST['website'];

Openingsuren:
$_POST['openingsuren'];

Facebook: $_POST['socialFB'];
Instagram: $_POST['socialIN'];
Twitter: $_POST['socialTW'];
Google Plus: $_POST['socialGP'];

Verdere opmerkingen:
$_POST['opmerking'];
"
;
  $mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x";
         $message = "This is a multi-part message in MIME format.\n\n" .
            "--{$mime_boundary}\r\n" .
            "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n" .
            "Content-Transfer-Encoding: 7bit\n\n" .
         $message . "\n\n";
         foreach($_FILES as $userfile)
         {

            $tmp_name = $userfile['tmp_name'];
            $type = $userfile['type'];
            $name = $userfile['name'];
            $size = $userfile['size'];
            if (file_exists($tmp_name))
            {

               if(is_uploaded_file($tmp_name))
               {

                  $file = fopen($tmp_name,'rb');
                  $data = fread($file,filesize($tmp_name));
                  fclose($file);
                  $data = chunk_split(base64_encode($data));
               }

               $message .= "--{$mime_boundary}\r\n" .
                  "Content-Type: {$type};\r\n" .
                  " name=\"{$name}\"\r\n" .
                  "Content-Disposition: attachment;\r\n" .
                  " filename=\"{$fileatt_name}\"\r\n" .
                  "Content-Transfer-Encoding: base64\n\n" .
               $data . "\n\n";
            }
         }

         $message.="--{$mime_boundary}--\r\n";

$headers    = 'From: ' . $website_naam . ' <' . $eigen_emailadres . '>' . "\r\n";
$headers    .= 'Reply-To: ' . $naam_verzender . ' <' . $email_verzender . '>' . "\r\n";
$headers    .= 'Return-Path: Mail-Error <' . $error_emailadres . '>' . "\r\n";
$headers    .= ($bcc_emailadres != '') ? 'Bcc: ' . $bcc_emailadres . "\r\n" : '';
$headers    .= 'X-Mailer: PHP/' . phpversion() . "\r\n";
$headers    .= 'X-Priority: Normal' . "\r\n";
$headers    .= ($html) ? 'MIME-Version: 1.0' . "\r\n" : '';
$headers    .= ($html) ? 'Content-type: text/html; charset=iso-8859-1' . "\r\n" : '';
$headers    .= ($html) ? "Content-Type: multipart/mixed;\r\n" .
$headers    .= ($html) ? "boundary=\"{$mime_boundary}\"";

        if(mail($to, $subject, $message, $headers))
        {

            echo "Dankje om je gegevens door te zenden.<br>We nemen die door en contacteren je zo snel mogelijk.";
            _log($log_file,$ip,$email,'Mail call successful.');

        }
else {
            echo "Error in mail.<br>Probeer opnieuw door hieronder te klikken.";
            $last_error = error_get_last();
            _log($log_file,$ip,$email,"Mail call failed - {$last_error['message']}");

        }

?>
Gewijzigd op 05/03/2018 18:29:28 door Bruintje Negrito
 
- Ariën  -
Beheerder

- Ariën -

05/03/2018 18:34:18
Quote Anchor link
Regel 3 t/m 27 zijn ook onnodig.

Kijk anders in een apart .php-bestand met dit wat je volledige pad is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo "Je volledig pad is: ".$_SERVER['DOCUMENT_ROOT'];
?>


Misschien kan je in je FTP-programma wel een mapje hogerop komen om je log veilig te stellen.
En als je wilt loggen moet je op lijn 36 geen URL invoeren, maar de bestandsnaam. Als je ../ ervoor gebruikt, dan ga je een mapje hoger.
 
Bruintje Negrito

Bruintje Negrito

05/03/2018 18:41:18
Quote Anchor link
Dit komt er wanneer ik je code in een nieuw doc steek: /customers/5/6/9/DOMAIN.COM/httpd.www
Hoe heet mijn log.txt dan?
Ik heb ook overal waar "\n" stond er "\r\n" van gemaakt. Dat mocht?
 
- Ariën  -
Beheerder

- Ariën -

05/03/2018 18:44:37
Quote Anchor link
Ik weet niet of je in FTP een mapje hoger kan komen, en anders kan je hem ook in een beveiligde map plaatsen.
Zo te zien kan je bij one.com ook mappen beveiligen met een password. Dan is je logbestand ook veilig, als je hem daar in plaatst.
Gewijzigd op 05/03/2018 18:45:03 door - Ariën -
 
Bruintje Negrito

Bruintje Negrito

05/03/2018 18:54:09
Quote Anchor link
Aangemaakt. Dus dit is nu mijn beveiligde url: https://www.DOMAIN.com/logs
Dus nu een log.text aanmaken en in die folder opladen, en dan deze aanpassen:
$log_file = 'http://www.domain.com/logs/log.txt';

Is de aanpassing van de "\r\n" correct?

Dan ziet de code er zo uit:
Is dit het meest mogelijk beveiligd?

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
<?php

// append data to a log file
function _log($log_file,$ip,$email,$message)
{

    $str = date('Y-m-d H:i:s') . " IP:$ip, EM:$email, $message\r\n";
    file_put_contents($log_file,$str,FILE_APPEND);
}


$log_file = 'http://www.domain.com/logs/log.txt'; // log text file name

$ip = $_SERVER['REMOTE_ADDR']; // get ip to short variable name for logging purposes

$website_naam = 'Mijn Site';
$eigen_emailadres = '[email protected]';
$error_emailadres = '[email protected]';
$naam_verzender = 'Afzender';
$email_verzender = 'emailadres_van_verzender@zijn_domein.nl';
$bcc_emailadres = '[email protected]';
$html = true;

$to = "[email protected]";
$subject= "inschrijving";
$message = "
Faciliteit: $_POST['faciliteit'];
Naam bedrijf: $_POST['cmname'];
Adres: $_POST['add']; $_POST['zip']; $_POST['city'];

Beschrijving:
$_POST['beschrijving'];

Video:
$_POST['socialURL'];

Kernwoorden:
$_POST['keywords1'];
$_POST['keywords2'];
$_POST['keywords3'];
$_POST['keywords4'];
$_POST['keywords5'];
$_POST['keywords6'];

Prijslijst:
$_POST['prijslijst'];


Openklikbare tekst:
$_POST['klikbaar'];


Contactpersoon: $_POST['name'];
Telefoon: $_POST['phone'];
Email: $_POST['email'];
Website: $_POST['website'];

Openingsuren:
$_POST['openingsuren'];

Facebook: $_POST['socialFB'];
Instagram: $_POST['socialIN'];
Twitter: $_POST['socialTW'];
Google Plus: $_POST['socialGP'];

Verdere opmerkingen:
$_POST['opmerking'];
"
;
  $mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x";
         $message = "This is a multi-part message in MIME format.\n\n" .
            "--{$mime_boundary}\r\n" .
            "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n" .
            "Content-Transfer-Encoding: 7bit\n\n" .
         $message . "\n\n";
         foreach($_FILES as $userfile)
         {

            $tmp_name = $userfile['tmp_name'];
            $type = $userfile['type'];
            $name = $userfile['name'];
            $size = $userfile['size'];
            if (file_exists($tmp_name))
            {

               if(is_uploaded_file($tmp_name))
               {

                  $file = fopen($tmp_name,'rb');
                  $data = fread($file,filesize($tmp_name));
                  fclose($file);
                  $data = chunk_split(base64_encode($data));
               }

               $message .= "--{$mime_boundary}\r\n" .
                  "Content-Type: {$type};\r\n" .
                  " name=\"{$name}\"\r\n" .
                  "Content-Disposition: attachment;\r\n" .
                  " filename=\"{$fileatt_name}\"\r\n" .
                  "Content-Transfer-Encoding: base64\n\n" .
               $data . "\n\n";
            }
         }

         $message.="--{$mime_boundary}--\r\n";

        $headers    = 'From: ' . $website_naam . ' <' . $eigen_emailadres . '>' . "\r\n";
        $headers    .= 'Reply-To: ' . $naam_verzender . ' <' . $email_verzender . '>' . "\r\n";
        $headers    .= 'Return-Path: Mail-Error <' . $error_emailadres . '>' . "\r\n";
        $headers    .= ($bcc_emailadres != '') ? 'Bcc: ' . $bcc_emailadres . "\r\n" : '';
        $headers    .= 'X-Mailer: PHP/' . phpversion() . "\r\n";
        $headers    .= 'X-Priority: Normal' . "\r\n";
        $headers    .= ($html) ? 'MIME-Version: 1.0' . "\r\n" : '';
        $headers    .= ($html) ? 'Content-type: text/html; charset=iso-8859-1' . "\r\n" : '';
        $headers    .= ($html) ? "Content-Type: multipart/mixed;\r\n" .
        $headers    .= ($html) ? "boundary=\"{$mime_boundary}\"";

        if(mail($to, $subject, $message, $headers))
        {

            echo "Dankje om je gegevens door te zenden.<br>We nemen die door en contacteren je zo snel mogelijk.";
            _log($log_file,$ip,$email,'Mail call successful.');

        }
else {
            echo "Error in mail.<br>Probeer opnieuw door hieronder te klikken.";
            $last_error = error_get_last();
            _log($log_file,$ip,$email,"Mail call failed - {$last_error['message']}");

        }

?>
 
- Ariën  -
Beheerder

- Ariën -

05/03/2018 18:55:26
Quote Anchor link
Je schrijft naar een bestand, en NIET naar een URL.
Dus je moet enkel je bestandsnaam opgeven.
Gewijzigd op 05/03/2018 18:58:58 door - Ariën -
 
Bruintje Negrito

Bruintje Negrito

05/03/2018 18:59:20
Quote Anchor link
Dus enkel dit:
$log_file = 'log.txt';
ook al staat die log.txt in een andere folder?

Ik heb de folder "logs" aangemaakt, en daarin htaccess en htpassw en log.txt opgeladen.
Op die url /logs/log.txt krijg ik nu 500 Internal Server Error
Gewijzigd op 05/03/2018 19:03:13 door Bruintje Negrito
 
- Ariën  -
Beheerder

- Ariën -

05/03/2018 19:02:52
Quote Anchor link
Log staat in de map 'log' ;-)
 
Bruintje Negrito

Bruintje Negrito

05/03/2018 19:04:01
Quote Anchor link
Ik heb geen map "log"
Ik heb de folder "logs" aangemaakt, en daarin htaccess en htpassw en log.txt opgeladen.
Op die url /logs/log.txt krijg ik nu 500 Internal Server Error

Of moet ik de map "log" heten omdat dit er staat:
function _log

Ook nog: de site heeft charset=utf-8, dus moet deze lijn ook aangepast worden?
$headers .= ($html) ? 'Content-type: text/html; charset=iso-8859-1' . "\r\n" : '';
wordt
$headers .= ($html) ? 'Content-type: text/html; charset=utf-8' . "\r\n" : '';
En deze
"Content-Type: text/plain; charset=\"iso-885\"\r\n" .
wordt
"Content-Type: text/plain; charset=\"utf-8\"\r\n" .
Correct?
Gewijzigd op 05/03/2018 19:14:08 door Bruintje Negrito
 
Thomas van den Heuvel

Thomas van den Heuvel

05/03/2018 19:33:35
Quote Anchor link
Nog wat dingen:
- gotcha: bestanden ter grootte 0, dat levert mogelijk problemen met filesize() in de passage "fread($file,filesize($tmp_name));"
- het content-type van attachments staat ingesteld op $fileatt_name, waar komt deze waarde vandaan?
- validatie van form-data en attachments ontbreekt? het kan dus zijn dat er fouten zijn met uploads, maar dat wordt nergens ondervangen
- je stelt nu op twee plekken dezelfde headers in, dit moet je nog even gelijk trekken... in $message en in $headers
 
Bruintje Negrito

Bruintje Negrito

05/03/2018 19:39:02
Quote Anchor link
Dankje voor je reactie, Thomas, maar om op je vier punten te antwoorden: geen idee ...
- waar staat gotcha?
- $fileatt_name : heb ik behouden van de originele code die ik online vond
- validatie van form-data en attachments: wat is dat en hoe ziet dat beest eruit?
- bedoel je dat dit een header is:
$message = "This is a multi-part message in MIME format.\n\n" .
"--{$mime_boundary}\r\n" .
"Content-Type: text/plain; charset=\"utf-8\"\r\n" .
"Content-Transfer-Encoding: 7bit\n\n" .
 
Thomas van den Heuvel

Thomas van den Heuvel

05/03/2018 19:47:26
Quote Anchor link
Een "gotcha" is een losse kei in je code waar vaak over gestruikeld wordt :p.
 
Bruintje Negrito

Bruintje Negrito

05/03/2018 19:56:33
Quote Anchor link
Ben hier al de hele tijd aan het struikelen; zo'n keitje kan er nog bij ...
Maar we gaan niet meer vooruit!
 
- Ariën  -
Beheerder

- Ariën -

05/03/2018 20:09:08
Quote Anchor link
Misschien is het eigenlijk wel eenvoudiger om de phpMailer of Switftmailer class te gebruiken, maar dan moet je wel weten hoe je het inbouwt. Je hoeft dan zelf niet met headers te klooien, plus dat je meer controle hebt over het verzend-proces van een mail, en de nodige foutmeldingen die een mailserver geeft als je direct met het SMTP babbelt.

Het is net wat je makkelijk vindt werken. Voor een beginner (als die de basis van PHP kent) zou ik het wel aanraden. Maar dan moet je wel je script omgooien.

Ik merk dat je nu ook tegen diverse dingen struikelt doordat je de nodige ervaring mist. Je kan wel wat prutsen en hopen dat het goed werkt, maar je wilt ook moeten weten wat er precies gebeurd en waarom. met prutsen zonder te weten wat er gebeurd is de kans op veiligheidslekken een stuk groter, en heb je kans dat je script een rommeltje wordt.
 
Bruintje Negrito

Bruintje Negrito

05/03/2018 20:13:02
Quote Anchor link
Snap je, Ariën.
Bestaat er dan nergens een php formulier met multiple files upload, dat voor handen ligt? Ergens online beschikbaar en gewoon te kopiëren en finetunen? Al mijn kennis komt uit trial and error, maar over dit formulier heb ik maar één code gevonden, en da's deze. En dan lukt die niet ...
 
- Ariën  -
Beheerder

- Ariën -

05/03/2018 20:14:34
Quote Anchor link
Hier moet je wel wat kunnen vinden:
https://www.google.nl/search?q=php+contact+script+files+upload

Maar zoals ik al zei: 'trial and error' zonder de basiskennis te kennen, raad ik af.

Als je een script gaat zoeken op internet, let er op dat deze niet te gedateerd is en zo recent mogelijk. Er zijn helaas al genoeg lekke scripts te vinden uit 2009.
Gewijzigd op 05/03/2018 20:16:04 door - Ariën -
 

Pagina: « vorige 1 2



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.