Partage
  • Partager sur Facebook
  • Partager sur Twitter

object orienté pour les requêtes SQL

VPS ubuntu 18.04 Apache2

5 août 2021 à 3:22:40

Bonjour, j'ai un petit soucis avec mon VPS, 

Je n'arrive pas à faire fonctionner les object orientés.  Lorsque j'essaie de charger une video, le code s'exécute sans erreurs, la vidéos se charge dans le dossier qui lui est destiné les données de la video ne se charge pas sur la base de données. 

Voici ma page DB.class.php 

require_once 'config.php'; 
 
class DB { 
    private $dbHost     = DB_HOST; 
    private $dbUsername = DB_USERNAME; 
    private $dbPassword = DB_PASSWORD; 
    private $dbName     = DB_NAME; 
    private $tblName     = 'videos';
    private $tblName2     = 'fotos'; 
     
    function construct(){ 
        // Connect database 
        if(!isset($this->db)){ 
            $conn = new mysqli($this->dbHost, $this->dbUsername, $this->dbPassword, $this->dbName); 
            if($conn->connect_error){ 
                die("Failed to connect with MySQL: " . $conn->connect_error); 
            }else{ 
                $this->db = $conn; 
            } 
        } 
    } 
     
    function getRow($id = ''){ 
        $con = !empty($id)?" WHERE id = $id ":" ORDER BY id DESC LIMIT 1 "; 
        $sql = "SELECT * FROM $this->tblName $con"; 
        $query = $this->db->query($sql); 
        $result = $query->fetch_assoc(); 
        if($result){ 
            return $result; 
        }else{ 
            return false; 
        } 
    } 
      function getRow2($id = ''){ 
        $con = !empty($id)?" WHERE id = $id ":" ORDER BY id DESC LIMIT 1 "; 
        $sql = "SELECT * FROM $this->tblName2 $con"; 
        $query = $this->db->query($sql); 
        $result = $query->fetch_assoc(); 
        if($result){ 
            return $result; 
        }else{ 
            return false; 
        } 
    } 

    function insert($data){ 
        if(!empty($data) && is_array($data)){ 
            $columns = ''; 
            $values  = ''; 
            $i = 0; 
            foreach($data as $key=>$val){ 
                $pre = ($i > 0)?', ':''; 
                $columns .= $pre.$key; 
                $values  .= $pre."'".$this->db->real_escape_string($conn,$val)."'"; 
                $i++; 
            } 
            $query = "INSERT INTO ".$this->tblName." (".$columns.") VALUES (".$values.")"; 
            $insert = $this->db->query($query); 
            return $insert?$this->db->insert_id:false; 
        } 
    } 
    function insert2($data){ 
        if(!empty($data) && is_array($data)){ 
            $columns = ''; 
            $values  = ''; 
            $i = 0; 
            foreach($data as $key=>$val){ 
                $pre = ($i > 0)?', ':''; 
                $columns .= $pre.$key; 
                $values  .= $pre."'".$this->db->real_escape_string($val)."'"; 
                $i++; 
            } 
            $query = "INSERT INTO ".$this->tblName2." (".$columns.") VALUES (".$values.")"; 
            $insert = $this->db->query($query); 
            return $insert?$this->db->insert_id:false; 
        } 
    } 

     
    function update($id, $youtube_video_id){ 
        $sql = "UPDATE  $this->tblName SET youtube_video_id = '".$youtube_video_id."' WHERE id = ".$id; 
        $update = $this->db->query($sql); 
        return $update?true:false; 
    } 
}
?>

je ne sais pas si je doit ajouter une permission SQL spécial pour ce type de requête . 

Merci 

  • Partager sur Facebook
  • Partager sur Twitter

keep underground alive 

5 août 2021 à 13:03:38

Salut,

Je ne sais pas trop ce que ça fait dans le forum Linux/BSD mais bon.

Ta classe (en programmation objet) a un constructeur, dont il faut définir les valeurs.

Donc est ce que l'appel à ta classe contient bien les valeurs pour DB_HOST (normalement localhost si tu run ton SGBDR (mysql, mariadb ou autre)en local), DB_USERNAME, DB_PASSWORD et DB_NAME.

Ces variables peuvent être passées à la classe via le constructeur directement en appelant ta classe comme une fonction du genre:

$maDB = new DB( param1, param2, param3, param4);

Ou via des pointeurs (enfin je sais plus le terme pour PHP)

$maDB = new DB; // Le constructeur a des valeurs par défaut.
$maDB->dbUsername = "monUserNameDeLaDB";
$maDB->dbHost = "localhost";
// etc...Mais je pense que c'est plus un problème PHP à priori.

Désolé si j'ai fait des erreurs de l'appel au constructeur mais là il vaut mieux demander sur le groupe PHP 

Tu devrais bien sûr avoir un message d'erreur

"Failed to connect with MySQL: " . $conn->connect_error

Mais sur quelle sortie ça j'en sais rien parce que tu ne dis pas d'où et comment tu appelles ta classe.

-
Edité par maroufle34 5 août 2021 à 13:18:50

  • Partager sur Facebook
  • Partager sur Twitter
5 août 2021 à 17:23:30

Bonjour, merci de ta réponse, 

pardon, J'ai oublié de préciser que évidemment j'avais mes accès dans config.php.

Le code s'exécute bien, je ne pense pas que ça vienne de PHP. Si je charge des données sur la base de données avec une requête SQL normale, il n'y a pas de souci, les données se chargent normalement.

Aucune erreur n'apparait quand je passe en mode "display error" sur mon php.ini . D'où mon doute sur une autorisation my SQL pour les objects orientés.

Je precise aussi quand je testait les requêtes avec MAMP en local, tout allait très bien. Mais sur le VPS, les données ne se chargent pas dans la BDD.   

  • Partager sur Facebook
  • Partager sur Twitter

keep underground alive 

5 août 2021 à 18:42:34

Que contiennent justement ces variables

Dans ton php.conf....Mais là c'est un problème PHP, bascule sur la console d'erreur ctrl+alt F6 normalement...mais pas toujours.

Tu ne montres pas le script qui appelle l'objet alors difficile à dire.

Bref pour moi c'est une question php avant tout.

    private $dbHost     = DB_HOST;
    private $dbUsername = DB_USERNAME;
    private $dbPassword = DB_PASSWORD;
    private $dbName     = DB_NAME;

ces variables sont bien définies dans ton config.php? (attention à la casse)

Tout ça est dur à dire, on a pas de sorties?? on a pas le script qui appelle et créé l'objet, et on a pas le config.php (mais tout ça c'est du php....)

edit: regarde le debugger de ton navigateur aussi...Mais tu aurais sans doute tellement de meilleures réponses sur le forum PHP.

-
Edité par maroufle34 5 août 2021 à 18:49:15

  • Partager sur Facebook
  • Partager sur Twitter
6 août 2021 à 0:18:38

Bonjour,

Déplacement vers un forum plus approprié

Le sujet est déplacé de la section Linux & FreeBSD vers la section PHP

  • Partager sur Facebook
  • Partager sur Twitter
6 août 2021 à 8:53:17

Bonjour,

Une suggestion à vérifier : le système de base de données est-il le même sur le VPS et sur ton système de développement ? type de moteur de base de données et version de base de données si type identique ?

Tu dis que les données ne se chargent pas : on peut donc penser aux requêtes type insert ou update. Mais est-ce que le select fonctionne ? à défaut de données en saisir en jeu d'essai.

Aucun message d'erreur non plus ? On ne voit pas comment tu te sers de tes méthodes.

A+

  • Partager sur Facebook
  • Partager sur Twitter
6 août 2021 à 17:58:20

je ne peux pas répondre car Openclassroom me mets User Blocked, quand je mets mon Upload.php

<?php //database
define('DB_HOST', 'localhost');  
define('DB_USERNAME', 'monusername');  
define('DB_PASSWORD', 'monpassword');  
define('DB_NAME', 'maDBname');  

//google API

define("OAUTH_CLIENT_ID","mon_id_client_fournit_par_google");
define("OAUTH_CLIENT_SECRET","mon_auth_secret_client");

define("REDIRECT_URL","https://mondomaine/upload.php");


// Include google client libraries 
require_once '/Users/usuario/vendor/autoload.php';
require_once '/Users/usuario/vendor/google/auth/autoload.php';  
require_once '/Users/usuario/vendor/google/apiclient/src/Client.php';
require_once '/Users/usuario/vendor/google/apiclient-services/src/Google/Service/MyBusinessAccountManagement.php';
require_once '/Users/usuario/vendor/google/apiclient-services/src/Google/Service/YouTube.php'; 
 
 if (!$oauth_credentials = getOAuthCredentialsFile()) {
  echo missingOAuth2CredentialsWarning();
  return;
}

$client =  new Google/Client(); 
$client->setClientId(OAUTH_CLIENT_ID); 
$client->setClientSecret(OAUTH_CLIENT_SECRET); 
$client->setScopes('https://www.googleapis.com/auth/youtube');
$client->setScopes('https://www.googleapis.com/auth/business.manage'); 
$client->setRedirectUri(REDIRECT_URL); 


// Define an object that will be used to make all API requests. 


$youtube = new Google/Service/YouTube($client); 
$google = new Google/Service/MyBusinessAccountManagement($client);


function CallAPI($method, $url, $data = false)
{
    $curl = curl_init();

    switch ($method)
    {
        case "POST":
            curl_setopt($curl, CURLOPT_POST, 1);

            if ($data)
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            break;
        case "PUT":
            curl_setopt($curl, CURLOPT_PUT, 1);
            break;
        default:
            if ($data)
                $url = sprintf("%s?%s", $url, http_build_query($data));
    }

  

    $result = curl_exec($curl);

    curl_close($curl);

    return $result;
}

voici mon config.php

Sur mon ordi j'était sur MAMP et LAMP sur mon VPS

-
Edité par cyberanar 6 août 2021 à 18:01:54

  • Partager sur Facebook
  • Partager sur Twitter

keep underground alive 

7 août 2021 à 8:12:10

Cela ne répond pas à mes questions :

- MAMP et LAMP n'indiquent pas le type et la version de base de données ...

- le select fonctionne t-il ?

- y a t-il des messages d'erreur ? ... page ... log  ... 

A+

-
Edité par monkey3d 7 août 2021 à 8:12:52

  • Partager sur Facebook
  • Partager sur Twitter
8 août 2021 à 13:30:07

J'ai my SQL 5.7.35 et PHP 7.2 installé. Le code s'exécute sans message d'erreur. J'ai bien activer MySQLi et Mysqli PDO sur mon php.ini. Quand je charge la video, elle va bien dans le répertoire qui lui est destiné mais la BDD ne se remplis pas. Si je fait une requête normal SQL sans objet orienté, la BDD se remplis normalement. Je précise aussi que j'ai Apache2 installé sur Ubuntu 18.04

-
Edité par cyberanar 8 août 2021 à 13:35:24

  • Partager sur Facebook
  • Partager sur Twitter

keep underground alive 

8 août 2021 à 15:33:11

cyberanar a écrit:

J'ai my SQL 5.7.35 et PHP 7.2 installé. Le code s'exécute sans message d'erreur. J'ai bien activer MySQLi et Mysqli PDO sur mon php.ini. Quand je charge la video, elle va bien dans le répertoire qui lui est destiné mais la BDD ne se remplis pas. Si je fait une requête normal SQL sans objet orienté, la BDD se remplis normalement. Je précise aussi que j'ai Apache2 installé sur Ubuntu 18.04

-
Edité par cyberanar il y a environ 1 heure


Dans /var/log/mysql ou /var/log/mysqld tu devrais pouvoir trouver les logs.

Si la requête ne se fait pas il y a forcément une erreur, et le modèle objet est sur PHP pas sur MySQL...

Bref trouver les logs est ta mission, par défaut pas mal d'erreurs sont balancées sur le stderr (sur Linux on le trouve souvent sur une console à part souvent Ctrl-Alt F6, mais ça dépend des distribs, alors qu'avant c'était sur toutes les distributions pareil, certains se sont amusé à changer ça, je trouve ça de mauvais goût mais bon)

En plus du STDERR, mysqld a son propre système de logs (fait par redirection >>), plus complet que tu devrais retrouver dans un dossier que j'ai mis plus haut...Quand tu auras l'erreur, ça deviendra facile à résoudre.

https://www.sqlpac.com/fr/documents/mysql-fichiers-de-log.html

edit: La configuration des logs se fait dans /etc/mysql/my.cnf (normalement, parce que idem certaines distrib n'ont pas de chemins standards, mais tout ce qui est conf est dans /etc, ça c'est certain)

-
Edité par maroufle34 8 août 2021 à 15:38:43

  • Partager sur Facebook
  • Partager sur Twitter
8 août 2021 à 18:17:10

Donc tu as la même version sur les 2 machines ? même si ta réponse n'est pas explicite.

Le select s'exécute t-il ? ce serait bien que tu répondes ...

Outre les fichiers de logs de mysql - cf réponse ci-dessus - tu as aussi des logs pour apache qui se trouve dans /var/log avec parfois un sous-répertoire.

Enfin c'est bien aussi de faire un système de logs applicatifs pour des applis style 'pro' : par exemple avec cette librairie php : https://github.com/Seldaek/monolog

Sans autres infos de ta part, nous sommes dans le brouillard.

A+

  • Partager sur Facebook
  • Partager sur Twitter
8 août 2021 à 20:26:26

j'ai trouver ça dans /var/log/apache2/error.log

"PHP Warning:PHP Startup: Unable to load dynamic library 'mysqli' (tried: /usr/lib/php/20170718/mysqli " 

je pense que le problème viens de là, j'ai essayer de re-installer php-common php-mysql et php-cli mais le problème persiste . 

un problème de chemin ? 

  • Partager sur Facebook
  • Partager sur Twitter

keep underground alive