[PHP] Problema ciclo for

valvasori

Nuovo Utente
13 Ott 2016
13
1
3
55
Ciao a tutti.
Ho il seguente problema: devo inserire in un calendario una serie precisa di appuntamenti (facciamo 10 come esempio), ma vorrei che NON inserisse questi appuntamenti la domenica o nei giorni di festa o durante il periodo natalizio.
Ho fatto una prova facendo "saltare" al ciclo la domenica ed effettivamente non mi inserisce l'appuntamento, ma mi inserisce solo 9 appuntamenti invece di 10.
Questo lo script:

PHP:
for ($day = 0; $day < $num_ripetizione; $day++) // Inserisco le ore sul Planning
{
     $datalezione = date('Y-m-d', mktime(12,0,0,$mm, $gg, $aa) + $day * (86400*$ripetizione));
     $n_giorno = date('w',strtotime($datalezione));
     if($n_giorno != 0)
     {
           //Inserisce l'appuntamento nel calendario
     }
}
dove $num_ripetizione è il numero di ripetizioni e $ripetizione è la tipologia di ripetizione (giornaliera, settimanale ecc.).

Qualcuno può aiutarmi?
Grazie
 
Ultima modifica di un moderatore:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, utilizza un ciclo while
PHP:
$i = 0;
while ($i < 10) {
    echo $i . "<br/>";
    $i++;
}
incrementi il contatore solo se fai l'inseriemento
 

valvasori

Nuovo Utente
13 Ott 2016
13
1
3
55
@criric, purtroppo mi inserisce sempre 9 istanze anche col ciclo while.
Ho provato a modificare lo script in questo modo:

for ($day = 0; $day < $num_ripetizione; $day++) // Inserisco le ore sul Planning
{
$datalezione = date('Y-m-d', mktime(12,0,0,$mm, $gg, $aa) + $day * (86400*$ripetizione));
$n_giorno = date('w',strtotime($datalezione));
if($n_giorno == 0)
{
// Non fare niente
}
else
{
//Inserisce l'appuntamento nel calendario
}
}

ma non cambia niente, me ne inserisce sempre e solo 9.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
non vorrei dire una bestialità, ma mi sembra che l'errore sia qui 86400*$ripetizione
da dove satla fuori quella variabile $ripetizione?
per caso hai sbagliato a scrivere $ripetizione al posto di $num_ripetizione?
 

valvasori

Nuovo Utente
13 Ott 2016
13
1
3
55
@borgo italia, non è un errore. Come ho scritto nel post iniziale $ripetizione è la tipologia di ripetizione (giornaliera, settimanale ecc.).

L'inserimento nel DB avviene regolarmente sia secondo il numero di ripetizioni ($num_ripetizione) sia rispetto alla cadenza delle ripetizioni ($ripetizione).

Quello che non riesco a "imporgli" è di saltare l'inserimento se il giorno è di domenica (e poi vorrei farlo su tutti i giorni festivi), ma mantenendo il valore della $num_ripetizione invariato.

In questo momento, invece, non mi inserisce la data della domenica, ma mi scala il valore di $num_ripetizione e quindi alla fine mi ritrovo con un numero inferiore di record.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
prima mi ero dimenticato come era lo script che avevamo già visto
penso di aver trovato l'errore (var_dump questo sconosciuto)
prova il seguente
PHP:
<?php
$num_ripetizione=5;
$aa=2016;
$mm=11;
$gg=20;//il 20 novembre è domenica
$ripetizione=3;
for ($day = 0; $day < $num_ripetizione; $day++){
    $datalezione = mktime(12,0,0,$mm, $gg, $aa) + $day*86400*$ripetizione;
    $n_giorno = date('w',$datalezione);
    $n=$day+1;//solo per conteggio e visualizzazione
    var_dump($n_giorno);
    if($n_giorno !=0){//non domenica
        echo "$n) inserito giorno ".date('D Y-m-d',$datalezione)."<br>";
    }else{
        echo "$n) NON inserito  giorno ".date('D Y-m-d',$datalezione)."<br>";
    }
}
?>
uotput
string(1) "0" 1) NON inserito giorno Sun 2016-11-20
string(1) "3" 2) inserito giorno Wed 2016-11-23
string(1) "6" 3) inserito giorno Sat 2016-11-26
string(1) "2" 4) inserito giorno Tue 2016-11-29
string(1) "5" 5) inserito giorno Fri 2016-12-02
mi sono accorto che il var_dump mi dava sempre lunedì
l'errore è $n_giorno = date('w',strtotime($datalezione));
correggi in
$n_giorno = date('w',$datalezione);
$data_lezione è gia in formato timestamp
 

valvasori

Nuovo Utente
13 Ott 2016
13
1
3
55
Ho corretto $datalezione, ma non funziona lo stesso.
Vedi che anche nel tuo output

string(1) "0" 1) NON inserito giorno Sun 2016-11-20
string(1) "3" 2) inserito giorno Wed 2016-11-23
string(1) "6" 3) inserito giorno Sat 2016-11-26
string(1) "2" 4) inserito giorno Tue 2016-11-29
string(1) "5" 5) inserito giorno Fri 2016-12-02


ti inserisce solo 4 record.

Ho provato anche a dirgli che se $n_giorno == 0 non faccia nulla:

for ($day = 0; $day < $num_ripetizione; $day++)
{
$datalezione = date('Y-m-d', mktime(12,0,0,$mm, $gg, $aa) + $day * (86400*$ripetizione));
$n_giorno = date('w',$datalezione);
if($n_giorno == 0){}
else if($datalezione == date('Y')."-12-08"){}
else
{
//Inserisco nel database
}
}
}
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
a me con il while funziona
PHP:
$num_ripetizione = 5;
$aa = 2016;
$mm = 11;
$gg = 20; //il 20 novembre è domenica
$ripetizione = 3;
$i = $day = 0;
while ($i < $num_ripetizione) {
    $datalezione = mktime(12, 0, 0, $mm, $gg, $aa) + $day * 86400 * $ripetizione;
    $n_giorno = date('w', $datalezione);
    $n = $day + 1; //solo per conteggio e visualizzazione

    if ($n_giorno != 0) {//non domenica
        echo "$n) inserito giorno " . date('D Y-m-d', $datalezione) . "<br>";
        $i++;
    } else {
        echo "$n) NON inserito  giorno " . date('D Y-m-d', $datalezione) . "<br>";
    }
    $day++;
}
non ho capito però il senso di questi inserimenti, se salti un inserimento la ripetizione si raddoppia.
edit
avevo sbagliato ad incollare
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
per forza inserisce 4 record su 5 uno casca di domenica e, visto che c'è if ($n_giorno != 0){... la domenica non l'inserisce
ho messo a posta la data 20 novembre, se provi un'altra data li inserisce tutti (salvo che qualcuno non cada di domenica)
eventualmente si può fare in modo che se una lezione cade di domenica spostare la data della lezione o al lunedì successivo (se non già esistente) o in coda alle altre

o usi lo script di criric che funzia
 
Ultima modifica:

valvasori

Nuovo Utente
13 Ott 2016
13
1
3
55
Allora, con il ciclo while effettivamente funziona, ma facendo una modifica a quanto postato in precedenza da @criric :

PHP:
$num_ripetizione = 10;
$aa = 2016;
$mm = 11;
$gg = 18; //il 18 novembre è venerdì
$ripetizione = 1; //ripetizione giornaliera
$i = $day = 0;
while ($i < $num_ripetizione) {
    $datalezione = mktime(12, 0, 0, $mm, $gg, $aa) + $day * 86400 * $ripetizione;
    $n_giorno = date('w', $datalezione);
    $n = $day + 1; //solo per conteggio e visualizzazione

    if ($n_giorno == 0) {//non domenica
        echo "$n) NON inserito  giorno " . date('D Y-m-d', $datalezione) . "<br>";
    } else {
        echo "$n) inserito giorno " . date('D Y-m-d', $datalezione) . "<br>";
        $i++;
    }$i++;
    $day++;
}

invece di darmi 10 record inseriti e 1 NON inserito, me ne da solo 5 inseriti e 1 NON inserito:

1) inserito giorno Fri 2016-11-18
2) inserito giorno Sat 2016-11-19
3) NON inserito giorno Sun 2016-11-20
4) inserito giorno Mon 2016-11-21
5) inserito giorno Tue 2016-11-22
6) inserito giorno Wed 2016-11-23
 
Ultima modifica di un moderatore:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
riguarda il codice, lo avevo modificato un minuto dopo averlo postato. C'è un $i++; di troppo
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao @valvasori
scusa quando scrivi del codice usa gli appositi bccode (quartultima iconcina inserisci->codice ... scrivi -> php)
o prima e deopo PHP//**codice /PHP dove PHP e /PHP racchiusi tra le parentesi[ ]
 
  • Like
Reactions: criric
Discussioni simili
Autore Titolo Forum Risposte Data
MattiaBL [PHP] Problema ciclo while PHP 3
neo996sps PHP: problema con ciclo for PHP 1
S Problema ciclo php ed errore [object XMLHttpRequest] Ajax 0
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
D problema php mysql PHP 1
D problema php mysql PHP 1
Z Problema di sincronizzazione PAYPAL con PHP PHP 1
A Problema checkout carrello php PHP 2
G Problema caricamento tabelle MySql da PhP PHP 0
M Problema con php per calcolo costo percentuale PHP 7
O Problema Formmail in PHP su Aruba PHP 0
WebmasterFioriniAndrea Chat e php [problema] PHP 3
L [PHP] Problema con Telegram PHP 1
WebmasterFioriniAndrea [PHP] Problema che non mi fa vedere niente PHP 2
A [PHP] Problema query insert [RISOLTO] PHP 14
N [Apache] problema con estensione php Apache 0
C [PHP] Problema con download file PHP 0
M [PHP] Problema con preg_match PHP 1
gandalf1959 [PHP] problema con l'utilizzo di Header PHP 3
K [RISOLTO] Problema Griglia Php+Mysql PHP 13
M [PHP] Problema con query select PHP 2
L Problema jQuery validation AJAX (PHP 7) PHP 6
L Problema funzione mail() PHP PHP 3
S [PHP] Problema con istruzione "use" PHP 23
A Problema PHP PHP 1
T [php] problema creazione query select-where PHP 5
M [PHP] problema if PHP 3
L [PHP] Problema su codice o server PHP 5
T [PHP] problema maggiore e minore PHP 4
Cosina [PHP] fwrite problema con le parole accentate PHP 9
M [PHP] Problema search form PHP 3
F [PHP] Problema con number_format PHP 3
L [PHP] problema count messo in una funzione. PHP 1
P [PHP] Progettino CRUD di esercitazione. Problema su $_FILE. PHP 9
trattorino [PHP] problema entrata immagini insert PHP 1
C Apache Cordova problema con php Programmazione 1
trattorino problema raccapricciante php conteggio query PHP 4
T PHP+MYSQL: problema con quelle maledette lettere accentate... PHP 5
F [PHP] Problema con array multidimensionale PHP 4
F Problema con pagine login in PHP PHP 2
M [PHP] Problema script ricezione e invio posta... PHP 1
Kolop [RISOLTO][PHP] Problema Pagination PHP 2
C [PHP] Problema Invio Email Elseif PHP 2
A [PHP] Problema invio mail con funzione mail() PHP 3
gandalf1959 problema con la codifica caratteri accentati e speciali tra php e mysql PHP 3
L [PHP] Problema Script 'Not Found' PHP 4
webmachine [PHP][MYSQL] Problema con le SELECT PHP 5
alessandra86 [PHP] Popolamento database con form ricorsivi - problema array (foreach ) PHP 5
dvdscr [PHP] Problema malfunzionamento Wordpress WordPress 13
O [PHP] Problema Button in form PHP 1

Discussioni simili