Функция each () устарела - PullRequest
0 голосов
/ 26 мая 2020

Моя старая контактная форма показывает эту ошибку, когда она была отправлена:

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

Это PHP -код для контактной формы:

<?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>";
    }
}
?>

У меня есть прочитайте некоторые обходные пути по этому поводу, но у меня ничего не сработало. Думаю, я ошибся в одной из строк ... не знаю где ...

Может кто-нибудь мне поможет!

Большое спасибо! Алекс

Ответы [ 4 ]

1 голос
/ 26 мая 2020

Структура list($Formularfeld, $Wert)=each($_POST) устарела и больше не должна использоваться - я могу только предположить, что вы где-то нашли действительно старый учебник.

Правильный подход - это предварительно обработать глобальную переменную $ _POST и создать правильный массив с ним, затем перебрать его, используя foreach

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

Таким образом, у нас есть хороший массив с именем $mailinfo, который мы можем использовать позже, например:

foreach($mailinfo as $formularfeld => $wert) {
    if($formularfeld != "Send") {
        $Mailnachricht .= $formularfeld.": ".$wert."\n";
    }
}
0 голосов
/ 26 мая 2020

Я использовал «foreach» и «current» вместо «while» и «each», но это не работает.

0 голосов
/ 26 мая 2020

Я изменил эту строку:

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

в

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

, но это не работает.

0 голосов
/ 26 мая 2020

Функция больше не поддерживается. Вы можете отключить предупреждение с помощью символа «@» перед функцией.

Лучше было бы использовать альтернативную функцию, например foreach

...