2012-05-02 8 views
0

私は、別のphpファイル(例えば、$ _GET経由でp1.phpにアクセスするp2.php)からデータを取得しているp1.phpというphpファイルを持っています。 $ _GETのデータは変数$ totPriceに保存されています。 p1.phpには、自身を参照するフォームがあり、処理の一部はMySqlデータベースで行われます。ここでp1.phpためのコードですGETとPOSTで未定義のインデックス

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

:私はのエラーを取得しています -

<?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); 
} 
} 
?> 

あなたが疑問に問題がある場合は私に戻って取得するようにしてください。

+0

ほんの少しの提案:PHPセッションを使用し、$ _POSTだけでパスワードを送信しない –

+1

ページのURLにあるtotPは当てはまりますか? URLは次のようになります:p1.php?totP = 5 – CastroXXL

+1

あなたはこのコードでクレジットカード情報を処理しますか? – ThiefMaster

答えて

3

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

global $totPrice; 
$totPrice = $_GET['totP']; 
  1. は、最初の行を削除します。関数の外にglobalは必要ありません。
  2. これで二行に置き換えます

    $totPrice = isset($_GET['totP']) ? $_GET['totP'] : 0; 
    
  3. (この2行に関連していない)あなたのコードにSQLインジェクションの問題を修正します!表示されるエラーメッセージ(複数可)に基づいて
+0

1)$ totPriceの値は別のページから来ているということです。あなたが提案したものとは別の解決策は次の通りです: -

2)SQLインジェクションを修正するための提案はありますか? –

1

、それはtotPスクリプトが参照しているURLに含まれていないことは明らかです。だからあなたの最善の策は、例えば、$_GETパラメータを参照する前に、いくつかのissetチェックを含めることです。

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

また、ではないあなたが関数内であることが表示されませんよう、あなたが、globalコールを作っている理由を確認してください。

+0

$ totPriceの値は別のページから来ているということです。あなたが提案したものとは別の解決策は次の通りです: - –

0

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

いつでもvar_dump($_GET)を実行して、特定のコードのクエリパラメータのすべての情報を確認できます。

何が間違っているかを知るために受け取っている内容を確認すると役立つ場合があります。

関連する問題