微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 两个错误 – 在自定义管理面板上标记按钮附带的项目

我用它自己的数据库创建了一个管理面板.

在preorder.PHP页面上连接到另一个(它自己的)数据库,在用户填写表单和条带处理订单后,我检查收费是否像这样支付;

if ($charge->paid == true) {
    $amountReadable = $amount / 100; // to add in decimal points
    echo '<div class="alert alert-success">Your card was successfully billed for $'.$amountReadable.'</div>';
    $status = "paid";

然后我连接到主数据库和管理数据库(它们都有’orders’表)并插入此查询

 $connect = MysqL_connect("localhost",DB_USER,DB_PASS);
 if (!$connect){
 die('Could not connect: ' . MysqL_error());
 }

 MysqL_select_db(DB_NAME, $connect);

 $query = "INSERT INTO 'DB_NAME'.`orders` (`email`, `name`, `qty`, `product`, `amount`, `stripe_customer_id`, `stripe_charge_id`, `address1`, `address2`, `city`, `state`, `zip`, `timestamp`, `status`) VALUES ('$email','$cardName', '$qty', '$product', '$amountReadable', '$customer->id', '$charge->id', '$cardAddress1', '$cardAddress2', '$cardCity', '$cardState', '$cardZipcode', CURRENT_TIMESTAMP`, $status);";

 MysqL_query($query);

 if (MysqL_errno()) {
 $error = "MysqL error ".MysqL_errno().": ".MysqL_error()."\n<br>When executing:<br>\n$query\n<br>";
 exit;   
 }
 MysqL_close($connect);

 //insert into db for admin
 $connect = MysqL_connect("--------","------","-------");
 if (!$connect){
 die('Could not connect: ' . MysqL_error());
 }

 MysqL_select_db(database2, $connect);

 $query = "INSERT INTO 'database2'.`orders` (`email`, `name`, `qty`, `product`, `amount`, `stripe_customer_id`, `stripe_charge_id`, `address1`, `address2`, `city`, `state`, `zip`, `timestamp`, `status`) VALUES ('$email','$cardName', '$qty', '$product', '$amountReadable', '$customer->id', '$charge->id', '$cardAddress1', '$cardAddress2', '$cardCity', '$cardState', '$cardZipcode', CURRENT_TIMESTAMP, $status);";

然后在具有自己的数据库(上面的数据库2)的管理面板上,(orders.PHP)我将这些数据拉入这样的引导表中:

编辑1#:我将管理面板中的orders.PHP更改为:

$result = MysqLi_query($con,"SELECT * FROM orders");

echo "<table border='1' data-toggle='table'>
<tr>
<th>id</th>
<th>email</th>
<th>name</th>
<th>qty</th>
<th>product</th>
<th>amount</th>
<th>address1</th>
<th>address2</th>
<th>city</th>
<th>state</th>
<th>zip</th>
<th>status</th>
</tr>";

 while($row = MysqLi_fetch_array($result))
 {
 echo "<tr>";
  echo "<td>" . $row['id'] . "</td>";
  echo "<td>" . $row['email'] . "</td>";
  echo "<td>" . $row['name'] . "</td>";
  echo "<td>" . $row['qty'] . "</td>";
  echo "<td>" . $row['product'] . "</td>";
  echo "<td>" . $row['amount'] . "</td>";
  echo "<td>" . $row['address1'] . "</td>";
  echo "<td>" . $row['address2'] . "</td>";
  echo "<td>" . $row['city'] . "</td>";
  echo "<td>" . $row['state'] . "</td>";
  echo "<td>" . $row['zip'] . "</td>";
  echo "<td>" . $row['status']. "</td>";
  echo "<td><form action='markshipped.PHP' method='POST'><input type='hidden' name='status' value='".$row["id"]."'/><input type='submit' name='submit-btn' value='Mark Item Shipped' /><form></td>";
  echo "</tr>";
 }
echo "</table>";

那么我的markshipped.PHP是:

<?PHP
$con=MysqLi_connect("----","----","----","----");
// Check connection
if (MysqLi_connect_errno()) {
  echo "Failed to connect to MysqL: " . MysqLi_connect_error();
}

MysqLi_query($con,"UPDATE orders SET status='shipped' WHERE id=$id");

MysqLi_close($con);
?> 

我仍然不太熟悉PHP / MysqL,不幸的是我无法测试它,直到有人购买任何东西,因为条纹测试模式没有一张卡片无法通过表格…

所以我的问题主要是:

我有两个错误说:

1.未定义变量:第9行/admin/orders/markshipped.PHP中的id

– 这是这一行:MysqLi_query($con,“UPDATE命令SET status =’shipping’WHERE id = $id”);

2.未定义的索引:第88行的/admin/orders/orders.PHP中的状态

– 这是:echo“< td>” . $行[“状态”. “&LT / TD>” 中;

显然我设置$status =“付费”;错误和/或错误的地方.

如何正确设置这些项目以便能够将项目标记为“已付款”,然后在单击每行上的“标记项目已发送”按钮后将其更改为“已发货”?你能发现我的代码中的任何其他错误吗?

非常感谢你的时间!

解决方法:

您需要使用以下命令获取$_POST [‘status’]:

$id = $_POST['status'];

在markshipped.PHP中运行您的查询.我会将隐藏输入字段的名称更改为“id”并获取$_POST [‘id’],因为您要提交ID.

你有一个`在这一行(第一次插入查询):

CURRENT_TIMESTAMP`<<<<here , $status

并且需要删除此/更好地将列设置为MysqL中的on_update_current_timestamp

$status需要在”,我想$id是一个整数,所以你可以不用”.

你正在混合MysqL_和MysqLi_,我强烈建议你重写MysqLi_中的整个代码,特别是你的插入语句,你真的应该使用预处理语句和MysqLi_. MysqL_是折旧且不安全的.您可以接受sql注入

为什么你设置id = NULL?这应该是一个自动增量字段,您不应该在查询中将其设置为null.

如果您将对象数据放入数据库,我将使用“{$customer-> id}”或设置

$customer_id = $customer->id;

查询之前,可以更轻松地检查您的查询

您无需指定

INSERT INTO **’database2’**.订单

database2,db已被选中 – 再次:使用MysqLi_和prepared语句代替!

例:

$customer_id = $customer->id;
$charge_id = $charge->id;
$stmt = $sql->prepare("INSERT INTO `orders` (`email`, `name`, `qty`, `product`, `amount`, `stripe_customer_id`, `stripe_charge_id`, `address1`, `address2`, `city`, `state`, `zip`, `status`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)");
$stmt->bind_param('ssissssssssss', $email,$cardName, $qty, $product, $amountReadable, $customer_id, $charge_id, $cardAddress1, $cardAddress2, $cardCity, $cardState, $cardZipcode, $status);

$stmt->execute();

如果你这样做,你需要为mysq_设置MysqLi的连接

第1块:

<?PHP


if ($charge->paid == true) {
    $amountReadable = $amount / 100; // to add in decimal points
    echo '<div class="alert alert-success">Your card was successfully billed for $' . $amountReadable . '</div>';
    $status = "paid";
}

第2块:

<?PHP
$connect = new MysqLi("localhost",DB_USER,DB_PASS,DB_NAME);
$customer_id = $customer->id;
$charge_id = $charge->id;
$stmt = $connect->prepare("INSERT INTO orders (`email`, `name`, `qty`, `product`, `amount`, `stripe_customer_id`, `stripe_charge_id`, `address1`, `address2`, `city`, `state`, `zip`, `status`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)");
$stmt->bind_param('ssissssssssss', $email,$cardName, $qty, $product, $amountReadable, $customer->id, $charge->id, $cardAddress1, $cardAddress2, $cardCity, $cardState, $cardZipcode, $status);
$stmt->execute();




$connect->close();

//insert into db for admin
$connect = new MysqLi("--------","------","-------","--------");

$customer_id = $customer->id;
$charge_id = $charge->id;
$stmt = $connect->prepare("INSERT INTO `orders` (`email`, `name`, `qty`, `product`, `amount`, `stripe_customer_id`, `stripe_charge_id`, `address1`, `address2`, `city`, `state`, `zip`, `status`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)");
$stmt->bind_param('ssissssssssss', $email,$cardName, $qty, $product, $amountReadable, $customer_id, $charge_id, $cardAddress1, $cardAddress2, $cardCity, $cardState, $cardZipcode, $status);
$stmt->execute();

第3块:

$con = new MysqLi("--------","------","-------","--------");
$query = "SELECT * FROM orders";
if ($result = $con->query($query))
{

echo "<table border='1' data-toggle='table'>
<tr>
<th>id</th>
<th>email</th>
<th>name</th>
<th>qty</th>
<th>product</th>
<th>amount</th>
<th>address1</th>
<th>address2</th>
<th>city</th>
<th>state</th>
<th>zip</th>
<th>status</th>
</tr>";

while($row = $result->fetch_assoc()) {
    echo "<tr>";
    echo "<td>" . $row['id'] . "</td>";
    echo "<td>" . $row['email'] . "</td>";
    echo "<td>" . $row['name'] . "</td>";
    echo "<td>" . $row['qty'] . "</td>";
    echo "<td>" . $row['product'] . "</td>";
    echo "<td>" . $row['amount'] . "</td>";
    echo "<td>" . $row['address1'] . "</td>";
    echo "<td>" . $row['address2'] . "</td>";
    echo "<td>" . $row['city'] . "</td>";
    echo "<td>" . $row['state'] . "</td>";
    echo "<td>" . $row['zip'] . "</td>";
    echo "<td>" . $row['status'] . "</td>";
    echo "<td><form action='markshipped.PHP' method='POST'><input type='hidden' name='id' value='" . $row["id"] . "'/><input type='submit' name='submit-btn' value='Mark Item Shipped' /></form></td>";
    echo "</tr>";
}}
echo "</table>";

第4块:

$con= new MysqLi("----","----","----","----");
// Check connection
$id = $_POST['id'];
    $stmt = $con->prepare("UPDATE orders SET status = 'shipped' WHERE id = ?");
    $stmt->bind_param('i', $id);
    $stmt->execute();
$con->close();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐