2017-07-04 156 views
-2

我有一个成功的网页,显示一些成功的贝宝(IPN)交易后的变量。为什么变量不会回显?

这一切都很好,但我只是不明白为什么$email变量不会回显。查询有问题吗?我已经三重检查了所有列名。

我得到这样的输出:

OK 
price-1.89 

Notice: Undefined variable: payer_email in success.php on line 34 
Email- 

Success.php

<?php 
     include 'dbConfig.php'; 

     error_reporting(E_ALL); 
     ini_set('display_errors', 1); 

     //Get payment information from PayPal 
     $item_number= mysqli_real_escape_string($db, $_POST['item_number']); 
     $txn_id= mysqli_real_escape_string($db, $_POST['txn_id']); 
     $payment_gross= mysqli_real_escape_string($db, $_POST['payment_gross']); 




     //Get product price from database 
     $productResult = $db->query("SELECT price FROM products WHERE id = '".$item_number."'"); 
     $productRow = $productResult->fetch_assoc(); 
     $productPrice = $productRow['price']; 

     if(!empty($txn_id) && $payment_gross == $productPrice){ 

      //Check if payment data exists with the same TXN ID. 
      $prevPaymentResult = $db->query("SELECT payment_id FROM payments WHERE txn_id = '".$txn_id."'"); 

      if($prevPaymentResult->num_rows > 0){ 

      //Get Email 
      $result = $db->query("SELECT payer_email FROM payments WHERE txn_id = '".$txn_id."'"); 
     $row = $result->fetch_assoc(); 
     $email=$row['payer_email']; 
      } 
       echo "OK</br>"; 
       echo "Price-".$payment_gross."</br>"; 
       echo "Email-".$email."</br>"; 

      }else{ 

       echo '<h1>Error</h1>'; 
     } 
     ?> 
+0

查询看起来不错,问题一定是别的。 – Troyer

+1

您提供的代码中没有'payer_email'变量。 –

+0

因为它没有定义。我在代码中看不到变量'$ payer_email'。 – samayo

回答

1

你可以改变

$email=$row['payer_email']; 

$email=!empty($row['payer_email']) ? $row['payer_email'] : ''; 

硫错误显示,因为变量$row没有钥匙payer_email

0

在你的代码:

if (!empty($txn_id) && $payment_gross == $productPrice) 
    { 

    // Check if payment data exists with the same TXN ID. 

    $prevPaymentResult = $db->query("SELECT payment_id FROM payments WHERE txn_id = '" . $txn_id . "'"); 
    if ($prevPaymentResult->num_rows > 0) 
     { 

     // Get Email 

     $result = $db->query("SELECT payer_email FROM payments WHERE txn_id = '" . $txn_id . "'"); 
     $row = $result->fetch_assoc(); 
     $email = $row['payer_email']; 
     } 

    echo "OK</br>"; 
    echo "Price-" . $payment_gross . "</br>"; 
    echo "Email-" . $email . "</br>"; 
    } 
    else 
    { 
    echo '<h1>Error</h1>'; 
    } 

if ($prevPaymentResult->num_rows > 0)可能暗示这种行为就是这个条件没有被满足的唯一的事情,因此为什么行:

$email = $row['payer_email'];永远不会被处理。