creare sistema multi categorie

luigi777

Utente Attivo
14 Feb 2008
1.086
1
38
42
Massa, Italy
Salve, come posso realizzare un sistema con multi categorie in una mia tabella:

CREATE TABLE `articoli_categorie` (
`id` mediumint(8) unsigned auto_increment,
`titolo` varchar(255), ---> titolo della categoria
`testo` longtext, ---> descrizione della categoria
`data` varchar(100), ---> data di creazione
`active` tinyint(1) , ---> attiva o non attiva.
PRIMARY KEY (`id`));

Mi dite come posso fare?
 
Intendi dire fare in modo che ogni categoria possa contenere infinite sotto-categorie? Ho realizzato un sistema simile tempo fa. La mia tabella era strutturata in questo modo:
Codice:
CREATE TABLE  `test`.`categorie` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR( 255 ) NOT NULL ,
`description` TEXT NOT NULL ,
`parent` INT NOT NULL
) ENGINE = MYISAM ;
Nel campo parent inserisci l'ID della categoria "padre". Per le categorie principali semplicemente inserisci 0.

Poi, quando visualizzi le categorie nella pagina Web, in ogni categoria, oltre al suo contenuto, visualizza anche le categorie "figlio". Se nessuna categoria particolare è richiesta visualizza quelle che hanno il campo parent impostato a 0.
 
ciao e grazie mille per avermi risposto..
mi protesti fare un esempio di codice che almeno capisco come fare..

grazie e buona serata.
 
Ecco a te:
PHP:
<?php
/*
 * Effettuo la connessione al database con la libreria
 * PDO (PHP Data Objects) di PHP5.
 */
try {
    $db = new PDO('mysql:host=localhost;dbname=test', 'root');
}
/*
 * Gestisco eventuali errori dovuti alla connessione.
 */
catch (PDOException $e) {
    die(sprintf(
        'Impossibile connettersi al database: "%s".',
        $e->getMessage()
    ));
}

/*
 * Controllo che la categoria sia stata specificata.
 */
if (isset($category = $_GET['category'])) {
    /*
     * Controllo se la categoria esiste nel database.
     */
    $stm = $db->prepare('SELECT COUNT(*) FROM categories WHERE id = ?');
    $stm->execute(array($category));

    if ($stm->fetchColumn() == 0) {
        die(sprintf(
            'Non esiste una categoria con ID "%s".',
            $category
        ));
    }

    /*
     * Recupero i dati della categoria.
     */
    $stm = $db->prepare('SELECT * FROM categories WHERE id = ?');
    $stm->execute(array($category));

    $data = $stm->fetch(PDO::FETCH_ASSOC);

    /*
     * Recupero le sotto-categorie.
     */
    $stm = $db->prepare('SELECT * FROM categories WHERE parent = ?');
    $stm->execute(array($category));

    $sub_categories = $stm->fetchAll(PDO::FETCH_ASSOC);

    // ...
}
/*
 * Se nessuna categoria è stata specificata.
 */
else {
    /*
     * Recupero tutte le categorie.
     */
    $stm = $db->query('SELECT * FROM categories WHERE parent = 0');
    $categories = $stm->fetchAll();

    // ...
}
Il file è da completare. I primi puntini vanno sostituiti con la visualizzazione delle sotto-categorie e dei record presenti nella categoria, i secondi con la visualizzazione delle categorie principali.
 
si, ma non ci ho capito nulla......

perché io programmo ancora con mysql_query, mysql_connect..

mi protesti scrivere con questi.

grazie mille e scusa molto.
 
Se usi ancora la libreria mysql forse è davvero giunto il momento di passare a PDO. Ti consiglio di leggere qualche tutorial in merito, ad esempio la nostra guida. PDO è molto più performante di mysql, che è deprecata.

ciao, mi fai un esempio completo per testare se l'hosting dove ho il sito è attivo.

Perché ho provato ma da errori:
Codice:
<?php
# gestione delle eccezioni in fase di connessione con PDO

// collegamento al database
$col = 'mysql:host=62.xxxx;dbname=Sql4384xxx';

// blocco try per il lancio dell'istruzione
try {
  // connessione tramite creazione di un oggetto PDO
  $db = new PDO($col , 'Sqlxxx', 'd5xxx');
}
// blocco catch per la gestione delle eccezioni
catch(PDOException $e) {
  // notifica in caso di errorre
  echo 'Attenzione: '.$e->getMessage();
}
  # utilizzo del metodo query()
// lancio di una transazione con PDO
$db->beginTransaction();
// definizione della query 
$sql = 'SELECT FROM pagine ORDER BY id';  

// visualizzazione dei risultati
foreach($db->query($sql) as $row){  
  echo $row['titolo']. '<br>';	
  echo $row['data']. '<br>';  
  echo $row['active']. '<br>';  
}
?>

Mi da errore:
Warning: Invalid argument supplied for foreach() in /web/htdocs/xxxxx/home/pdo.php on line 24

Mi dici come mai?

Poi oltre a qui hai altri esempi.

grazie mille.
 
Onestamente non ne ho idea. Qualche versione fa PHP generava un E_DEPRECATED quando la si usava, ma poi l'errore è stato tolto perché causava troppi problemi, dato che la maggior parte degli script si appoggiavano alla libreria. In ogni caso è meglio smettere di usarla: i sorgenti sono confusi e scritti male, ed è poco sicura. Come se non bastasse non è nemmeno orientata agli oggetti.
 
Puoi passare tranquillamente a MySQLi o PDO, è probabile che l'idea degli sviluppatori sia quella di rendere le funzioni mysql deprecate in futuro.
 
L'importante è non usare MySQL. Io uso PDO perché, in questo modo, l'applicazione si può adattare a qualunque DBMS senza bisogno di cambiare i sorgenti. Come mai PDO ti sta così antipatico? :)

perché ciò la sfiga.

nel 2005 avevo iniziato e poi abbandonato perché non c'era ancora nessun hosting che supportava php5 e tutti mettevano il php4.
e mo nel 2011 mi devono levare mysql che palle.

Mi dici cosa cambia da mysql_connect , mysql_query

devo aggiungere solo una i?
 
comunque mi fai alcuni esempi come inserire/ modificare /cancellare

perché il sito che sto facendo è molto semplice e viene gestito da una sola persona anche se si ha la possibilità di aggiungere altre persone come fossero i collaboratori.

faccio solo INSERT, UPDATE, SELECT , DELETE.

grazie mille.
 
allora, mi ci rimetto , mi dite come posso far semplice due menu a tendina che uno scelga la prima categoria e poi con l'altra menu a tendina scelga la seconda ?

come posso fare?

comunque vedetevi i sorgenti di wordpress e il file wp-db.php dentro la cartella wp-includes.
usano ancora : mysql_connect

quindi anche io uso ancora come fanno loro... tanto io faccio per uso personale.

Mi dite come posso fare questo sistema?

grazie mille.
 

Discussioni simili