【问题标题】:Mysql/PHP error: not displaying $usernameMysql/PHP 错误:不显示 $username
【发布时间】:2014-01-21 16:54:03
【问题描述】:

大家好,我发现我的php SQL 没有更新表“as_users”是因为它无法获取$username。

问题是我不知道如何让它检测到 $username ,它已经检测到它并将其显示为 html 但是当它尝试执行 mysql 它无法获取 $username 我不知道为什么,任何人都可以解释或帮助我解决这个问题吗?不胜感激。

更多信息:电子邮件没有收到$username,mysql 也没有,但底部的回显显示了正确的用户名。

<?php
//
//  
//  
//  IPN system $username cannot be found in mysqli/emails but can be in html
//
//
// The way to inform the user about the status of your payment

require_once "paypal_config.php";
include 'templates/header.php';
$userDetails = $user->getDetails();
$user = $db->select("SELECT * FROM `as_users`");
$username =$userInfo['username'];

//
// FUNCTIONS
//
// Basic function for email notification 
function send_mail($message,$email)
{
    $subject=   "New Payment";
    $sender=    "Paypal Payment $company";

    $header .=  "MIME-Version: 1.0\n"; 
    $header .=  "Content-type: text/html; charset=utf-8\n"; 
    $header .=  "From: ".$sender."<".$email.">\n";
    $header .=  "Return-path: ". $refers."\n";
    $header .=  "X-Mailer: PHP/". phpversion()."\n";
    $message .= "<br>";

    foreach($_POST as $name=>$value)
            {
            $message .= $name.": ".$value."<br>";
            }

    mail($email, $subject, $message, $header); 

}


// Examines all the IPN and turns it into a string
function Array2Str($kvsep, $entrysep, $a)
{
    $str = "";
    foreach ($a as $k=>$v)
    {$str .= "{$k}{$kvsep}{$v}{$entrysep}";}
    return $str;
}


//
// Verifying paypal message - Using POST vars rm=2 in html form 
//
$req = 'cmd=_notify-validate';
$fullipnA = array();

foreach ($_POST as $key => $value)
{
    $fullipnA[$key] = $value; 
    $encodedvalue = urlencode(stripslashes($value));
    $req .= "&$key=$encodedvalue";
}
$fullipn = Array2Str(" : ", "\n", $fullipnA);

    $url ='https://www.paypal.com/cgi-bin/webscr';  

$curl_result=$curl_err='';
$fp = curl_init();
curl_setopt($fp, CURLOPT_URL,$url);
curl_setopt($fp, CURLOPT_RETURNTRANSFER,1);
curl_setopt($fp, CURLOPT_POST, 1);
curl_setopt($fp, CURLOPT_POSTFIELDS, $req);
curl_setopt($fp, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded", "Content-Length: " . strlen($req)));
curl_setopt($fp, CURLOPT_HEADER , 0); 
curl_setopt($fp, CURLOPT_VERBOSE, 1);
curl_setopt($fp, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($fp, CURLOPT_TIMEOUT, 30);

$response = curl_exec($fp);
$curl_err = curl_error($fp);
curl_close($fp);


// Vars received by Paypal
$payment_status = $_POST['payment_status'];
if (strcmp ($response, "VERIFIED") == 0)        
{
    // Check the status of the order
    if ($payment_status != "Completed")
    {       
        send_mail("The payment was not accepted by paypal - Payment Status: $payment_status", $email);

        exit;
    }
    // all good so far, the transaction has been confirmed so I can do all -> Update DB, stock, credit computations, activate accounts etc etc

    // Vars received by Paypal
    $item_name = $_POST['item_name'];
    $item_number = $_POST['item_number'];
    $payment_status = $_POST['payment_status'];
    $payment_amount = $_POST['mc_gross'];
    $payment_currency = $_POST['mc_currency'];
    $txn_id = $_POST['txn_id'];
    $receiver_email = $_POST['receiver_email'];
    $payer_email = $_POST['payer_email'];
    $txn_type = $_POST['txn_type'];
    $pending_reason = $_POST['pending_reason'];
    $payment_type = $_POST['payment_type'];
    $custom = $_POST['custom'];
    $invoice =$_POST['invoice'];
    // Buyer information
    $first_name=$_POST['first_name'];
    $last_name=$_POST['last_name'];
    $address_name=$_POST['address_name'];
    $address_country=$_POST['address_country'];
    $address_country_code=$_POST['address_country_code'];
    $address_zip=$_POST['address_zip'];
    $address_state=$_POST['address_state'];
    $address_city=$_POST['address_city'];
    $address_street=$_POST['address_street'];
    if ($paypal_mysql) {
    $mysqli = new mysqli('****', '**', '***', '**');
    $stmt = $mysqli->prepare("UPDATE `as_users` SET paid='1', reg_date=CURRENT_TIMESTAMP, end_date=DATE_ADD(CURRENT_TIMESTAMP(), INTERVAL 30 DAY) WHERE username = ?");
    $stmt->bind_param('s', $username);
    $stmt->execute();
        send_mail("Tried to SQL  table with: $username", $email);
    }
    send_mail("New payment was successfully recieved from $payer_email username: $username1", $email);
  }else{    
     //the transaction is invalid I can NOT charge the client. 
     send_mail("$username Invalid payment - $fullipn", $email);

}
?>
<li>User: <?php echo $username ?> </li>

【问题讨论】:

    标签: php mysql paypal mysqli


    【解决方案1】:

    这里你有无效的变量名$username1(我猜应该是$username):

    send_mail("New payment was successfully recieved from $payer_email username: $username1", $email);
    

    也不清楚$paypal_mysql 的来源。我想如果它没有设置,那么你会错过你的保存代码。

    【讨论】:

    • 它是在paypal配置中设置的,它是= TRUE;我将它设置为 username1 只是为了测试另一个 $username 变量,即使我删除 $paypal_mysql if 方法它不起作用问题是它没有得到 $username
    • 不清楚$userInfo 的值来自$username = $userInfo['username'];?
    • 来自 include 'templates/header.php';它适用于 html,就像它在 html 上显示用户名
    • 如果用户名打印在&lt;li&gt;User: &lt;?php echo $username ?&gt; &lt;/li&gt;,那么我看不出在代码流中如何“丢失”价值。很可能其中一个条件不起作用。尝试在关键位置添加几个var_dump($username)。还要检查 mysqli 函数是否返回 TRUE 值。尝试直接在 mysql 中运行 UPDATE 查询。如果这不起作用,则创建尽可能小的脚本,嵌入所有模块等,不带 any include 或 require。并将其发布在此处,以便每个人都能够重现该问题。
    • Ivan 这里是问题,如果我把这个代码 $stmt = $mysqli->prepare("UPDATE as_users SETpaid='1', reg_date=CURRENT_TIMESTAMP, end_date=DATE_ADD(CURRENT_TIMESTAMP() , INTERVAL 30 DAY) WHERE username = ?"); $stmt->bind_param('s', $username); $stmt->执行();在 $username 下方的顶部,mysqli 对此有何解释?
    猜你喜欢
    • 2017-02-14
    • 2015-04-24
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 2011-07-05
    • 2013-04-20
    相关资源
    最近更新 更多