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 .
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.
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.
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.
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.
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
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.
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)
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.
keep underground alive
keep underground alive
keep underground alive
keep underground alive
keep underground alive