4 aiuti per un'applicazione intranet

iuta74

Nuovo Utente
29 Apr 2014
24
0
0
Ciao ragazzi,

chiedo supporto per 4 problematiche che vi elenco per priorità.

1. PAGINAZIONE
Ho una pagina che nella parte in alto contiene i filtri per effettuare una ricerca (gruppo, fornitore, articolo) e nella parte bassa visualizza il risultato della ricerca. Alla pressione del tasto "Cerca", la MEDESIMA PAGINA si aggiorna e visualizza i risultati.
Ho creato 3 variabili: $where_gruppo, $where_fornitore e $where_articolo, una per ciascun filtro di ricerca, che si popolano con il metodo $_POST[]. Quanto l'utente lascia vuoti i campi di ricerca, assegno per ogni variabile rispettivamente "WHERE gruppo IS NOT NULL", " AND fornitore IS NOT NULL" e " AND articolo IS NOT NULL".
Infine, una variabile $where, composta dall'accodamento di tutte le variabili di cui sopra, è inserita nella mia SELECT.

Poniamo ad esempio, che l'utente compili solo il filtro relativo al gruppo. Ebbene, il risultato sarebbe di qualche centinaio di righe, pertanto ho utilizzato la paginazione. Purtroppo, nel momento in cui l'utente voglia passare ad una pagina diversa dalla prima, tutti i filtri di cui la $where è composta (se compilati), si perdono. Pertanto, nell'esempio di cui sopra, il filtro della mia SELECT effettuato sul gruppo, scompare e vale IS NOT NULL.

Come posso ovviare affinché tutte le pagine della paginazione "mantengano memoria" dei filtri della ricerca, visto che ad ogni refresh della pagina il metodo $_POST popola tutte le mie 3 $where?


2. IMPORTAZIONE .CSV
Nella mia applicazione, gli utenti che si leggano, hanno la possibilità di selezionare gli articoli (uno per volta) da una lunghissima lista di qualche migliaio di righe. Tuttavia vorrei offrire la possibilità a chi lo volesse d'importare da un file csv, un ordine.

Dunque, ecco come immagino questa parte.
1- Click sul link che mi chiede di selezionare il file .csv da importare (ho già creato un link dove scaricare il template molto banale, composto da due colonne "CODICE" e "QUANTITA"). Quindi, il mio utente, precedentemente si è scaricato il template csv, ha popolato le due colonne, l'ha salvato sul suo pc ed infine, utilizzando il famoso link, ha selezionato il .csv da lui salvato.

2- Anziché salvare brutalmente i dati contenuti nel .csv, ho bisogno di effettuare alcuni controlli. Prima devo verificare che questi codici NON siano già presenti nella tabella "ORDINI"... o meglio... devo verificare che NON siano stati ordinati nelle ultime due settimane dall'agente che sta effettuando l'importazione (nella tab. ORDINI è presente un campo che identifica l'ID dell'agente e la data di inserimento). Secondo, devo verificare che la quantità inserita per ciascun articolo, NON sia maggiore di 5pz.

3- Effettuate le verifiche del caso, devo riportare in una pagina (NON modificabile), l'anteprima dell'ordine da importare. Quindi faccio vedere per ogni riga il codice con relativa quantità. ATTENZIONE1: qualora ci fossero codici già ordinati nelle precedenti due settimane, lo devo segnalare all'utente (del tipo che nell'anteprima, la riga dedicata al codice incriminato riporterà una voce "codice non ordinabile fino a... data_inserimento+14gg). ATTENZIONE2: qualora ci fossero codici con quantità superiore a 5pz, riporterò 5pz. Qualora ci fossero caratteri diversi da un numero nella colonna qtà, riporterò zero pz.

4- Solo a questo punto (cioè dopo i controlli effettuati a sistema) l'utente potrà premere il pulsante "IMPORTA" e trovarsi magicamente l'ordine salvato.

3. AUTOCOMPLETAMENTO
Ho due campi (descrizione1 e descrizione2) in cui agevolo l'utente con l'autocompletamento. Il primo funziona tranquillamente, il secondo no.
Questo lo script per il primo autocompletamento (descrizione1)
Codice:
  <script>
	$(document).ready(function() {
	$("input#autocomplete_descrizione1").autocomplete({
		source: [<?php
		$stringa2="";
		$result2=mysql_query("SELECT DISTINCT(descrizione1) AS descrizione1 FROM articoli", $db);
		while($row=mysql_fetch_array($result2)){
			$stringa2.="\"".$row['descrizione1']."\", ";	
		}
		$stringa2=substr($stringa2,0,-2);
		echo $stringa2
		?>],
		minLength:2
	});
	});
  </script>
e questo il suo campo in cui avviene l'autocompletamento
HTML:
<input id="autocomplete_descrizione1" name="descrizione1" maxlength="24" style="width:180px" onkeyup="touppercase(this.id,this.value);"/>

Questo lo script per il secondo autocompletamento (descrizione2)
Codice:
  <script>
	$(document).ready(function() {
	$("input#autocomplete_descrizione2").autocomplete({
		source: [<?php
		$stringa3="";
		$result3=mysql_query("SELECT DISTINCT(descrizione2) AS descrizione2 FROM articoli", $db);
		while($row=mysql_fetch_array($result3)){
			$stringa3.="\"".$row['descrizione2']."\", ";	
		}
		$stringa3=substr($stringa3,0,-2);
		echo $stringa3
		?>],
		minLength:2
	});
	});
  </script>
e questo il suo campo in cui avviene l'autocompletamento (QUELLO IN CUI NON FUNZIONA)
HTML:
<input id="autocomplete_descrizione2" name="descrizione2" maxlength="24" style="width:180px" onkeyup="touppercase(this.id,this.value);"/>

Come vedete sembrano identici. Ho provato la query su mysql e funziona...

4. PROBLEMA CON DATA
Ho questo codice
PHP:
$cache_articoli_ordinati=array();
foreach ($conn->query($sql1) as $row) {
$cache_articoli_ordinati[$row["codicearticolo"]]=$row["codicearticolo"];
$cache_articoli_ordinati[$row["datainserimento"]]=$row["datainserimento"];
}
...
...
$giorni = 14;
$data_2sett_post = calcolo_data($cache_articoli_ordinati[$row["datainserimento"]], $giorni);
$stato_articolo = "<div align='center' title='Non ordinabile fino a ".$data_2sett_post."'>Non ord.</div>";
I puntini nel codice (...) stanno ad indicare che è presente altro php che non ho elencato. La query sql1 funziona perfettamente su mysql. Purtroppo, mentre $cache_articoli_ordinati[$row["codicearticolo"]]=$row["codicearticolo"]; funziona perfettamente (nel senso che il codice articolo viene estratto), il codice $cache_articoli_ordinati[$row["datainserimento"]]=$row["datainserimento"]; non estrae la data di inserimento e quindi la funzione calcolo_data effettua il conteggio per la variabile $data_2sett_post, partendo dal 1 gennaio 1970 (appunto perché non ha alcuna data di inserimento da cui partire)

Direi che ho finito i problemi... GRAZIE A TUTTI coloro che vorranno aiutarmi.
 

iuta74

Nuovo Utente
29 Apr 2014
24
0
0
Problema numero 1 risolto.
Ho aggiunto una variabile alla funzione che si trova nel file di paginazione. Nel momento in cui l'utente utilizza le pagine per scorrere i risultati della ricerca precedentemente utilizzata, la variabile diventa "ON" e viene "assorbita" dalla pagina che chiama la paginazione (e crea la query per la ricerca). Quando è "ON" il refresh della pagina chiamante, non aggiorna le variabili $where, pertanto grazie all'utilizzo delle sessioni, mantengo memorizzati parametri di ricerca. In tal modo, lo scorrere delle pagine non azzera questi ultimi.
Mi sono buttato sul punto 4, in cui tutt'ora non riesco a capire il motivo per cui la il valore di datainserimento NON viene estratto e salvato nell'array $cache_articoli_ordinati.
 

iuta74

Nuovo Utente
29 Apr 2014
24
0
0
Ciao Marino, non credo sia un problema di formattazione data e sai perché? Perché ho provato anche ad estrarre un altro campo (per esempio la quantità) e a salvarla nell'array, tuttavia, niente. Non mi estrae nemmeno quella. E' come se da quella query "uscisse" soltanto il codice articolo. Tutto il resto niente... non ho parole
 

iuta74

Nuovo Utente
29 Apr 2014
24
0
0
Eccola.
$sql1="SELECT * FROM ordini WHERE idpdv = ".$_SESSION['cod']." AND datainserimento >= '".$data_2sett_ant."' GROUP BY codicearticolo";

Su mysql funziona, altrimenti non estrarrebbe nemmeno il codice. La data è già nel yyyy-mm-dd
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
strano che non ti dia errore, Group by deve contenere tutte le colonne della select
che non siano elementi aggregati (sum, max, min .... ) e la data non lo è ...
aggiungi nella Group by la data
ciao
Marino

ps ti conviene scrivere così

PHP:
$sql1="SELECT distinct * FROM ordini WHERE idpdv = ".$_SESSION['cod']." AND datainserimento >= '".$data_2sett_ant."'";
 
Ultima modifica:

iuta74

Nuovo Utente
29 Apr 2014
24
0
0
Macchè, niente da fare. Ho provato anche senza GROUP BY. Il problema non è nella query evidentemente, ma nell'assegnazione della data nell'array. E' come se non inserisse la data di inserimento... o meglio... al di fuori del codice articolo, non riesco ad inserire altro. Ho provato con la quantità, giusto per fare un test
PHP:
$cache_articoli_ordinati[$row["codicearticolo"]]=$row["codicearticolo"]; 
$cache_articoli_ordinati[$row["quantita"]]=$row["quantita"];
Niente nemmeno così. Nel momento in cui provo ad assegnare ad una variabile qualsiasi, il valore contenuto nell'array ($row["quantità"]), il valore è vuoto. Con il codice articolo, invece, no problem...
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
potresti mettere una var_dump($row["quantita"]) , anche sulla data per vedere cosa restituisce la query
e definire il problema , se sql o variabile php
ciao
Marino
 

iuta74

Nuovo Utente
29 Apr 2014
24
0
0
In merito al punto 2, sto lentamente arrivando ad una soluzione, ma...

...ho caricato i valori contenuti nel file csv (composto da due colonne, denominate codice_articolo e quantita), all'interno di array (che chiamerò A). In seguito ho estratto da un mio DB una serie di codici articolo (vi tralascio la condizione utilizzata per l'estrazione) che ho inserito in un secondo array (che chiamerò B). Ora vorrei estrarre solo i codici articolo di A che NON si trovano in B. Posso utilizzare la funzione "array_diff()" anche se i due array non hanno lo stesso numero di "colonne" e se sì, come? Nel senso che l'A ha sia i codici articolo che le rispettive quantità, mentre l'array B contiene solo i codici articolo. Vorrei assegnare tale differenza ad un terzo array (C) che contenga sia i codici articolo di A che le rispettive quantità di A. Poi scorrerlo per estrarre, infine, dal mio DB tutte le informazioni descrittive dei codici articolo di A. grazie
 

iuta74

Nuovo Utente
29 Apr 2014
24
0
0
Ho provato... niente. Ti posto la select e il codice dove vorrei inserire la data inserimento

PHP:
		$sql1="SELECT DISTINCT codicearticolo, datainserimento FROM ordini WHERE idpdv = ".$_SESSION['cod']." AND datainserimento >= '".$data_2sett_ant."'";
		
		$cache_articoli_ordinati=array();
		foreach ($conn->query($sql1) as $row) {
		$cache_articoli_ordinati[$row["codicearticolo"]]=$row["codicearticolo"];
		$cache_articoli_ordinati[$row["datainserimento"]]=$row["datainserimento"];
		}

e poi

PHP:
		$cache_articoli=array();
		foreach ($conn->query($sql3) as $row) {
				
		if(isset($cache_articoli_servizio[$row["codicearticolo"]])){
		$stato_articolo = "<div align='center' title='Assegna Qtà dal menù'><a href='elimina_articolo.php?codicearticolo=".$row["codicearticolo"]."'><FONT color='#FF0000'>Elimina</FONT></a></div>";
		}else if(isset($cache_articoli_ordinati[$row["codicearticolo"]])){
		$giorni = 14;
		$data_inserimento = $row["datainserimento"];
		$data_2sett_post = calcolo_data($data_inserimento, $giorni);
		$stato_articolo = "<div align='center' title='Non ordinabile fino a ".$data_2sett_post."'>Non ord.</div>";
		}else{
		$stato_articolo="<div align='center'><a href='aggiungi.php?codicearticolo=".$row["codicearticolo"]."'>Aggiungi</a></div>";
		}
		echo"<tr><td><div align='center'>".$row['codicearticolo']."</div></td><td>".$row['descrizione1']."</td><td>".$row['descrizione2']."<td>".$stato_articolo."</td></tr>";
		}
		?>

Vedi dove ho scritto title='Non ordinabile fino a ".$data_2sett_post."'? Ecco, il risultato è: non ordinabile fino a 1970-01-15
Non estraendo nulla dal DB (ripeto che la query direttamente sul phpadmin, funziona), la funzione mi aggiunge 14 giorni al primo gennaio 1970
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
Ho provato... niente. Ti posto la select e il codice dove vorrei inserire la data inserimento

PHP:
		$sql1="SELECT DISTINCT codicearticolo, datainserimento FROM ordini WHERE idpdv = ".$_SESSION['cod']." AND datainserimento >= '".$data_2sett_ant."'";
		
		$cache_articoli_ordinati=array();
		foreach ($conn->query($sql1) as $row) {
		$cache_articoli_ordinati[$row["codicearticolo"]]=$row["codicearticolo"];
		$cache_articoli_ordinati[$row["datainserimento"]]=$row["datainserimento"];
		}

e poi

PHP:
		$cache_articoli=array();
		foreach ($conn->query($sql3) as $row) {
				
		if(isset($cache_articoli_servizio[$row["codicearticolo"]])){
		$stato_articolo = "<div align='center' title='Assegna Qtà dal menù'><a href='elimina_articolo.php?codicearticolo=".$row["codicearticolo"]."'><FONT color='#FF0000'>Elimina</FONT></a></div>";
		}else if(isset($cache_articoli_ordinati[$row["codicearticolo"]])){
		$giorni = 14;
		$data_inserimento = $row["datainserimento"];
		$data_2sett_post = calcolo_data($data_inserimento, $giorni);
		$stato_articolo = "<div align='center' title='Non ordinabile fino a ".$data_2sett_post."'>Non ord.</div>";
		}else{
		$stato_articolo="<div align='center'><a href='aggiungi.php?codicearticolo=".$row["codicearticolo"]."'>Aggiungi</a></div>";
		}
		echo"<tr><td><div align='center'>".$row['codicearticolo']."</div></td><td>".$row['descrizione1']."</td><td>".$row['descrizione2']."<td>".$stato_articolo."</td></tr>";
		}
		?>

Vedi dove ho scritto title='Non ordinabile fino a ".$data_2sett_post."'? Ecco, il risultato è: non ordinabile fino a 1970-01-15
Non estraendo nulla dal DB (ripeto che la query direttamente sul phpadmin, funziona), la funzione mi aggiunge 14 giorni al primo gennaio 1970

scusa ma nella prima parte del codice leggo
PHP:
foreach ($conn->query($sql1) as $row)
nella seconda, invece,
PHP:
foreach ($conn->query($sql3) as $row)
le sql sono diverse ...
 

iuta74

Nuovo Utente
29 Apr 2014
24
0
0
Ciao Marino,

in realtà le query sono 3. La prima popola l'array contenente i codici ordinati nelle ultime due settimane, la seconda quelli ordinata nella giornata odierna (che si trovano temporaneamente parcheggiati nella tabella di servizio) e la terza query che popola l'array con tutti i codici articolo disponibili. Scorrendo quest'ultimo devo individuare quali sono i codici che l'utente può ordinare o meno (non può ordinare né gli articoli già ordinati da non meno di 14 giorni, né quelli che ha già preselezionato nella giornata odierna). Nel caso in cui i codici fossero contenuti nel primo array, voglio comunicare all'utente fino a quale data non potrà riapprovigionarsi per quel determinato codice. E' per questo che ho bisogno della data d'inserimento di quell'articolo, così posso aggiungere 14 gg e nel "title" indicare la data risultante. Come anticipato, la data d'inserimento NON mi viene estratta.
 

iuta74

Nuovo Utente
29 Apr 2014
24
0
0
Appro... nel frattempo ho risolto i primi 3 punti. In merito la paginazione, non riuscivo ad estrarre i dati in quanto nel campo riservato alla descrizione 2, in alcune righe era presente il carattere degli apicetti (") che mandava in tilt la query. Ripulita la colonna, ha funzionato immediatamente.
 
Discussioni simili
Autore Titolo Forum Risposte Data
J [B]cerco aiuti per il mio sito e forum[/B] Altri Annunci 1
bubino8 Consigli e aiuti integrazione API Programmazione 8
T [a pagamento] programmatore PHP che mi aiuti a migrare gli script da vecchia versione PHP a nuova Offerte e Richieste di Lavoro e/o Collaborazione 1
C aiuti su login/logout? PHP 3
W Cerco urgentemente entro domani sera 16/05 webmaster che mi aiuti a trasferire sito Offerte e Richieste di Lavoro e/o Collaborazione 1
H Cerco esperto XML che mi aiuti!!!!! XML 0
B qualcuno mi aiuti Flash 0
M qualcuno mi aiuti!! Javascript 1
B kernell...qualcuno mi aiuti Sicurezza e Virus 0
felino Lubuntu 18.04 Requisiti per applicazione console .net core 7.0 Linux e Software 0
M pulsante per aprire una maschera che contiene controllo schede MS Access 0
E Aiuto per query PHP 8
E Il punto di riferimento italiano per Trailers cavalli Discussioni Varie 0
F CERCO Servizi SEO di Qualità per Agenzie di Servizi SEO e Posizionamento 3
D Miglior modo per estrarre le occorrenze di un elemento in un set di più file xml e quindi scrivere il risultato in una tabella Excel o magari in JSON XML 0
A Cerco programmatore/sviluppatore per creare forum Offerte e Richieste di Lavoro e/o Collaborazione 2
R Plugin di base per WordPress WordPress 0
D [COMPRO/CERCO] GUEST POST o scambio link per sito di Spiritualità ed Esoterismo. Vendere e Acquistare pubblicita' online 0
L Suggerimento Pagespeed per non vedenti HTML e CSS 0
M Analisi sito per pulire codice inutile HTML e CSS 1
Paolo69 Risolto reCAPTCHA v2 per ASP Classic ASP 0
M Hosting VPS per server di gioco Minecraft Hosting 0
N Grazie per il benvenuto Presentati al Forum 0
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
R Filtri e plugin per photoshop Photoshop 0
AkTaRuS DIsabilitare il tasto destro tranne che per code e pre Javascript 1
0 [Retribuito] Cercasi programmatore per GdR PbC Offerte e Richieste di Lavoro e/o Collaborazione 0
A Adempimenti per magazine on line Leggi, Normative e Fisco 0
R Recupero di permalink di un sito che è stato eliminato per errore WordPress 5
I aiuto urgente per thunderbird Posta Elettronica 0
A Web master per semplice sito web Offerte e Richieste di Lavoro e/o Collaborazione 2
M [Cerco][Gratuito] Artista/designer per creazione grafica gioco di società Offerte e Richieste di Lavoro e/o Collaborazione 0
M Un saluto per cominciare Presentati al Forum 1
N MAX() + ADD_DATE - per update su Mysql MySQL 0
G Qualcuno conosce questo software per gestire le telecamere IP Cam e Videosorveglianza 0
A [CERCO] Articolista per siti a tema eventi e feste private Offerte e Richieste di Lavoro e/o Collaborazione 0
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
I aiuto per outlook Posta Elettronica 0
L Script per convertire numeri in parole Javascript 2
J [Cerco] [Collaborazione gratuita] Grafico per piccoli lavori di grafica Offerte e Richieste di Lavoro e/o Collaborazione 0
M Memorizzazione temi per le diverse pagine del sito Javascript 1
otto9due Proteggere file caricati dall'esterno ma renderli accessibili per gli utenti loggati. PHP 4
E Consigli per hosting reseller Hosting 0
T aiuto per trasformare un quiz fatto in JS in un quiz in JQUERY jQuery 0
F Cerco fotografo per sito abiti da sposa Discussioni Varie 2
R [cerco][retribuito] Collaborazione per creazioni loghi ed altro Offerte e Richieste di Lavoro e/o Collaborazione 0
M Unire 2 funzioni per l'invio di un form e con l'apertura di un div Javascript 0
seranto Blocco preventivo e Registro dei Consensi per Cookie tecnici? Leggi, Normative e Fisco 2
D Come estendere la tariffa per Wordpress con Visa? Hosting 1
M Fullcalendar in Codeigniter, un aiuto per la chiamata $ajax ? jQuery 0

Discussioni simili