【问题标题】:insert transaction id and details into mysql [duplicate]将事务ID和详细信息插入mysql [重复]
【发布时间】:2015-09-23 15:27:43
【问题描述】:

<?php
if ( isset($_POST['btnSubmit']) ) {

// gather card info
// gather card info
$transaction->amount ='9.99';

$transaction->card_num =$_POST['card_num'];
$transaction->exp_date =$_POST['exp_date'];

// gather card info
// gather card info

//capture info

$response = $transaction->authorizeAndCapture();

//capture info

//check if approved
//check if approved

if($response->approved){
  echo "<h1>Success! The test credit card has been charged!</h1>";
  echo "Transaction ID: ". $response->transaction_id;

//check if approved
//check if approved

// if approved insert into sql data base
// if approved insert into sql data base

$query = "INSERT INTO payments (card_num,exp_date) VALUES ('$card_num','$exp_dat')";
        $result = mysql_query($query);

// if approved insert into sql data base
// if approved insert into sql data base

}else{
  echo $response->error_message;
}
}
?>

我正在尝试运行支付集成代码,当支付被批准时,我无法将支付详细信息插入 MySQL 表中。它说:

未定义变量:exp_dat" "未定义变量:card_num。

我不知道如何定义它,因为我不能在$transaction-&gt;card_num =$_POST['card_num']; 中将$ 放在card_num 之前。

我也无法在其中插入交易 ID。

谢谢

【问题讨论】:

  • 您是否认真地将信用卡号码放入数据库中? 没有。就停在那里。这完全是鲁莽的。请使用诸如 Stripe 或 PayPal 之类的处理器或除此之外的任何东西。这个简短的代码示例充满了严重的SQL injection bugs,这意味着获取这些数据很容易,您的安全性为零。这将很难通过 PCI 认证。
  • 这段代码毁了​​生活
  • 谢谢塔德曼。我使用 authorize.net 作为我的支付网关,我正在使用他们的 sdk。我不会在数据库中插入信用卡信息。我只会将交易 ID 和客户名称插入 sql 数据库。此外,关于安全性,您认为信用卡号可以设置为 """"""""$transaction->card_num =$_POST['card_num'];"""""""""" 但不是将其插入数据库?还是像黑客一样容易获得?

标签: php mysql authorize.net


【解决方案1】:

正如错误所说,您没有变量 $exp_dat,您的变量是 $transaction-&gt;exp_date_POST['exp_date']

话虽如此,请阅读此链接 How can I prevent SQL injection in PHP? 并在绑定变量时将其转换为 mysli_ 查询,或使用 PDO。

【讨论】:

  • 我知道如何插入 sql 并定义变量,例如 $numbers = $_POST['numbers']; $names = $_POST['names']; query = "INSERT INTO tester (numbers,names) VALUES ('$numbers','$names')"; $result = mysql_query($query);
  • 我不知道,这里怎么定义
  • 因为在card_num之前有$transaction->card_num。这是否意味着我将值插入为 $transaction->card_num??
  • 您的语法不正确。 $query = "INSERT INTO payments (card_num,exp_date) VALUES ('$card_num','$exp_dat')"; 应该是 $query = "INSERT INTO payments (card_num,exp_date) VALUES ('$transaction-&gt;card_num','$transaction-&gt;exp_date')";
  • 是的,你不能只使用$card_numcard_num 来代替$transaction-&gt;card_num
【解决方案2】:

错误信息非常清楚。

$exp_dat 不存在(但$transaction-&gt;exp_date 存在)

$card_num 不存在(但$transaction-&gt;card_num 存在)

在您的查询中使用这些变量:

$query = "INSERT INTO payments (card_num,exp_date) 
          VALUES ('$transaction->card_num','$transaction->exp_date')";

【讨论】:

  • 哦,这更有意义!这是否意味着我必须将 mysql 表中的值的名称更改为 $transaction->card_num ??
  • 不。 “列名”和变量不需要匹配。
  • 好的,非常感谢!!很抱歉这个菜鸟问题。只是有点不同
  • :S 我刚刚测试过,未定义的属性:AuthorizeNetAIM::$card_num 是我得到的:S
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-23
相关资源
最近更新 更多