Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP函数中启用db连接访问_Php_Function - Fatal编程技术网

在PHP函数中启用db连接访问

在PHP函数中启用db连接访问,php,function,Php,Function,我有一个简短的问题。我有一个检查密码是否有效的文件: 检查: <?php include('inc/db.php'); include('inc/functions.php'); $myusername=$_POST['myusername']; $mypassword=$_POST['mypassword']; validateInput($myusername, $mypassword); ?> 功能: <?php

我有一个简短的问题。我有一个检查密码是否有效的文件:

检查:

<?php
    include('inc/db.php');
    include('inc/functions.php');

    $myusername=$_POST['myusername']; 
    $mypassword=$_POST['mypassword']; 

    validateInput($myusername, $mypassword);
?>

功能:

<?php

        function validateInput($naam, $password) {

            $myusername = stripslashes($naam);
            $mypassword = stripslashes($password);
            $myusername = $conn->real_escape_string($myusername);
            $mypassword = $conn->real_escape_string($mypassword);

                    $sql = "SELECT * FROM user WHERE naam='$myusername' and paswoord='$mypassword'";

                    $result = $conn->query($sql);

                    if ($result->num_rows > 0) {
                      echo "ingelogd";

                    }else{
                        echo "niet ingelogd ";
                    }

       }
?>

您的问题可能很简单,但实际上非常广泛,有很多解决方案

示例不多:

好的一个单身汉 及

甚至更好的单体数据访问层 及

你可以在网上找到很多预制的DB类

谷歌的第一个结果-

坏的单球 及

一次错误-作为参数传递
$conn
(根据@LucM的建议)

(为什么不好?因为很可能您没有两个数据库,所以以这种方式编写代码是毫无意义的)

函数验证输入($conn、$naam、$password){
$myusername=stripslashes($naam);
$mypassword=stripslashes($password);
$myusername=$conn->real\u escape\u字符串($myusername);
$mypassword=$conn->real\u escape\u字符串($mypassword);
$sql=“从用户中选择*,其中naam='$myusername'和paswoord='$mypassword';
$result=$conn->query($sql);
如果($result->num_rows>0){
回声“英格洛格”;
}否则{
呼应“尼特·英格洛德”;
}
}
$conn=newmysqli($servername、$username、$password、$dbname);
//检查连接
如果($conn->connect\u错误){
die(“连接失败:”.$conn->connect\U错误);
} 
否则{
回声“作品

”; } .. 验证输入($conn、$naam、$password);


另外值得一提的是,您不应该使用
stripslashes
real\u escape\u string
。PHP的mysqli模块支持,最好使用它们,而不是自己转义数据。

您必须在validateInput函数中定义$conn。您需要在
validateInput()函数的范围内提供
$conn
。可能会添加
global$conn会有帮助。你也可以将连接作为参数传递。太棒了!一个简单的问题。在singleton示例中。我是否应该在get_instance函数中包含服务器名称和其他连接变量?@Merijndk这完全取决于您,您可以使用
$username=“…”创建单独的文件,如“db_config.php”;“$servername=“…”etc
并在连接之前包含它,因此
包含“db_config.php”;$conn=new static($servername、$username、$password、$dbname);
<?php
    $servername = "";
    $username = "";
    $password = "";
    $dbname = "";

    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } 
    else{
        echo "works<br/><br/>";
    }
class db extends mysqli {

    static public function get_instance() {
        static $conn = null;
        if($conn == null) {
            $conn = new static($servername, $username, $password, $dbname);
        }
        return $conn;
    }
}
function validateInput($naam, $password) {

        $myusername = stripslashes($naam);
        $mypassword = stripslashes($password);
        $myusername = db::get_instance()->real_escape_string($myusername);
        $mypassword = db::get_instance()->real_escape_string($mypassword);

                $sql = "SELECT * FROM user WHERE naam='$myusername' and paswoord='$mypassword'";

                $result = db::get_instance()->query($sql);

                if ($result->num_rows > 0) {
                  echo "ingelogd";

                }else{
                    echo "niet ingelogd ";
                }

   }
class db {

    protected $conn;

    static public function get_instance() {
        static $obj = null;
        if($obj == null) {
            $obj = new static();
        }
        return $obj;
    }

    public function __construct() {
        $this->conn = new mysqli($servername, $username, $password, $dbname);
    }

    public function query($sql) {
        return $this->conn->query($sql);
    }

    public function escape($string) {
        return $this->conn->real_escape_string($string);
    }

    // this is good because you can handle errors etc, add insert/delete/update functions etc.

    public function insert($table_name, $fields) {
         // ..
    }

    public function update($table_name, $data, $where = null, $limit = null) {
         // ..
    }

    public function select($table_name, $where = null, $order_by = null, $limit = null) {
         // ..
    }

    // etc.

}
function validateInput($naam, $password) {
        ..
        $myusername = db::get_instance()->escape($myusername);
        $mypassword = db::get_instance()->escape($mypassword);
        ..
        $result = db::get_instance()->query($sql);
   }
function validateInput($naam, $password) {

        global $conn; // <-------- HERE

        $myusername = stripslashes($naam);
        $mypassword = stripslashes($password);
        $myusername = $conn->real_escape_string($myusername);
        $mypassword = $conn->real_escape_string($mypassword);

                $sql = "SELECT * FROM user WHERE naam='$myusername' and paswoord='$mypassword'";

                $result = $conn->query($sql);

                if ($result->num_rows > 0) {
                  echo "ingelogd";

                }else{
                    echo "niet ingelogd ";
                }

   }
$conn = new mysqli($servername, $username, $password, $dbname);
$GLOBALS['db'] = $conn;
function validateInput($naam, $password) {

        $myusername = stripslashes($naam);
        $mypassword = stripslashes($password);
        $myusername = $GLOBALS['db']->real_escape_string($myusername);
        $mypassword = $GLOBALS['db']->real_escape_string($mypassword);

                $sql = "SELECT * FROM user WHERE naam='$myusername' and paswoord='$mypassword'";

                $result = $GLOBALS['db']->query($sql);

                if ($result->num_rows > 0) {
                  echo "ingelogd";

                }else{
                    echo "niet ingelogd ";
                }

   }
function validateInput($conn, $naam, $password) {


        $myusername = stripslashes($naam);
        $mypassword = stripslashes($password);
        $myusername = $conn->real_escape_string($myusername);
        $mypassword = $conn->real_escape_string($mypassword);

                $sql = "SELECT * FROM user WHERE naam='$myusername' and paswoord='$mypassword'";

                $result = $conn->query($sql);

                if ($result->num_rows > 0) {
                  echo "ingelogd";

                }else{
                    echo "niet ingelogd ";
                }

   }


$conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } 
    else{
        echo "works<br/><br/>";
    }

..

validateInput($conn, $naam, $password);