dsg435665475 2016-02-20 17:45
浏览 44
已采纳

PHP MySQL:检查值是否已存在

I've been surfing around stackoverflow and other pages for a while now and tried different approaches to this. But nothing seems to work.

I have a code which collect the inputs from a form and posts it into a database. And that works. But before it posts, i want it to chek if the field "shortlink" already exist. And if it does, i want the user to be redirected to another page.

This is the code i'm trying out right now.

EDIT: Full PHP code

    class Db {
        // The database connection
        protected static $connection;

        /**
         * Connect to the database
         * 
         * @return bool false on failure / mysqli MySQLi object instance on success
         */
        public function connect() {    
            // Try and connect to the database
            if(!isset(self::$connection)) {
                // Load configuration as an array. Use the actual location of your configuration file
                $config = parse_ini_file('../config.ini'); 
                self::$connection = new mysqli('localhost',$config['username'],$config['password'],$config['dbname']);
            }

            // If connection was not successful, handle the error
            if(self::$connection === false) {
                // Handle error - notify administrator, log to a file, show an error screen, etc.
                return false;
            }
            return self::$connection;
        }

        /**
         * Query the database
         *
         * @param $query The query string
         * @return mixed The result of the mysqli::query() function
         */
        public function query($query) {
            // Connect to the database
            $connection = $this -> connect();

            // Query the database
            $result = $connection -> query($query);

            return $result;
        }

        /**
         * Fetch rows from the database (SELECT query)
         *
         * @param $query The query string
         * @return bool False on failure / array Database rows on success
         */
        public function select($query) {
            $rows = array();
            $result = $this -> query($query);
            if($result === false) {
                return false;
            }
            while ($row = $result -> fetch_assoc()) {
                $rows[] = $row;
            }
            return $rows;
        }

        /**
         * Fetch the last error from the database
         * 
         * @return string Database error message
         */
        public function error() {
            $connection = $this -> connect();
            return $connection -> error;
        }

        /**
         * Quote and escape value for use in a database query
         *
         * @param string $value The value to be quoted and escaped
         * @return string The quoted and escaped string
         */
        public function quote($value) {
            $connection = $this -> connect();
            return "'" . $connection -> real_escape_string($value) . "'";
        }
    }


    if ($_SERVER['REQUEST_METHOD'] == 'POST') {

    //Our database object
    $db = new Db();    

    // Quote and escape form submitted values

    $name = $db -> quote($_POST["name"]);
    $shortlink = $db -> quote($_POST["shortlink"]);
    $downloadurl = $db -> quote($_POST["downloadurl"]);
    $count = $db -> quote("0");
    $date = $db -> quote(date("Y-m-d H:i:s"));

$checkUserID = $db -> select("SELECT shortlink FROM test WHERE `shortlink` = '$shortlink'");

if ($checkUserID->rowCount()){
    header("Location: error.php?title=hovsa");
}


    // Insert the values into the database
    $result = $db -> query("INSERT INTO `test` (`name`,`shortlink`,`downloadurl`,`count`,`date`) VALUES (" . $name . "," . $shortlink . "," . $downloadurl . "," . $count . "," . $date . ")");

    //Upload image file
    if (isset($_POST['submit']))
    {
        $filename = $_FILES["file"]["name"];
        $file_basename = substr($filename, 0, strripos($filename, '.')); // get file extention
        $file_ext = substr($filename, strripos($filename, '.')); // get file name
        $filesize = $_FILES["file"]["size"];
        $allowed_file_types = array('.jpg','.jpeg');    

        if (in_array($file_ext,$allowed_file_types) && ($filesize < 20000000000))
        {   
            // Rename file
            $newfilename = $_POST['shortlink'] . $file_ext;
            if (file_exists("../gallery/" . $newfilename))
            {
                // file already exists error
                echo "You have already uploaded this file.";
            }
            else
            {       
                move_uploaded_file($_FILES["file"]["tmp_name"], "../gallery/" . $newfilename);
                echo "File uploaded successfully.";     
            }
        }
        elseif (empty($file_basename))
        {   
            // file selection error
            echo "Please select a file to upload.";
        } 
        elseif ($filesize > 20000000000)
        {   
            // file size error
            echo "The file you are trying to upload is too large.";
        }
        else
        {
            // file type error
            echo "Only these file typs are allowed for upload: " . implode(', ',$allowed_file_types);
            unlink($_FILES["file"]["tmp_name"]);
        }
    }
    header("Location: #users");
    }
        else{}; 
$checkUserID = $db -> select("SELECT shortlink FROM test WHERE `shortlink` = '$shortlink'");

if ($checkUserID == $shortlink) {
    header("Location: error.php?title=hovsa");
}

It dosen't work. The form is postet into the database despite shortlink already exists.

  • 写回答

3条回答 默认 最新

  • douyan8772 2016-02-20 18:17
    关注

    As per documentation, mysqli::query for successful SELECT queries returns a mysqli_result object. To extract an object or array from it you should call one of the fetch_* functions listed here. But you just need to check if there any record exists so it's preferrable to use $num_rows property. So your code would look like:

    $checkUserID = $db -> query("SELECT shortlink FROM test WHERE `shortlink` = $shortlink");
    
    if ($checkUserID === false) {
        die($db->error());
    }
    
    if ($checkUserID->num_rows) {
       header("Location: error.php?title=hovsa");
       exit(0);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 根据以下文字信息,做EA模型图
  • ¥15 删除虚拟显示器驱动 删除所有 Xorg 配置文件 删除显示器缓存文件 重启系统 可是依旧无法退出虚拟显示器
  • ¥15 vscode程序一直报同样的错,如何解决?
  • ¥15 关于使用unity中遇到的问题
  • ¥15 开放世界如何写线性关卡的用例(类似原神)
  • ¥15 关于并联谐振电磁感应加热
  • ¥60 请查询全国几个煤炭大省近十年的煤炭铁路及公路的货物周转量
  • ¥15 请帮我看看我这道c语言题到底漏了哪种情况吧!
  • ¥60 关机时蓝屏并显示KMODE_EXCEPTION_NOT_HANDLED,怎么修?
  • ¥66 如何制作支付宝扫码跳转到发红包界面