【问题标题】:Undefined variable issue with PHP [duplicate]PHP的未定义变量问题[重复]
【发布时间】:2013-08-21 21:36:47
【问题描述】:

我正在尝试使基本的编辑功能正常工作,并提出了以下建议。

我拥有的第一页:

while($row = mysqli_fetch_array($result))
  {
  echo "<tr>";
  echo "<td><a href=\"product.php?id=". $row['product_id'] ."\">" . $row['product_name'] . "</a></td>";
  echo "<td>" . $row['product_price'] . "</td>";
  echo"<td><a href =\"deleteproduct.php?id=". $row['product_id'] ."\">Delete</a>";
  echo"<td><a href =\"editproduct.php?id=". $row['product_id'] ."\">Edit</a>";
  echo "</tr>";
  }
echo "</table>";

除了我尝试在下一页上获取编辑的 ID 之外,这一切都正常工作。

下一页:

<?php



if(isset($_POST['edit']))

  {
    $con=mysqli_connect("localhost","root","","db_test");

    // Check connection

    if (mysqli_connect_errno())
    {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }

    if (isset ($_GET['id'])) { $product_id = strip_tags($_GET['id']); }

    $productname   =strip_tags($_POST['nameAdd']); 
    $productdesc      =strip_tags($_POST['descAdd']);
    $productimg   =strip_tags($_POST['imageAdd']); 
    $price        =strip_tags($_POST['priceAdd']);


    $sql = "UPDATE tbl_products SET product_name ='$productname', product_description ='$productdesc',
         product_img ='$productimg',product_price ='$price' WHERE product_id = '$product_id'";
    if (!$insert = $con->prepare($sql))
        die('Query failed: (' . $con->errno . ') ' . $con->error);

    if (!$insert->bind_param('ssss', $productname, $productdesc, $productimg, $price ))
        die('Binding parameters failed: (' . $insert->errno . ') ' . $insert->error);

    if (!$insert->execute())
        die('Execute failed: (' . $insert->errno . ') ' . $insert->error);
    else
        echo "Edit Successful!";

    mysqli_close($con);

echo("      </div>
      <div id='right'><br><br><img src='Red Carpet Theatre Company/images/MayDayGroup.jpg' width='350' height='250' alt='Group Photo'/>
        <p>&nbsp;</p>
      </div>
      <div id='footer'>");
}
else
{
  echo("
<FORM action='".$_SERVER['PHP_SELF']."' METHOD=post>
<input type='hidden' name='edit' value='edit'>
 <table border='3'> 
     <tr>
     <td> Product Name :</td><td><input name=nameAdd type ='text' size'14'> </input></td>
     </tr>
     <tr>
     <td> Product Description :</td><td><input name='descAdd' type ='text' size'14'> </input></td>
     </tr>
     <tr>
     <td> Product Image URL :</td><td><input name='imageAdd' type ='text' size'14'> </input></td>
     </tr>
     <tr>
     <td> Product Price :</td><td><input name='priceAdd' type ='text' size'14'> </input></td> 
     </tr>
     <tr>
     <td><input type='submit' name='Submit' value='Submit'></td>
     </tr>
</table>
</FORM>
      </div>
      <div id='right'><br><br><img src='Red Carpet Theatre Company/images/MayDayGroup.jpg' width='350' height='250' alt='Group Photo'/>
        <p>&nbsp;</p>
      </div>
      <div id='footer'>
");
}
?>

由于某种原因,我不断收到 product_id 变量未定义的错误。任何想法为什么?应该是使用 "isset ($_GET['id'])) 从上一页获取的,谢谢。

【问题讨论】:

  • 你在哪一行得到错误?
  • product_img ='$productimg',product_price ='$price' WHERE product_id = '$product_id'";
  • “由于某种原因,我不断收到 product_id 变量未定义的错误。有什么想法吗?” 当然,这很容易:因为有些东西是未定义的。就这么简单。你不需要在这里问这个,我们已经介绍过了。如果你想知道具体的错误信息,有一个参考:Reference - What does this error mean in PHP?
  • 我的意思是“为什么它未定义”而不是它的意思。

标签: php sql undefined


【解决方案1】:

$_GET['id'] 未定义,因为您的表单方法是 POST。您如何获得产品 ID?是在url结构中吗?

【讨论】:

  • echo" 编辑";这是从数据库中获取 id 的第一页,它工作正常。
  • 如果您尝试打印出 $_GET['id'] 的值会怎样?
  • 我得到另一个未定义的变量错误。
  • 好的,这就是你的问题。看看this 看看是否对您有帮助。
【解决方案2】:

因为您使用的是 MYSQLI_ 而不是 PDO

你不应该使用这样的查询:

if (!$insert = $con->prepare($sql))
    die('Query failed: (' . $con->errno . ') ' . $con->error);

if (!$insert->bind_param('ssss', $productname, $productdesc, $productimg, $price ))
    die('Binding parameters failed: (' . $insert->errno . ') ' . $insert->error);

if (!$insert->execute())
    die('Execute failed: (' . $insert->errno . ') ' . $insert->error);
else
    echo "Edit Successful!";

你应该像这样使用它:

if (!$insert = mysqli_prepare($con,$sql))
    die('Query failed: (' . mysqli_errno($con) . ') ' . mysqli_error();

if (!mysqli_stmt_bind_param($insert,'ssss', $productname, $productdesc, $productimg, $price ))
    die('Binding parameters failed: (' . mysqli_errno($insert). ') ' . mysqli_error($insert);

if (!mysqli_stmt_execute($insert))
    die('Execute failed: (' . mysqli_errno($insert) . ') ' . mysqli_error($insert);
else
    echo "Edit Successful!";

现在你的代码可以正常工作了(它只是 mysqli_* 的方式

【讨论】:

  • 非常感谢。它仍然有问题;在 "die('查询失败: (' . mysqli_errno($con) . ') ' . mysqli_error();" 结尾处
  • 它可能是因为它应该是 mysqli_error($con) 因为它需要一个参数。参考:w3schools.com/php/func_mysqli_error.asp
  • 还是不喜欢。现在真的很迷茫。非常抱歉。
【解决方案3】:

href 语法看起来不太好。 firebug 中的链接是什么样的。

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签