Dove sono le istruzioni MySQLsostituite in Drupal ???

13 contenuti / 0 new
Ultimo contenuto
Dove sono le istruzioni MySQLsostituite in Drupal ???

Scusate, ho notato che se inserisco uno script in PHP che ha delle istruzioni in mysql come per esempio:

mysql_select_db()
mysql_query()
mysql_fetch_array()
mysql_fetch_assoc()

Drupal lo rifiuta ( WTF!!) ... dove posso trovare le equivalentifunzioni ma in liungaggio "drupal" per piacere ?
Altrimetni omlti scripts ceh sto facendo non adnranno mai in drupal e mi tocca creare pagine esterne ( che almeno funzionano ma hanno estetica diversa per cui disorientano l'utente )

Per la miseria ..; guardate qui ...

ho trovato questo tipo di funzioni che dovrebbero sostituire lo sandard MySQL ( e mi chiedo PERCHÈ lo fanno ??!!! ) ma NON funzionano!

Ecco

db_select_active() al posto di mysql_select_db()
( seleziono il database Sql226677_2 con db_select_active("Sql226677_") )

db_query() o _db_query al posto di mysql_query() e cerco di fare una query
mysql_fetch_array()
db_fetch_array al posto di mysql_fetch_array() e certo di effettuare un fetch.

Ma ecco cosa accade ( con la pagina NON in drupal e istruzioni standar: dunziona BENISSIMO! )

user warning: Table 'Sql226677_2.phpbb_profile_lang' doesn't exist query: SELECT * FROM phpbb_profile_lang WHERE lang_id = '2' in /web/htdocs/www.dodicesimotasto.it/home/includes/database.mysql.inc on line 128.
user warning: Table 'Sql226677_2.phpbb_profile_fields' doesn't exist query: SELECT * FROM phpbb_profile_fields in /web/htdocs/www.dodicesimotasto.it/home/includes/database.mysql.inc on line 128.
user warning: Table 'Sql226677_2.phpbb_config' doesn't exist query: SELECT * FROM phpbb_config WHERE config_name ='default_dateformat' in /web/htdocs/www.dodicesimotasto.it/home/includes/database.mysql.inc on line 128.
user warning: Table 'Sql226677_2.phpbb_config' doesn't exist query: SELECT * FROM phpbb_config WHERE config_name ='default_lang' in /web/htdocs/www.dodicesimotasto.it/home/includes/database.mysql.inc on line 128.
user warning: Table 'Sql226677_2.phpbb_config' doesn't exist query: SELECT * FROM phpbb_config WHERE config_name ='board_contact' in /web/htdocs/www.dodicesimotasto.it/home/includes/database.mysql.inc on line 128.

In altre parole: non seleziona un tubo ( altro che selezionare un database ), non legge le tabelle, crea solo casini.

Se lo stesso codice lo metto in un blocco: funziona! Se lo metto i una pagina come "php" da questi problemi ...

Come diamine posso fare per farlo lavorare come deve ?

Ringrazio chi mi può aiutare. Sto iniziando ad odiare chi ha ideato queste manipolazioni!

Ciao bohz

avevo visto quel doc ma provando non va nulla. HO un sacco di errori, per cui ho rinunciato.

L'unica soluzione è mettere un php da qualche parte ed importarlo coniFrame e con questo funziona.
c'è però da dire che nessuna variabile ambiente ( globale o non che sia ) è passata al codice importato con iframe

per esempio, avevo disposto questo nella pagina chiamante

<?php
define
('IN_DRUPAL', true);
<
iframe src="mio_file.php"></iframe>
?>

e nel php chiamato ( mio_file.php )

<?php
if (!defined('IN_DRUPAL'){
exit;
}
resto del codice
?>

in modo che la pagina possa essere chiamata e visualzizata solo quando Drupal la chiama. Chiamandola direttamente, non risponda.

Invece purtroppo non funziona. La variabile definita con define() non è passata all'iFrame

Se usi un framework, usa i suoi strumenti e le sue funzioni, soprattutto per la connessione ai database.
Il link che ti hanno consigliato va benissimo.

Se vuoi passare delle variabili all'iFrame devi passarla in qualche modo, no?! Vai in GET!

Mi sa che hai un pò di confusione su queste tecnologie!

<--- Andrea Mancini - biso.it --->

Ciao Bisonte

come ho detto i links che mi hanno consigliato li ho già visti ... ma non vanno come dovrebbero andare ... ecco perchè sono pasasto, ed hopreferito, iFrame.

Non voglio pasasre quella variabile tramite GET. Spero vi sia un altro sistema per farlo.

Non ci può essere altro sistema, sono due pagine separate, due sessioni, quindi si devono passare i dati in qualche modo, di cui il più banale è un GET.

Non puoi creare un piccolo modulo per fare quello che devi? Risparmi tempo e fatica e crei qualcosa di sicuro e facilmente manutenibile.

<--- Andrea Mancini - biso.it --->

Purtroppo per creare un modulo del genere mi occorre tantissimo lavoro ed è la prima volta che mi cimenterei in un atto del genere. Mentre con questo "trucco" ho bypassato questo lavoro.

Purtroppo la pagina è accessibile anche "fuori" da Drupal ( cosa che non volevo. ) ma non è un gran problema. Non è in pericolo niente, solo era più consono che fosse visibile solo in drupal. E chi tentava di richiamare direttamente lo script PHP, ricevesse pagina bianca ( ecco perchè il GET non mi va. Perchè si può richiamare lo stesso la pagina senza passare da Drupal ... inutile spendere linee di codice per niente ) ...

Un'altra cosa che mi sono dimenticato fors edidire:

Lo script che ho fatto, funziona molto bene se lo metto in un Blocco.
Ma a me serve metterlo in una pagina.
Il tipo di testo che ho selezionato è tipo PHP ( ovviamente ma lo dico lo stesso ).
Mentre in un blocco il mio script non ha problemi ( e solo un'istruzione va cambiata che è mysql_fetch_assoc() con db_fetch_assoc() ), quando lo metto in una pagina, non c'è istruzione che tenga ... non va!

Non è ilprimo script che faccio, percè nel mio sito, tutto quello che c'è sulla spalla di sinistra, è il risultato di miei snipets. Il problema è che penso che durpal tratti diversamente un blococ da una pagina anche quando entrambi sono scritti in PHP

concordo con quanto detto in precedenza, se si usa un Framework bisogna utilizzare i suoi strumenti se no si fa il triplo della fatica...

Detto questo posso dirti che una volta ho fatto un modulo che Si connetteva ad un database eseterno a quella di Drupal ed importava in modo automatico un numero di records all'interno del DATABASE di drupal.

Il problema che si ponevano erano:
- se usi gli strumenti di drupal, ovviamente potrai fare riferimento solo alle tabelle del DATABASE di Drupal non altri
- Se devi accedere ad un DB esterno devi perforza CREARE una nuova SESSIONE manualmente ...

Infine di consiglio di fare queste operazioni all'interno di un modulo in modo tale da avere più controllo

Slice2Theme Servizio per la conversione di Design in markup HTML e/o temi.

WeBrain Solution | Pillsofbits Of Bits

Ciao Kluz, ho trovato un metodo ... molto efficiente ... ve lo voglio comunicare affinchè possa essere d'aiuto anche ad altri ... in pratica anzichè creare la variabile che mi serve nel server, la creo nella macchina utente in questo modo ( tramite i cookies ) al contenuto di questa pagina possono accederci solo gli anonimi:

PAGINA CHIAMANTE

<?php
global $user;
$uid = $user->uid;
$seme = md5(time());
setcookie("SECCATURA",$seme,time()+100);
if (
$uid == 0 ) {
$pag = <<< FORM
<iframe src="pagina_da_chiamare.php?chiave=$seme" width="100%" height="1100" scrolling="no" frameborder="no">
</iframe>
FORM;
echo
$pag;
} else {
header('Location: <a href="http://www.dodicesimotasto.it'" rel="nofollow">http://www.dodicesimotasto.it'</a>);
}
?>

La variabile viene generata e passata in un cookie. Allo stesso momento viene trasmessa alla pagina chiamata in modo che possa fare comparazioni tra la variabile riletta dal cookie e quella che la pagina chiamante le manda in questo modo:

PAGINA CHIAMATA

<?php
$neem
= $_GET["chiave"];
if (
$_COOKIE["SECCATURA"] != $neem) {
        echo
"minkia fai ?";
    exit;
}
resto del codice php
?>

ora, la pagina viene visualizazta soltanto se viene chiamata dalla chiamante. Qualsiasi altro tentativo di chiamare la pagina fuori dalla chiamante, produce una pagina bianca.

@Bisonte: non credo di avere le "idee confuse" come vedi ;) Ma so quello che voglio ottenere ;)

P.S. al gruppo SITO DRUPAL ITALIA: attenzione ... nel mio testo qui sopra ho messo l'istrutione HEADER() per presetnare il codice. Quando sono andato in anteprima ed a pubblicare, ho notato che quell'istruzione è stata eseguita dalla vostra macchina, in altre parole al posto di avere header con dentro solo Location: url del sito , è apparsa anche l'esecuzione dell'istruzione e si è aggiunta questa linea

"title="http://www.dodicesimotasto.it'" rel="nofollow">http://www.dodicesimotasto.it'</a>"
[/codefilter_code]
che io nno ho mai scritto. Grazie

ok, ma che cosa centra questo con il Database?

Slice2Theme Servizio per la conversione di Design in markup HTML e/o temi.

WeBrain Solution | Pillsofbits Of Bits

credo vi siano in apparenza due argomenti sovrapposti ma facenti parte dello stesso problema.

In altre parole: se la pagina che intendevo mettere avesse avuto le istruzionei del DB funzionanti come buon senso vuole, non averi avuto il problema di "delegare" una pagina esterna le stesse funzioni e quindi non avrei avuto il problema di passare certe istruzioni in modo che i soliti "furbini" tentassero di bypassare il sistema la prendessero nel lisca.

Dato che invece in Drupal hanno "re-inventato" il database MySQL per loro ragioni, sono stato costretto a delegare una pagina esterna. Ma per farlo, ho dovuto implementare le istruzioni che avevo richiesto, e poi trovato da solo ( visto che sono uno che "ha un po' di confusione con queste tecnologie"), in modo da evitare che si acceda alla pagina esterna direttamente senza passare da Drupal.

Ecco "cosa c'entra" ... Il problema è risolto ora e spero che questi dati vengano realmente di utiità a terzi, e che ne leggano però il contenuto capendo quale nesso c'è tra il DB e le istruzioni che mi necessitavano per porre rimedio a quello che reputo ( IMHO ) un punto debole di Drupal: l'aver "riscritto" MySQL

P.S. ho scritto una nota per gli Admin del sito, ma credo non sia stata letta