0

私は別のphpファイルからデータを取得しているp1.phpというphpファイルを持っています。これは、$ _GET経由でp1.phpでアクセスされるp2.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);
}
}
?>

質問に問題がある場合は、私に戻ってください。

4

3 に答える 3

3

最初の 2 行を修正する必要があります。

global $totPrice;
$totPrice = $_GET['totP'];
  1. 最初の行を削除します。global関数の外側は必要ありません。
  2. 2 行目を次のように置き換えます。

    $totPrice = isset($_GET['totP']) ? $_GET['totP'] : 0;
    
  3. (これらの 2 行とは関係ありません)コード内の SQL インジェクションの問題を修正してください!!!
于 2012-05-02T20:35:02.027 に答える
1

受け取ったエラー メッセージに基づいてtotP、スクリプトが参照している URL に が含まれていないことは明らかです。issetしたがって、パラメーターを参照する前にいくつかのチェックを含めることをお勧めします$_GET。たとえば、次のようになります。

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

globalまた、関数内にいないように見えるため、なぜ呼び出しを行っているのかわからない。

于 2012-05-02T20:36:29.807 に答える
0

通知を削除するには、チェックをisset($_GET['totP']行います。URLに含まれていてもページに表示されない場合は、書き換えが行われていないことを確認してください。

var_dump($_GET)特定のコードのクエリパラメータのすべての情報を表示するために、いつでも実行できます。

何が悪いのかを知るために、それが何を受け取っているかを確認することが役立つ場合があります。

于 2012-05-03T18:42:52.610 に答える