Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [php] consiglio struttura tabelle

    Allora giovincelli.. mi sono documentato un pò.. e sono arrivato a questo risultato..

    Allora devo inserire articoli sul mio sitarello e stò meditando :master: sulle tabelle necessarie per compiere al meglio la gestione dei suddetti..

    Il risultato è:

    Tabella ARTICOLI
    ID - AUTORE - DATA - TITOLO - BREVE_DESCRIZIONE

    Tabella PAGINE
    ID - ID_ARTICOLI - TITOLO - TESTO_COMPLETO

    Allora in queste due tabelle c'è il cuore dei vari articoli, che verranno divisi per categorie con:

    Tabella CATEGORIA
    ID - CATEGORIA

    Tabella ART_CAT
    AID - CID

    Ora vorrei sapere intanto, si possono completare in qualche modo??? poi le tabelle devono essere INNODB vero??? non MyISAM..

    Graciass belli

    [edit] dimenticavo il campo TESTO_COMPLETO è meglio se è TEXT o BLOB???
    Questa volta, più che un voto.. è favoreggiamento.

  2. #2
    Utente di HTML.it L'avatar di neida
    Registrato dal
    Feb 2005
    Messaggi
    1,478
    Io proverei, prima di iniziare a scrivere il codice, anche con una struttura simile:

    Tabella ARTICOLI
    ID - DATA - TITOLO - TESTO - ID_AUTORE - ID_CAT

    Tabella AUTORI
    ID - NOME - COGNOME - EMAIL (altro)

    Tabella CATEGORIE
    ID - TIPO

    Aggiungendo una tabella AUTORI potrai gestire la cosa anche nell'eventualità di più persone che scrivono articoli. Per la CATEGORIA, poi, credo sia più semplice aggiungerla direttamente nella tabella ARTICOLI, e potrai gestirla attraverso una seconda tabella dedicata, appunto.

    Per la tabella PAGINE, sinceramente, non ne vedo l'utilità. La breve descrizione dell'articolo, ad esempio, la puoi ottenere direttamente in query, prelevando i dati dal solo campo TESTO della tabella ARTICOLI.

    Per la scelta del tipo di tabella, dovrebbe andar più che bene il tipo INNODB. Trovi diverse informazioni in questo articolo.

    Sulla scelta del tipo di campo, TEXT è decisamente preferibile a BLOB che è adatto per memorizzare valori binari.

  3. #3
    grazie molte x la risposta.. allora ti spiego.. diciamo che quelle tabelle le ho ritrovate su un tutorial di devshed..

    E ragionando un'attimo, la distinzione tra ARTICOLI e PAGINE mi viene utile x suddividere l'articolo su piu pagine..

    Diciamo che ARTICOLI mi serve x mostrare un link veloce dell'articolo con la breve descrizione, per poi vedere il resto tipo:

    Articolo su come sbagliare il php:

    -> Introduzione
    -> 2a pagina
    -> ect..

    ripreso dalla tabella PAGINE

    non ho optato per la tabella autori in quanto ehmm forse mi sono spiegato male ma questi articoli li inserisco solo io.. sarebbe il contenuto del sito in pratica...

    Per la CATEGORIA, poi, credo sia più semplice aggiungerla direttamente nella tabella ARTICOLI, e potrai gestirla attraverso una seconda tabella dedicata, appunto.
    dici?? mmh non capisco la relazione

    grazie sai..
    Questa volta, più che un voto.. è favoreggiamento.

  4. #4
    Utente di HTML.it L'avatar di neida
    Registrato dal
    Feb 2005
    Messaggi
    1,478
    Secondo me, ripeto, la distinzione tra le tabelle ARTICOLI e PAGINE, per gestire il testo dell'articolo su più pagine, è inutile. Nello schema, elementare, che ti ho proposto prima non esiste la tabella PAGINE, hai un solo campo (TESTO) a cui fare riferimento per ogni articolo.

    Per le altre cose, come mostrare solo una parte dell'articolo e poi visualizzarlo per intero suddividendone il contenuto in più pagine, le potrai realizzare con qualche riga di codice in più.

    La relazione tra categorie e articoli la puoi gestire semplicemente con un campo (ID_CAT) nella tabella ARTICOLI che conterrà l'id identificativo della categoria scelta, prelevandolo dalla tabella CATEGORIE.

    Relativamente alla presenza della tabella AUTORI, ora che hai specificato che sari tu l'unico autore degli articoli, puoi ovviamente ometterla. Così come potrai omettere lo stesso campo AUTORE dalla tabella ARTICOLI.

  5. #5
    Utente di HTML.it L'avatar di *pragma
    Registrato dal
    Sep 2001
    Messaggi
    1,087
    non c'è bisogno che crei una tab per descrivere ed una con tutto il contenuto da dividere in + pagine.
    Puoi usare la funzione spliti('marcatore', $tua_pagina);
    il codice è lungo devi controllare le variabili
    codice:
     <?php  
    //--estratto dal db ... l'id l'hai passato p.es. con un link
                    if(!isset($_GET['id'])) {
     exit("Torna indietro");
                    }
           $id = $_GET['id'];
       $articoli = @mysql_query("SELECT testo FROM articoli WHERE id='$id'");
    
                    if (!$articoli) {
                          exit('Errore ecc...' . mysql_error);
                         }
                    if (mysql_num_rows($articoli) < 1) {
                          exit('Non trovato sto id.');
    
           $articoli = mysql_fetch_array($articoli);
           $articolitext = $articoli['testo'];
    
    
    //-- inizzializzi una variab per num le pagine
    if (!isset($_GET['page'])) {
      $page = 0;
    } else {
      $page = $_GET['page'];
    }
    
    //---trasformi in array le pagine da dividire. Nel articoli devi
    //-- inserire (lì dove vuoi dividere) il marcatore es: v90 .
    $textarray = spliti('v90', $articolitext);
    
    //--- primo elm dell'array pagine
    $articolitext = $textarray[$page];
    
    //--- poi ad ogni inizio pag metti la descrizione tra 
    // -- marcatori inventati da te es: -descr- tua descriz -/descr-
    //----- presento un menù per le pagine con i marcatori di descrizione --
    $PHP_SELF = $_SERVER['PHP_SELF'];
    
             foreach($textarray as $n => $k) {
       ereg("( -descr-)([a-zA-Z0-9 °]+)(-/descr-)", $k, $regs);
    echo("  ::pag " . ($n+1) . " =>  <a href=\"$PHP_SELF?id=$id&page=$n\">$regs[2]</a>"); 
        }
    
    //--- TOLGO i marcatori di DESCRIZIONE ----------
    //-----------------------------------------------
    $articolitext =ereg_replace("(-descr-)([a-zA-Z0-9 °]+)(-/descr-)", "", $articolitext); 
    
    if ($page != 0) {
      $prevpage = $page - 1;
      echo "
    
    <a href=\"$PHP_SELF?id=$id&page=$prevpage\">".
          'Previous Page</a></p>';
    }
    
    echo "
    
    $articolitext</p>";
    
    if ($page < count($textarray) - 1) {
      $nextpage = $page + 1;
      echo "
    
    <a href=\"$PHP_SELF?id=$id&page=$nextpage\">".
          'Next Page</a></p>';
    }
    ?>
    ciao

  6. #6
    Utente di HTML.it L'avatar di *pragma
    Registrato dal
    Sep 2001
    Messaggi
    1,087
    per essere + chiaro ti faccio un esempio di testo

    PAGINA 1 -descr- Descrizione1 -/descr- Tutto il teso lungo diverse righe poi ....
    v90 PAGINA 2 -descr- Descrizione2 -/descr- ecc... ancora testo poi
    v90 PAGINA 3 -descr- Descrizione3 -/descr- ecc... tutte le volte che vuoi fino alla fine
    in una sola raccolta nel db.

  7. #7
    Wella quanta grazia.. bello quel codice.. ci dò un'occhio e ne faccio una classe grazie *pragma..
    :master: devo rivedere anche le tabelle..

    Grazie dei consigli.. se qualcuno ha qualcos'altro da dire..
    Questa volta, più che un voto.. è favoreggiamento.

  8. #8
    Utente di HTML.it L'avatar di neida
    Registrato dal
    Feb 2005
    Messaggi
    1,478
    Volendo si potrebbe anche utilizzare un codice più "leggero", evitando le espressioni regolari ad esempio...

    Per stampare a video il solo elenco di tutti gli articoli con il titolo e una piccola parte del testo, potresti farlo direttamente attraverso la query:

    codice:
    IF(LENGTH(testo) > 100,
    CONCAT(SUBSTRING(testo, 1, 100), '...'), testo) AS articolo_parziale
    in questo modo estrai i primi 100 caratteri, seguiti da tre puntini sospensivi, disponibili con l'alias "articolo_parziale", qualora il testo dell'articolo fosse superiore a quel numero di caratteri ovviamente.

    Per la paginazione del testo completo potresti utilizzare poi queste due righe di codice, facendo attenzione che quando andrai a memorizzare il contenuto dell'articolo inserirai un delimitatore per indicare la fine delle varie pagine. Ad esempio, metti il caso di avere un testo così:

    codice:
    testo di prova, esempio per stampa articolo su più pagine
    testo di prova, esempio per stampa articolo su più pagine
    testo di prova, esempio per stampa articolo su più pagine
    [new_pag]
    testo di prova, esempio per stampa articolo su più pagine
    testo di prova, esempio per stampa articolo su più pagine
    testo di prova, esempio per stampa articolo su più pagine
    [new_pag]
    testo di prova, esempio per stampa articolo su più pagine
    testo di prova, esempio per stampa articolo su più pagine
    testo di prova, esempio per stampa articolo su più pagine
    dove, [new_pag] indica proprio il separatore tra le varie pagine.
    Quindi, con un semplice explode andrai a mostrare il contenuto dell'intero articolo suddividendolo in varie pagine. In questo modo:

    Codice PHP:
    //$testo è la variabile per il campo TESTO dell'articolo
    $tot_pag explode('[new_pag]'$testo);

    //questa riga si commenta da sola...
    $page = (empty($_GET['pag']) || !is_numeric($_GET['pag'])) ? $_GET['pag']; 

    //qui stampi il contenuto dell'articolo una pagina per volta
    echo $tot_pag[$page -1];

    //qui invece hai il menu di navigazione delle pagine dell'articolo completo
    for($i 1$y count($tot_pag); $i <= $y$i++) {
      if(
    $i == $page) echo "[b]$i[/b] ";
      else echo 
    "<a href=\"?pag=$i\">$i</a> ";

    semplice no?

  9. #9
    E' tutto semplice.. l'importante è arrivare pensarlo..

    IF(LENGTH(testo) > 100,
    CONCAT(SUBSTRING(testo, 1, 100), '...'), testo) AS articolo_parziale <---questa è esperienza..

    Mitico
    Questa volta, più che un voto.. è favoreggiamento.

  10. #10
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Alcune cose

    1) Se non hai una tabella autori non ha senso nemmeno avere un campo autore sulla tabella articoli. Se è vero che l'autore sei sempre tu, inutile scriverlo su ogni riga. Se invece vuoi essere previdente e immaginare che un domani le tue fatiche vengano delegate ad altri, allora usa una tabella autori come suggerito da neida. Peraltro una modifica del genere può essere fatta anche in un secondo momento.

    2) Se hai intenzione di suddividere gli articoli in pagine, l'idea della tabella apposita è ottima, contrariamente a quello che ti stanno dicendo

    3) La tabella ART_CAT ha senso se un articolo può far parte di più categorie. In caso contrario basta un campo categoria sulla tabella articoli, come suggerito da neida

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.