将变量传递给$ _POST []变量时,未定义的索引错误

时间:2018-04-01 05:52:26

标签: php laravel global-variables

这是我的HTML代码:

<form method="POST" action=/posts>
      {{csrf_field()}}
    <div class="form-row">

    <div class="form-group col-md-3">
      <label for="inputAddress">Attendence Type</label>
     <?php $op="AttendenceZero" ?>
      <input type="text" class="form-control"  id="inputPassword4" name="<?php $op ?>" >
    </div>
     </div>

这是我必须接收值的控制器:

class Employeeleavecontroller extends Controller
{
    //
  public function new()
  {
     $name =$_POST['op'];
     echo $name;
  }
}

4 个答案:

答案 0 :(得分:0)

如果您希望收到$_POST['op'],则表单中必须有name="op"

<?php $op ?>几乎没有任何作用。但是,如果你添加echo:

name="<?php echo $op; ?>"

然后你可以收到它:

$_POST['AttendenceZero']

更新: 如果您仍然遇到问题,请检查您实际接收的内容:

<pre>
<?php var_dump($_POST); ?>
</pre>

最后,我没有看到你为名称使用变量的原因。如果您计划将其设置为动态,则无论如何都必须将动态名称发送到结束脚本,除非您按预先处理接收的数据,如下所示:

foreach ($_POST as $postName => $postValue) {
    echo "Name: $postName ; Value: $postValue<br />";
}

更新2:

如果您真的希望让用户定义POST值的name,您还需要将名称定义发送到结束脚本。您可以为此任务使用隐藏输入字段,因此请将其添加到表单中:

<input type="hidden" name="fieldName" value="<?php echo $op;?>">

然后在您的结束脚本中,您首先收到fieldName:

$fieldName = $_POST['fieldName'] //$op == "AttendenceZero" or whatever

并使用它来接收实际数据:

$actualData = $_POST[$fieldName];

但是,如果在构建表单后未定义$op,则所有这些都毫无意义。如果是这样,那么你必须使用例如jQuery在发送表单时将$ op值添加到隐藏的输入字段。

答案 1 :(得分:0)

我想你想做这样的事情,

更改此行,

<input type="text" class="form-control" id="inputPassword4" name="<?php $op ?>" >

<input type="text" class="form-control" id="inputPassword4" name="any_name" value="<?php echo $op ?>" >

在您的控制器中

$name = $_POST['any_name']; echo $name;

所以

$ name将返回AttendenceZero或任何用户定义的值。

答案 2 :(得分:0)

听起来很有意思...... 输入文本字段的名称是用户定义的(动态)。

有两种方法可以处理它。

1)使用隐藏字段。 (推荐)

2)转换为索引数组。

使用隐藏字段。

<form method="POST" action=/posts>
      {{csrf_field()}}
    <div class="form-row">

    <div class="form-group col-md-3">
      <label for="inputAddress">Attendence Type</label>
     <?php $op="AttendenceZero" ?>
      <input type="text" class="form-control"  id="inputPassword4" name="<?php $op; ?>" >
      <input type="hidden" name="op" value="<?php $op; ?>">
    </div>
     </div>

处理隐藏字段。

class Employeeleavecontroller extends Controller
{
    //
  public function new()
  {
     $name = $_POST[$_POST['op']];
     echo $name;
  }
}

转换为索引数组

<form method="POST" action=/posts>
      {{csrf_field()}}
    <div class="form-row">

    <div class="form-group col-md-3">
      <label for="inputAddress">Attendence Type</label>
     <?php $op="AttendenceZero" ?>
      <input type="text" class="form-control"  id="inputPassword4" name="<?php $op; ?>" >
    </div>
     </div>

通过转换为索引数组来处理表单请求。

class Employeeleavecontroller extends Controller
{
    //
  public function new()
  {
     $req = array_values($_POST);
     $name = $req[0]; //contain all form data so, find correct index number.
     echo $name;
  }
}

答案 3 :(得分:-1)

你需要两次改变

1:  "<?php echo $op; ?>"
控制器中的

2: $name =$_POST['AttendenceZero'];

最后是它的工作