【问题标题】:PDO Check if data exist if not createPDO 如果不创建则检查数据是否存在
【发布时间】:2016-11-05 09:29:46
【问题描述】:

所以我想要的是我希望它检查这个人是否已经使用过代码,如果已经使用过,那么它应该死掉,否则从$_POST['code']设置数据并锁定它,所以它可以' t 又变了——(但只能通过删除数据库中的数据)

数据库名称 = 用户

在用户中,我有一个带有 code_used 的结构设置

<?php
session_start();
include ('assets/includes/include.php');

if(isset($_POST['code'])) {
$SQLCheckExistens = $odb -> prepare("SELECT COUNT(*) FROM `users` WHERE `code_used` = :code");
$SQLCheckExistens -> execute(array(':code' => $_POST['code']));
$countCodes = $SQLCheckExistens -> fetchColumn(0);

if($countCodes = 0) {
    $SQLRedeemCode = $odb -> prepare("UPDATE `users` SET `code_used` = :code WHERE `steamid` = :SteamID");
    $SQLRedeemCode -> execute(array(':code' => $_POST['code'], ':SteamID' => $_SESSION['steamid']));

    die('Saved successfully!');
} else { 
    die('Error. You have already redeemed a code.'); 
}   
} else {
die();
}
?>

这里是ajax

<script>            
function SetCode() {
var code = document.getElementById('code').value;

$.ajax( {
    type: 'post',
    url: 'redeem.php',
    data: "code=" + code,
    success: function(response) {
        console.log(response);
        document.getElementById('data_response').innerHTML = response;          
    }
});
}

这里是函数

function getCode($UserID, $odb)
{
    $SQLUserInfo = $odb -> prepare("SELECT * FROM `users` WHERE `steamid` = :SteamID");
    $SQLUserInfo -> execute(array(':SteamID' => $UserID));
    $UserInfo = $SQLUserInfo->fetch(PDO::FETCH_ASSOC);

    return $UserInfo['code_used'];
}

【问题讨论】:

  • 那么,问题出在哪里?
  • 它不会让我只输入一次,因为您可以通过更改文本框中的代码来编辑它。打完代码后就不能用别人了,这样问。我不知道如何创建它。
  • 什么错误或什么阻碍了你实现这一目标?
  • 我不知道,它不会告诉我,因为它只是更新我数据库中的数据。所以我声明了代码:1234 - 它接受并将其写入我的数据库。但是当我返回该站点时,我尝试输入 4534,然后它只是将 1234 替换为 4534,这应该是不可能的,因为它应该只能申请一次。

标签: php ajax function pdo


【解决方案1】:

您正在尝试在 if 语句中分配一个值,该值将在您的情况下返回 true。应该是:

if($countCodes == 0) { // UPDATE SQL ...

尝试使用从 MySQL 返回的COUNT。或者,您可以使用PDOStatement::rowCount

$SQLCheckExistens = $odb -> prepare("SELECT COUNT(*) FROM `users` WHERE `code_used` = :code");
$SQLCheckExistens -> execute(array(':code' => $_POST['code']));
$result = $SQLCheckExistens -> fetch(PDO::FETCH_NUM);
$countCodes = $result[0];

【讨论】:

  • 但是当我输入一个新的“兑换码”时它仍然会不断改变值
  • $countCodes 返回什么? @MikkelBertelsen
  • 还不行。如果没有数据,$countCodes 应该返回 = 插入您输入的兑换代码 - 如果找到数据,那么它应该只是提出消息:您已经兑换了代码。并且不更新它。
  • @MikkelBertelsen 代码就像你说的那样。 if $countCodes = 0(0 records found) 然后更新,否则出错
猜你喜欢
  • 2014-07-23
  • 2011-05-12
  • 2017-09-10
  • 2017-11-09
  • 2011-09-15
  • 1970-01-01
  • 2011-05-16
相关资源
最近更新 更多