Mi antiguo formulario de contacto muestra este error cuando se envió:

Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /kunden/273982_79100/webseiten/kontakt/index.php on line 126

Este es el código PHP para el formulario de contacto:

<?php
$Empfaenger = "mail@mailinfo.com";

$headers .= "Content-Type: text/plain; charset = \"UTF-8\";\n";
$headers .= "Content-Transfer-Encoding: 8bit\n";
$headers .= "\n";

if($_POST['Send']) {
    if(empty($_POST['vornameundnachnachme']) || empty($_POST['adresse']) || empty($_POST['plzort']) || empty($_POST['email']) || empty($_POST['betreff']) || empty($_POST['datenschutz'])) {
        echo"<p style='margin-top: 40px;'><div id='alert'>Ihre Online-Anfrage wurde nicht versendet.<ul style='margin-bottom: 0px;'><li>rot markierte Felder müssen ausgefüllt werden</li></ul></div></p>";
    } else {
        $Mailnachricht = "Question \n\n";
        while(list($Formularfeld, $Wert)=each($_POST) {
            if($Formularfeld!="Send") {
                $Mailnachricht .= $Formularfeld.": ".$Wert."\n";
            }
        }
        $Mailnachricht .= "\nDatum/Zeit: ";
        $Mailnachricht .= date("d.m.Y H:i:s");
        $Mailbetreff = "Anfrage";
        $Mailbetreff .= $_POST['Emailadresse'];
        mail($Empfaenger, $Mailbetreff, $Mailnachricht, "From: ".$_POST['Emailadresse']);
        echo"<p style='margin-top: 40px;'><div id='sent'><h2><i class='fal fa-thumbs-up'></i> Gesendet!</h2></div></p>";
    }
}
?>

He leído algunas soluciones al respecto, pero nada funcionó para mí. Creo que me equivoco en una de las líneas ... no sé dónde ...

¡Quizás alguien pueda ayudarme!

¡Muchas gracias! Alex

0
Alex 26 may. 2020 a las 13:02

4 respuestas

El list($Formularfeld, $Wert)=each($_POST) es una estructura desactualizada y ya no debería usarse; solo puedo suponer que encontraste un tutorial realmente antiguo en alguna parte.

El enfoque correcto sería preprocesar el $ _POST global y crear una matriz adecuada con él, luego iterar a través de él usando foreach

foreach($_POST as $formularfeld => $wert) {
    $mailinfo[$formularfeld] = $value; //Do NOT forget validation here, huge security problem
}

De esta manera, tenemos una buena matriz llamada $mailinfo que podemos usar más adelante, así:

foreach($mailinfo as $formularfeld => $wert) {
    if($formularfeld != "Send") {
        $Mailnachricht .= $formularfeld.": ".$wert."\n";
    }
}
1
Realitätsverlust 26 may. 2020 a las 10:37

Cambié esta línea:

while(list($Formularfeld, $Wert)=each($_POST) {

En

foreach(list($Formularfeld, $Wert)=current($_POST) {

Pero no funciona.

0
Alex 26 may. 2020 a las 10:29

Usé "foreach" y "current" en lugar de "while" y "each", pero no funciona.

0
Alex 26 may. 2020 a las 10:09

La función ya no es compatible. Puede deshabilitar la advertencia con una "@" delante de la función.

Mejor sería usar una función alternativa como foreach

0
MThiele 26 may. 2020 a las 10:06