【问题标题】:Problems with variables in associative arrays关联数组中的变量问题
【发布时间】:2018-03-15 13:01:45
【问题描述】:

如果用户未填写该字段,我希望将默认字符串作为关联数组的值。例如“未插入”。如果用户填写该字段,则变量应采用用户输入的值。所以我写了这段代码:

<?php
if (isset($_POST['submit'])){
    if (isset($_POST['name'])){
        $name =$_POST['name'];     
} else {
        $name = "not inserted";
}
if (isset($_POST['surname'])){
    $surname =$_POST['surname']; 
} else {
    $surname = "not inserted";
}
if (isset($_POST['job'])) { 
    $job = $_POST['job'];
} else {
   $job = "not inserted";
}
    $data = array('name'=>$name, 'surname'=>$surname, 'job'=>$job);
    print_r($data);
}
?>

<form action="" method="post">

<input type="text" id="name" name="name"/>
<input type="text" id="surname" name="surname"/>
<input type="text" id="job" name="job"/>
<input type="submit" id="submit" name="submit"/>

</form>

但如果我不填写某些字段而不是“未插入”字符串 print_r 会显示以下结果:

Array ( [name] => [surname] => [job] => )

请问,谁能告诉我哪里出错了?谢谢。

【问题讨论】:

  • 试试:if (isset($_POST['name']) && $_POST['name']!=""){$name =$_POST['name']; } else {$name = "未插入";}
  • isset() 检查变量是否存在且其值不是NULL。当您的表单提交时,$_POST['name'] 和您检查的其他值存在并且不是NULL。它们可能是''(空字符串),函数empty()strlen()可以帮助您检查。

标签: php arrays variables


【解决方案1】:

空白输入仍会发布到表单操作页面,即使它们没有内容。因此,如果您在将所有字段都留空时发送至 var_dump($_POST),您会看到如下内容:

array (size=3)
  'name' => string '' (length=0)
  'surname' => string '' (length=0)
  'job' => string '' (length=0)
  ...

它们设置(即它们存在)但是是空的。您可以使用empty() 函数检查其中是否有值,如下所示:

if (!empty($_POST['name'])) {
    $name = $_POST['name'];
} else {
    $name = "not inserted";
}
if (!empty($_POST['name'])) {
    $name = $_POST['name'];
} else {
    $name = "not inserted";
}
if (!empty($_POST['job'])) {
    $name = $_POST['job'];
} else {
    $name = "not inserted";
}

详细了解empty 的工作原理in the documentation

【讨论】:

  • 好的,我明白了。感谢您的解决方案,但此外,感谢您的解释。现在我明白了。
【解决方案2】:

这应该按您希望的方式工作。

<input type="text" id="name" name="name"/>
<input type="text" id="surname" name="surname"/>
<input type="text" id="job" name="job"/>
<input type="submit" id="submit" name="submit"/>

</form>
<?php
if ($_POST['submit']) {
      $name = $_POST['name'];
      if ($name == "") { $name = "not interested";}
      $surname = $_POST['surname'];
      if ($surname == "") { $surname = "not interested";}
      $job = $_POST['job'];
      if ($job == ""){$job = "not interested";}
      $data = array('name'=>$name, 'surname'=>$surname, 'job'=>$job);
      print_r($data);
    } 
?>

【讨论】:

    【解决方案3】:

    除了其他答案之外并且只是为了展示另一种方法,您可以使用三元运算符。哪种更整洁,但这是一个品味问题。

    <?php
    $name = ! empty($_POST['name']) ? $_POST['name'] : "not inserted";
    $surname = ! empty($_POST['surname']) ? $_POST['surname'] : "not inserted";
    $job = ! empty($_POST['job']) ? $_POST['job'] : "not inserted";
    
    $data = array('name' => $name, 'surname' => $surname, 'job' => $job);
    ?>
    

    顺便说一句...您可以进一步重构它以创建一个可以重用的函数。通常,该函数会进入另一个文件,您将在使用表单的文件中包含该文件......等等。

    <?php
    
    $name = read_post_value('name', 'not inserted');
    $surname = read_post_value('surname', 'not inserted');
    $job = read_post_value('job', 'not inserted');
    
    $data = array('name' => $name, 'surname' => $surname, 'job' => $job);
    
    var_dump($_POST); // Debug - Show $_POST contents
    var_dump($data);  // Debug - Show $data contents
    
    /**
     * Read a post entry.
     * Assign a default value if it is empty or does not exist
     */
    function read_post_value($name, $default_text = '') {
        return ! empty($_POST[$name]) ? $_POST[$name] : $default_text;
    }
    ?>
    

    【讨论】:

      猜你喜欢
      • 2012-05-19
      • 2022-08-11
      • 1970-01-01
      • 2020-12-26
      • 1970-01-01
      • 2011-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多