Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555

    Relazione tra due tabelle e php

    Salve ragazzi,
    il problema che ho è il seguente. Ho realizzato una piccola area di amministrazione sul mio sito che serve per mettere in homepage degli articoli inseriti in database tramite un form. L'idea è questa. Ho due tabelle, una si chiama "articoli", l'altra si chiama "priorita". Nella prima vengono inseriti gli articoli che poi, tramite la seconda con cui vanno relazionati tramite un campo, vengono assegnati a diversi classi di priorità. che significa? Che nella tabella priorita ho un campo "flgas" che può avere valori da 1 a 5. Gli articoli che assumono valori da 1 a 4 sono obbligatori, cioè devono essere obbligatoriamente inseriti in home page. Il 5 non lo è è può essere cancellato. Vi posto le due tabelle per capirci. La prima, "articoli":

    Codice PHP:
    CREATE TABLE `articoli
    (
      `
    art_idint(5unsigned NOT NULL auto_increment,
    `
    titolovarchar(255NOT NULL,
    `
    sottotitolovarchar(255) default NULL,
    `
    testotext NOT NULL,
    `
    autorevarchar(50) default NULL,
    `
    datatimestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
    `
    nomevarchar(50NOT NULL default '',
    `
    sizevarchar(25NOT NULL default '',
    `
    typevarchar(25NOT NULL default '',
    `
    immaginelongblob NOT NULL,
    `
    pubint(1NOT NULL default '0',
    PRIMARY KEY  (`art_id`)

    La seconda, "priorita"

    Codice PHP:
    CREATE TABLE `priorita
    (
      `
    art_idint(5unsigned NOT NULL,
    `
    flagsenum('1','2','3','4','5'NOT NULL default '1',
    PRIMARY KEY  (`flags`),
    UNIQUE KEY (`art_id`)

    Ora, l'associazione e la pubblicazione è gestita da due diversi file php. Il primo si chiama "index.php". Le istruzioni sono commentate.

    Codice PHP:
    <? 
    include("config.php");
    mysql_connect($db_host$db_user$db_password$db_name) or die ("non riesco a connettermi");
    mysql_select_db("$db_name") or die ("Non riesco a selezionare il database");

    // inizializza l'array in cui memorizzare gli articoli che sono prioritari 
    $priority = array(); 

    // preleva dal db gli articoli prioritari... 
    $query "SELECT * FROM priorita ORDER BY flags"
    $result mysql_query($query
          or die(
    mysql_error()); 

    // ...e li inserisce nell'array 
    while($row mysql_fetch_array($result)) 

        
    $flag $row['flags']; 
        
    $priority[$flag] = $row['art_id']; 


    // seleziona gli ultimi 10 articoli e li memorizza in un array 
    $l_news = array(); 
    $query "SELECT * 
        FROM articoli Order by art_id
        DESC LIMIT 0,10"

    $result mysql_query($query
          or die(
    mysql_error()); 

    while(
    $row mysql_fetch_array($result)) 

        
    $l_news[] = array($row['art_id']); 


    // di seguito comincia a mandare in output codice html 

    ?> 
    <table cellpadding='2' cellspacing='0' border='1'> 
        <tr> 
        <? 
        
    // 12 sono gli articoli prioritari, i primi 4 sono obbligatori 
        // cominciamo a scrivere la riga delle intestazioni 
        
    for($i =1$i <= 5$i ++) 
        { 
            
    // oltre il quinto articolo diamo la possibilita' di cancellare la priorita' 
            
    if($i 4
            { 
                echo 
    "\t\t<th>[url='p_delete.php?id=$i']P $i[/url]</th>\n"
            } 
            else 
            { 
                echo 
    "\t\t<th>P $i</th>\n"
            } 
        } 
        
    ?> 
        </tr> 
        <? 
        
    // cicliamo l'array degli articoli e mandiamo in output cio' che server 
        
    foreach($l_news as $key2 => $key3
        { 
            echo 
    "\t<tr>\n"
            
    $data explode('-'$key3[1]); 
            for(
    $flag 1$flag <= 5$flag ++) 
            { 
                
    // se l'articolo risulta tra i prioritari gli mettiamo il grassetto e togliamo il link 
                
    if(isset($priority[$flag])) 
                { 
                    if(
    $key3[1] == $priority[$flag]) 
                    { 
                        echo 
    "\t\t<td>[b]$key3[1][/b]</td>\n"
                    } 
                    else 
                    { 
                        echo 
    "\t\t<td>[url='p_insert.php?id={$data[0]}&amp;flags=$flag']$key3[1][/url]</td>\n"
                    } 
                } 
                else 
                { 
                    echo 
    "\t\t<td>[url='p_insert.php?id={$data[0]}&amp;flags=$flag']$key3[1][/url]</td>\n"
                } 
            } 
            echo 
    "\t</tr>\n"
        } 
        
    ?> 
    </table>
    Il secondo si chiama p_insert.php

    Codice PHP:
    <? 
    // include i files coi parametri di configurazione per il db 

    include("config.php");
    mysql_connect($db_host$db_user$db_password$db_name) or die ("non riesco a connettermi");
    mysql_select_db("$db_name") or die ("Non riesco a selezionare il database");

    // la prima parte controlla che i dati passati allo script siano corretti 
         
    $flags = array(1,2,3,4,5); 

    $request_data = array( 
        
    'art_id'
        
    'flags'
        ); 
         
    if(isset(
    $_GET)) 

        foreach(
    $_GET as $key => $value
        { 
            if(!
    in_array($key$request_data)) 
            {    
                
    header("Location: [url]http://www.iso-consulenze.info[/url]"); 
            } 
        } 
         
        
    $id = (int) $_GET['art_id']; 
        
    $flag = (int) $_GET['flags']; 
         
        
    $db_table 'priorita'

        if(!
    is_numeric($id) || $id || !in_array($flag$flags)) 
        { 
            
    header("Location: [url]http://www.iso-consulenze.info[/url]"); 
        } 
         
        
    // la seconda parte inserisce o aggiorna l'articolo 

        
    $query "SELECT * FROM $db_table WHERE flags = '$flag'"
        
    $result mysql_query($query
            or die(
    mysql_error()); 
            
        if(
    mysql_num_rows($result) > 0
        { 
            
    $query "UPDATE $db_table SET art_id = '$id' WHERE flags = '$flag'"
            
    $result mysql_query($query
                or die(
    mysql_error()); 
        } 
        else 
        { 
            
    $query "INSERT INTO $db_table (art_id, flags) VALUES ('$id', '$flag')"
            
    $result mysql_query($query
                or die(
    mysql_error()); 
          } 


    header("Location: [url]http://www.iso-consulenze.info/[/url]$amministrazione/index.php?view_mod=priority"); 
    ?>
    C'è anche un terzo file, chiamato "p_delete.php", che cancella l'articolo non obbligatorio, cioè il 5. Ora, il problema è questo. Quando lancio il primo file php, ossia "index.php", il codice html dovrebbe stamparmi una piccola tabella con delle intestazioni (relativa agli articoli prioritari, cioè P1, P2, ecc) e sotto l'id dell'articolo, ossia il campo "art_id". Bene, questo non accade. Compare la tabella con le intestazioni, ma non pesca i valori "art_id". In pratica sembra che non avvenga l'associazione tra le due tabelle. Qualcuno capisce il perchè? Io non ci stò cavando piede!!!

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Nessuno che sappia darmi una mano?

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Ragazzi non stò riuscendo a risolvere il problema

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.