Mam następujący kod

    <?php
$host = "localhost";
$dbname = "hawkI";
$user = "root";
$password = "";

$userExist = false;
$userIP = null;
$userHasFinish = null;
$userLastPage = null;

try {
    $dbh = new PDO('mysql:host='.$host.';dbname='.$dbname, $user, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

function getIPforBDD(){
    return $_SERVER['REMOTE_ADDR'];
}

function UpdateUserProfile()
{
    $requete = "SELECT * FROM users WHERE ip = ".getIPforBDD();
    $result = $dbh->query($requete);

    if($resultat->rowCount() == 0)
        exit();

    foreach($result as $ligne)
    {       
        $userIP = $ligne['ip'];
        $userhasFinish = $ligne['finish'];
        $userLastPage = $ligne['lastPage'];
    }
}

function CheckUserPosition()
{
    UpdateUserProfile();
    if(!$userExist)
        AddUser();

    return GetUserStatus();
}

function GetUserStatus()
{
    $page;
    if($userHasFinish)
        $page = "end.php";
    else
        $page = $userLastPage;

    return $page;
}

function AddUser()
{
    $requete = "INSERT INTO users (ip, finish, lastPage) VALUES (".getIPforBDD().", ".false.", questionnaire_initial.php)";
    $result = $dbh->query($requete);
}

function SavePageInBDD($page){
    $requete = "UPDATE users SET lastPage = '.$page.' WHERE ip = ".getIPforBDD();
    $result = $dbh->query($requete);
} 
?>

Ale mam problem, gdy go używam

(!) Uwaga: niezdefiniowana zmienna: DBH w C: Wamp64 www hawki bdd.php w linii 66

Nie rozumiem poprawnie, jak działa PHP, po raz pierwszy z tego używam, ale próbowałem zrobić

global $dbh = new PDO('mysql:host='.$host.';dbname='.$dbname, $user, $password);

To też nie działa.

Wydaje się również, że wartość, która jest umieszczona poza funkcjami, nie jest globalna, jakby w JS, jak mogę zrobić coś dostępnego z wszędzie (jak plik, który zawiera ten plik)

Dzięki

0
Bobby 4 czerwiec 2018, 10:25

3 odpowiedzi

Najlepsza odpowiedź

Lepszy sposób, by zrobić coś takiego:

function getDB(){
  $dbh = null;
  try {
    $dbh = new PDO('mysql:host='.$host.';dbname='.$dbname, $user, $password);
   } catch (PDOException $e) {
      echo 'Connection failed: ' . $e->getMessage();
   }
   return $dbh;
}

I niż w twoich funkcjach to:

function AddUser()
{
    $dbh = getDB();
    if(!is_null($dbh)){
         $requete = "INSERT INTO users (ip, finish, lastPage) VALUES (".getIPforBDD().", ".false.", questionnaire_initial.php)";
         $result = $dbh->query($requete);
    }
}
2
Igor Ilic 4 czerwiec 2018, 07:32

Aby użyć $dbh wewnątrz funkcji, musisz podać słowo kluczowe global wewnątrz zakresu funkcji.

Możesz znaleźć wyjaśnienie słowa kluczowego globalnego tutaj http: //php.net/manual/en/language.variatles.scope.php#Language.variatles.scope.global.

function AddUser()
{
    global $dbh;
    $requete = "INSERT INTO users (ip, finish, lastPage) VALUES (".getIPforBDD().", ".false.", questionnaire_initial.php)";
    $result = $dbh->query($requete);
}
0
Than Ngo Hoai 4 czerwiec 2018, 07:46

Możesz użyć w ten sposób

$host = "localhost";
$dbname = "hawkI";
$user = "root";
$password = "";
$userExist = false;
$userIP = null;
$userHasFinish = null;
$userLastPage = null;
$dbh = NULL;
function db () {
    try {   
        if ($GLOBALS['dbh']===NULL){ 
            $GLOBALS['dbh'] = new PDO('mysql:host='.$host.';dbname='.$dbname, $user, $password);
        }
        return $GLOBALS['dbh'];    
    } catch (PDOException $e) {
        echo 'Connection failed: ' . $e->getMessage();
    }
}

function SavePageInBDD($page){
    $dbh = db();       
    $requete = "UPDATE users SET lastPage = '.$page.' WHERE ip = ".getIPforBDD();
    $result = $dbh->query($requete);
} 
0
Sanjay Kumar 4 czerwiec 2018, 07:50