关联数组中的变量问题

时间:2018-03-15 13:01:46

标签: php arrays variables

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

<?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] => )

请有人告诉我哪里出错了?感谢。

3 个答案:

答案 0 :(得分:0)

空白输入仍会发布到表单操作页面,即使它们没有内容也是如此。因此,如果您在将所有字段留空时.npmrc,那么您会看到以下内容:

public Enemy() 
{
    int[] xcoordinate = new int[]{40,60,80,100,120,140,160,180,200,220,240,260}; 
    for(int i = 0;i <= xcoordinate.length;i++){
      addObject(new enemy(5,5),*sets enemy's x coordinate to a number from an array*,180);   
    }
}

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

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

详细了解empty()如何运作in the documentation

答案 1 :(得分:0)

这应该按照你想要的方式工作。     

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

答案 2 :(得分:0)

除了其他答案,只是为了表明另一种方法,你可以使用三元运算符。哪种方式使它更整洁,但这是一个品味问题。

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