Scadenza di una news

neo996sps

Utente Attivo
31 Mag 2007
247
0
0
Trentino
Ciao a tutti,

come sempre chiedo le cose peggiori. Devo trovare un sistema per far scadere ad una data una news pubblicata su di un sito.

La mia tabella è composta dai campi data, titolo, testo_introduttivo, testo_completo, archivia. Ora, ho aggiunto un campo di tipo data chiamato scadenza.

Come faccio con php a creare l'automatismo per richiamare il file che mi archivia i contenuti in quella particolare data?

Questo è il codice che mi estrae l'elenco delle news:

PHP:
<?php
$count1 = 0;
$res1 = mysql_query( "SELECT * FROM news WHERE archivia = 0 ORDER BY id desc  ;");
$number=mysql_num_rows($res1);

if ($number == 0)
{
print("Al momento non sono presenti news all'interno del sito web del Comune di Cinte Tesino.");
}
else{
print("<table class='tabella'>");
print("<thead>");
print("<tr>");
print("<th class='cella_intestazione' width='20%'>DATA</th>");
print("<th class='cella_intestazione'>TITOLO</th>");

print("<th class='cella_intestazione' width='35%'>OPZIONI</th>");
print("</tr>");
print("</thead>");
print("<tbody>");
while ( $riga1 = mysql_fetch_array( $res1 ) ) {
	$dateform = explode( '-', $riga1["data"] );
	$datafin = $dateform[2].'.'.$dateform[1].'.'.$dateform[0];

print("<tr>");
print("<td class='cella_corpo_2'>".$datafin."</td>");
print("<td class='cella_corpo'>".$riga1["titolo"]."</td>");
print("<td class='cella_corpo_2'>
<input type=\"button\" id=\"m".$riga1["id"]."\" name=\"m".$riga1["id"]."\" value=\"Modifica\" title=\"Modifica\" onclick=\"javascript:document.location.href='./modifica_news.php?id=".$riga1["id"]."';\" />
<input type=\"button\" id=\"c".$riga1["id"]."\" name=\"c".$riga1["id"]."\" value=\"Archivia\" title=\"Archivia\" onclick=\"javascript:arc('".$riga1["id"]."');\" />
<input type=\"button\" id=\"c".$riga1["id"]."\" name=\"c".$riga1["id"]."\" value=\"Cancella\" title=\"Cancella\" onclick=\"javascript:canc('".$riga1["id"]."');\" />\n</td>");
print("</tr>");	 

	}
print("</tbody>");
print("</table>");

}

?>

io vorrei creare una cosa del genere: if ($riga1["data"] == $riga1["scadenza"]) {require (./archivia_news.php);}. Il problema è che non riesco a capire come farlo interagire dinamicamente con la pagina
 
Ultima modifica:
Intanto cambia il campo "scadenza" in BIGINT(20). La scadenza andrà salvata nello UNIX timestamp (quello restituito da time() e mktime()). Poi fai una cosa di questo tipo:
PHP:
<?php
$count1 = 0;
$res1 = mysql_query( "SELECT * FROM news WHERE archivia = 0 ORDER BY id desc  ;");
$number=mysql_num_rows($res1);

if ($number == 0)
{
print("Al momento non sono presenti news all'interno del sito web del Comune di Cinte Tesino.");
}
else{
print("<table class='tabella'>");
print("<thead>");
print("<tr>");
print("<th class='cella_intestazione' width='20%'>DATA</th>");
print("<th class='cella_intestazione'>TITOLO</th>");

print("<th class='cella_intestazione' width='35%'>OPZIONI</th>");
print("</tr>");
print("</thead>");
print("<tbody>");
while ( $riga1 = mysql_fetch_array( $res1 ) ) {
  if($riga1['scadenza'] < time())
  {
    require_once('archivia_news.php');
  }
  else
  {
    $dateform = explode( '-', $riga1["data"] );
    $datafin = $dateform[2].'.'.$dateform[1].'.'.$dateform[0];

print("<tr>");
print("<td class='cella_corpo_2'>".$datafin."</td>");
print("<td class='cella_corpo'>".$riga1["titolo"]."</td>");
print("<td class='cella_corpo_2'>
<input type=\"button\" id=\"m".$riga1["id"]."\" name=\"m".$riga1["id"]."\" value=\"Modifica\" title=\"Modifica\" onclick=\"javascript:document.location.href='./modifica_news.php?id=".$riga1["id"]."';\" />
<input type=\"button\" id=\"c".$riga1["id"]."\" name=\"c".$riga1["id"]."\" value=\"Archivia\" title=\"Archivia\" onclick=\"javascript:arc('".$riga1["id"]."');\" />
<input type=\"button\" id=\"c".$riga1["id"]."\" name=\"c".$riga1["id"]."\" value=\"Cancella\" title=\"Cancella\" onclick=\"javascript:canc('".$riga1["id"]."');\" />\n</td>");
print("</tr>");     
}
    }
print("</tbody>");
print("</table>");

}

?>
 
Forse ho trovato una soluzione:

PHP:
<?php
$res2 = mysql_query( "UPDATE news SET archivia = '1' WHERE data = scadenza;" );

?>

in questo modo riesco ad impostare il valore archivia = a 1 solo se data e scadenza sono uguali. Come posso però fare questo controllo parta automaticamente ogni giorno?
 
aspetta, forse mi sono perso qualcosa. Il campo scadenza è un campo di tipo data che viene inserito dall'utente.

Per applicare la tua modifica devo far convertire il valore immesso in scadenza in formato time UNIX ?
 
ho fatto la modifica che mi serviva:

PHP:
<form enctype="multipart/form-data" id="aggiungi_news" name="aggiungi_news" method="post" action="./salva_news.php">
<table class='tabella_3'>
<?php  
$giorno = (date("d"));
$mese =(date("m"));
$anno = (date("Y"));
?>
<tr>
<td class="cella_corpo"><label for="data">Data</label></td>
<td class="cella_corpo"><input type="text" id="data" name="data" size="15" tabindex="1" value="<?php print($giorno . "." . $mese . "." . $anno); ?>"/></td>
</tr>
<?php  
$giornos = (date("d"));
$meses =(date("m")+1);
$annos = (date("Y"));
?>
<tr>
<td class="cella_corpo"><label for="scadenza">Scadenza</label></td>
<td class="cella_corpo"><input type="text" id="scadenza" name="scadenza" size="15" tabindex="1" value="<?php print($giornos . "." . $meses . "." . $annos); ?>"/></td>
</tr>

<tr>
<td class="cella_corpo"><label for="titolo">Titolo</label></td>
<td class="cella_corpo"><input type="text" id="titolo" name="titolo" size="40" tabindex="2"/></td>
</tr>

<tr>
<td class="cella_corpo"><label for="testointroduttivo">Testo Introduttivo</label></td>
<td class="cella_corpo"><textarea id="testointroduttivo" name="testointroduttivo" cols="50" rows="5" tabindex="3"></textarea></td>
</tr>

<tr>
<td class="cella_corpo"><label for="testocompleto">Testo Completo</label></td>
<td class="cella_corpo"><textarea id="testocompleto" name="testocompleto" cols="50" rows="15" tabindex="4"></textarea></td>
</tr>
</table>
<br />
<input type="button" id="salva" name="salva" title="salva" value="Salva" tabindex="5" onClick="javascript:controllo();" />
</form>
</center>

Praticamente adesso c'è il campo data (che è quella di inserimento) e quella di scadenza in formato "umano". L'unico difetto è che con questo codice, la data di scadenza viene scritta "male". Per esempio inserendo la data odierna viene visualizzato nel campo data 26.02.2010, mentre in quella di scadenza viene visualizzato 26.3.2010. Come mai mi perde lo 0 nella data di scadenza?
 
ciao
io uso il formato timestamp unix (e molto più comodo) trasformando le date in in/out come mi servono
e nella tabella il campo data lo setto a int(20) o BIGINT(20) come detto da alex
per passare da una data scritta nel modo usuale gg mm aa a timestamp uso
strtotime
http://it.php.net/manual/en/function.strtotime.php

per il passaggio da timestamp a usuale
date
http://it.php.net/manual/en/function.date.php

se (es) immetti la data di scadenza manualmente tramite form/post
$data_U=$_POST['data_utente']; //dove risulterà es. 10 September 2000
trasformo prima di salvare nel db (previa verifica correttezza es 31 febbraio NO)
$data_TS=strtotime($data_u, "\n");//o simile

al contrario per visualizzare, dopo aver letto la data dal db....$rows=mysql_fetch...
dove $rows['data'] è in timestamp
$data_U=data(" d m Y", $rows['data']);

se vuoi eliminare la news alla data di scadenza
$data_TS_oggi=time();
if($data_TS_oggi==$rows['data']){ ...DELETE o UPDATE ecc...}
 
ciao
non avevo visto il tuo ultimo post.
per cercare di evitare che l'utente inserisca 31 02 2010 intanto per i gg i mm e l'anno non uso il campo text ma i classici sellect a discesa, uno per i gg (1,2,3,.....31) uno per i mesi (01, 02....12) e per l'anno (2010, 2011...)
poi verifico il mese e l'anno dai post, se uno ha scritto 31 11 correggo il 31 a 30, con l'anno verifico se bisesestile e correggo a 28 o a 29 la data di febbraio.
quindi se l'utente inserisce (quest'anno) 29 febbraio 2009 autmaticamente la data viene corretta in 28 febbraio 2009
 
Ciao a tutti,

torno a riaprire questo post perchè ho un problema piuttosto serio. Con l'ultima modifica allo script PHP per l'autoarchiviazione delle modifiche non riesco a far settare il campo archivia a 1 quando la data raggiunge la data di scadenza. Mi spiego meglio:

se ho una news che deve scadere oggi, dall'elenco questa sparisce, però controllando il dump della tabella ho il campo archivia sempre a 0.

Posto il codice dell'elenco news:

PHP:
<?php
$count1 = 0;
$res1 = mysql_query( "SELECT * FROM news WHERE archivia = 0 ORDER BY id desc  ;");
$number=mysql_num_rows($res1);

if ($number == 0)
{
print("Al momento non sono presenti news all'interno del sito web del Comune di Cinte Tesino.");
}
else{
print("<table class='tabella'>");
print("<thead>");
print("<tr>");
print("<th class='cella_intestazione' width='15%'>DATA</th>");
print("<th class='cella_intestazione' width='15%'>SCADENZA</th>");
print("<th class='cella_intestazione'>TITOLO</th>");

print("<th class='cella_intestazione' width='35%'>OPZIONI</th>");
print("</tr>");
print("</thead>");
print("<tbody>");
while ( $riga1 = mysql_fetch_array( $res1 ) ) {

  if($riga1["data"] == $riga1["scadenza"])
  {
    require_once('auto_archivia_news.php');
  }
  else
  {
    $dateform = explode( '-', $riga1["data"] );
    $datafin = $dateform[2].'.'.$dateform[1].'.'.$dateform[0];
    $dateform2 = explode( '-', $riga1["scadenza"] );
    $datafin2 = $dateform2[2].'.'.$dateform2[1].'.'.$dateform2[0];
print("<tr>");
print("<td class='cella_corpo_2'>".$datafin."</td>");
print("<td class='cella_corpo_2'>".$datafin2."</td>");
print("<td class='cella_corpo'>".$riga1["titolo"]."</td>");
print("<td class='cella_corpo_2'>
<input type=\"button\" id=\"m".$riga1["id"]."\" name=\"m".$riga1["id"]."\" value=\"Modifica\" title=\"Modifica\" onclick=\"javascript:document.location.href='./modifica_news.php?id=".$riga1["id"]."';\" />
<input type=\"button\" id=\"c".$riga1["id"]."\" name=\"c".$riga1["id"]."\" value=\"Archivia\" title=\"Archivia\" onclick=\"javascript:arc('".$riga1["id"]."');\" />
<input type=\"button\" id=\"c".$riga1["id"]."\" name=\"c".$riga1["id"]."\" value=\"Cancella\" title=\"Cancella\" onclick=\"javascript:canc('".$riga1["id"]."');\" />\n</td>");
print("</tr>");     
}
    }
print("</tbody>");
print("</table>");

}

?>

e questo è il file per l'archiviazione

PHP:
<?php
$res = mysql_query( "SELECT utenti_accesso.id FROM utenti_accesso, log_accessi WHERE utenti_accesso.id = log_accessi.id_utenti_accesso AND log_accessi.session_id = '".session_id()."';" );
if (mysql_num_rows($res) > 0) {
	if (isset($_GET["idx"])) {
		mysql_query( "UPDATE news SET archivia = '1' WHERE data = scadenza;" );
	}
} 
?>

Non riesco a capire dove sia l'errore. Qualcuno mi può aiutare?
 
ciao
ad una prima occhiata nella
mysql_query( "UPDATE news SET archivia = '1' WHERE data = scadenza;" );

intanto c'è un errore ;

mysql_query( "UPDATE news SET archivia = '1' WHERE data = scadenza" );

secondo: scadenza cosa è? da dove viene? secondo me se devecercare scadenza "dovrebbe" essere una variabile per cui

mysql_query( "UPDATE news SET archivia = '1' WHERE data = '$scadenza'" );
 
allora, scadenza è un valore che decide l'utente ed è contenuto nella tabella come campo di tipo date. Ho provato ad eliminare il ; dalla query (probabilmente mi è sfuggito durante le prove) però non c'è verso.
 
ciao
...scadenza è un valore che decide l'utente...
però da qualche parte sarà registrato, in un campo con la news?
quindi per fare il WHRE devi prelevarlo da qualche parte prima dell'uppata.
per esempio (se $_GET["idx"] è l'id della news prima di uppare dovresti

$query=mysql_query""SELECT data FROM notizie WHERE id=$_GET['idx']";
$sc=mysql_fetch_array($query);
$scadenza=$sc['data'];
a questo punto puoi uppare

mysql_query( "UPDATE news SET archivia = '1' WHERE data = '$scadenza'");


p.s.
guarda che ho scritto in php maccheronico

dimenticavo: cmpo di tipo date è come l'aids, se lo conosci lo eviti, ti consiglio fai tutto in timestamp e se vuoi la data di tipo "umano" la trasformi solo per visualizzarla
 
Ultima modifica:
niente di fatto. Il dump continua a portarmi il campo archivia a 0. Posto il codice modificato di auto_archivia_news:

PHP:
<?php
/*$res = mysql_query( "SELECT utenti_accesso.id FROM utenti_accesso, log_accessi WHERE utenti_accesso.id = log_accessi.id_utenti_accesso AND log_accessi.session_id = '".session_id()."';" );
if (mysql_num_rows($res) > 0) {*/
		//mysql_query( "UPDATE news SET archivia = '1' WHERE data = scadenza" );
	  $query=mysql_query("SELECT data FROM news WHERE id='".$_GET['idx']."'");
    $sc=(mysql_fetch_array($query));
    $scadenza=$sc['data'];
    mysql_query( "UPDATE news SET archivia = '1' WHERE data = '$scadenza'");
	
//} 
?>

inizio ad averne le tasche piene di questo problema....
 
ciao,
dividi le query (poi le rimetti come vuoi) e metti dei var_dump in modo da vedere come risultano

PHP:
<?php
//eccetera
    $qS="SELECT data FROM news WHERE id='".$_GET['idx']."'"; 
    var_dump($qS);
	$query=mysql_query($qS);//vedi cosa ti ristituiscono i var_dump
	$sc=(mysql_fetch_array($query));
    $scadenza=$sc['data'];
	var_dump($sc['data']);
	$qU="UPDATE news SET archivia = '1' WHERE data = '$scadenza'";
	var_dump($qU);
    $query=mysql_query($qU); 
//eccetera
?>
 
io non ci riesco. Questo è il dump generato.

string(30) "SELECT * FROM news WHERE id=''" NULL string(46) "UPDATE news SET archivia = '1' WHERE data = ''"


Chiedo se qualche anima pia mi può realizzare lo script perchè non so più dove battere il cranio. E' una settimana che salto come un pirla
 
ciao
un passo alla volta, allora

questo
string(30) "SELECT * FROM news WHERE id=''" NULL

è il risultato della query select dove si evidenzia che non trasmetti nulla via $_GET
secondo (?) come mai ti risulta SELECT * e non SELECT data ? o hai modificato la riga?

intanto verifica da dove invii il $_GET e/o perchè non vine trasmesso/ricevuto
se questa query non funzia, la seconda di up non può funzionare in quanto non hai preso la data di scadenza
 
Questo è il codice dove richiamo il file auto_archivia_news.php

PHP:
<?php
$count1 = 0;
$res1 = mysql_query( "SELECT * FROM news WHERE archivia = 0 ORDER BY id desc  ;");
$number=mysql_num_rows($res1);

if ($number == 0)
{
print("Al momento non sono presenti news all'interno del sito web del Comune di Cinte Tesino.");
}
else{
print("<table class='tabella'>");
print("<thead>");
print("<tr>");
print("<th class='cella_intestazione' width='15%'>DATA</th>");
print("<th class='cella_intestazione' width='15%'>SCADENZA</th>");
print("<th class='cella_intestazione'>TITOLO</th>");

print("<th class='cella_intestazione' width='35%'>OPZIONI</th>");
print("</tr>");
print("</thead>");
print("<tbody>");
while ( $riga1 = mysql_fetch_array( $res1 ) ) {

  if($riga1["scadenza"] == $riga1["data"])
  {
    require_once('auto_archivia_news.php');
  }
  else
  {
    $dateform = explode( '-', $riga1["data"] );
    $datafin = $dateform[2].'.'.$dateform[1].'.'.$dateform[0];
    $dateform2 = explode( '-', $riga1["scadenza"] );
    $datafin2 = $dateform2[2].'.'.$dateform2[1].'.'.$dateform2[0];
print("<tr>");
print("<td class='cella_corpo_2'>".$datafin."</td>");
print("<td class='cella_corpo_2'>".$datafin2."</td>");
print("<td class='cella_corpo'>".$riga1["titolo"]."</td>");
print("<td class='cella_corpo_2'>
<input type=\"button\" id=\"m".$riga1["id"]."\" name=\"m".$riga1["id"]."\" value=\"Modifica\" title=\"Modifica\" onclick=\"javascript:document.location.href='./modifica_news.php?id=".$riga1["id"]."';\" />
<input type=\"button\" id=\"c".$riga1["id"]."\" name=\"c".$riga1["id"]."\" value=\"Archivia\" title=\"Archivia\" onclick=\"javascript:arc('".$riga1["id"]."');\" />
<input type=\"button\" id=\"c".$riga1["id"]."\" name=\"c".$riga1["id"]."\" value=\"Cancella\" title=\"Cancella\" onclick=\"javascript:canc('".$riga1["id"]."');\" />\n</td>");
print("</tr>");     
}
    }
print("</tbody>");
print("</table>");

}

?>

Praticamente io stò cercando di far settare il campo archivia uguale a 1 quando il campo data è uguale al campo scadenza. Questo lo voglio fare per ogni record presente nella tabella news.
 
Ultima modifica:
ciao
c'è una cosa che non capisco

if($riga1["scadenza"] == $riga1["data"])
{
require_once('auto_archivia_news.php');
}

se il campo scadenza lo mette l'utente il campo data che cosa é? è la data di inserimento della news?

se è cosi credo che sia impossibile che l'if venga eseguito in quanto se io oggi 04-04-2010 inserisco una news e metto la scadenza tra un mese 04-05-2010 l'uguaglanza non sarà mai soddisfatta.
secondo me devi fare:
$data_oggi=date("d-m-Y");

if($riga1["scadenza"] == $data_oggi)
{
require_once('auto_archivia_news.php');
}
 
ecco come si presenta ora lo script per l'elenco delle news:

PHP:
<?php
$count1 = 0;
$res1 = mysql_query( "SELECT * FROM news WHERE archivia = 0 ORDER BY id desc  ;");
$number=mysql_num_rows($res1);

if ($number == 0)
{
print("Al momento non sono presenti news all'interno del sito web del Comune di Cinte Tesino.");
}
else{
print("<table class='tabella'>");
print("<thead>");
print("<tr>");
print("<th class='cella_intestazione' width='15%'>DATA</th>");
print("<th class='cella_intestazione' width='15%'>SCADENZA</th>");
print("<th class='cella_intestazione'>TITOLO</th>");

print("<th class='cella_intestazione' width='35%'>OPZIONI</th>");
print("</tr>");
print("</thead>");
print("<tbody>");
while ( $riga1 = mysql_fetch_array( $res1 ) ) {
$giorno = (date("d"));
$mese =(date("m"));
$anno = (date("Y"));
if($riga1["scadenza"] == "$giorno"."$mese"."$anno")
{
require_once('auto_archivia_news.php');
}
else {
    $dateform = explode( '-', $riga1["data"] );
    $datafin = $dateform[2].'.'.$dateform[1].'.'.$dateform[0];
    $dateform2 = explode( '-', $riga1["scadenza"] );
    $datafin2 = $dateform2[2].'.'.$dateform2[1].'.'.$dateform2[0];
print("<tr>");
print("<td class='cella_corpo_2'>".$datafin."</td>");
print("<td class='cella_corpo_2'>".$datafin2."</td>");
print("<td class='cella_corpo'>".$riga1["titolo"]."</td>");
print("<td class='cella_corpo_2'>
<input type=\"button\" id=\"m".$riga1["id"]."\" name=\"m".$riga1["id"]."\" value=\"Modifica\" title=\"Modifica\" onclick=\"javascript:document.location.href='./modifica_news.php?id=".$riga1["id"]."';\" />
<input type=\"button\" id=\"c".$riga1["id"]."\" name=\"c".$riga1["id"]."\" value=\"Archivia\" title=\"Archivia\" onclick=\"javascript:arc('".$riga1["id"]."');\" />
<input type=\"button\" id=\"c".$riga1["id"]."\" name=\"c".$riga1["id"]."\" value=\"Cancella\" title=\"Cancella\" onclick=\"javascript:canc('".$riga1["id"]."');\" />\n</td>");
print("</tr>");     
    }}
print("</tbody>");
print("</table>");

}

?>

però non so come scrivere il file auto_archivia_news.php
 
ciao, intanto non servono le parentesi

$giorno = date("d");
$mese =date("m");
$anno = date("Y");

poi nell'archivia vuoi mettere le news per cui scadenza==data con il campo =1?
se è così basta

PHP:
$qU="UPDATE news SET archivia = '1' WHERE scadenza = '".$giorno.$mese.$anno."'";
$query=mysql_query($qU);

dimenticavo:
per la data di oggi potrest fare (più pulito)
$oggi=date("d").date("m").date("Y");

oppure

$oggi=date("dmY");
 
Ultima modifica:

Discussioni simili