server = DB_HOST; $this->username = DB_USER; $this->password = DB_PASSWORD; $this->db = $db; $this->log = $log; $this->uid = 0; $this->connect(); } public static function escape_string($string) { return mysqli_real_escape_string($this->mysqli, $string); } private function connect() { $this->mysqli = mysqli_connect($this->server, $this->username, $this->password, $this->db); //mysql_select_db($this->db, $this->mysqli); mysqli_query($this->mysqli, 'SET NAMES UTF8'); } public function __sleep() { return array('server', 'username', 'password', 'db'); } public function __wakeup() { $this->connect(); } // Affecte à l'objet les variables issues du tableau de valeurs (généralement issu de SQL) // Elles seront utilisables sous la forme $objet->titre ou $objet->url function select_var($obj, $sql) { $result = self::select($sql); if (! $result) { return 0; } $tableau = mysqli_fetch_assoc($result); if (is_array($tableau)) { foreach ($tableau as $cle => $valeur) { $obj->$cle = $valeur; } } return 1; } public function log_query($sql, $ok = TRUE) { $log_handle = fopen(self::LOG_SQL, "a"); if ($log_handle) { $ip = ifnull($_SERVER['REMOTE_ADDR'], 0); fwrite($log_handle, "$ip\t" . date("d-m-Y H:i:s") . "\t$this->uid\t$ok\t$sql\n"); // "$uid\t" . fclose($log_handle); } } public function select($sql, $log = 0) { $result = mysqli_query($this->mysqli, $sql); if (! $result) { $msg = 'Erreur dans la Requete : ' . mysqli_error() . "\n"; $msg .= "SQL = '$sql'"; self::save_email(0, 0, 'nobody@loisirs.fr', 'Loisirs.fr', 'ybnc@pm.me', 'Erreur Loisirs.fr', $msg, false, 'ERROR'); error_log("ERREUR SQL *** $sql ***"); error_log(mysqli_error()); return FALSE; } if ($log) self::log_query($sql); return $result; } public function get_select($sql) { $result = mysqli_query($mysqli, $sql); if (! $result) { $msg = 'Erreur dans la Requete : ' . mysqli_error() . "\n"; $msg .= "SQL = '$sql'"; self::save_email(0, 0, 'nobody@loisirs.fr', 'Loisirs.fr', 'ybnc@pm.me', 'Erreur Loisirs.fr', $msg, false, 'ERROR'); error_log("ERREUR SQL *** $sql ***"); error_log(mysqli_error()); return FALSE; } // Log la requête if ($log) self::log_query($sql); return mysql_fetch_row($result); } public function exec($sql, $log = TRUE, &$id_insert = NULL) { $ok = TRUE; if (mysqli_query($this->mysqli, $sql)) { if ($id_insert !== NULL) { $id_insert = mysqli_insert_id($this->mysqli); } } else { // Send error TODO ? $msg = 'Erreur dans la Requete : ' . mysqli_error() . "\n"; $msg .= "SQL = '$sql'"; self::save_email(0, 0, 'nobody@loisirs.fr', 'Loisirs.fr', 'ybnc@pm.me', 'Erreur Loisirs.fr', $msg, false, 'ERROR'); error_log("ERREUR SQL *** $sql ***"); error_log(mysqli_error()); $ok = FALSE; } if ($this->log) self::log_query($sql, $ok); return $ok; } public function insert_update($data, $table, $primary_field = NULL, &$primary_val = NULL) { $set = array(); foreach ($data as $k => $v) { $set[] = "`$k`='" . mysqli_real_escape_string($this->mysqli, $v) . "'"; } if ($primary_val == NULL || $primary_val == 0) { $sql = "INSERT INTO $table SET " . implode(',', $set); $ok = $this->exec($sql, TRUE, $primary_val); } else { $sql = "UPDATE $table SET " . implode(',', $set) . " WHERE $primary_field=$primary_val"; $ok = $this->exec($sql); } if ($this->log) self::log_query(0, $sql, $ok); if (! $ok) { $msg = 'Erreur dans la Requete : ' . mysqli_error() . "\n"; $msg .= "SQL = '$sql'"; self::save_email(0, 0, 'nobody@loisirs.fr', 'Loisirs.fr', 'ybnc@pm.me', 'Erreur Loisirs.fr', $msg, false, 'ERROR'); error_log("ERREUR SQL *** $sql ***"); error_log(mysqli_error()); } return $ok; } public function new_entite($type) { $sql = "INSERT INTO entite SET type_entite='$type'"; self::log_query($sql); if (! mysqli_query($this->mysqli, $sql)) { error_log("ERREUR SQL *** $sql ***"); error_log(mysqli_error()); return 0; } return mysqli_insert_id($this->mysqli); } public function log_event($uid, $id_entite, $type_event) { $sql = "INSERT INTO event SET id_entite=$id_entite,date_event=now(),id_user=$uid,user='$this->uid',type_event='$type_event'"; error_log("SQL *** $sql ***"); self::log_query($sql); if (! mysqli_query($this->mysqli, $sql)) { error_log("ERREUR SQL *** $sql ***"); error_log(mysqli_error()); return 0; } return mysqli_insert_id($this->mysqli); } public function backup_table($table, $condition) { $sql = "INSERT INTO bak_$table SELECT NULL,now(),$this->uid,$table.* FROM $table WHERE $condition"; mysqli_query($this->mysqli, $sql) or send_error(__FILE__, __LINE__, "Erreur: $sql"); } public function save_email($ida, $from_email, $from_nom, $to, $objet, $msg, $copy, $type) { $ip = ifnull($_SERVER['REMOTE_ADDR'], 0); $sql = "INSERT INTO email SET id_user=$this->uid,id_activite=$ida,ip='$ip',email_expediteur='" . mysqli_real_escape_string($this->mysqli, $from_email) . "',email_destinataire='" . mysqli_real_escape_string($this->mysqli, $to) . "',type='$type',date_crea=now()"; if ($copy) $sql .= ",flag='FW_EXP'"; // Log la requête self::log_query($sql); // Execute la requête if (! mysqli_query($this->mysqli, $sql)) { error_log("ERREUR SQL *** $sql ***"); error_log(mysqli_error()); $id_msg = time(); } else { $id_msg = mysqli_insert_id($this->mysqli); } $octet = $loop = 0; $filename = self::SPOOL_DIR . $id_msg; while ($loop < 100 && file_exists($filename)) { $loop++; $filename = self::SPOOL_DIR . $id_msg . '_' . $loop; } if ($loop < 100) { $email_handle = fopen($filename, "w"); if ($email_handle) { $octet += fwrite($email_handle, "OBJET:$objet\n"); if (! empty($from_email)) { $octet += fwrite($email_handle, "FROM:$from_email\n"); } if (! empty($from_nom)) { $octet += fwrite($email_handle, "EXPEDITEUR:$from_nom\n"); } if (! empty($to)) { $octet += fwrite($email_handle, "TO:$to\n"); } $octet += fwrite($email_handle, "IDA:$ida\n"); $octet += fwrite($email_handle, "\n$msg\n"); fclose($email_handle); } } // Change le mode du fichier chmod($filename, 0774); if ($octet == 0) { error_log("Erreur ecriture email ($id_msg)\nOBJET:$objet\nFROM:$from_email\nTO:$to\nEXPEDITEUR:$from_nom\nIDA:ida\n\n$msg"); } } }