Form stuurt alternatief bestand niet door; wel gewone bestand
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)
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
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
}
}
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
Je kan toch gewoon kijken of $_FILES['userfile']['name'] bestaat? Als deze leeg is, dan is er niks geupload, en toon je een foutmelding.
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.
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...
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.
Gewijzigd op 13/07/2017 12:48:55 door Hans De Ridder
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.
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:
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.
else mail attachment jouw bestand toevoegen
dat wordt denk en zoekwerk, haha.
Ook al aan het kijken of ik iets kan doen aan de form kant.
Code (php)
1
2
3
4
2
3
4
$uploadfile = tempnam(sys_get_temp_dir(), $_FILES['userfile']['name']); //aanwezig
.
.
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
.
.
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?
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....
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.
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 -
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....
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 -
Want staan ivm met testen al wat emailgegevens, etc.
Dus niet openbaar.
Maar eerst even verfraaien nog wat.
"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 :)
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.
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 -
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!
Je script moet juist op dat moment niet meer verder lopen.
Gewijzigd op 17/07/2017 20:04:21 door - Ariën -