PHP中未定义的索引错误

28

我是PHP的新手,遇到了这个错误:

提示:在 /var/www/test/modifyform.php 的第32行,未定义索引 productid。

提示:在 /var/www/test/modifyform.php 的第33行,未定义索引 name。

提示:在 /var/www/test/modifyform.php 的第34行,未定义索引 price。

提示:在 /var/www/test/modifyform.php 的第35行,未定义索引 description。

我在网上找不到任何解决方案,希望有人能帮助我。

这是代码:

<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="POST">
   <input type="hidden" name="rowID" value="<?php echo $rowID;?>">

   <p>
      Product ID:<br />
      <input type="text" name="productid" size="8" maxlength="8" value="<?php echo $productid;?>" />
   </p>

   <p>
      Name:<br />
      <input type="text" name="name" size="25" maxlength="25" value="<?php echo $name;?>" />
   </p>

   <p>
      Price:<br />
      <input type="text" name="price" size="6" maxlength="6" value="<?php echo $price;?>" />
   </p>

   <p>
      Description:<br />
      <textarea name="description" rows="5" cols="30">
      <?php echo $description;?></textarea>
   </p>

   <p>
      <input type="submit" name="submit" value="Submit!" />
   </p>
   </form>
   <?php
   if (isset($_POST['submit'])) {
      $rowID = $_POST['rowID'];
      $productid = $_POST['productid']; //this is line 32 and so on...
      $name = $_POST['name'];
      $price = $_POST['price'];
      $description = $_POST['description'];

}

接下来我要做的事情(或者说我至少试图做的)是更新MySQL中的一个表。 我真的不明白为什么变量$rowID被定义了,而其他变量没有被定义。

感谢您抽出时间回答我的问题。 谢谢!


你有多个<form>标签吗? - CodeCaster
尝试执行以下代码并查看结果:var_dump($_POST); - guitarlass
@Mian_Khurram_Ijaz 目前输出仅显示提交时的rowID变量。数组([rowID] => Oranges [submit] => 提交!) - LPoblet
为了测试,你可以尝试移除 size="25" maxlength="25" value="<?php echo $name;?>" 这段代码,手动输入名称和价格的值,看看会发生什么。 - guitarlass
重复的问题,类似于https://dev59.com/bW855IYBdhLWcg3wNxkM和其他许多问题。 - Cees Timmerman
显示剩余4条评论
9个回答

54

请尝试:

<?php

if (isset($_POST['name'])) {
    $name = $_POST['name'];
}

if (isset($_POST['price'])) {
    $price = $_POST['price'];
}

if (isset($_POST['description'])) {
    $description = $_POST['description'];
}

?>

7
如果您是新手,PHP 7引入了null合并运算符,因此可以简化示例: $name = $_POST['name'] ?? 'any default value, but probably null'; - Michael Cordingley

6

Apparently the index 'productid' is missing from your html form. Inspect your html inputs first. eg <input type="text" name="productid" value=""> But this will handle the current error PHP is raising.

  $rowID = isset($_POST['rowID']) ? $_POST['rowID'] : '';
  $productid = isset($_POST['productid']) ? $_POST['productid'] : '';
  $name = isset($_POST['name']) ? $_POST['name'] : '';
  $price = isset($_POST['price']) ? $_POST['price'] : '';
  $description = isset($_POST['description']) ? $_POST['description'] : '';


3
这是因为您的PHP代码在表单提交之前已经被执行了。为了避免这种情况,将您的PHP代码放在以下if语句中,它会处理剩下的部分,无需为每个变量设置if语句。
       if(isset($_POST) && array_key_exists('name_of_your_submit_input',$_POST))
        {
             //process PHP Code
        }
        else
        {
             //do nothing
         }

这是Akshat Maltare提供的非常合乎逻辑的答案。我在完全不同的表单上遇到了类似的问题,使用了这篇文章中提供的方法,表单完美地工作了。谢谢Akshat。在我尝试在我的php表单上执行之前,它听起来就很合理,而且确实很好。我指的是在表单发布之前执行PHP代码的部分。 - bytise

2

尝试

<?php

  $rowID=$productid=$name=$price=$description="";  

   if (isset($_POST['submit'])) {
      $rowID = $_POST['rowID'];
      $productid = $_POST['productid']; //this is line 32 and so on...
      $name = $_POST['name'];
      $price = $_POST['price'];
      $description = $_POST['description'];

}

0

嘿,这是因为您在分配值之前尝试显示它。 您只需填写值并提交表单,它将显示正确的输出。 或者您可以在表单标签下面编写您的PHP代码, 它将不会出现任何错误。


3
Sure, I can translate for you! However, please provide me with the text that needs to be translated. - kleopatra

0

当您生成<form>时,可能存在问题。我敢打赌当您将变量$name$price echo<input>字段的value中时,它们是NULL或空字符串。空输入字段不会被浏览器发送,因此$_POST将不包含其键。

无论如何,您可以使用isset()来检查。

使用以下内容测试变量:

if(isset($_POST['key'])) ? $variable=$_POST['key'] : $variable=NULL

最好将其设置为NULL,因为

NULL值表示一个没有值的变量。


变量不为空。所有输入文本都显示从数据库检索的数据。我尝试的是修改这些数据并使用新值更新数据库(当然,在解决此问题之后,否则数据库将更新并擦除行,因为在按“提交!”后变量中没有值)。 - LPoblet

-1
如果您正在使用wamp服务器,那么我建议您使用xampp服务器。我在不到一分钟的时间内遇到了这个错误,但是通过使用(isset)函数解决了这个问题,并且没有再出现错误。之后我删除了(isset)函数,也没有看到任何错误。
顺便说一下,我正在使用xampp服务器。

-2

这个错误有时发生在 method 属性上(只接受有效的方法)。 错误选项: method="get",但却通过 $Fname = $_POST["name"]; 调用, 或者

       method="post" but  called by  $Fname = $_GET["name"];

更多信息请访问http://www.doordie.co.in/index.php


-3

要消除此错误,在您的 HTML 表单中,您应该在 enctype 中执行以下操作:

<form  enctype="multipart/form-data">

以下是该错误的原因,即如果您在enctype中以form-data开头,则应以multipart开头:
<form enctype="form-data/multipart">

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接