enregistrer objet blob

Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics

roblescriso
Nouveau WRInaute
 
Messages: 33
Inscription: Mer Avr 20, 2005 12:18

enregistrer objet blob

Message le Mer Juin 15, 2005 7:33

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!

dansmaregion
Nouveau WRInaute
 
Messages: 2
Inscription: Mer Juin 08, 2005 12:24

Message le Mer Juin 15, 2005 8:45

J'ai l'impression que ton objet person n'a pas été instancié.

roblescriso
Nouveau WRInaute
 
Messages: 33
Inscription: Mer Avr 20, 2005 12:18

Message le Mer Juin 15, 2005 9:04

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:

dansmaregion
Nouveau WRInaute
 
Messages: 2
Inscription: Mer Juin 08, 2005 12:24

Message le Mer Juin 15, 2005 9:16

roblescriso a écrit: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 ;)

roblescriso
Nouveau WRInaute
 
Messages: 33
Inscription: Mer Avr 20, 2005 12:18

Message le Mer Juin 15, 2005 14:20

: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?


mowmow
WRInaute passionné
WRInaute passionné
 
Messages: 975
Inscription: Mer Nov 03, 2004 9:40

Message le Mer Juin 15, 2005 14:23

class magic extends laClasseQuiContientDbquery

roblescriso
Nouveau WRInaute
 
Messages: 33
Inscription: Mer Avr 20, 2005 12:18

Message le Mer Juin 15, 2005 14:32

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);
}...


mowmow
WRInaute passionné
WRInaute passionné
 
Messages: 975
Inscription: Mer Nov 03, 2004 9:40

Message le Mer Juin 15, 2005 14:35

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 ...

roblescriso
Nouveau WRInaute
 
Messages: 33
Inscription: Mer Avr 20, 2005 12:18

Message le Mer Juin 15, 2005 14:36

ah dsl mais c quoi un extend?? :cry:

roblescriso
Nouveau WRInaute
 
Messages: 33
Inscription: Mer Avr 20, 2005 12:18

Message le Mer Juin 15, 2005 14:38

mais je l'ai deja utilisé comme ça et ça marche ailleurs.. :?


mowmow
WRInaute passionné
WRInaute passionné
 
Messages: 975
Inscription: Mer Nov 03, 2004 9:40

Message le Mer Juin 15, 2005 14:38

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

roblescriso
Nouveau WRInaute
 
Messages: 33
Inscription: Mer Avr 20, 2005 12:18

Message le Mer Juin 15, 2005 14:40

et tu pourrais me donner un exemple? car je ne sais pas comme on utilise ce "extend"


mowmow
WRInaute passionné
WRInaute passionné
 
Messages: 975
Inscription: Mer Nov 03, 2004 9:40

Message le Mer Juin 15, 2005 20:02

-http://www.phpdebutant.org, section classes ;)


Formation recommandée sur ce thème :

Formation Google Analytics : en 2 jours, apprenez comment exploiter l'essentiel des possibilités de l'outil de mesure d'audience de Google. Formation animée par Julien Coquet, expert certifié officiellement par Google Analytics.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Atma et 0 invités