[PHP] Dubbio controllo IF

miagy

Utente Attivo
2 Nov 2014
83
1
8
Buongiorno ragazzi,
avrei un problema con un controllo IF che funziona solo parzialmente.
Sostanzialmente ho creato un calendario, che funziona perfettamente, il cui obiettivo è quello di ricordare ai diversi utenti determinate cose. Fin qui, come ho già detto, tutto benissimo: il calendario si illumina in caso di giorno pieno e si svuota superato quel giorno.

Ultimamente, però, ho voluto ampliare questa funzionalità e ho cercato di creare uno script che potesse inviare anche un promemoria all'utente tramite email. Il codice funge solo a metà, nel senso che l'email viene inoltrata MA:

1) Continua anche nei giorni successivi
2) La invia praticamente a tutti.

Posto qui di seguito:

PHP:
      //RICHIAMO TABELLA//
      $sql = "SELECT * FROM appuntamenti";
      $result = mysql_query($sql) or die (mysql_error());
      if(mysql_num_rows($result) > 0)
      {
        while($fetch = mysql_fetch_array($result))
        {
          $id = stripslashes($fetch['id']);
          $titolo = stripslashes($fetch['titolo']);
          $testo = stripslashes($fetch['testo']);
          $autore = stripslashes($fetch['autore']);
          $str_data = $fetch['str_data'];

        // CONTROLLO SE E' GIA' STATA INVIATA EMAIL //

        $query = mysql_num_rows(mysql_query("SELECT * FROM Messaggi WHERE Mittente = 'Calendario' AND Destinatario = '".addslashes($Login)."' AND DATE_ADD(Spedito, INTERVAL 24 HOUR)  >= NOW()"));
        if($query == '0' && $data == $oggi && $_SESSION['Login'] == $autore)
      {
      // INVIO EMAIL //
       }
        }
            }

Io penso che il problema sia nell'IF finale, ma boh!
Devo forse invertire $autore con la login SESSION?
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
In questo caso "$data" , "$oggi", "$Login" non le vedo dichiarate, probabilmente le hai dimenticate....
Tornando al tuo codice, sappi che potresti risolvere il dilemma semplicemente effettuando una query un pò più giusta.... ossia... Ipotizza di avere 10000 record, così come hai scritto effettueresti 10000 query di controllo....
Sarebbe più semplice effettuare una query con subquery così eviti anche codice inutile...

Un banale esempio potrebbe essere questo, strutturando in modo differente il DB:
Codice:
CREATE TABLE appuntamenti (
  id int(11) NOT NULL AUTO_INCREMENT,
  titolo varchar(255) DEFAULT NULL,
  testo varchar(255) DEFAULT NULL,
  autore varchar(255) DEFAULT NULL,
  data_ varchar(255) DEFAULT NULL,
  PRIMARY KEY (id)
)
ENGINE = INNODB
----
CREATE TABLE messaggi (
  id int(11) NOT NULL AUTO_INCREMENT,
  ref_appuntamenti int(11) DEFAULT NULL,
  mittente varchar(255) DEFAULT NULL,
  destinatario varchar(255) DEFAULT NULL,
  spedito varchar(255) DEFAULT NULL,
  PRIMARY KEY (id)
)
ENGINE = INNODB
E la query in questo modo....
Codice:
SELECT
  appuntamenti.*
FROM appuntamenti
WHERE (SELECT
    messaggi.id
  FROM messaggi
  WHERE messaggi.ref_appuntamenti = appuntamenti.id) IS NULL
In questo modo estrai solo i record che devono essere spediti... In questo caso, quando invii una email devi effettuare l'insert nella tabella "messaggi".
Spero si capisca!
 

miagy

Utente Attivo
2 Nov 2014
83
1
8

Prima di tutto vorrei ringraziarti della risposta. Sì, effettivamente saltato di valorizzare, cosa a cui ho provveduto immediatamente:

PHP:
$data = strtotime(date($y."-".$m."-".$d));
$oggi = strtotime(date("Y-m-d"));

Per quanto riguarda il consiglio sulla tabella DB, attualmente è esattamente così (con alcuni nomi diversi, ma fa nulla).

L'unica cosa che non mi è chiara è questa:

PHP:
WHERE (SELECT
    messaggi.id
  FROM messaggi
  WHERE messaggi.ref_appuntamenti = appuntamenti.id) IS NULL

Mi spiego: attualmente il controllo lo faccio partire se nel corso delle ultime 24 ore non è partito un messaggio che, inviato a LOGIN, abbia come mittente calendario.
Con il SELECT inglobato dentro il WHERE non mi è chiara la funzionalità.

Devo ancora testarlo. Lo farò domani.
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Codice:
WHERE (SELECT
    messaggi.id
  FROM messaggi
  WHERE messaggi.ref_appuntamenti = appuntamenti.id) IS NULL
Cosa significa, che prende tutti i valori della tabella appuntamenti che non hanno l'invio della email memorizzato in messaggi....
Praticamente ti fa saltare la tua if...
 

miagy

Utente Attivo
2 Nov 2014
83
1
8
Codice:
WHERE (SELECT
    messaggi.id
  FROM messaggi
  WHERE messaggi.ref_appuntamenti = appuntamenti.id) IS NULL
Cosa significa, che prende tutti i valori della tabella appuntamenti che non hanno l'invio della email memorizzato in messaggi....
Praticamente ti fa saltare la tua if...

Perdonami, mi sono spiegato male io.
Sì sì, il senso lo avevo capito (eliminare la prima IF e check solo del LOGIN).

La cosa che non mi è chiara (e testando, effettivamente, non funziona) è come avviene il controllo.
Attualmente il controllo funziona prendendo come parametro di ricerca MITTENTE (Calendario) a DESTINATARIO (Login) e SPEDITO (nelle ultime 24 ore se $data è oggi).
Con la tua, non capisco il senso dell'ID e di ref_appuntamenti in int11 per effettuare l'INSERT dopo il secondo IF.

E' su questo che volevo avere spiegazioni :)
Scusa la mancata chiarezza del messaggio precedente,
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Con la tua, non capisco il senso dell'ID e di ref_appuntamenti in int11 per effettuare l'INSERT dopo il secondo IF.
Allora nella tabella appuntamenti inserisci tutti gli appuntamenti.... mentre nella tabella messaggi, memorizzi quali email hai inviato con "ref_appuntamenti" che altro non sarebbe l'id della tabella appuntamenti...
A questo punto, prendi solo gli appuntamenti che non hanno email inviate...
Naturalmente devi modificare la query secondo le tue esigenze.!
 

miagy

Utente Attivo
2 Nov 2014
83
1
8

Ah, giusto. E' una soluzione a cui non avevo minimamente pensato onestamente.
Allora, ho dovuto un po' riadattarlo per incompatibilità con il mio codice e mi ritrovo solo un ultimo nodo da sciogliere.
Spiego brevemente i passaggi:

- Ho creato una tabella a parte chiamata BakAppuntamenti (una sorta di archivio) il cui indice di invio email è "Spedito" in int11 (datestamp >y-m-d) (FUNZIONANTE!)
- Giunto il giorno stabilito, procedo con questo:

PHP:
$sql = "SELECT * FROM BakAppuntamenti WHERE Spedito = CURDATE()";
      $result = mysql_query($sql) or die (mysql_error());
      if(mysql_num_rows($result) > 0)
      {
        while($fetch = mysql_fetch_array($result))
        {

RICHIAMO VARIABILI

INSERT IN ESSAGGI
DELETE IN BAKAPPUNTAMENTI

}

}

Credo tuttavia di essere caduto nell'errore del datestamp. Come faccio a convertire lo Spedito nella data attuale? o provato anche con:

PHP:
WHERE DATE('Spedito') = CURDATE()

Ma nulla.
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
allora controlla dovrebbe essere WHERE DATE(Spedito) = CURDATE()... strano che non funzioni....
WHERE DATE(Spedito) = DATE(NOW())?
 

miagy

Utente Attivo
2 Nov 2014
83
1
8
allora controlla dovrebbe essere WHERE DATE(Spedito) = CURDATE()... strano che non funzioni....
WHERE DATE(Spedito) = DATE(NOW())?

No, neanche.
Ma infatti a me sembra troppo strano. Ho sempre usato il CURDATE ed è la prima volta che mi crea un problema simile. Ho provato con il NOW (anche se il mio campo dovrebbe tener conto solo del Y-m-d) e niente.
Se seleziono solo i campi dove "Inviato" è 0, mi stampa tutto. Se seleziono solo quelli con Spedito, neanche uno.

Veramente non so dove possa essere l'errore.
Sto veramente sbroccando.
 

miagy

Utente Attivo
2 Nov 2014
83
1
8
Risolto con:

Codice:
SELECT * FROM BakCalendario WHERE DATE(FROM_UNIXTIME(Spedito)) = CURDATE()

A volte riaprire i libri serve :D
 
Discussioni simili
Autore Titolo Forum Risposte Data
paloppa [PHP] Dubbio print variabile PHP 27
paloppa [PHP] Dubbio valore variabile PHP 16
paloppa [PHP] Invio mail da form dubbio PHP 17
asevenx [PHP] Dubbio teorico sui metodi e costruttore OOP PHP 1
otto9due [PHP] Dubbio esistenzaile: Regex email e stampa valori trovati.. PHP 5
D Dubbio per creare un sito in php PHP 9
neo996sps Dubbio su PHP e scrittura query PHP 2
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3
E Php aggiornamento tabella PHP 9
G phpmailer e php 8.1 con estensione mysqli PHP 6
M Invio dati database via email php PHP 0
K [php] Problema con inner join PHP 4
K [php]form invio dati PHP 0
P Codifica caratteri speciali mysql php PHP 0
K [PHP] Problema con variabili concatenate. PHP 1
E Stampante termica escpos-php PHP 6
JeiMax Modifica codice php personalizzato PHP 2
G Come modificare un pdf in php PHP 1
U Link a doppio file PHP PHP 0
E PHP & jQuery PHP 8
N Passare array da php a javascript PHP 5
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Php e fatturazione elettronica PHP 0
P lanciare script asp (o php) da jquery Javascript 1
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
P Data scraping in PHP non funziona PHP 4
C Calcoli matematici in php PHP 5
F Scrivere dei dati in word con php PHP 0
D PHP leggere cartella di Windows PHP 1
I dominio aruba versione php server linux Domini 3
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1
S PHP e Mysqli PHP 0
Y Stampare da php su un foglio A6 attraverso una stampante esterna PHP 1
M Visulizzare immagine con php PHP 8

Discussioni simili