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!!!