enregistrer objet blob

Nouveau WRInaute
salut à tous! bon j'ai une BD Oracle et j'essaye d'enregistrer une image comme objet blob mais ça marche pas.. voici mon code:

$magic= new magic($database);
$dnaissance=$dn1 . "/" . $dn2 . "/". $dn3;
$dentree=$de1 . "/" . $de2 . "/". $de3;
$dsortie=$ds1 . "/" . $ds2 . "/". $ds3;
if (strlen($dnaissance)!=8)
$dnaissance=null;
if (strlen($dentree)!=8)
$dentree=null;
if (strlen($dsortie)!=8)
$dsortie=null;


$person->add($element, $nom, $prenom, $sexe, $langue, $photo, $dnaissance, $dentree, $dsortie);

$photo = $_FILES['photo']['tmp_name'];
$photo_name = $_FILES['photo']['name'];

if ($photo!="")
{
$database = new database();
$filetype=strrchr($photo_name, ".");

$db_extention_id=$person->get_extention($element);
$cle_parent=$person->get_roleid($person->ididentite);

$data = fread(fopen($photo, "rb"), filesize($photo));

$database->add_blob("photo",$data);

$database->dbquery("INSERT INTO db_extensions_val(date_creation, user_creation, element_creation, status, db_element_id, id, db_extention_id, cle_parent, valeur_alpha, valeur_blob)
VALUES(SYSDATE, '" . INSERT_USER . "', $element, " . ACTIVE_ELEMENT . ", $element, " . $magic->getid("DB_EXTENSIONS_VAL") . ", $db_extention_id, $cle_parent, '$filetype', EMPTY_BLOB()) RETURNING valeur_blob INTO :photo");

$database->dbclose();
}

et dans la page fonctions.php j'ai les classes person et database
voici le message d'erreur :

Fatal error: Call to a member function add() on a non-object in /data/www/secure.idinfo.ch/shop/admin/ajoutertout.php on line 275

si qq a une idée aidez moi svp! merci bc!
 
Nouveau WRInaute
alors j'ai fait:
$person=new person($id_ad_adresse,$database,$magic,$data, $nom,$prenom,$langue,$sexe,$dnaissance,$photo,$ididentite,$tcomcodes,$dentree,$dsortie);

et mnt j'ai le message:
Fatal error: Class 'generic_data' not found in /data/www/secure.idinfo.ch/shop/admin/fonctions.php on line 497

:? pk c si compliqué? lol :wink:
 
Nouveau WRInaute
roblescriso a dit:
alors j'ai fait:
$person=new person($id_ad_adresse,$database,$magic,$data, $nom,$prenom,$langue,$sexe,$dnaissance,$photo,$ididentite,$tcomcodes,$dentree,$dsortie);

et mnt j'ai le message:
Fatal error: Class 'generic_data' not found in /data/www/secure.idinfo.ch/shop/admin/fonctions.php on line 497

:? pk c si compliqué? lol :wink:

là, suffit de traduire c'est que php n'a pas trouvé la classe generic_data ;)
 
Nouveau WRInaute
:cry: mnt j'ai ce mesage là:
Fatal error: Call to a member function dbquery() on a non-object in /data/www/secure.idinfo.ch/shop/admin/fonctions.php on line 456

et dans la class il y a:
class magic{
var $database;
function magic($database)
{
$this->database=$database;
}
function getid($table_name)
{
$lastid = $this->database->dbquery("SELECT dernier_numero FROM db_sequence WHERE nom_table='$table_name'"); $lastid = $lastid[0][0];
$lastid++;
$this->database->dbquery("UPDATE db_sequence SET dernier_numero='$lastid' WHERE nom_table='$table_name'");
return($lastid); // Renvoi le dernier ID disponible pour la table
}
};

j'ai instancié toutes les classes alors pk il me donne ce message?
 
Nouveau WRInaute
la classe qui contient dbquery est database et elle est dans la meme page que la class magic:
class database{

var $conn, // Connexion oracle
$numcolumns, // Nombre de colones du résultat de la dernière requête
$numrows, // Nombre d'élements fourni par la dernière requête
$blobsbind, // Tableau contenant les variables à lier
$stmt, // Variable d'emplacement
$debug; // Flag pour le déboguage (True affiche les messages d'erreur plus la requête SQL)
function add_blob($sql_varname, $data)
{
$max=sizeof($this->blobsbind);
$this->blobsbind[$max][0]=$sql_varname;
$this->blobsbind[$max][1]=$data;
}



function database($ora_user='IDINFO_xm1', $ora_password='IDINFO',$ora_connect_string='IDHEB')
{
$this->debug=false;
$this->dbconnect($ora_user, $ora_password, $ora_connect_string);
}
function dbconnect($ora_user, $ora_password, $ora_connect_string) // Fonction de connexion à une base de donnée Oracle
{
$this->conn=OCILogon($ora_user, $ora_password, $ora_connect_string);
}

function dbquery($query) // Exécution de la requête SQL
{
// Execute une requête SQL puis retourne un tableau avec le résultat (s'il y a lieu)

$i=0;

if(!($this->stmt=OCIParse($this->conn,$query))) // Vérification de la syntaxe (Si fausse, afficher l'erreur Oracle)
$this->show_errormsg($query);
if(sizeof($this->blobsbind)>0) // Si il y'a des liaison de variables à faire, créer les liaisons
do
{
$lobs[$i] = OCINewDescriptor($this->conn, OCI_D_LOB);
$mixedvar = &$lobs[$i];
OCIBindByName($this->stmt, ":" . $this->blobsbind[$i][0], $mixedvar, -1, OCI_B_BLOB);
$i++;
}
while(next($this->blobsbind));
if (!OCIExecute($this->stmt,OCI_DEFAULT))
$this->show_errormsg($query);
if (strtoupper(substr($query, 0, 6))=="SELECT")
{
// Récupération des données et de ces données dans une Array
$this->numcolumns = ocinumcols($this->stmt);
$this->numrows=0;
while(OCIFetchInto($this->stmt, $row, OCI_ASSOC))
{
for($column=1;$column<=$this->numcolumns;$column++)
if(ocicolumntyperaw($this->stmt, $column)==_BLOB_RAWTYPEID)
$result[$this->numrows][$column-1]=$row[ocicolumnname($this->stmt, $column)]->load();
else
$result[$this->numrows][$column-1]=$row[ocicolumnname($this->stmt, $column)];
$this->numrows++;
};
return($result);
}
else
{
// ECRITURE, MISE A JOUR, EFFACEMENT
$i=0;
if(sizeof($this->blobsbind)>0)
do
{
if(!$lobs[$i]->save($this->blobsbind[$i][1]))
$this->show_errormsg($query);
$i++;
}
while(next($this->blobsbind));
}
OCICommit($this->conn);
OCIFreeStatement($this->stmt);
}...
 
WRInaute impliqué
J'avais compris ...
Après si t'essaies pas ce qu'on te propose 8O

Bon je t'explique, ta deux classes distinctes là magic et database, si dans magic tu accède à un méthode de database, même si elle est déjà instanciée, ca marchera pas, sauf si tu fais un extend ...
 
WRInaute impliqué
Ca va permettre à la classe d'utiliser les méthodes de la classe "extendée" sans erreur, comme ce que tu as besoin dans ton cas ;)
Et je me suis gouré je crois que c'est extends
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut