带有GET和POST的php中未定义的索引

时间:2012-05-02 20:26:17

标签: php mysql mysqli warnings undefined

我有一个php文件说p1.php是从另一个php文件获取数据说p2.php,它是通过$ _GET在p1.php中访问的。现在$ _GET中的数据保存在变量$ totPrice中。 p1.php还有一个引用自身的表单,一些处理是通过MySql数据库完成的。我收到错误:

"Notice: Undefined index: totP in C:\xampp\htdocs\fi\p1.php on line 'where ever $totPrice appears'".

这是p1.php的代码: -

<?php
global $totPrice;
$totPrice = $_GET['totP'];
if(!isset($_COOKIE['username']))
{
    if(isset($_POST['Submit']))
{
$dbc      = mysqli_connect("localhost","root","","authserver");
$username = $_POST['name'];
$password = $_POST['password'];
$ccno     = $_POST['ccno'];

    if(!empty($username) && !empty($password) && !empty($ccno))
{
     $query = "select * from authserver.fimembers where fName = '$username' AND     password_finmem=SHA('$password') AND CreditCard = $ccno";
$result = mysqli_query($dbc,$query);

if(mysqli_num_rows($result) == 1 )
{
$dbc1 = mysqli_connect("localhost","root","","fininsti");
$query1  = "select * from fininsti.fimembers where fName = '$username' AND    password_finmem=SHA('$password') AND CreditCard = $ccno"; 
    $result1 = mysqli_query($dbc1,$query1);
$row  = mysqli_fetch_array($result1,MYSQL_BOTH);
setcookie('username',$username,time()+60*60);
setcookie('ccno',$row[0],time()+60*60);
echo $totPrice.'<br />';
if($totPrice > $row[3])
if($_GET['totP'] > $row[3])
{
   $status = array('stat' => 0 );   // 0 = Not sufficient funds
}
else
{
$status = array('stat' => 1 );   // 1 = Good To Go!
$newAmt = $row[3]-$totPrice;
$query = "update fininsti.fimembers set Credit = $newAmt where CreditCard = $ccno";
$result = mysqli_query($dbc1,$query);
}           
$retMerUrl = "http://localhost/eTrans/site/confirm.php?".http_build_query($status);
setcookie('username',$username,time()-60*60);
setcookie('ccno',$row[0],time()-60*60);
mysqli_close($dbc1);
mysqli_close($dbc);
header('Location:'.$retMerUrl);             
}
else
   echo "Credentials don't match!";
}
else
{
    echo "Sorry! Fields empty!";
}
setcookie('userId',$username,time()-60*60);
setcookie('ccno',$row[0],time()-60*60);
mysqli_close($dbc);
}
}
?>

如果您对此问题有任何疑问,请回复我。

3 个答案:

答案 0 :(得分:3)

您需要修复前两行:

global $totPrice;
$totPrice = $_GET['totP'];
  1. 删除第一行。您不需要global以外的功能。
  2. 用这个替换第二行:

    $totPrice = isset($_GET['totP']) ? $_GET['totP'] : 0;
    
  3. (与这两行无关)修复代码中的SQL注入问题!!!

答案 1 :(得分:1)

根据您收到的错误消息,很明显totP未包含在脚本引用的URL中。因此,最好在参考isset参数之前添加一些$_GET检查,例如:

$totPrice = (isset($_GET['totP'])) ? $_GET['totP'] : null;

另外,不确定为什么要进行global通话,因为您似乎不在某个功能中。

答案 2 :(得分:0)

要删除通知,请使用isset($_GET['totP']进行检查。如果它在URL中但未显示在您的页面中,请确保没有重写。

您始终可以var_dump($_GET)查看特定代码的查询参数中的所有信息。

看看它收到的内容可能会有所帮助,让您知道什么是错的。