Form stuurt alternatief bestand niet door; wel gewone bestand

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Hans De Ridder

Hans De Ridder

13/07/2017 11:28:01
Quote Anchor link
Ik gebruik een form waar met het formulier een bestand meegestuurd kan worden.
Werkt allemaal prima.
Maar nu is het zo dat er ook echt een bestand meegestuurd MOET worden.
Ik dacht dit op te lossen door bij gebrek aan bestand dan een bestandje
mee te sturen.(0.jpg) Dat bestandje wordt overal netjes gezien en gecodeerd in script.
De key is aanwezig (1). Maar het wordt niet verstuurd bij alternatief van 0.jpg.
Foutmelding vanuit het error gedeelte bijv.:
'Het bestand kon niet verstuurd worden /tmp/0.jpgOPNtWj'.
Maak ik een denkfout, of zit er ergens wat verkeerd?;

Hier staat het basisbestand...
https://github.com/PHPMailer/PHPMailer/blob/master/examples/send_file_upload.phps
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
$upload = $_FILES['userfile']['name'];
if ($upload == "")
{
$_FILES['userfile']['name'] = '0.jpg';
$upload = '0.jpg';
}

if (array_key_exists('userfile', $_FILES)) {
.
.
$uploadfile = tempnam(sys_get_temp_dir(), $_FILES['userfile']['name']); //aanwezig
.
.
$ext = pathinfo($upload, PATHINFO_EXTENSION);
    if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
.
.
$mail->addAttachment($uploadfile, $artiest);
        if (!$mail->send()) {
            $msg .= "Mail fout: " . $mail->ErrorInfo;
        } else {
            $msg .= "De mail is verstuurd!";
        }
    } else {
        $msg .= 'Het bestand kon niet verstuurd worden ' . $uploadfile; //wordt niet verstuurd
    }
}
Gewijzigd op 13/07/2017 12:09:01 door Hans De Ridder
 
PHP hulp

PHP hulp

30/11/2024 07:47:58
 
- Ariën  -
Beheerder

- Ariën -

13/07/2017 12:37:48
Quote Anchor link
Je kan toch gewoon kijken of $_FILES['userfile']['name'] bestaat? Als deze leeg is, dan is er niks geupload, en toon je een foutmelding.
 
Thomas van den Heuvel

Thomas van den Heuvel

13/07/2017 12:43:31
Quote Anchor link
De juiste manier om te controleren of een upload (niet) slaagt is door $_FILES['file']['error'] te vergelijken met de constante UPLOAD_ERR_OK.

In je code ga je er vanuit dat het bestand aanwezig is als de key userfile bestaat, maar die bestaat ook als er geen bestand wordt geupload.
 
Hans De Ridder

Hans De Ridder

13/07/2017 12:44:00
Quote Anchor link
Die bestaat gewoon Arien...
Want die gebruik ik om de extensie van het bestand te achterhalen voor hij gecodeerd de PHP verder induikt.
Desondanks laadt de alternatieve jpg niet in.
Ik zal nog eens kijken of ik iets kan wanneer ik de 0.jpg gewoon toevoeg bij de 'mail'.
En een eventueel gewoon bestand als extra bijlage erbij doe.
Bedankt voor je reactie...
 
Ben van Velzen

Ben van Velzen

13/07/2017 12:44:46
Quote Anchor link
Manipuleren van $_FILES door er andere naamgevingen in te stoppen heeft over het algemeen ook weinig zin, tenzij je een tijdelijk bestand op de plaats zet waar dit verwacht wordt en tmp_name ook verandert. Dat zou ik alleen nooit zo doen, omdat je dan het basisgedrag van PHP gaat manipuleren.
 
Hans De Ridder

Hans De Ridder

13/07/2017 12:48:40
Quote Anchor link
Thomas, wat kan dan de reden zijn dat bij Githubvoorbeeld wel gecheckt wordt op de key?
Gewijzigd op 13/07/2017 12:48:55 door Hans De Ridder
 
Thomas van den Heuvel

Thomas van den Heuvel

13/07/2017 13:12:51
Quote Anchor link
Geen idee? Brakke code? Wat op GitHub gebeurt hoeft toch niets te maken te hebben met wat jij aan het doen bent? Zie mijn vorige bericht voor een betere controle.

Een betere oplossing zou trouwens het verplicht stellen van een upload of het simpelweg niet meesturen van een attachment zijn als deze er niet is.

Stelt de ontvangende partij (van het e-mailbericht) een attachment met een afbeelding (of wat voor bestandstype?) verplicht? Ik zie de logica in heel deze constructie niet. Vervolgens meegaan in deze waanzin lijkt mij geen goed idee.
 
Hans De Ridder

Hans De Ridder

13/07/2017 13:26:26
Quote Anchor link
In dit geval gaat het erom dat iemand reageert op een vraag.
In de form hoeft niks ingevuld te worden. Is al allemaal automatisch gedaan. Alleen bestand erbij doen, of op submit drukken.
Dat kan zijn met een antwoord, of direct met een bestand. (afbeelding, mp3, enz)
Standaard staat er al een comment 'ik kan je wellicht helpen. Stuur even mailtje terug'. Die wordt gewijzigd als
er een bestand bij zit 'hierbij de gevraagde opname'.


Toevoeging op 13/07/2017 14:17:00:

Het gaat hier fout:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
</code]
 
Ben van Velzen

Ben van Velzen

13/07/2017 14:18:18
Quote Anchor link
Zoals gezegd, dat gaat fout omdat je $_FILES probeert te manipuleren en tmp_name hier niet in meeneemt. Ik zou hier vanaf stappen en gewoon een alternatief codepad volgen wanneer er geen bestand geupload is.
 
- SanThe -

- SanThe -

13/07/2017 14:21:15
Quote Anchor link
if(er is een upload) mail attachment toevoegen
else mail attachment jouw bestand toevoegen
 
Hans De Ridder

Hans De Ridder

13/07/2017 14:21:53
Quote Anchor link
Bedankt voor je toelichting Ben.
dat wordt denk en zoekwerk, haha.
Ook al aan het kijken of ik iets kan doen aan de form kant.
 
Thomas van den Heuvel

Thomas van den Heuvel

13/07/2017 17:37:20
Quote Anchor link
Wat doe je hier?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
$uploadfile = tempnam(sys_get_temp_dir(), $_FILES['userfile']['name']); //aanwezig
.
.
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {

Je verplaatst een bestand van de temp directory naar de temp directory. Als je script uitgeraasd is wordt het bestand nog steeds verwijderd? Wat is het punt hiervan?

Je kunt prima een bestand attachen vanuit de temp dir, tenzij je dit bestand ook permanent wilt opslaan.

Als dat de bedoeling is: verplaats deze dan eerst. Kun je na afloop ook makkelijker een referentie hier naartoe maken voor de attachment. Of naar een dummy bestand.

Als je voor jezelf onbegrijpelijke code schrijft of ergens vandaan plukt, hoe kunnen wij dan weten wat de bedoeling is?
 
Hans De Ridder

Hans De Ridder

14/07/2017 14:12:02
Quote Anchor link
Alles werkt nu...
Was wel wat werk, maar de volgorde van script veranderd.
Eerst de HTML form.
Daarna netjes alles posten.
En dan kijken of er een bestand aanwezig is.
Als laatste stap versturen.
Over dat laatste heb ik nog wel een vraag.
Omdat ik bij de form het adres er niet bijzet (wordt ergens anders vandaan gehaald)
komt PHPmailer met foutmelding.
'Mailfout: Voor versturen is minimaal 1 adres nodig'.
Nu wil ik die specifieke melding weghalen.
Maar dat wil niet.
Ik heb in de language file van PHPMailer de tekst op '1' gezet.
En hoopte zo bericht te omzeilen.
Als ik nog een keer een broep op jullie mag doen....
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
if (!$mail->send()) {
if ($mail->ErrorInfo != '1') ;

{$msg .= "Mail fout: " . $mail->ErrorInfo;}
} else {
    $msg .= "De mail is verstuurd!";
        }
echo $msg;
 
 
- Ariën  -
Beheerder

- Ariën -

14/07/2017 14:47:30
Quote Anchor link
Quote:
Omdat ik bij de form het adres er niet bijzet (wordt ergens anders vandaan gehaald)
komt PHPmailer met foutmelding.
'Mailfout: Voor versturen is minimaal 1 adres nodig'.
Nu wil ik die specifieke melding weghalen.
Maar dat wil niet.
Ik heb in de language file van PHPMailer de tekst op '1' gezet.
En hoopte zo bericht te omzeilen.

Dat is echt een heel verkeerde manier om een error te verhelpen. Nu omzeil je het alleen maar door de meldingen weg te werken.

Kom liever met relevante code aan zodat we goed gepast advies kunnen geven. Je code die je net gaf klopt voor geen kant. Waarom een punt-komma na de if?
Gewijzigd op 14/07/2017 14:52:35 door - Ariën -
 
Hans De Ridder

Hans De Ridder

14/07/2017 14:52:02
Quote Anchor link
Het adres komt heel ergens anders vandaan.
Niet uit de form. Maar wordt gecodeerd opgehaald vanuit andere PHP.
Dus ik heb dat daar niet nodig.
De foutmelding ook niet.
Ik omzeil de foutcode niet.
De melding is niet relevant....
 
- Ariën  -
Beheerder

- Ariën -

14/07/2017 14:57:16
Quote Anchor link
De melding is wel relevant! Je gebruikt de functie niet of op een verkeerde manier.

Als je benzinelampje van je auto hinderlijk knippert met een laag brandstofpijl. Plak je die dan ook af?

Maar goed, zoals ik al zei: Kom eens met relevante code aan!
Gewijzigd op 14/07/2017 14:57:45 door - Ariën -
 
Hans De Ridder

Hans De Ridder

14/07/2017 15:02:22
Quote Anchor link
Ik zal je in een persoonlijk berichtje een link sturen waar je het voorbeeld kunt bekijken.
Want staan ivm met testen al wat emailgegevens, etc.
Dus niet openbaar.
Maar eerst even verfraaien nog wat.
 
E vH

E vH

14/07/2017 15:02:38
Quote Anchor link
"Het adres komt heel ergens anders vandaan." --> Glazenbol effect
"Niet uit de form. Maar wordt gecodeerd opgehaald vanuit andere PHP." de Wut?
"Dus ik heb dat daar niet nodig." juist.
"De foutmelding ook niet." uhu
"Ik omzeil de foutcode niet." ben je niet een heel klein beetje eigenwijs?
"De melding is niet relevant...." en toch wil je er graag vanaf.

Oke, genoeg sarcasme, even ontopic:

'Mailfout: Voor versturen is minimaal 1 adres nodig'. --> Lijkt mij toch een duidelijke melding die phpmailer genereerd, jij roept ergens de send functie aan van phpmailer, maar de "recipient" is waarschijnlijk leeg in het PHPmailer Object... dus geef jouw relevante code, dan kunnen wij jou beter helpen :)
 
- Ariën  -
Beheerder

- Ariën -

14/07/2017 15:04:10
Quote Anchor link
Hans De Ridder op 14/07/2017 15:02:22:
Ik zal je in een persoonlijk berichtje een link sturen waar je het voorbeeld kunt bekijken.
Want staan ivm met testen al wat emailgegevens, etc.
Dus niet openbaar.
Maar eerst even verfraaien nog wat.

Ik heb liever dat je het voorbeeld online zet, en de privacygevoelige inhoud anonimiseert. Zo kunnen we allemaal meedenken naar een oplossing, wat ook de insteek van een forum is.
Gewijzigd op 14/07/2017 15:53:03 door - Ariën -
 
Hans De Ridder

Hans De Ridder

14/07/2017 18:00:48
Quote Anchor link
Het werkt nu.
Heb het in iframe gezet, omdat het later ook van daaruit moet werken.
Geen fouten meer volgens mij.
Dus kon de foutmelding bij PHPMailer weer terugzetten naar de gewone mededeling.
Enige wat nu nog moet is de terugkeerpagina veranderen.
Hij komt nu weer terug bij de ingevulde pagina.
Dus als daar nog tip voor is, heel graag.
Dit is het voorbeeld (tijdelijk).
Niet te vaak klikken. Want dan krijg ik te vaak post....


http://www.pctraverse.nl/test/testform.php

Toevoeging op 14/07/2017 20:38:43:

De terugpagina is ook gelukt.
Allemaal hartstikke bedankt!

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$referer = $_SERVER['HTTP_REFERER'];
header('Location: bedankt.html');
 
- Ariën  -
Beheerder

- Ariën -

17/07/2017 20:04:03
Quote Anchor link
Na een location-header ALTIJD een exit of die.

Je script moet juist op dat moment niet meer verder lopen.
Gewijzigd op 17/07/2017 20:04:21 door - Ariën -
 

Pagina: 1 2 volgende »



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.