[PHP] Upload & e-mail validatie

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Nedra
  • Registratie: Juli 2006
  • Laatst online: 17-10-2023
Wat ik wil bouwen is een formuliertje waar iemand zijn/haar e-mail adres kan invullen en een document kan uploaden naar de server. Wanneer het bestandje is geupload moet er een bevestiging naar het opgegeven e-mail adres gaan. Aangezien ik totaal geen PHP'er ben heb ik hiervoor verschillende scriptjes gevonden, 1+1 gedaan en dat werkt. Nu wil ik ook nog dat er verschillende vormen van e-mail adres validatie gedaan worden, maar dat wil niet lukken. Het is me gelukt om voor e-mail validatie te zorgen als er geen bestand is ingevoerd en er op de 'submit' knop gedrukt wordt, maar zodra er een bestand is ingevoerd gaat ie ervoor. Dit is de code die ik tot nu toe heb (zonder e-mail validatie):
PHP:
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
<?
 
//kijken of er een bestand is geselecteerd

if(isset($_FILES['bestand'])) {

    //als het bestand groter is dan 5024000 bytes word hij niet toegelaten
    if($_FILES['bestand']['size'] > 5024000) {
        echo "Het bestand is <b>" . $_FILES['bestand']['size'] . "</b>, het maximale toegstaan is <b>5mb</b>";
    } else {
        //kijken of het bestand wel juiste formaat is
        if($_FILES['bestand']['type'] == "text/plain" || $_FILES['bestand']['type'] == "application/pdf"  || $_FILES['bestand']['type'] == "application/vnd.openxmlformats-officedocument.wordprocessingml.document" || $_FILES['bestand']['type'] == "application/msword") {
            //kijken of er een nieuwe naam aan het bestand is gegeven
           
            if(empty($_POST['naam'])) {
                $naam = $_FILES['bestand']['name'];
            } else {
                //strip de extensie om die achter de nieuwe bestandsnaam te plakken
                $x = strrchr($_FILES['bestand']['name'], ".");
                $naam = $_POST['naam'] . $x;
            }
           
           
 
            //het bestand uploaden met de nieuwe of oude naam
            move_uploaded_file($_FILES['bestand']['tmp_name'], "uploadbestandjesfolder/" . $naam);
            //redirect naar url voor bedankje
             $URL="http://www.website.com/thanks";
header ("Location: $URL");

//e-mail naar opgegeven e-mail adres
$email = $_POST['email'];
                $to = $email;
                $subject = 'uw bestand is geupload ';
                $message = "
        <p>Bedankt voor het uploaden.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer auctor. Aliquam quis dolor ut nibh sodales pellentesque. Suspendisse vitae turpis. Phasellus dignissim, odio consectetur euismod elementum, risus nunc sollicitudin neque, non semper enim eros et justo. Etiam interdum lectus. Duis hendrerit massa sed odio. Cras libero. Aenean nec libero ac nulla tempor congue. Ut rhoncus consectetur pede. Suspendisse tincidunt, metus et luctus adipiscing, leo quam varius tortor, a tincidunt nisl sapien id magna. Nunc lobortis sollicitudin diam. Phasellus sapien mi, ultricies vitae, volutpat ac, iaculis eget, lectus.</p>
        <p> Hoogachtend,</p>
        <p> Website crew<p>
";

                $headers = 'From: web@website.nl' . "\r" .
                            'Content-type: text/html; charset=iso-8859-1' . "\r";
                            
                mail($to,$subject,$message,$headers);
            
        } else {
            echo "U heeft geen e-mail adres ingevoerd of Het bestand is geen .pdf, .doc of .docx ";
        }
    }
} else {
    echo "Selecteer een bestand (alleen .pdf, .doc of .docx)";
}
?>
<form action="" method="post" enctype="multipart/form-data">
E-mail Address: <input type='text' name='email' />

<b>Bestand:</b> <input type="file" name="bestand"><br>
<input type="submit" name="submit" value="Upload">
</form>


Ik heb dus een paar e-mail validatie scriptjes gevonden zoals onderstaande, maar waar ik die ook toevoeg aan bovenstaande code, het werkt alleen wanneer er geen bestand wordt geupload. Nou zegt mijn scherpe programmeer instinct :X me dat het wellicht iets te maken heeft met de input type='submit' oid..maar is er hier toevallig iemand die me op weg kan helpen? _/-\o_

(één van de vele validatie scriptjes):
PHP:
1
2
3
4
5
6
7
8
9
10
11
function checkEmail($email) {
  if(preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])
  &#8618;*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/",
               $email)){
    list($username,$domain)=split('@',$email);
    if(!checkdnsrr($domain,'MX')) {
      return false;
    }
    return true;
  }
  return false;

Acties:
  • 0 Henk 'm!

  • mocean
  • Registratie: November 2000
  • Laatst online: 04-09 10:34
Je moet je e-mail check doen, voordat je verder gaat met: isset($_FILES['bestand'])

Als het e-mail adres namelijk fout is, kan je gelijk al stoppen. Verder zijn er meer geldige email adressen dan die functie checkEmail weergeeft (volgens mij).

Koop of verkoop je webshop: ecquisition.com


Acties:
  • 0 Henk 'm!

  • Nedra
  • Registratie: Juli 2006
  • Laatst online: 17-10-2023
Maar als ik dat doe, geeft ie al een fout aan voordat er uberhaupt een e-mail adres is ingevoerd. Ik gok dan dat er iets tussen zou moeten komen dat de fout alleen gegeven wordt wanneer het formulier verzonden wordt.

Acties:
  • 0 Henk 'm!

  • mocean
  • Registratie: November 2000
  • Laatst online: 04-09 10:34
if (isset($_POST['email'])) dan lijkt me

Koop of verkoop je webshop: ecquisition.com


Acties:
  • 0 Henk 'm!

  • André
  • Registratie: Maart 2002
  • Laatst online: 12-09 14:32

André

Analytics dude

Het script ziet er niet helemaal logisch uit, heb je zomaar wat willekeurige scripts bij elkaar in gegooid? Ik zie dat je namelijk een redirect doet met een header en vervolgens nog denkt te kunnen emailen?

Verder move ik dit even naar Programming

Acties:
  • 0 Henk 'm!

  • ari
  • Registratie: November 2007
  • Laatst online: 01-08 22:36

ari

Maar als ik dat doe, geeft ie al een fout aan voordat er uberhaupt een e-mail adres is ingevoerd.
Daar is deze functie handig voor: www.php.net/isset

De variabele die je kunt gebruiken is je submit. Als je formulier is verstuurd, controleer alles. Zo niet, laat dan alleen het formulier zien.

Acties:
  • 0 Henk 'm!

  • Nedra
  • Registratie: Juli 2006
  • Laatst online: 17-10-2023
Thanks, ik ga weer even verder pielen, laat wel weten wanneer het niet lukt. @André, yup en het mailen werkt zonder problemen..misschien niet logisch maar het werkt wel :)

Acties:
  • 0 Henk 'm!

  • ari
  • Registratie: November 2007
  • Laatst online: 01-08 22:36

ari

Dat je mailtje wordt verstuurd is op zich logisch. Je vertelt de browser dat hij ergens anders moet gaan kijken, en vervolgens gaat het script verder met uitvoeren. Dat er niemand is om de output te ontvangen doet er verder niet toe.

Wil je niet dat de rest van je script wordt uitgevoerd, dan moet je melden dat je script moet stoppen:
PHP:
1
2
3
4
header ("Location: $URL");
//dit wordt nog wel uitgevoerd
exit(0);
//dit niet

[ Voor 3% gewijzigd door ari op 16-02-2009 18:37 . Reden: verduidelijking ]


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

ari schreef op maandag 16 februari 2009 @ 18:36:
Dat je mailtje wordt verstuurd is op zich logisch. Je vertelt de browser dat hij ergens anders moet gaan kijken, en vervolgens gaat het script verder met uitvoeren. Dat er niemand is om de output te ontvangen doet er verder niet toe.
Niet helemaal correct. Afhankelijk van de browser wordt dit wel netjes afgebroken, tenzij je zelf aan hebt gegeven dat er bij een user abort gewoon verder moet worden gegaan met het processen van een script. Het is wel beter om gewoon een die() of exit() te gebruiken, om halfbakken browsers ook te ondersteunen.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Idd, als een browser zijn volledige page binnen heeft gekomen, kan hij in princiepe zijn connectie verbreken. Volgens mij is het niet gedefineerd wat er daarna met de verwerking van de pagina gebeurd.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

PHP breekt script uitvoering af wanneer er een user abort binnenkomt.. Die user abort kan van alles zijn, zoals een keer op de STOP knop rossen, het navigeren naar een andere pagina ("Location" header :P). Een browser hoort bij een Location header gewoon direct te aborten, maar niet alle browsers doen dit even netjes.

Anyone who gets in between me and my morning coffee should be insecure.

Pagina: 1