Je récupère toutes les données du formulaire avec:
$jinput = JFactory::getApplication()->input;
$formData = new JRegistry($jinput->post->getArray());
puis décodez-le et convertissez-le dans mon tableau personnalisé avec:
$formDataAsJson = json_decode($formData);
$arrayOfFields = array();
foreach($formDataAsJson as $name => $value) {
if(!empty($value) && $name !== 'submit') {
$arrayOfFields[] = '<strong>'.$name.'</strong>: '.$value;
}
}
et ensuite email avec:
$mailer = JFactory::getMailer();
...
$mailer->setBody(implode('<br/>',$arrayOfFields));
Dans mon formulaire, il y a une entrée avec type="file"
Et tout le code fonctionne si je ne touche pas cette entrée et ne remplis que les entrées avec type="text"
Et vérifie les entrées avec type="radio"
. Cependant, si je choisis un fichier en utilisant l'entrée type="file"
, Le code cesse de fonctionner et je ne reçois pas d'e-mail.
Si je choisis un fichier mais envoie $formData
Comme JSON sans le décoder et le convertir en tableau, par exemple. avec:
$mailer->setBody($formData);
alors je reçois un email. Sur ce, il n'y a pas de nom pour mon entrée type="file"
À l'intérieur de la ligne JSON.
Il semble donc que l'entrée type="file"
N'est pas poussée vers la ligne JSON, mais pourquoi le code cesse-t-il de fonctionner dans ce cas? Cela est étrange. Comment puis-je décoder les données de formulaire, les convertir dans mon tableau et envoyer un courrier électronique même si je choisis un fichier? Ou comment exclure l'entrée type="file"
De ->post->getArray()
?
Le code pour télécharger et envoyer un fichier:
jimport('joomla.filesystem.file');
$file = $jinput->files->get('nameOfFileInput');
if(!empty($file['name'])) {
$filename = JFile::makeSafe($file['name']);
$src = $file['tmp_name'];
$dest = JPATH_SITE . DIRECTORY_SEPARATOR . "tmp" . DIRECTORY_SEPARATOR . $filename;
if(JFile::upload($src, $dest)) {
$mailer->addAttachment($dest);
}
}
Joomla 3.5.1
Vous pouvez obtenir des données d'entrée de fichier avec ceci:
$files = $input->files->get('inputName');
Vous n'êtes pas obligé d'utiliser JRegistry
puis json_decode
. Vous obtiendrez array
de $jinput->post->getArray()
en premier lieu.
Donc, votre code pourrait être
$jinput = JFactory::getApplication()->input;
$formData = $jinput->post->getArray();
$arrayOfFields = array();
foreach($formData as $name => $value) {
if(!empty($value) && $name !== 'submit') {
$arrayOfFields[] = '<strong>'.$name.'</strong>: '.$value;
}
}
Mais pour ce qui est du problème avec le remplissage du fichier, cela devrait fonctionner dans les deux cas.
L'entrée de fichier n'est pas incluse dans $jinput->post->getArray()
, le problème repose donc ailleurs.
Je vous suggère d'activer le rapport d'erreurs pour voir si des erreurs sont générées. Vous pouvez voir comment cela se fait dans cette réponse . Le premier point devrait le faire, en fonction de la configuration de votre serveur.
En outre, vous pouvez intégrer votre code dans try-catch, afin d’attraper les erreurs renvoyées.
try {
// Your code here
// Create arrayOfFields and send email
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
Faites-moi savoir comment ça va aller.