Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012

    [reg exp] suffissi automatici in tabelle sql

    buonasera!

    sto realizzando un cms e per semplificare la vita agli sviluppatori dei futuri moduli, sto implementando un metodo, nella classe che gestisce il database, il quale non fa altro che impostare in automatico il suffisso delle tabelle mysql scelto in fase di installazione del cms

    se quindi lo sviluppatore crea la query

    codice:
    select * from tabella where id=10
    dove il suffisso è pippo
    il metodo del cms non farà altro che restituire

    codice:
     
    select * from pippo_tabella where id=10
    A tal fine ho quindi realizzato il metodo che avendo già disponibile l' elenco delle tabelle nel database, non fa altro che verificare anche che i termini trovati tramite reg exp corrispondano realmente al nome di una tabella esistente.

    è corretto secondo voi ciò che ho scritto?

    spero di essere stato abbastanza chiaro



    Codice PHP:
        private function set_suffix($q_str){
            
    $patterns=array(
                
    '/into[\s][\`]?(.*)[\`]?[\s]/USmi',
                
    '/from[\s][\`]?(.*)[\`]?[\s]/USmi',
                
    '/join[\s][\`]?(.*)[\`]?[\s]/USmi',
                
    '/[\,]?[\s](.*)as[\s]/Usmi'
                
    );
            
            foreach(
    $patterns as $patt){
                
    preg_match_all($patt,$q_str,$results);            
                if(isset(
    $results[0]) && !empty($results[0])){
                    foreach (
    $results[0] as $r_key=>$res){
                        if(
    in_array($results[1][$r_key],$this->__tables)){
                            
    $block=$res;
                            
    $tag=$results[1][$r_key];
                            
    $rep=$this->__suffix.$tag;
                            
    $q_str=str_replace(
                                
    $block,
                                
    str_replace($tag,$rep,$block)
                                
    $q_str;
                                );
                            }
                        }
                    }
                }
            return 
    $q_str;
            } 
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  2. #2
    Secondo me non è la strada giusta e potrebbe introdurre dei bug nel caso in cui vengano utilizzati nome di campi chiamati come una delle tabelle del DB.

    Perchè non utilizzi il metodo di WordPress?

    Quando lo sviluppatore crea le query inserisce il prefisso tramite {$wpdb->prefix} direttamente nell'SQL.

  3. #3
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    si di questa cosa mene ero reso conto da subito, infatti pensavo di renderla 'regola'.

    ma wordpress ha una struttura piu rigida della mia, quindi da me non sarà mai $wpdb tanto per intenderci, bensì è dichiarato dallo sviluppatore del sito il nome di quella variabile, e in ogni contesto può cambiare, quindi lo sviluppatore del modulo non ne verrà mai a conoscenza
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  4. #4
    Originariamente inviato da dottwatson
    si di questa cosa mene ero reso conto da subito, infatti pensavo di renderla 'regola'.

    ma wordpress ha una struttura piu rigida della mia, quindi da me non sarà mai $wpdb tanto per intenderci, bensì è dichiarato dallo sviluppatore del sito il nome di quella variabile, e in ogni contesto può cambiare, quindi lo sviluppatore del modulo non ne verrà mai a conoscenza
    Credo che lo sviluppatore del sito non debba intervenire sul suffisso delle tabella ma che questo sia di competenza dello sviluppatore del modulo. Lo sviluppatore del sito puo' e deve (volendo) intervenire sul "prefisso" delle tabelle del sito. Ma si tratta di una costante definita nella configurazione globale.

    Tra l'altro pippo_tabella .... pippo = prefisso e tabella = suffisso.

    Se non si rispetta il significato semantico delle parole il rischio di non capirsi rimane elevato.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    Originariamente inviato da piero.mac
    Credo che lo sviluppatore del sito non debba intervenire sul suffisso delle tabella ma che questo sia di competenza dello sviluppatore del modulo. Lo sviluppatore del sito puo' e deve (volendo) intervenire sul "prefisso" delle tabelle del sito. Ma si tratta di una costante definita nella configurazione globale.

    Tra l'altro pippo_tabella .... pippo = prefisso e tabella = suffisso.

    Se non si rispetta il significato semantico delle parole il rischio di non capirsi rimane elevato.
    vero... me ne sono reso conto solo stamattina che avevo sbagliato termien semantico

    ad ogni modo lo sviluppatore inizializza tutto il sistema così

    Codice PHP:
    $SITE=new core;

    $SITE->add_core('db'); 
    fa tutto quello che deve fare e poi alla fine si compila il tutto.

    lo sviluppatore del modulo quindi non conosce a priori che l' utente ha inizializzato $SITE come variabile di costruzione, e perciò volevo intervenire in questa maniera.
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  6. #6
    Originariamente inviato da dottwatson
    lo sviluppatore del modulo quindi non conosce a priori che l' utente ha inizializzato $SITE come variabile di costruzione, e perciò volevo intervenire in questa maniera.
    Tu definisci una variabile per il prefisso. Se l'utente sviluppatore del sito fornisce un proprio prefisso assegnerai quello altrimenti assegnerai un default, come fa per esempio anche joomla con jos_tabella

    Cosi' fan tutti, non vedo ragione di sprecare anche una sola riga di codice per fare diversamente.
    Il suffisso, (nome delle tabelle) "deve" essere riservato allo sviluppatore del modulo, altrimenti sarebbe il caos totale sia nel caso di mantenimento che nell'aggiornamento del CMS.

    Insomma tutto cio' che e' diverso dallo scenario teste' descritto e' inutile complicazione di un affare (i nomi tabella), tutto sommato, semplice.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    aspetta aspetta aspetta, il mio problema è sul PREFISSO!!

    e il prefisso è impostabile liberamente durante l' installazione!

    per i nomi delle tabelle (suffisso) quello dipende dallo sviluppatore del modulo, affar suo se replica nomi di tabelle già esistenti o quant' altro.

    io devo lavorare SOLO sul PREFISSO e quello deve essere liberamente impostabile in fase di installazione
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  8. #8
    Originariamente inviato da dottwatson
    io devo lavorare SOLO sul PREFISSO e quello deve essere liberamente impostabile in fase di installazione
    ma e' proprio di questo che stiamo parlando:

    fai un form dove chiedi le varie strumpappalle:

    nome_db, prefisso_db, user, password

    verifichi:

    $pref = !empty($_POST['prefisso_db']) ? $_POST['prefisso_db'] : 'tuodef';

    create table $pref_tabella .....

    puoi farlo con una classe, con delle costanti, scriverlo su un notes, come ti pare insomma ... ma la zuppetta e' quella

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    si scusa, questo passaggio era chiaro.

    chi sviluppa però il modulo (es. photogallery) deve scrivere le query liberamente senza doversi preoccupare del prefisso che precedentemente ha dato l' utente in fase di installazione.

    Questo perchè i moduli devono essere liberamente installabili e viceversa.

    per fare ciò scriverà quindi query con nome tabella = suo nome scelto e il sistema automaticamente ne piazzerà il prefisso davanti.

    se installo il modulo l' istallatore del modulo darà come query
    codice:
    create table phil_photogallery ...
    ma la query diventerà
    codice:
    create table prefix_phil_photogallery ...

    e tutte le sue queries saranno
    codice:
    select * from phil_photogallery
    ma diventeranno in fase di esecuzione
    codice:
    select * from prefix_phil_photogallery
    Credo che la semplicità di sviluppo data in mano ad uno sviluppatore corrisponda almeno ad un 35% di diffusione in +
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  10. #10
    perche' deve essere cosi' come descrivi tu?

    le tabelle dei vari componenti, moduli, plug-in devono avere dei nomi come da specifica del dato CMS.

    joomla per esempio usa il codice #__ come prefisso seguito dal nome della tabella.

    create table if not exists `#__ciccio`

    in fase di esecuzione tramite l'apposta classe converte `#__ciccio` in `prefisso_ciccio`

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.