Php没有正确处理真假的逻辑

时间:2011-07-01 21:58:52

标签: php

我正在尝试在我的数据库中的空表中注册一个新用户名。所以我传入用户名和UID并检查用户是否已经注册了该名称并接受该请求,或者如果没有人拥有我可以接受的名称。如果名称已注册到其他用户,我拒绝该请求。

它始终从下面的代码中返回'Fail'。

    if($name_found) 
    {
    if ($udid_mismatch)
    {
    echo "Fail";
    } 

但是这个数据库的表是空的,因此它找不到名称或UID是不正确的。谁能看到我的错误?我现在正在圈子里跑。

// Localize the GET variables
$udid   = isset($_GET['udid']) ? $_GET['udid'] : "";
$name   = isset($_GET['name']) ? $_GET['name']  : "";


// Protect against sql injections
$udid  = mysql_real_escape_string($udid);
$name  = mysql_real_escape_string($name);



    $udid_mismatch=false;
$name_found=false;
$result = mysql_query("SELECT udid FROM ir_usernames WHERE name='$name'");
while( $row = mysql_fetch_assoc($result) ){
    $name_found=true;
    if($row['udid'] != $udid){
    $udid_mismatch=true;
    }
    break;
}

    if($name_found) 
    {
    if ($udid_mismatch)
    {
    echo "Fail";
    } 
    else 
    {
    echo "Success";
    }
    } else {

// Insert the username
$retval = mysql_query("INSERT INTO $table(
        udid,
        name
    ) VALUES (
        '$udid',
        '$name'
    )",$conn);

if($retval) {
    echo "Success";
} else {
    echo "Fail_ret";
}
}
mysql_close($conn);

非常感谢, -code

3 个答案:

答案 0 :(得分:1)

你说“我正在尝试在我的数据库中的空表中注册一个新用户名。”但是,如果查询未返回任何记录,$ name_found将始终为false。由于它被设置为true(由“失败”的最终输出证明),您的表中必须至少有一条记录。

请检查您的数据以确定表中是否有匹配的记录。

答案 1 :(得分:1)

这可能是缺失的连接吗?

$result = mysql_query("SELECT udid FROM ir_usernames WHERE name='".$name."'");

答案 2 :(得分:1)

您的代码似乎很好,但我看到您的选择和插入查询的方式不同。一个使用$table变量而另一个不使用。为了和谐,你能尝试类似的东西:

$result = mysql_query("SELECT udid FROM $table WHERE name='$name'" , $conn);

也可以尝试将其用于调试目的。

$result = mysql_query("SELECT * FROM $table WHERE name='$name'" , $conn);
while( $row = mysql_fetch_assoc($result) ){
   print_r($row);
   // other code
}

这会丢弃整个数据,这会给你一些关于最新情况的提示。