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_id` int(5) unsigned NOT NULL auto_increment,
`titolo` varchar(255) NOT NULL,
`sottotitolo` varchar(255) default NULL,
`testo` text NOT NULL,
`autore` varchar(50) default NULL,
`data` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`nome` varchar(50) NOT NULL default '',
`size` varchar(25) NOT NULL default '',
`type` varchar(25) NOT NULL default '',
`immagine` longblob NOT NULL,
`pub` int(1) NOT NULL default '0',
PRIMARY KEY (`art_id`)
)
La seconda, "priorita"
Codice PHP:
CREATE TABLE `priorita`
(
`art_id` int(5) unsigned NOT NULL,
`flags` enum('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]}&flags=$flag']$key3[1][/url]</td>\n";
}
}
else
{
echo "\t\t<td>[url='p_insert.php?id={$data[0]}&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 < 1 || !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!!!