如果变量不存在则忽略

时间:2014-05-24 18:59:53

标签: php validation unset

我检查表单的所有字段是否都存在。为此,我有一个错误数组。

但如果行Geschlecht的值不是'Paar',那么我必须忽略Tag2Monat2Jahr2以及{{1}如果Gebdatum2GeschlechtMann,则表单中不存在这些内容。否则我得到:

  

为...中的foreach()提供的参数无效

我尝试使用Frau,但它确实无效。

unset

2 个答案:

答案 0 :(得分:0)

拆分错误检查

if(!isset ($_POST['Email'],     # Check fields that you always need
      $_POST['Show_Email'], 
      $_POST['PLZ'], 
      $_POST['Wohnort'], 
      $_POST['Geschlecht'], 
      $_POST['Tag'],
      $_POST['Monat'])
      $_POST['Jahr']
      $_POST['MSN']){ 

      $errors[] = "Bitte benutzen Sie das Formular aus Ihrem Profil"; 
      #     ^^^ $errors should always be an Array       
}
else
{
        # Do a separate check for Gender=Couple
        if($_POST['Geschlecht']=="Paar" && 
          !isset(
            $_POST['Tag2'],
            $_POST['Monat2'],
            $_POST['Jahr2'], 
          )
        ) {

             $errors[] = "Bitte benutzen Sie das Formular aus Ihrem Profil"; # Text sollte was Anderes sein für Paare... 
              #     ^^^ $errors should always be an Array
        }

}

使用if语句重写用于Paare的sql

然后你可以做以下检查:

$sql = "UPDATE User SET ";
$sql .= "Email = '" . //.... email;
#   ^^^ add to string in PHP

if ($_POST['Geschlecht']=="Paar") { 
  $sql .=  " Gebdatum2 = '". //....  
}

$sql .= "WHERE ID = '". //...

但如果这是一个关键的应用......

然后,您可能需要从数据库中提取Geschlecht以获取可信输入,以确定这是一对情侣还是一个人的记录,因为您无法信任{{1}的值}}

如果您希望允许用户使用此表单更改$_POST['Geschlecht'],则不适用。

答案 1 :(得分:0)

感谢。我按照你的说法尝试了,但比我得到了

解析错误:语法错误,第146行/customers/5/f/d/regio-privat.com/httpd.www/myprofile.php中的意外T_VARIABLE

这是检查Geschlecht == Paar

的行
$errors[] = "Bitte benutzen Sie das Formular aus Ihrem Profil";

因为我想让用户改变我的状态,就像这样

elseif(isset($_POST['submit']) AND $_POST['submit']=='Daten ändern'){ 
            // Fehlerarray anlegen 
            $errors = array(); 
            // Prüfen, ob alle Formularfelder vorhanden sind 
            if(!isset ($_POST['Email'], 
                      $_POST['Show_Email'], 
                      $_POST['PLZ'], 
                      $_POST['Wohnort'], 
                      $_POST['Geschlecht'], 
                      $_POST['Tag'],
                      $_POST['Monat'],
                      $_POST['Jahr'], 
                      $_POST['MSN']) || ($geschlecht=='Paar' && !isset($_POST['Tag2'], $_POST['Monat2'],$_POST['Jahr2'])))


                // Ein Element im Fehlerarray hinzufügen 
                $errors = "Bitte benutzen Sie das Formular aus Ihrem Profil"; 
            else{ ...some email check....  

这似乎有效,并且当用户更改状态时,数据也将以正确的方式写入数据库。我只得到一些通知 而Geschlecht是Mann或Frau,我得到了这个

注意:未定义的变量:geschlecht在...第142行的myprofile.php注意:未定义的索引:第186行的... myprofile.php中的Jahr2注意:未定义的索引:... myprofile中的Monat2。第186行的PHP注意:未定义的索引:第186行的myprofile.php中的Tag2 Ihre Daten wurden erfolgreich gespeichert。

和Paar这个

注意:未定义的变量:geschlecht in ... myprofile.php on line 142 Ihre Daten wurden erfolgreich gespeichert。

' geschlecht'通知与此行有关

  $_POST['MSN']) || ($geschlecht=='Paar' && !isset($_POST['Tag2'], $_POST['Monat2'],$_POST['Jahr2'])))

和第186行包含此

$Gebdatum2 = sprintf("%04d-%02d-%02d", $_POST['Jahr2'], $_POST['Monat2'], $_POST['Tag2']);

所以我必须找到一种方法来避免这些消息。