modificare il valore di un campo in un array

Ciao a tutti, questo è il mio primo post e spero di aver ben assimilato le regole del forum.
Allora premetto che non sono un phper ma un abaper...:mavieni: ma sto cercando di modificare un script php la gestione dei abonamenti a un sito. In pratica gli abbonamenti sono annuali ma vorrei inserirne uno che finisca sempre e comunque il 31/12 dell'anno di sottoscrizione.
i parametri dell'abbonamento sono contenuti una tabella ed li estraggo in array il prezzo viene calcolato con una funzione che fa cosi
Codice:
     function get_pricingarray() {

         $levels = $this->get_levels();

         $prices = array();

         foreach( (array) $levels as $key => $level ) {

            if($level->sub_type == 'indefinite') {
               // This will be the last item in any list
               $prices[] = array( 'period' => $level->level_period, 'amount' => $level->level_price, 'type' => $level->sub_type, 'unit' => $level->level_period_unit);
               break;
            } elseif($level->sub_type == 'serial') {
               // This will be the last item in any list
               $prices[] = array( 'period' => $level->level_period, 'amount' => $level->level_price, 'type' => $level->sub_type, 'unit' => $level->level_period_unit);
               break;
            } else {
               $prices[] = array( 'period' => $level->level_period, 'amount' => $level->level_price, 'type' => $level->sub_type, 'unit' => $level->level_period_unit);
            }
         }

         if(!empty($prices)) {
            return $prices;
         } else {
            return false;
         }

      }
la durata del contratto è il level_period per tutti i casi è fissato giustamente à 365 (giorni).
Non potendo inserire in tabella una durata variabile (il numero di giorni dal momento della sottoscrizione alla fine dell'anno), mi sono detto che potrei modificare runtime il valore nel array per avere la durata giusta.
1) posso farlo ? se si mi potete guidare nella sintassi che il mio php è parecchio arruginito...
2) esiste une funzione che mi permetta di calcolare il numero di giorni a la fine dell'anno e come usarla in questo caso?
spero di non aver esagerato con le domande e sopratutto di essere stato chiaro....grazie in anticipo.
per chi volesse potrei anche mandare lo script completo che magari ad altri potrebbe servire...
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
149
63
PR
www.borgo-italia.it
ciao
potresti provare a usare che ritorna i giorni passati dall'inizio dell'anno
PHP:
<?php
$gg=365;
if(date('L')==1){
	$gg=366;
	echo "l'anno è bisestile: $gg<br>";
}else{
	echo "l'anno non è bisestile: $gg<br>";
}
$passati=date('z');
echo "passati: ".$passati."<br>";
echo "rimangono: ".($gg-$passati)."<br>";
?>

p.s.
usa il tag php, non code, per il php
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
A me era venua in mente una funzioncina così

PHP:
function quanto_manca() {

    $ultimo_dell_anno = date('Y') . "-12-31";

    $query = "SELECT DATEDIFF('$ultimo_dell_anno',CURDATE()) as giorni";
    $res = mysql_query($query);

    $row = mysql_fetch_assoc($res);

    return $row['giorni'];
}

echo "Mancano " . quanto_manca() . " giorni alla fine dell'anno";
 
grazie ad entrambi

un ultima domandina come riesco a modificare nel array il valore del level_period con il valore calcolato ('period' => $level->level_period)?
non so se come sintassi possà andare bene nello script...
...
} else {
--->calcolo il lavore $giorni
$level = $giorni;
$prices[] = array( 'period' => $level->level_period, 'amount' => $level->level_price, 'type' => $level->sub_type, 'unit' => $level->level_period_unit);

può funzionare? scusatemi se non provo ma sono col cell tornando a casa...se il concetto è corretto appena arrivato provo!
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Se la inserisci nella stessa classe di get_pricingarray()


PHP:
$giorni = $this->quanto_manca();

dovrebbe funzionare
 
ne approfito un pò...

ragazzi già che ci sono approfitto della vostra gentilezza, mi è si è detto che mi sono complicato la vita che avrei potuto semplicemente create un evento recursivo (frequenza giornaliera) in phpmyadmin per cambiare il numero di giorni direttamente nella tabella. Trovo interessante come soluzione ( avendo tutti i dritti su phpmyadmin).
Che ne dite? mi sto documentando per capire eventualmente come sarebbe la sintassi per la creazione di un evento...
 
grazie

ho iniziato in effetti a vedere la documentazione e leggendo mi sono imbatutto sul cron ed avendo cpanel, ho creato un cron che richiama la un php con la funzione di update. adesso devo testare la cosa per vedere se va...
Comunque mi studio la sintassi degli eventi in phpmyadmin che mi possono sempre servire se mi dovesse imbattere di nuovo in un script php del genere...
Inconvenienti di cron??? a me sembra assai flessibile.
 
euuuhh...

ancora io, la sintassi di php è ancora assai ostica, vorrei fare una piccola modifica alla function ed eseguire all'interno l'update di un valore dentro la tabella con il $row['giorni'].
in pratica se faccio
$var = quanto_manca();
$update = mysql_query("UPDATE wp_m_subscriptions_levels SET level_period=$var WHERE level_id='4'");
va tutto liscio , ma vorrei effettuare l'update direttamente dentro la funzione ( vorrei richiamare la function nel cron).
non riesco a modificare la sintassi...
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
149
63
PR
www.borgo-italia.it
ciao
il sistema migliore per vedere dove sbagli, anche perchè lo script sembrerebbe sintatticamente corretto, è dividere la query e mettere dei var_dump
PHP:
<?php
$ultimo_dell_anno = date('Y') . "-11-31";
var_dump($ultimo_dell_anno);
$q="UPDATE wp_m_subscriptions_levels SET level_period = DATEDIFF('$ultimo_dell_anno',CURDATE()) WHERE level_id='4'"
var_dump($q);
$update = mysql_query($q);
?>
e verificare cosa riportano, cioe quello che vuoi tu
soprattutto il secondo che dovrebbe riportarti (metto dei numeri a caso)
string(76) "UPDATE wp_m_subscriptions_levels SET level_period = '155' WHERE level_id='4'"
anche se (forse e dico forse) l'inghippo potrebbe essere negli apici
PHP:
<?php
$q="UPDATE wp_m_subscriptions_levels SET level_period = 'DATEDIFF($ultimo_dell_anno,CURDATE())' WHERE level_id='4'"
?>
tra l'altro se i valori sono numeri interi (come valore e come tipo del campo) gli apici non servirebbero
 
interpetrare il risultato

seguendo il tuo consiglio ho modificato il codice cosi
Codice:
  $ultimo_dell_anno = date('Y') . "-11-31";
    var_dump($ultimo_dell_anno);
    $update = mysql_query("UPDATE wp_m_subscriptions_levels
                          SET level_period=DATEDIFF($ultimo_dell_anno,CURDATE())
                          WHERE level_id=4");
  var_dump($update);
$esito = mysql_query($update);
ottenendo questo:
string(10) "2012-11-31" bool(true)
che se capisco bene, il valore di ultimo_giorno è corretto la query est true...ma update con NULL
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
149
63
PR
www.borgo-italia.it
ciao
per quello che ti avevo detto di dividere la query
ti da bool(true) perchè effettua la query, ma mettendoti il campo vuoto
mettendo
PHP:
$q="UPDATE wp_m_subscriptions_levels SET level_period = DATEDIFF('$ultimo_dell_anno',CURDATE()) WHERE level_id='4'" 
var_dump($q);
se il var dump ti restituisce
string(73) "UPDATE wp_m_subscriptions_levels SET level_period = '' WHERE level_id='4'"
ti accorgi che l'errore potrebbe essere in DATEDIFF('$ultimo_dell_anno',CURDATE())
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
149
63
PR
www.borgo-italia.it
ciao
ohoops, visto il possibile errore:
30 di conta novembre con april giugno e settembre, di 28 cenè uno TUTTI gli altri ne han 31

l'ultimo dell'anno è
$ultimo_dell_anno = date('Y') . "-12-31";
 
si si

questo era voluto...dato che avevo il dato di dicembre in tabella.. :)
cerco di semplicare, se io volessi mettere il risultato di diffdate dentro una variabile,
la sintassi dovrebbere essere
$var = DATEDIFF($ultimo_dell_anno,CURDATE());?
ho questo errore di sintassi: Call to undefined function datediff() ho davvero bisogno di riprendere la sintassi dalle fondamenta...:(
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
149
63
PR
www.borgo-italia.it
ciao
ti da quell'errore perchè DATEDIFF non è una funzione nativa di php quindi cerca un qualcosa tipo dentro il tuo script
PHP:
function DATEDIF(){
//............
}
non trovandola ti da errore
prova una cosa del genere
PHP:
<?php
$ultimo_dell_anno = date("Y")."-12-31";
$oggi = date("Y-m-d");
$intervallo=date_diff($ultimo_dell_anno,$oggi);//devi avere PHP 5 >= 5.3.0
//e verifichi
var_dump($intervallo);
?>
 
Discussioni simili
Autore Titolo Forum Risposte Data
P php jquery ajax per modificare valore in un databe Ajax 1
M Php+MySql: Estrarre dati da tabella e consentire all'utente di modificare un valore 'in linea' PHP 6
S ricavare valore get e modificare css PHP 3
Shyson Modificare codice e creare link PHP 0
J Modificare panorami 360 ps 2020 Photoshop 0
napuleone modificare il contenitore di un div Javascript 2
napuleone modificare il contenitore di un div Javascript 1
D modificare questo codice per inserimento in text e non in tabella jQuery 1
C modificare sito in locale con dreamWeaver HTML e CSS 3
T Modificare ruolo utenti in fase di registrazione E-Commerce 0
M modificare un file .XML da database Sql PHP 13
S Modificare intestazione documento pdf con LO Draw Linux e Software 0
felino Radio button e Bootstrap: modificare il colore di default! HTML e CSS 1
Shyson Modificare funzione php PHP 15
W Modificare il Type di un Input box in javascript ovunque si trovi Javascript 0
F Modificare report di etichette di access con vba MS Access 0
D [PHP] Tabella: modificare direttamente i valori PHP 6
P [Woocommerce] Modificare il Bottone Checkout di Woocommerce in base alla categoria di prodotto E-Commerce 10
Q impossibile modificare un file ....... C/C++ 2
C [HTML] modificare la scritta della copyright HTML e CSS 2
G [PHP] MODIFICARE DATI TABELLA CONTESTUALMENTE PHP 6
Y [PHP] [HTML] Modificare i quadranti PHP 1
A [PHP] Modificare campo database in base alla scelta dell'utente PHP 2
W Non riesco più a modificare i dati di una tabella da phpmyadmin MySQL 0
V [WordPress] Come modificare link in tasto menu css WordPress 21
Y Modificare script php PHP 5
G Fullcalendar: modificare colore testo, backgroup e bordi per tutti gli eventi jQuery 3
paloppa Bootstrap.min.css modificare il file HTML e CSS 6
Merlina3377 [PHP] modificare file su form immagine thump PHP 1
G [HTML] Modificare ordine dei div in mobile responsive HTML e CSS 5
pfranco [PHP] Modificare pagina web online PHP 9
Shyson Modificare codice jQuery 0
A [Javascript] modificare il contenuto della barra indirizzi di un browser Javascript 1
asevenx modificare lista elementi togliendo l'elemento selezionato jQuery 1
Kolop "Modificare HTML" HTML e CSS 13
K [ASP.Net] Utilizzare e modificare dati linq ASP.NET 0
G Modificare navbar in base allo scroll jQuery 6
R [Photoshop] Modificare luminosità dei bordi in una foto Photoshop 2
A come modificare gli elementi di una lista e gli editText? Sviluppo app per Android 0
A modificare .jar con classe personalizzata Java 9
Mer556 BLOCCATO nel modificare un sito HTML e CSS 3
T modificare un template html5 HTML e CSS 6
B Modificare sorgente di pagina HTML e CSS 10
napuleone Modificare attributi di una classe con js Javascript 2
C modificare un rss con php PHP 2
L Modificare dati tabella mysql PHP 2
P modificare mappa sito Javascript 0
P modificare mappa sito Javascript 0
X come modificare paginazione del tutorial PHP 0
A modificare posizione plug in almeno credo WordPress 3

Discussioni simili