UPDATE senza parametro

luigi777

Utente Attivo
14 Feb 2008
1.086
1
38
43
Massa, Italy
Salve come posso fare una query senza passargli il parametro GET o POST.?

Drovei mettere a tutti send=0 agli utenti scrtti alla newsletter.

questo e il codice che usavo con il parametro $row["email"].

PHP:
<?php
require_once(dirname(__FILE__) . '/inc.php');
require_once(dirname(__FILE__) . '/admin_mod.php');
$page = new Page;
$page->setTitle('Reset Newsletter');
$page->startBody();
$result =$db->query('SELECT * from  utenti_newsletter')or die($db->error);

while($row = $result->fetch_array())
{
			$query = $db->query("UPDATE utenti_newsletter SET send=0 WHERE `email`='".$row['email']."'") or die($db->error); 
			$msg = "fatto";
}

$page->endBody();
echo $page->render('layout/template.php');
?>

vi ringrazio molto se avete la soluzione.

buona giornata.
 
ciao se vi interessa questa e la tabella:

PHP:
   CREATE TABLE `utenti_newsletter` (
  `id` bigint(8) unsigned auto_increment,
  `fullname` varchar(255),
  `email` varchar(255) UNIQUE,
  `browser` varchar(255),
  `ip` varchar(255),
  `activationHash` varchar(255) ,
  `send` int  default '0',
  `active` int ,
  `data` datetime,
  `_update` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`)) ENGINE = MyISAM;

protei whillerale andanto a prendere il campo data il più vecchio di 24h?
avete idee?

grazie mille.
 
ciao
non ho capito bene:
il campo send è a 0 di default (al momento del primo INSERT dell'indirizzo email)
quando invii il campo send, per gli indirizzi inviati, cambia valore (immagino 1)
vorresti fare uno scrip che se passate 24 ore dall'invio risetti send a 0
è così?
intanto una cosa il campo
_update TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
si aggiorna al momento dell'invio? o no se no è per quello che hai aggiunto il campo data_send (parlando di ore farei timestamp anche quello)?
 
ciao
non ho capito bene:
il campo send è a 0 di default (al momento del primo INSERT dell'indirizzo email)
quando invii il campo send, per gli indirizzi inviati, cambia valore (immagino 1)
vorresti fare uno scrip che se passate 24 ore dall'invio risetti send a 0
è così?
intanto una cosa il campo
_update TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
si aggiorna al momento dell'invio? o no se no è per quello che hai aggiunto il campo data_send (parlando di ore farei timestamp anche quello)?

si voglio fare come hai detto tu.

per l'_update avevo letto sul manuale che ogni modifica sia update/insert veniva aggiornata la tabella se non mi sbaglio.

quindi come devo fare?
per adesso ho aggiunto allo script quello che invia le email questa cosa:
PHP:
$query = $db->query("UPDATE utenti_newsletter SET send=1 , data_send=Now() WHERE `email`='".$row['email']."'") or die($db->error);

hai idee?

grazie mille e buona giornata.
 
ha scordavo quella cosa di _update mi serve solo per la tabella ed invece data e data_send li aggiorno io e poi per far la possibiltà di vedere con data quando è stata inserita l'email e la data_send quando è stato inviata la newsletter.

grazie mille.
 
ciao
si è giusto ad ogni invio aggiorni il record dell'utente. però io non userei now() ti riporta la data nel formato YYYY-MM-DD HH:MM:SS, per quello che userei il timestamp
ti do le indicazioni per il timestamp
PHP:
<?php
$query = $db->query("UPDATE utenti_newsletter SET send=1 , data_send=".time()." WHERE `email`='".$row['email']."'") or die($db->error);
?>
modificando i parametri del campo si intende.
poi per uppare tutti i record a cui hai inviato emeil piu di 24 ore fa
PHP:
<?php
$vecchie=time()-(24*60*60);//data attuale meno 24 ore
$query = $db->query("UPDATE utenti_newsletter SET send=0 WHERE data_send < $vecchie");
?>
potresti mettere queste righe subito dopo l'uppaggio dell'invio in modo che tutte le volte che invii le più vecchie si aggiornano, oppure farti uno script a parte che lanci ogni volta che vuoi.

dimenticavo
se vuoi essere più sicuro
PHP:
$query = $db->query("UPDATE utenti_newsletter SET send=0 WHERE data_send < $vecchie AND send=1");
 
ciao sono qui.
il sistema ha funzionato solo che devo sistemare una cosa. fare controllo per dire ad esempio "fatto", o visualizza gli elenci chi non ha fatto send=0
come si fa?

PHP:
 <?php
$vecchie=time()-(24*60*60);//data attuale meno 24 ore
$query = $db->query("UPDATE utenti_newsletter SET send=0 WHERE data_send < $vecchie AND send=1"");
?>

come posso fare?

grazie mille e buona serata.
 
Ultima modifica di un moderatore:
ciao
per vedere quali sono state inviate
PHP:
<?php
$inv=1;//per vedere le inviate
$result =$db->query('SELECT * from  utenti_newsletter WHERE send=$inv ORDER BY email')or die($db->error);
while($row = $result->fetch_array()){
	echo $row['email']." inviata il ".date("d/m/Y H:i:s", $row['data_send'])."<br />";
}
?>
 

Discussioni simili