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

$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
    }
}
Wat doe je hier?
$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?
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....

if (!$mail->send()) {
if ($mail->ErrorInfo != '1') ;

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










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?
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....
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!
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.
"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 :)
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.

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

[size=xsmall]Toevoeging op 14/07/2017 20:38:43:[/size]

De terugpagina is ook gelukt.
Allemaal hartstikke bedankt!


$referer = $_SERVER['HTTP_REFERER'];
header('Location: bedankt.html');
Na een location-header ALTIJD een exit of die.

Je script moet juist op dat moment niet meer verder lopen.

Reageren