Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tipo tenho uma listagem mais com 5 post, mas quero excluir o id 4 no dia e data que coloquei automaticamente como faço?
Me ajudem por favor :)
Mas to falando em php não em programas. Não existe isso em php?
Mas to falando em php não em programas. Não existe isso em php?
Não.
Eu sugeri cron tendo em mente usar cron para agendar uma data para a execução de um script PHP que faria a exclusão do registro.
O máximo que você pode fazer apenas com PHP e MySQL é criar uma condição para o comando de exclusão. Mas isso só será ativado quando um usuário acessar a aplicação.
entendi vlw :)
Mais vc sabe algum codigo que tipo ele nao exclua mas ele nao liste depois que passar a data informada?
Mais vc sabe algum codigo que tipo ele nao exclua mas ele nao liste depois que passar a data informada?
Sim. É só usar a clausula [inline]WHERE[/inline] na sua consulta SQL. Tipo:
SELECT * FROM posts WHERE data_expiracao < CURDATE()
A função [inline]CURDATE()[/inline] retorna a data atual, se hoje retorna '2013-06-16', amanhã já será '2013-06-16' e assim por diante. A consulta acima retorna somente aqueles registros que tiverem o campo 'data_expiracao' menor (ou seja, uma data anterior) que a data atual (retornada pela função [inline]CURDATE()[/inline]).
Ref.: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html
Um vlw vou testar qualquer coisa volto aqui
Eu testei assim aqui mais tipo eu coloquei um com data 16/06/2013 e o outro 17/06/2013
O de 16/06/2013 nao era pra ter mostrado porque hoje e 16/06/2013 so era pra ter mostrado o de 17/06/2013
oque houver ver o codigo
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}
mysql_select_db($database_config, $config);
$query_list = "SELECT * FROM tabela WHERE data_expiracao < CURDATE()";
$list = mysql_query($query_list, $config) or die(mysql_error());
$row_list = mysql_fetch_assoc($list);
$totalRows_list = mysql_num_rows($list);
?>
<?php do { ?>
<?php echo $row_list['titulo']; ?><br />
<?php } while ($row_list = mysql_fetch_assoc($list)); ?>Observe que o sinal utilizado foi o [inline]<[/inline] (menor que). 16 não é menor que 16, mas igual. Se você quer que o dia atual também seja mostrado, troque pelo sinal [inline]<=[/inline] (menor que ou igual).
Mais eu nao to entendendo porque eu so quero uma listagem que espire no dia que eu coloque que ela nao mostre mais quando expirar me ajude ai por favor :)
MySQL tem sim, um Event Scheduler, que roda de tempos em tempos e permite que você efetue as operações desejadas no banco de dados.
http://dev.mysql.com/doc/refman/5.1/en/events-overview.html
MySQL Events are tasks that run according to a schedule. Therefore, we sometimes refer to them as scheduled events. When you create an event, you are creating a named database object containing one or more SQL statements to be executed at one or more regular intervals, beginning and ending at a specific date and time. Conceptually, this is similar to the idea of the Unix crontab (also known as a “cron job”) or the Windows Task Scheduler.
@braços
Você criar um campo na tabela por exemplo dt_expirar aí você faz um if mais ou menos assim:
$dt_expirar="aqui você coloca o resultado de um select na tabela"
if (($dt_expirar) <= date('Y-m-d')){
Aqui vc faz o delete.
}
Mais ou menos assim. Desculpas por algum erro, pois estou no celular.
como introduzo esse codigo aqui
mysql_select_db($database_config, $config);
$query_list = sprintf("SELECT * FROM tabela WHERE data_expiracao = %s", GetSQLValueString($colname_list, "text"));
$list = mysql_query($query_list, $config) or die(mysql_error());
$row_list = mysql_fetch_assoc($list);
$totalRows_list = mysql_num_rows($list);De repente o @Andrey Knupp Vital aparece com um daqueles Eventos do MySQL que pelo visto faz o mesmo que as CronJobs.
Não sei, estou só especulando
>
De repente o @Andrey Knupp Vital aparece com um daqueles Eventos do MySQL que pelo visto faz o mesmo que as CronJobs.
Não sei, estou só especulando
hehehe, foi o que sugeri no post #10, mas só mandei o link :)
CREATE EVENT apagar_antigos
ON SCHEDULE
EVERY 1 HOUR
COMMENT 'Apaga os posts antigos'
DO
DELETE FROM posts WHERE data_expiracao < NOW()
@braços
hehehe, foi o que sugeri no post #10, mas só mandei o link :)
Ops! :blush:
Passei batido
Ta lasca pra arrumar isso que é uma area que nunca fiz ai to perdido preciso de uma coisa bem esplicada pra poder entender pessoal me ajudem por favor :)
Infelizmente não há uma boa maneira de fazer isso... não há como colocar uma bomba-relógio em um determinado registro da tabela que o fará explodir quando sua hora chegar. O que é possível fazer para emular esse comportamento seria ou criar um tarefa (job) no cron.
Pesquise por "cron" ou "cronjob" no Google e poderá encontrar alguns artigos sobre como fazer.
cron é um software para sistemas tipo UNIX (Linux, FreeBSD, etc). Este software cron é equivalente ao Gerenciador de Tarefas do Windows.