- Home
- Categorie
- Coding e Sistemistica
- PHP
- Cancellazione dati !
-
@nofcfro said:
Sono 185 campi, alcuni con menù a tendina! Io sarei propenso per i cookies o le session (coll'opzione distruggi session alla fine, ma come si fa a dire distruggi tutte le session tranne alcune? es. l'id utente?). Poi non ho ben capito la tua prima opzione in cosa consisteva
Con 185 campi la mia prima ipotesi diciamo che non e' valida. Te la illustrero' nei prossimi casi eventualmente. Inoltre leggo dalla successiva domanda che tutto viene gestito in UN UNICA PAGINA (mentre io preferisco gestire i programmi in 2 parti = un file php e un file html, ma per farlo utilizzo un TEMPLATE ENGINE e mi trovo BENISSIMO).
Comunque io personalmente farei tutto con SESSION e non credo che ci siano problemi (qualcuno mi corregga).
Per quanto riguarda il cancellare alcune session e conservarne altre, anche io mi sono ritrovato in questo problema, ma proprio oggi ho scoperto che i comandi utilizzati in precedenza non vanno bene per la nuova versione di PHP (parlo di @session_start e @session_register). Penso comunque che puoi cancellare solo ALCUNE SESSION ma verifica che versione di PHP stai utilizzando.
-
Allora basta fare:
[php]
<input name="mio_nome" value="<?php if(isset($_POST['mio_nome'])) echo $_POST['mio_nome']; ?>" />
[/php]
E te lo ritrovi nuovamente compilato, cosi come l'hai spedito.
Puoi farlo anche sui select, in maniera un pò differente ovviamente.
-
Per il principio di economicità userò il metodo consigliato da Thedarkita, ma ringrazio allo stesso modo entrambi per l'aiuto! Mi avete risolto un problema non da poco! Grazie
-
Se fai elaborare i dati ad uno script in una pagina esterna puoi "tornare indietro" e i campi già compilati rimangono.
Esempio:
[php]
if (trim($_POST['nome'])=="") exit ("Campo nome non compilato! <a href="javascript:history.back()">Torna indietro</a>");
[/php]
-
Thedarkita perché il tuo metodo sul *select *non funziona? Avevi scritto che era leggermente diverso applicarlo a *input *e select, puoi cortesemente spiegarmi come applicarlo correttamente?
<select name= "zz"> <option value="<?php if(isset($_POST['zz'])) echo $_POST['zz']; ?>"></option> <option value="xx">xx</option> <option value="yy">yy</option>
PS. Grazie Tigrone per la soluzione, mi tornerà sicuramente utile
-
La via più veloce, che ripete però l'option 2 volte sarebbe cosi:
[php]
<option value="<?php if(isset($_POST['zz'])) echo $_POST['zz']; ?>"><?php if(isset($_POST['zz'])) echo $_POST['zz']; ?></option>[/php]
Ovviamente è possibile solo nel caso in cui il value è pari al testo mostrato all'utente.
Altrimenti bisognerebbe fare il conto di quale option impostare come selezionata.
-
Sì certo
E con ```
<input type="checkbox" name="zz" id="zz" />
-
Caro nofcfro, ehehe mi viene da sorridere perchè mi sembra di rivedere lo stesso mio problema che avevo tempo fa e che ora tu esponi in questa discussione.
Sottolineando nuovamente che io non sono un ESPERTO di PHP e che SICURAMENTE sul forum ci sono persone molto più in gamba di me, mi limito soltanto a dirti come io ho risolto un po di problemini ed ho fatto un buon sito (a mio avviso) in base alla mia poca esperienza.La prima cosa che ti consiglierei è quella di utilizzare appunto un TEMPLATE ENGINE (nel mio caso utilizzo TinyButStrong, praticamente e' una CLASSE che inserisci nella cartella CLASSES appunto e la richiami all'inizio del programma PHP con il comando: include_once("classes/tbs_class.php");). Lo trovi su internet ed e' GRATUITA e con tanto di esempi e manuale.
Cosa ti permette di fare questa classe? SEMPLICISSIMO: Evitare di MISCHIARE 2 programmi di linguaggi diversi (un misto di HTML CON CODICE PHP per intenderci), come nell'esempio riportato da Thedarkita (a cui va tutta la mia stima si intende). Cosi facendo hai un codice PIU' LEGGIBILE e se leggerai sui vari forum ti accorgerai che questa tecnica e' molto apprezzata da chi fa programmi anche ad un certo livello, perchè permette a chi sviluppa le procedure PHP di non occuparsi piu di tanto di quello che sara' l'HTML (e viceversa).
Esempio pratico:
nella pagina PHP scrivo: $nome = "Gianni"; e STOP!!!
nella pagina HTML invece richiamo questa variabile in questo modo ad esempio : [var.nome] e sicuramente li verra' scritto Gianni. Dovrai aggiungere un pochino di codice PRIMA di richiamare la pagina HTML, ma ne vale a mio avviso davvero la pena.Sono anche convinto che quando leggerai ENTRAMBI I FILES (php e html) saranno MOOOOLTO più leggibili (e quindi avrai anche una MAGGIORE MANUTENZIONE).
Perdici un pochino di tempo dammi retta.. e poi capirai che e' una strada OTTIMA da seguire, specialmente per persone che come me e come te (immagino) non sono CAMPIONI in php.Poi ti parlavo di SETTARE LA VARIABILE prima di andare nella parte HTML (ma intendevo appunto utilizzare questo mio metodo), in parole povere e' l'esempio che ti ha fatto Tigrone e Thedarkita (ma un po diverso dal mio).
Però ho un po di confusione quando mi dici che hai 185 campi da analizzare! E allora ti consiglierei di dare uno sguardo anche a JAVASCRIPT che con una piccola routine (troverai esempi su questo argomento) fa il CONTROLLO DEI 185 CAMPI (ad esempio con un ciclo for/next per intenderci) . Quindi spendi tempo anche per questo e al limite ti diro' io come ho risolto alcune cose con Javascript.
Dicevo inizialmente che mi ricordi i miei problemi di una volta.. infatti, dovevo verificare il CHECK di un checkbox, ma questo mi si riazzerava ogni volta e poi ho capito appunto, che era un discorso di VARIABILI RIAZZERATE (vedi l'IF che ti ha fatto come esempio Thedarkita).
Poi dici che vorresti LASCIARE SELEZIONATE le caselle ed in questo caso ti consiglierei di studiarti CHECKBOX e l'opzione CHECKED. Ora a mio avviso ci sono DIVERSI MODI per risolvere il tutto, bisogna solo capire quale e' il metodo MIGLIORE nel tuo caso. Faccio un esempio cosi ci capiamo: nel mio caso mi perdevo la variabile $per_pagina che veniva settata in HTML da un menu a tendina (5-10-20-50 nominativi per pagina) ma una volta settata ritornava al valore di default (5). In questo caso ho utilizzato la SESSION ed ho risolto il problema, ma se capirai meglio il TEMPLATE ENGINE allora ti faro' altri esempi eventualmente.
Facci sapere. CIAOOO
-
@criccroc said:
Poi ti parlavo di SETTARE LA VARIABILE prima di andare nella parte HTML (ma intendevo appunto utilizzare questo mio metodo), in parole povere e' l'esempio che ti ha fatto Tigrone e Thedarkita (ma un po diverso dal mio).
Non proprio... io intendevo sfruttare semplicemente il tasto "indietro" del browser tramite javascript....
Per quanto riguarda i 185 campi... visto che l'array $_POST è appunto un array, si può ciclare con un semplice foreach al posto di scrivere 185 righe di codice di controllo...Ad esempio qui: http://www.tigrone.altervista.org/form/form.html c'è un semplice form html
<form method="post" action="script.php"> 1 <input name="campo1" /><br /> 2 <input name="campo2" /><br /> 3 <input name="campo3" /><br /> 4 <input name="campo4" /><br /> 5 <input name="campo5" /><br /> <input type="submit" value="vai" /> </form>
E questo è lo script che riceve e controlla i dati:
[php]
<?php
foreach($_POST as $k => $v)
{
if (trim($v)=="") exit ("$k non compilato! <a href="javascript:history.back()">Torna indietro</a>");
}
echo 'Tutti i campi sono stati compilati!';
?>
[/php]
Sono 3 righe di codice per controllare tutti i campi... ovviamente, inserendo delle istruzioni if all'interno del ciclo foreach, si possono controllare diversamente alcuni campi (campi numerici ecc...).Volendo scrivere qualche riga di codice in più... http://www.tigrone.altervista.org/form/form2.html
Il form è lo stesso ma lo script è più completo:
[php]
<?php
$errori=array();
foreach($_POST as $k => $v)
{
if (trim($v)=="") $errori[]=$k;
}
if ($errori)
{
echo 'Non sono stati compilati i seguenti campi:<br /><br />';
foreach($errori as $v)
{
echo $v.'<br />';
}
unset($errori);
exit ('<br /><a href="javascript:history.back()">Torna indietro</a>');
}
echo 'Tutti i campi sono stati compilati!';
?>
[/php]
Una variante che stampa a video, in una volta sola, tutti i campi che non sono stati compilati...
-
@criccroc: grazie per la dritta, durante l'estate andrò sicuramente a studiarmi TEMPLATE ENGINE perché sembra molto efficace e come hai ben capito col PHP ho iniziato solo due mesi fa! ^^
@tigrone: il tuo esempio è utilissimo e me lo sono appuntato perché tornerà sicuramente utile in altre pagine del sitoVolevo in questa situazione particolare procedere col metodo dei if... proposto da @Thedarkita; dopo aver visto quelli per il campo input:
[PHP]<input name= "xxx" type= "text" maxlength= "4" size= "5" value="<?php if(isset($_POST['xxx'])) echo $_POST['xxx']; ?>"/> [/PHP]
e quelli per il campo select:
[PHP]<select name= "yyy">
<option value="<?php if(isset($_POST['yyy'])) echo $_POST['yyy']; ?>"><?php if(isset($_POST['yyy'])) echo $_POST['yyy']; ?></option> <option value="no">no</option>
<option value="si">sì</option>
</select>[/PHP]stavo cercando con la stessa logica di venire a capo del campo checkbox. Il principio è sempre lo stesso: in un'unica pagina ci sono dei campi che vanno validati da un ciclo if, se la validazione va male e compare il messaggio di errore i dati precedentemente inseriti non devono andare persi: neppure la casella spuntata della checkbox. Io mi sono fermato qui (di default la casella NON deve essere spuntata):
[PHP]<input type="checkbox" name="r02" id="r02" unchecked="checked" value="<?php if(isset($_POST['r02'])) echo ' checked="checked"'; ?>">[/PHP]
Ma non va
-
[PHP]<input type="checkbox" name="r02" id="r02" unchecked="checked" value="<?php if(isset($_POST['r02'])) echo ' checked="checked"'; ?>">[/PHP]
Con questo metodo nessuno sa come si fa?
-
Dovresti studiare un pò meglio il codice html, si tratta solo di usare gli attributi giusti al momento giusto:
[php]
<input type="checkbox" name="r02" id="r02" value="mio_valore" <?php if(isset($_POST['r02']) && $_POST['r02'] == 'mio_valore') echo ' checked="checked"'; ?> />
[/php]
-
Ciao nofcfro, so che sono un po CAPOCCIONE (come diciamo noi a Roma .. e non solo) ma torno a battere il tasto sul TEMPLATE ENGINE (qualcuno dira': GRRRRR), ma continuo proprio perchè vedendo gli esempi io personalmente divento pazzo e non solo, ma sono anche CONVINTO che risolverà la maggior parte dei tuoi problemi.
Leggiamo questo codice come da tuo esempio:
[HTML]<input type="checkbox" name="r02" id="r02" value="mio_valore" <?php if(isset($_POST['r02']) && $_POST['r02'] == 'mio_valore') echo ' checked="checked"'; ?> />[/HTML]
Non ti sembra che questa cosa sia un BEL PO ILLEGIBILE? Scusate, ma per me SI!!
questa per me e' una pagina HTML perchè vedo che fa parte di un FORM, ma dentro c'e' codice PHP e questo a me personalmente MI TURBA ! eheheheh
Sarebbe molto piu carino E LEGGIBILE questo tipo di codice :
[HTML]<input type="checkbox" name="r02" id="r02" value="mio_valore" [var.checked]>[/HTML]Come vedi ho impostato una VARIABILE che può assumere in questo caso solo 2 valori:
$checked = ''; (il checkbox non e' attivo) oppure
$checked = 'checked="checked"'; e questa variabile cambia in base alle istruzioni in PHP (i tuoi famosi If(isset) etc...). Andremo a vedere ora anche come il PHP sara' più leggibile.Sappi che per ottenere questi risultati, non devi ASSOLUTAMENTE STRAVOLGERE il tuo programma, ma semplicemente aggiungere qualche riga in piu'.
Andiamo a vedere dunque come SVILUPPARE questa parte di programma:[PHP]//PRIMA PARTE (questa parte va caricata IN TUTTI I FILES PHP che usano il TEMPLATE ENGINE)
include_once("classes/tbs_class.php"); // Carico la classe TEMPLATE ENGINE che ho salvato nella cartella situata in root del mio sito chiamata CLASSES che dovrai scaricare da internet.//SECONDA PARTE (questa parte cambia in base a quello che devi fare nel programma)
$checked = '';
if(isset($_POST['r02']) && $_POST['r02'] == 'mio_valore') $checked = 'checked="checked"';//TERZA PARTE (questa parte va caricata per richiamare il file HTML:
$template = "modulo_inserimento.html"; //il nome del file html che vuoi caricare
$TBS = new clsTinyButStrong; //lascia cosi come vedi
$TBS->NoErr = true; //lascia cosi come vedi
$TBS->LoadTemplate("$template"); //carica il template
$TBS->Render = TBS_OUTPUT; //lascia cosi come vedi
$TBS->Show(); //lascia cosi come vedi[/PHP]Ora, se hai capito come funziona (la prima volta ti puo sembrare molto piu confuso), potrai utilizzare questa tecnica per fare TUTTO QUELLO CHE VUOI. Cambierà semplicemente la SECONDA PARTE per fare altro.
In questo caso il file modulo_inserimento.html conterrà semplicemente codice HTML (senza codice PHP) come da esempio precedente.
Ti faccio un ultimo semplicissimo esempio per capire come visualizzare le variabili in php con questo metodo:[PHP]
include_once("classes/tbs_class.php");$nome= 'Mario';
$cognome = 'Rossi';
$indirizzo = 'via Verdi, 12';$template = "visualizza_utente.html";
$TBS = new clsTinyButStrong;
$TBS->NoErr = true;
$TBS->LoadTemplate("$template");
$TBS->Render = TBS_OUTPUT;
$TBS->Show(); [/PHP]ed ora il file .html (visualizza_utente.html):
[HTML]<div>
Ciao [var.nome] [var.cognome], il tuo indirizzo è: [var.indirizzo]
NON E' TUTTO PIU' CHIARO E LEGGIBILE? Buon divertimento!!!
</div>[/HTML]
-
Io non riesco a capire perchè le cose facili bisogna farle diventare difficili!
Qui si sta cercando solo di complicarsi la vita inutilmente...
-
Difficile? PROVARE PER CREDERE
-
@criccroc said:
Difficile? PROVARE PER CREDERE
Non lo metto in dubbio che sia facile...
Personalmente sono restio ad utilizzare codice scritto da altri; non hai in mano la situazione... se vuoi modificare/adattare devi impazzire... se non funziona qualcosa pure...!
Riguardo all'argomento del topic, trovo inutile modificare tutti i value di un form solo per questo motivo... di solito si fa quando bisogna "precompilarlo" in automatico con dei dati presi da un db al fine di modificarli senza ricompilarli tutti...
In questo caso quindi, non vedo nulla di più semplice che simulare il tasto indietro del browser... in fin dei conti basta intercettare i dati con uno script esterno alla pagina del form.
Comunque non insisto più di tanto... ognuno è libero di fare come crede...
-
Grazie ragazzi per l'aiuto,
se in questo caso ho cercato di utilizzare il metodo di Thedarkita è perché volevo utilizzare unicamente PHP (come dice Tigrone, bisogna sempre saper controllare ciò che si scrive perché poi se ci sono errori sono dolori) dato che javascript lo conosco pochissimo. Ciò non toglie che sia TEMPLATE ENGINE (che andrò a guardare) che javascript:history.back() sono spunti utilissimi che mi sono annotato perché in futuro certamente potrò usarli. Grazie ancora
-
Ultimo problema e poi davvero credo che ho terminato tutte le possibili casistiche sull'argomento!
Le informazioni immesse nel campo SELECT non sono scelte dalle OPTION di HTML ma vengono prese dal Database, quindi al riaggiornamento della pagina per il solito CICLO IF, nel menù a tendina non compare più il nome ma l'idnome, come giusto che sia perché stampo [PHP]$qqq = "<option value= '" . $riga["idnomi"] . "'>" . $riga["nomi"] . "</option>"[/PHP] Ma a me servirebbe avere il nome e non l'idnome!
C'è una pagina successiva che prende l'idnome dal valore $qqq e quindi non posso fare [PHP]$qqq = "<option value= '" . $riga["nomi"] . "'>" . $riga["nomi"] . "</option>"[/PHP]
Bisognerebbe modificare la stringa: [PHP]<option value="<?php if(isset($_POST['nomi'])) echo $_POST['nomi']; ?>"><?php if(isset($_POST['nomi'])) echo $_POST['nomi']; ?></option>[/PHP][PHP]<select name="nomi">
<option value="<?php if(isset($_POST['nomi'])) echo $_POST['nomi']; ?>"><?php if(isset($_POST['nomi'])) echo $_POST['nomi']; ?></option>
<?php
$risultato=mysql_query("SELECT idnomi, nomi FROM tblnomi", $conn);
if (!$risultato)
{
die("La tabella selezionata non esiste " . mysql_error());
}
while ($riga=mysql_fetch_array($risultato))
{
$qqq = "<option value= '" . $riga["idnomi"] . "'>" . $riga["nomi"] . "</option>";
echo $qqq;
}
?>
</select>[/PHP]
-
Beh puoi passare solo uno dei 2 con un select(A meno di non lavorarci poi con javascript, ma non mi sembra il caso), passi l'id, e dopo fai una query per recuperare il nome relativo a quell'id e hai ottenuto i 2 valori, visto che sono tra loro collegati.
-
Carissimi, di certo non sto qui a fare polemiche di nessun tipo, ma SEMPLICEMENTE consiglio sia a nofcfro che a tutti gli utenti (ANCHE AI PIU ESPERTI) di TESTARE e PROVARE quello che fa un template engine, che in sintesi non e' altro che UN FILE, scritto TOTALMENTE IN PHP (tbs_class.php e che quindi NON E' UN CODICE NASCOSTO) che si occupa SEMPLICEMENTE di CONVERTIRE in [var.nomevariabile] quello che voi scrivete in: <?PHP...blablalla... ECHO.. blabla ?> (E NON SOLO!!!) e se andate a leggere su internet l'importanza e la comodita' di utilizzare questo metodo scoprirete SEMPLICEMENTE che NON E' TEMPO PERSO!.
Anche con l'ultimo problema posto da nofcfro sono SICURISSIMO che e' tutto piu semplice da risolvere. Risposta veloce: Visto che il SELECT si popola da database, ecco che questo metodo viene proprio in aiuto (almeno per me). Infatti e' SEMPLICISSIMO manipolare dati da un database.
Per chi vuole quindi testare questa cosa, basta cercare su GOOGLE : Tiny But Strong - TBS engine, leggervi 2 righe in inglese (ma lo trovate anche in ITALIANO e alle brutte vi spiego tutto io), scaricare il file tbs_class.php e fare 2 files (uno PHP e l'altro HTML) affinche' possiate testare cio che ho spiegato finora. Ci sono diversi esempi nel sito e quindi basta fare semplicissimi COPIA ED INCOLLA e vedrete come funziona.Detto cio, e concludo, ho tirato fuori questo argomento, proprio perchè nofcfro mi ha chiesto specificatamente: E TU, COME FARESTI? E da ex docente di informatica (dal 1990.....) cerco di consigliare nel migliore dei modi.
Sottolineo nuovamente che .. quando ho messo le mani sul linguaggio PHP ed ho letto, spesso e volentieri, esempi di codice MISCHIATI TRA DI LORO non ho avuto un ottima impressione e PER FORTUNA per quanto mi riguarda ho deciso di utilizzare questo metodo. Pertanto.. ognuno e' GIUSTAMENTE libero di utlizzare un QUALSIASI METODO in programmazione, purche' si ottenga il risultato voluto, e con questo, chiudo argomento (PER ORA) e vi auguro una buona serata.
CIAOOOOOO