简体   繁体   English

为什么函数 userCanVote() 总是返回 1

[英]Why does function userCanVote() always return 1

Full code in key.php : key.php 中的完整代码:

    <?php

class Vote {
    public $db;
    public function __construct() {
        try{
            $this->db = new PDO('mysql:host=localhost;port=3306;dbname=voting', 'root', '');
            $sql = "CREATE TABLE IF NOT EXISTS `voterlist` (
            `uuid` varchar(32) NOT NULL,
            `ipv4` varchar(15),
            `votetime` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
            PRIMARY KEY (`uuid`))
            CHARACTER SET utf8 COLLATE utf8_general_ci";
            $test = $this->db->query($sql);
        }catch(PDOException $e){
            die("<div class='container'><span class='alert error'>Could not connect!</span></div>");
        }
    }
 function userCanVote($ip,$uuid) { try{ $result = $this->db->query('SELECT * FROM voterlist WHERE ipv4="$ip" && votetime>timestampadd(day,-1,now()) && uuid="$uuid"'); return(!$result->fetchColumn()>0 ? true : false); }catch(Exception $e){ die("<div class='container'><span class='alert error'><b>Error in hasUserVoted()</b><br>".$e."</span></div>");} }
    function getIP() {
        if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
            return $_SERVER['HTTP_CLIENT_IP'];
        } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            return $_SERVER['HTTP_X_FORWARDED_FOR'];
        } else {
            return $_SERVER['REMOTE_ADDR'];
        }
    } 
    function getUserInfo($x,$y) {
        $user = json_decode(file_get_contents("http://mcapi.de/api/user/".$x));
        return ($y=="name"?$user->username:$user->uuid);
    }

    function execVote($uuid) {
        try {
            if ($this->userCanVote($this->getIP(),$uuid)) {
 echo $this->userCanVote($this->getIP(),$uuid);
                $ip=$this->getIP();
                $name = $this->getUserInfo($uuid,"name");
                $this->db->query("INSERT INTO voterlist (uuid,ipv4) VALUES ('$uuid','$ip')");
                Votifier($name);
            } else {
                echo "You can only vote once every 24 hours!";
            }
        } catch (Exception $e) {
            die("<div class='container'><span class='alert error'>Failed to prepVote() the DB!</span></div>");
        }
    }
}

define("SERVER_IP", "localhost");
define("SERVER_PORT", 8192);
define("PUBLIC_KEY",
"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApYVGI2Tk5/8s58bNRdAxJg/12A/xqL8z2NjJI9+fpKH6rPSPn4mjfVJoOWkj0sXQNeE97Y6MrVPUqflBQeCxGwBzbRlb6nyApqhkzRB9pkIn9BGGsYT9CaZcQGmZafY/9Bxz4rpIf6R9NgRfs4HzuNgAxprAi0slUJ2M2SK/VSlNX5OhwRbBTRrUWfUDJMWNUGNvW8XBFd2foyIJ/mdNbbERF8CZZRVpOpq3qe/I04Z6FRt7VfZTWyVSPsHwlbYaZafgql5Szr7SCMcxYQBMMcxsWZDn8uX3RwJbNYcq3Yow/mS9fKTLKdKDxK+lRBU2CfOAKjfvYx/ak04+rUTRCwIDAQAB"
);
// ---------------------------------------------------------------
function Votifier($username) {
$public_key2 = wordwrap(PUBLIC_KEY, 65, "\n", true);
$public_key = <<<EOF
-----BEGIN PUBLIC KEY-----
$public_key2
-----END PUBLIC KEY-----
EOF;
$address = $_SERVER['REMOTE_ADDR']; // user ip
$timeStamp = time();                // timestamp
$string = "VOTE\nNikolovDZN.com\n$username\n$address\n$timeStamp\n";
$leftover = (256 - strlen($string)) / 2;
while ($leftover > 0) {
    $string.= "\x0";
    $leftover--; }
openssl_public_encrypt($string,$crypted,$public_key);
$socket = fsockopen(SERVER_IP, SERVER_PORT, $errno, $errstr, 3);
if ($socket) {
    fwrite($socket, $crypted);
    return true;
} else return false;
}
?>

When executing echo $this->userCanVote($this->getIP(),$uuid);当执行echo $this->userCanVote($this->getIP(),$uuid); , I always get simply 1 as the return value, despite adding a return statement to the end of the class. ,尽管在类的末尾添加了 return 语句,但我总是只得到1作为返回值。 Could anybody help me out here?有人可以帮我吗? There is another file where I actually use this class and its functions, but I don't think that is necessary to post on here.还有另一个文件我实际使用了这个类及其函数,但我认为没有必要在这里发布。

Thanks!谢谢!

Because you're echoing the boolean.因为你在呼应布尔值。

<?php
    echo true;
?>

will print 1 .将打印1

If you really need to print the words 'true' or 'false', you should do this:如果您确实需要打印“真”或“假”这两个词,您应该这样做:

echo $this->userCanVote($this->getIP(), $uuid) ? 'true' : 'false';

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM