• User

    Problema con query di aggiornamento articoli in home page

    Salve ragazzi,
    il problema che vi posto è il seguente. Ho un sito con una struttura amministrativa che mi permette di inserire delle news (o articoli) in home page. Con gli script in php riesco anche a decidere in che posizione della home page pubblicarli. Per capirci ecco il codice.

    [PHP]
    <?php
    function multi_array_search($search_value, $the_array)
    {
    if (is_array($the_array))
    {
    foreach ($the_array as $key => $value)
    {
    $result = multi_array_search($search_value, $value);
    if (is_array($result))
    {
    $return = $result;
    array_unshift($return, $key);
    return $return;
    }
    elseif ($result == true)
    {
    $return[] = $key;
    return $return;
    }
    }
    return false;
    }
    else
    {
    if ($search_value == $the_array)
    {
    return true;
    }
    else return false;
    }
    }

    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");

    $query = mysql_query("select *, date_format(data,'%d-%m-%Y %H:%i') AS 'dataora' from articoli where pub != '' order by art_id") or die(mysql_error());
    while ($row = mysql_fetch_assoc($query)){
    $array[] = $row;
    }
    ?>
    <?php $result = multi_array_search('1', $array); echo "<b><a href="page.php?id=".$array[$result[0]]['art_id']."">".$array[$result[0]]['titolo']."</a></b>";
    ?>
    [/PHP]

    Praticamente, in tabella, ho un campo "pub" che può assumere diversi valori numerici. In questo caso, mettendo il valore "1", mi viene pubblicato il titolo di quella determinata news che assume appunto il valore 1. Dove viene inserito questo valore? In un form, sempre in php, che ha al suo interno un pulsante "aggiorna" che esegue la seguente query:

    [PHP]
    <?php
    }
    else
    {
    if($_POST['ord'] == "") { $ord = 1; }
    else { $ord = $_POST['ord']; }
    include("config.php");
    mysql_connect($db_host,$db_user,$db_password,$db_name) or die ("errore nella connessione");
    mysql_select_db("$db_name") or die ("errore nella selezione del database");
    mysql_query("UPDATE articoli SET pub = '".$ord."' WHERE art_id = '".$_GET['id']."'") or die(mysql_error());
    header("Location: ".$_SERVER['PHP_SELF']);
    }
    ?>
    [/PHP]

    Il problema è questo. Per togliere una determinata news devo inserire il numero zero e poi clikkare su aggiorna. In tal modo viene eliminata la news che era presente in tale sezione. Soltanto che devo assolutamente sostituirla con un'altra, altrimenti mi escono fuori tuta una serie di warning che mi avvertono che in quella sezione mancano diversi campi. Ciò che vorrei è evitare questa operazione. Ossia, inserendo lo zero, vorrei che quella detemrinata sezione della home page (che poi è riconducibile ad una struttura con diversi div per gestirne l'impaginazione di testi, titolo, ecc..) non venisse mostrata, in qualche modo sparisca dalla pagina, venga nascosta. Cioè, metto lo zero, viene tolta la news e viene nascosta la sezione relativa. Come posso fare?


  • User

    Aggiungo che potete notare che viene inserito un valore numerico associato alla variabile $pub.
    con la prima funzione php che ho postato nel messaggio precedente, ad ogni valore $pub corrisponde un numero che a sua volta è associato ad una singola sezione della home page (per sezione intendo una tabella con div ecc dove sta un singolo articolo) con lo sript:

    [PHP]
    $result = multi_array_search('1', $array)
    [/PHP]

    Cioè il numero 1 corrisponde ad esempio alla prima tabella in alto sulla home page. Il 4, ad esempio, a quella più in basso. Solo che se al momento della scelta del numero nel form metto lo zero, nella sezione dove prima c'era la news (supponete la prima, cioè quella con valore 1) viene cancellato l'articolo e mi rimane una serie di warning proprio perchè nella sezione 1 abbiamo la riga di codice:

    [PHP]
    $result = multi_array_search('1', $array)
    [/PHP]

    Ecco parte del codice della home page:

    [PHP]
    <?php
    function multi_array_search($search_value, $the_array)
    {
    if (is_array($the_array))
    {
    foreach ($the_array as $key => $value)
    {
    $result = multi_array_search($search_value, $value);
    if (is_array($result))
    {
    $return = $result;
    array_unshift($return, $key);
    return $return;
    }
    elseif ($result == true)
    {
    $return[] = $key;
    return $return;
    }
    }
    return false;
    }
    else
    {
    if ($search_value == $the_array)
    {
    return true;
    }
    else return false;
    }
    }

    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");

    $query = mysql_query("select *, date_format(data,'%d-%m-%Y %H:%i') AS 'dataora' from articoli where pub != '' order by art_id") or die(mysql_error());
    while ($row = mysql_fetch_assoc($query)){
    $array[] = $row;
    }
    ?>

    <div id='contenutocentrale'>
    <div id='primanotizia' style="width:100%">
    <div id='categprima'><a href='http://localhost/archivionews.php'>Ultima notizia</a></div>
    <h1 id='titolocatprima'> <?php $result = multi_array_search('1', $array); echo "<b><a href="page.php?id=".$array[$result[0]]['art_id']."">".$array[$result[0]]['titolo']."</a></b>";
    ?></h1>
    <div id='autoreprimacat' align="right">di <?php $result = multi_array_search('1', $array); echo $array[$result[0]]['autore'];?></div>
    <h2 id='sottotitoloprimacat'> <?php $result = multi_array_search('1', $array); echo $array[$result[0]]['sottotitolo'];?></h2>
    <div id='primoarticolo' style='min-height: 146px; height: auto !important; height: 146px'>

    <div class='textimage'>
    <div class='img' style='width: 202px'>
    <img src="show.php?id=<?php $result = multi_array_search('1', $array); echo $array[$result[0]]['art_id']; ?>" width='200' height='134' alt='immagine articolo di prima pagina identificato dal numero 2002' title='immagine articolo di prima pagina' /></a>
    </div>
    </div>
    <?php
    $result = multi_array_search('1', $array);
    $swap = explode(" ", $array[$result[0]]['testo'], 91);
    foreach($swap as $key => $val) if($key < 90) echo $val." ";
    echo ".....<a href="page.php?id=".$array[$result[0]]['art_id']."">leggi l'articolo</a>";
    ?>
    <br>
    <br>
    <div id="pubblicatoil" align="right"><?php
    $result = multi_array_search('1', $array);
    echo "Pubblicato il ".substr($array[$result[0]]['dataora'],0,10)." alle ". substr($array[$result[0]]['dataora'],11,5);
    ?>
    </div>
    </div>
    </div>
    [/PHP]

    Questa è la prima sezione, quella contraddistinta dal numero 1 (cioè dal valore di $pub pari ad 1 appunto). Se ho una notizia e nel form inserisco il numero 1, ecco che appare in questa sezione. Ma se poi ci metto lo zero, ecco che tutte le righe di codice in php mi danno un errore perchè non trovano più il numero 1. Come posso fare affinchè ciò non accada? Ossia, se metto zero, come posso fare affinchè questa sezione non venga resa visibile in home page?


  • User

    ragazzi ci stò sbattendo la testa ma proprio non riesco a risolvere il problema!


  • User

    Allora,
    mi spiego meglio. La riga che ho scritto
    [PHP]
    $array[$result[1]]['titolo']
    [/PHP]

    si riferisce ala news che viene pubblicata in alto nella home page. Ma il discorso del numero ha anche un altro aspetto. Il file che contiente il form che mi permette di scegliere a quale news associare un determinato numero, una volta lanciato, mi apre una tabella con l'id ed il titolo di tutte le news presenti nel database. Inoltre ho un campo nel quale inserire appunto il numero. Se inserisco il numero 1 nella casella relativa alla news con, per esempio, id 20, questa news viene poi pubblicata nelal sezione che riporta la riga di codice

    [PHP]
    $array[$result[1]]['titolo']
    [/PHP]

    Se devo ad esempio cancellare la news con id 20, pubblicata prima, cancello il numero 1 nella casella del form e ci metto lo zero. Aggiorno e la query mi leva automaticamente la news con id 20 dalla sezione con $result pari ad 1. Ma cosa accade? Che siccome rimane scritta la riga di codice

    codice PHP:
    $array[$result[1]]['titolo']

    è chiaro che non essendoci più in quella sezione (la prima tabella in alto della home page) un "titolo" associato al numero 1, mi da tutta la serie di warning che ho detto ad inizio post. Cioè non sa dove andare a pescare il titolo identificato dal numero 1. Dovrei cioè mettere il numero uno ad un'altra news, ad esempio quella con id 21 affinchè compaia la nuova notizia. Cioè il campo non deve restare vuoto perchè altirmenti manca la variabile $result associata al numero 1 (in questo caso il titolo). Io invece vorrei che tale problema non sussistesse. Ossia, se metto lo zero, invece che darmi tutti questi warning, non pubblichi nulla nella sezione identificata dal numero 1 (cioè da $result pari ad 1). Magari ora è molto più chiaro.


  • User

    Ragazzi,
    ma almeno ditemi se non mi sono spiegato bene o se il problema è complicato. Perlomeno una risposta...