Problema con cookies custom
Autor: Fabio B.
Visitado 1840,
Followers 2,
Compartido 0
http://manpower-monaco.webworks2017.pro/blog/index.php?id=54n1odmu
prima del tag head:
<?php
/*$Nome = $_POST["name"];
setcookie("Nome","$Nome");
$Email = $_POST["email"];
setcookie("Email","$Email");
$Url = $_POST["url"];
setcookie("Post","$Url");
$Titolo = $_POST["body"];
setcookie("Titolo","$Titolo");*/
?>
http://manpower-monaco.webworks2017.pro/cv.php
in un oggetto html:
<div id="test">
Ciao <?php echo $_COOKIE["Nome"]."</br>";echo $_COOKIE["Email"]."</br>";echo $_COOKIE["Post"]."</br>";echo $_COOKIE["Titolo"]."</br>";?>
</div>
perché non legge i cookies?
perché js mi crea i cookies mentre jQuery e php no?
Publicado en
Se metti il codice php tra /* e */ non viene eseguito...
Autor
Lo so, l' ho " commentato" per non farlo interferire con altre prove. Bisogna guardare i sorgenti per capire il resto
Scusa... ma prima del prima del tag head non vedo codice.
Autor
Il php non puoi, per questo l'ho riportato io
Hai ragione scusa, e la pagina del form?
Autor
quello per la prima raccolta dati é quello del blog topic; quello di destinazione dei dati che vanno recuperati dai cookie per la parziale autocompilazione é http://manpower-monaco.webworks2017.pro/cv.php
Prova a toglierele virgolette alle variabili
/*
$Nome = $_POST["name"];
setcookie("Nome",$Nome);
$Email = $_POST["email"];
setcookie("Email",$Email);
$Url = $_POST["url"];
setcookie("Post",$Url);
$Titolo = $_POST["body"];
setcookie("Titolo",$Titolo);
*/
Autor
ok, ma ho già provato l'impostazione via php, non mi funge; adesso comunque riprovo visto che ho appena cambiato la versione del php da 5.3 a 5.5, ma credo sia inutile; ora disabilito la creazione dei cookie via js e abilito lo script php
Autor
e infatti non li crea; se li vedi ancora rimuovili, ricarica la pagina e invia il form compilato nella pagina del topic
Autor
ahhh... pardon, "le virgolette alle variabili"...
Autor
sì ora ne legge il contenuto di almeno uno ma solo nella pagina dello stesso topic (nemmeno in tutte le pagine create nella cartella blog, figuriamoci del dominio intero) e solo per un attimo, prima che avvenga il cambio pagina;
lo puoi vedere nella header dove ho messo un oggetto codice con dentro
<?php
$Tester = $_COOKIE['Nome'];
echo "<p>Bonjour $Tester!</p>";
?>
Autor
ora tolgo le virgolette anche dalla variabile usata come chiave
Autor
niente da fare; cookie non ce ne sono; non so come mai prima per un attimo mi ha valorizzato quella variabile in header
Autor
in FF ho appena cambiato i permessi per il sito:
non cambia niente
Ok si vede in quella pagina, ma quando viene ricaricata i valori delle variabili si svuotano.
Devi di nuovo riempire la variabile e visualizzarla anche in quella pagina
Autor
i cookie non vengono settati; questo é il problema; anche impostandoli con js non vengono però letti; questo é un altro problema
Forse il problema è un po' più complesso.
Per iniziare la pagina che scrive i cookies è in una cartella (blog) e la pagina che li riceve in una cartella diversa. Quindi il cookie andrebbe settato in modo da essere abilitato nell'intero dominio "/" (con 0 viene impostato un cookie di sessione):
setcookie("Nome", $Nome, 0, "/");
Poi i cookies da impostare sono multipli, e quindi andrebbero inseriti in un array e letti con un ciclo foreach. Qui trovi tutte le informazioni sulla sintassi da usare: http://php.net/manual/en/function.setcookie.php
Ti allego esempio di base fuori da WebSite.
Ma poiché il form da cui si ricavano le variabili passate in POST è quello dei commenti di un articolo del blog, tutto questo non basta: io ho fatto un esempio con commenti inviati ad un file senza approvazione e, al submit, la pagina viene ricaricata due volte consecutive, e si perdono i valori delle variabili passate in POST.
Il redirect è presente nella funzione checkNewMessages() del file x5engine.php (riga 7593 della Professional 13.0.5.27, riga 5254 della Evolution 13.0.5.27): se editi il sorgente della index del blog ed inserisci var_dump($_POST); come prima riga vedrai per un nanosecondo l'array completo di tutti i valori passati in POST, poi sparisce e viene sostituito con un array vuoto. Se, giusto per fare la prova del nove, che non è proprio il caso di toccare l'engine php visto quante funzioni delicate contiene, commenti la riga 7593 del file x5engine.php vedrai invece tutto valorizzato in modo corretto. Non so se, scegliendo altre impostazioni per i commenti, il comportamento cambia.
Spero di sbagliarmi, ma io non vedo soluzioni percorribili.
Senti Fabio, io non so che dire. Abbiamo riprovato ancora, (e ieri sera di prove ne abbiamo fatte tante) e ora sembra funzionare anche su WebSite senza editare il file x5engine.php, ma serve l'if isset prima di memorizzare la variabile in POST, come nell'esempio allegato prima.
Io vado a farmi un altro caffé che è meglio, magari metto una prova per testarlo online, visto che finora lo abbiamo provato su XAMPP.
Tu prova e verifica in quale di questi due post ho scritto cavolate (magari in tutti e due) :)
Sembra funzionare, quindi la soluzione c'è e il post-edit non è necessario.
Qui la prova online, con il codice utilizzato:
http://quellidelcucuzzolo.altervista.org/appunti/ws-cookie-array/
Autor
ciao stesil, sì ti confermo che funziona; la chiave del problema per la creazione dei cookies era proprio quel redirect nell'engine che rinfrescava i valori nei campi svuotandoli;
lavorando a partire dal tuo esempio io ho scritto quanto segue e puoi vedere girare online:
http://manpower-monaco.webworks2017.pro/blog/index.php
prima di head
<?php
setcookie("cookie[Nome]", $_POST["name"], 0, "/");
setcookie("cookie[Email]", $_POST["email"], 0, "/");
setcookie("cookie[Post]", $_POST["url"], 0, "/");
setcookie("cookie[Titolo]", $_POST["body"], 0, "/");
setcookie("cookie[Codice]", $_POST["codice"], 0, "/");
?>
http://manpower-monaco.webworks2017.pro/cv.php
dentro ad un oggetto html che precede il form:
<div>
Ciao
<?php
$COOKIE = array('Nome', 'Email', 'Post', 'Titolo', 'Codice');
if (isset($_COOKIE['cookie'])) {
foreach ($COOKIE as $valore){
$COOKIE[$valore] = $_COOKIE['cookie'][$valore];
};
print_r ($_COOKIE);
echo "</br>";
print_r ($COOKIE);
echo "</br>";
};
$Nome = $COOKIE[Nome];
$Email = $COOKIE[Email];
$Post = $COOKIE[Post];
$Titolo = $COOKIE[Titolo];
$Codice = strtoupper(substr($COOKIE[Post],58,8));
echo $Nome."</br>";
echo $Email."</br>";
echo $Post."</br>";
echo $Titolo."</br>";
echo $Codice."</br>";
echo '<input type="hidden" name="nome" value="'.$Nome.'">';
echo '<input type="hidden" name="email" value="'.$Email.'">';
echo '<input type="hidden" name="post" value="'.$Post.'">';
echo '<input type="hidden" name="titolo" value="'.$Titolo.'">';
echo '<input type="hidden" name="codice" value="'.$Codice.'">';
?>
<script>
$(window).ready(function(){
var Codice = $('input[type="hidden"][name="codice"]').val();
var Nome = $('input[type="hidden"][name="nome"]').val();
var Email = $('input[type="hidden"][name="email"]').val();
var Post = $('input[type="hidden"][name="post"]').val();
var Titolo = $('input[type="hidden"][name="titolo"]').val();
$('form input[name="ref"]').val(Codice).attr('readonly','readonly');
$('form input[name="nom"]').val(Nome);
$('form input[name="email"]').val(Email);
$('form input[name="url"]').val(Post).attr('readonly','readonly');
$('form input[name="titre"]').val(Titolo).attr('readonly','readonly');
}));
</script>
</div>
purtroppo, come puoi vedere dal sorgente della prima pagina, non sono riuscito a trasferire il valore di Codice da js a php né via jQuery:
var formId = "x5_pc" + Codice + "-topic-form";
$('div.topic-form-row:nth-of-type(4)').prepend('<input type="hidden" form="' + formId + '" name="codice" value="' + Codice + '">');
né via php inserendo in fondo al body:
<?php
//echo '<script>$(document).ready(function(){Codice = (window.location.href).slice(58,66).toUpperCase();var formId = "x5_pc" + Codice + "-topic-form";$(\'div.topic-form-row:nth-of-type(4)\').prepend(\'<input type="hidden" form="\' + formId + \'" name="codice" value="\' + Codice + \'">\');};</script>';
?>
quindi l'ho prelevato direttamente da una delle variabili nella pagina di destinazione;
Ora il problema che si pone é nuovamente il trasferimento dei valori ma in senso contrario; ho usato lo stesso sistema degli input nascosti ma non va nemmeno se piazzo un setTimeout di 3 sec.
Insomma nel form i campi non vengono autocompilati; ho disabiltato anche la paginazione del form per ridurre le dinamiche incognite, ma niente!
In effetti questo dovrebbe essere l'ultimo scoglio, ma il mio intento di entrare nella logica di funzionamento dei cookie non é ancora risolto perché ho diverse perplessità sulle quali non ho trovato ragguagli in internet:
Per me questo sito ha un valore puramente autodidattico perché non mi é stato richiesto e perché non é proponibile ad una agenzia che necessita di un cms per inserire gli annunci in autonomia senza complicarsi l'attività con la necessità di apprendere il web design e l'uso del programma.
Perciò quando mi riterrò soddisfatto a proposito dell'uso dei cookie vi romperò ancora le scatole con la versione che deve farmi la stesso lavoro usando le sessioni php:
http://manpower-monaco.webworks2017.pro/session/index.php
e con quella che mi piace più di tutte, la versione con le sessionStorage:
http://manpower-monaco.webworks2017.pro/sessionstorage/index.php
By the way: chi sa dirmi se un sito che non usa cookie di alcun tipo (nemmeno tecnici) ma solo sessionStorage é comunque soggetto agli obblighi formali imposti dalla legge sui cookies (informativa estesa, banner, link in evidenza all'informativa)?
PS: grazie per gli sforzi che fate insieme a me!
Autor
ppss: non mi faccio scrupoli a metter mano al file engine se necessario, perché:
Il campo generato con javascript passa tranquillamente, però devi scrivere in modo corretto il valore dell'attributo form dell'input che generi dinamicamente: ora ne hai trasformato una parte in maiuscolo, con .toUpperCase(); ma l'id del form è tutto in minuscolo. E' per questo che non ti passa il valore del campo. Puoi anche provare a togliere questo attributo, funziona lo stesso.
Ho capito poco di quello che stai chiedendo. Comunque no, non si crea una stringa, ma un array. Le parentesi quadre indicano proprio che stai creando un elemento di un array. Di fatto invii all'array superglobale S_COOKIE un array di elementi dove la chiave è il nome del cookie e il valore è il valore del cookie. Quando lo leggi, devi dipanare la matassa, quindi cicli l'array che hai impostato e ti ritornano chiave e valore dei singoli cookies.
per quale motivo non ottengo il risultato desiderato se tolgo il preventivo controllo isset sulla variabile? a cosa serve verificarne l'esistenza? non basta che se la variabile non esiste ne resta automaticamente abortito l'uso nel programma non producendo effetto?
Proprio per annullare gli effetti del redirect. Se non controlli l'esistenza della variabile la funzione setcookie agisce due volte: quando si carica la pagina la prima volta imposta il cookie; al redirect, non esistendo la variabile, si ricrea lo stesso cookie con un valore nullo, operazione che cancella il cookie stesso.
perché non posso impostare 10 cookie indipendenti e leggerli immediatamente separati chiamandoli col nome originario?
Sì, se preferisci puoi farlo.
Autor
ciao stesil, scusa il ritardo ma ho dovuto sbrogliare un problema col sito che mi impediva di continuare questo esperimento: https://helpcenter.websitex5.com/es/post/168594#4
grazie per i suggerimenti ed i chiarimenti; sono riuscito a far funzionare il tutto, ma il programma non digerisce bene la sostituzione dell'engine e tra le altre cosucce ignora i tag style inseriti nella sez. esperto.
A quanto pare allo stato attuale, non potendo sostituire engine.php, il programma sembra non permettere la creazione di cookie personalizzati via php, il che é una falla considerevole per sfruttare tutte le potenzialità di questo fantastico programma senza dover ricorrere a assurde complicazioni di codice via js sia per la creazione dei cookie che per la lettura/sbroglio/parse/decodifica URI...rinunciando alla comodità della variabile $_COOKIE solo per giocare d'anticipo sul redirect.
Comunque per tutto il resto l'esperimento é andato in porto, anche senza ciclare con foreach; l'ultimo test l'ho fatto con cookies separati e richiamati individualmente.
In verità ho un'altra ideuzza in testa che con un escamotage potrebbe permettere comunque il raggiungimento dello scopo anche senza toccare engine.php, ma siccome il procedimento é lunghino ci proverò dopo aver testato la via dei cookie via jQuery altrettanto comoda che quella in php.
Adesso riporto il progetto ad uno stato precedente alla prima sostituzione di engine perché il programma non permette di risostituirlo con l'originale o altre copie.
Autor
anzi, ho un'altra idea, i cookie con jQuery li provo dopo; adesso voglio impostare l'array $_COOKIE via js e recuperarlo con php
Guarda che ti sbagli. Il sito che ti ho postato è stato fatto SENZA alcuna modifica al file x5engine.php. Mi sembrava di averlo scritto chiaramente:
Comunque, buon lavoro!
Molto interessante Ma una domanda: io sapevo che La funzione setcookie () deve apparire prima del tag <html>
o va bene anche dopo?
Autor
@ Giorgio: no rigorosamente prima
@ Stesil: scusa mi sono espresso con leggerezza; volevo dire il blog del programma usandone il form come sto facendo io
grazie, peccato non sia un giudizio ma solo un augurio , però ce la farò
nel frattempo il tentativo ibrido dell'array non ha avuto successo!
Prima del tag <html> non head
Autor
sì, pardon!
Autor
SUCCESS!!!
Sono riuscito a portare i valori dal form del blog alla pagina col form usando i cookie php senza toccare l'engine; però c'é qualcosina che non va nella autocompilazione; mi compila solamente il campo del nome
Autor
AAAARGHHHH!!!!
cosa c'é che non va qui? http://manpower-monaco.webworks2017.pro/cv.php
<style>
/* label:not(:first-of-type) {
display: none !important;
};*/
label {
display: none !important;
};
label[id="imObjectForm_2_1_label"] {
display: inline-block !important;
};
</style>
Autor
Per chi se lo chiedesse, per risolvere il problema della della persistenza dei cookie creati in php raggirando il redirect ho fatto così:
invece del normale
<?php
setcookie("Nome", $_POST["name"], 0, "/");
setcookie("Email", $_POST["email"], 0, "/");
setcookie("Url", $_POST["url"], 0, "/");
setcookie("Titolo", $_POST["body"], 0, "/");
setcookie("Codice", $_POST["codice"], 0, "/");
?>
ho scritto
<?php
setcookie("Nome", $_COOKIE["Nome"], 0, "/");
setcookie("Email", $_COOKIE["Email"], 0, "/");
setcookie("Url", $_COOKIE["Url"], 0, "/");
setcookie("Titolo", $_COOKIE["Titolo"], 0, "/");
setcookie("Codice", $_COOKIE["Codice"], 0, "/");
if (!isset($_COOKIE['Nome'])) {
setcookie("Nome", $_POST["name"], 0, "/");
};
if (!isset($_COOKIE['Email'])) {
setcookie("Email", $_POST["email"], 0, "/");
};
if (!isset($_COOKIE['Url'])) {
setcookie("Url", $_POST["url"], 0, "/");
};
if (!isset($_COOKIE['Titolo'])) {
setcookie("Titolo", $_POST["body"], 0, "/");
};
if (!isset($_COOKIE['Codice'])) {
setcookie("Codice", $_POST["codice"], 0, "/");
};
?>
praticamente dico al server di settare il cookie MioCookie con il valore di MioCookie presente nella variabile $_COOKIE;
dopo gli dico di verificare se questa variabile esiste, cioé se contiene un valore, altrimenti e solo altrimenti lo imposta prelevandolo dal campo scelto;
una volta che la pagina viene ricaricata dal redirect, anche se i campi del form sono vuoti, il cookie non viene sovrascritto e quindi cancellato
Autor
nell'attesa che qualcuno risponda al mio quesito di css, inizio la prova con jQuery...
Autor
HELP!
http://manpower-monaco.webworks2017.pro/cookie-$/
Ho seguito le istruzioni trovate qui:
https://www.mrwebmaster.it/jquery/gestire-cookie-jquery_7638.html
https://github.com/carhartl/jquery-cookie
https://github.com/js-cookie/js-cookie/tree/v1.5.1
https://cdnjs.com/libraries/js-cookie/latest
perché non va?
Io non sono riuscito a scaricare il plugin Cookie che è indispensabile al progetto.
Autor
lo puoi scaricare qui : https://github.com/js-cookie/js-cookie/tree/v1.5.1
oppure inserire l'url di un cdn come ho fatto io: https://cdnjs.com/libraries/js-cookie/latest
Secondo me hai fatto indigestione di javascript!
Partiamo dall'ultima domanda: l'errore visibile a colpo d'occhio (poi magari ce ne sono anche altri) è nel richiamo del file js.cookie.js... più che richiamare il file ne hai inserito l'URL in una variabile che hai chiamato src
e per forza che poi $.cookie non funziona!
L'errore nei CSS, invece, sono i punti e virgola alla fine di ogni regola, dopo la chiusura della parentesi graffa: stai scrivendo un codice CSS, non un codice javascript, e i punti e virgola invalidano tutte le regole successive.
Un'ultima considerazione: hai scelto, a differenza dello script che ho provato con lemon, di verificare l'esistenza del cookie invece che l'esistenza dei dati passati in POST. Ma in questo modo se un utente compila un commento di un articolo del blog e poi, senza chiudere il browser, ne vuole inviare un altro, in un articolo diverso, vengono inviati al form sempre i dati del primo, perché i cookies di sessione esistono ancora e non vengono sovrascritti.
Autor
secondo me pure; a furia di saltare da un testo all'altro nella testa ho un frullato di protocolli
L'errore nei CSS, invece, sono i punti e virgola alla fine di ogni regola, dopo la chiusura della parentesi graffa: stai scrivendo un codice CSS, non un codice javascript, e i punti e virgola invalidano tutte le regole successive.
hai ragione; e sì che ne ho scritto di css...comunque per riuscire a correggere il css ho dovuto riesumare e aggiornare con un rapido copia/incolla il progetto da una versione "antica", sempre per causa dell'engine.
Un'ultima considerazione: hai scelto, a differenza dello script che ho provato con lemon, di verificare l'esistenza del cookie invece che l'esistenza dei dati passati in POST. Ma in questo modo se un utente compila un commento di un articolo del blog e poi, senza chiudere il browser, ne vuole inviare un altro, in un articolo diverso, vengono inviati al form sempre i dati del primo, perché i cookies di sessione esistono ancora e non vengono sovrascritti.
vero, io avevo velocemente liquidato la questione dicendomi che tanto l'utente al pc é normalmente lo stesso per tutta la sessione (anche se non é detto affatto), tralasciando che ci sono pure i coockie legati all'articolo; adesso ho sistemato il problema cancellando i cookie via js quando non servono più direttamente nella pagina cv.php; l'ho fatto in js perché altrimenti per farlo in php avrei dovuto scegliere una pagina di rimando diversa da quella del blog.
Grazie per la segnalazione.
Partiamo dall'ultima domanda: l'errore visibile a colpo d'occhio (poi magari ce ne sono anche altri) è nel richiamo del file js.cookie.js... più che richiamare il file ne hai inserito l'URL in una variabile che hai chiamato src
e per forza che poi $.cookie non funziona!
in effetti mi pareva, ma ho seguito pedissequamente l'indicazione per l'installazione che ho trovato qui: https://github.com/js-cookie/js-cookie/tree/v1.5.1
sicuramente avrò frainteso.
ora ho messo:
<link type"text/javascript" href="https://cdnjs.cloudflare.com/ajax/libs/js-cookie/latest/js.cookie.js";>
<script>
$(document).ready(function(){
$.cookie() === Cookies.get();
});
</script>
ma ci sono sicuramente degli errori ancora, perché non funziona né l'impostazione fatta da $.cookie() né quella da Cookie.set() e se decommento la parte di codice commentata nel blog non mi funziona più l'intero script.
Autor
mo' vado un po' a dormire che non capisco più niente
Autor
ps: il segno = che manca qua sopra l'ho appena corretto
Autor
mannaggia alla stanchezza...ma certo che hanno scritto così, parlavano dell'installazione del file da scaricare; non di collegare un cdn
ho riacceso il pc per fare un esperimento riuscito: cancellare i cookie senza js e senza cambiare la pagina di ritorno;
però dopo aver rifatto l'esportazione del sito online (senza usare l'anteprima) nella pagina cv.php rivedevo le etichette e nel sorgente il css non era quello scelto nell'ultimo aggiornamento esportato;
dopo aver chiamato una anteprima (corretta) ho riesportato ancora e il css online era quello giusto; mi sa che questa versione del programma é un pochino difettosa.
Autor
mò vado a nanna veramente
Capisco che la stanchezza può fare brutti scherzi ma oltre ai punto e virgola che ti perseguitano ancora, non capisco perché non richiami lo script con il classico tag:
Autor
ciao lemon, sì, adesso lo scarico e lo allego al progetto direttamente; comunque prima sto litigando col programma perché non mi inserisce gli stili che gli do;
http://manpower-monaco.webworks2017.pro/cv.php
ho appena rimesso tutte e tre le regole in modo che siano ridondanti, chiamato l'anteprima e riesportato tutti i files del sito:
<style>
label:not(:first-of-type) {
display: none !important
}
label {
display: none !important
}
label[id="imObjectForm_2_1_label"] {
display: inline-block !important
}
</style>
ugualmente quando rinfresco la pagina nel browser, come pure in anteprima, gli stili non vengono applicati;
se poi guardo il sorgente online mi compare solo la prima regola (di per sé sufficiente), ma non viene eseguita
Autor
nel frattempo mi accorgo che anche il link e lo script che avevo messo al passo 1 non sono più nel progetto
Autor
adesso ho rimesso
<style>
/* label:not(:first-of-type) {
display: none !important
}*/
label {
display: none !important
}
label[id="imObjectForm_2_1_label"] {
display: inline-block !important
}
</style>
riesportato e rinfrescato, eppure appare
<style> label:not(:first-of-type) { display: none !important } /* label { display: none !important } label[id="imObjectForm_2_1_label"] { display: inline-block !important }*/ </style>
e non viene eseguito!
qui c'é un bel BUG!
Autor
errore: quelli li avevo messo nell'altro progetto in jquery, pardon
Autor
http://manpower-monaco.webworks2017.pro/cookie-$/cv.php
i cookie arrivano usando la formula $.cookie, mentre non arrivano usando la formula nuova; però non riesco a farglieli leggere
Autor
con i test su sessioni php e sessionStorage js non vi scoccerò perché sono riuscito senza problemi, ma continua a non fungere il css della prima regola così come anche gli script js/jQuery dove uso :not(:first-of-type) (http://manpower-monaco.webworks2017.pro/cv.php);
ho già tentato anche l'esportazione in locale e poi online tramite Filezilla; il programma é scagionato;
se qualcuno vuol testare e dirmi se si tratta di un problema dei vari browser o della mia sintassi o cosa...grazie mille!
Autor
niente da fare;
ora ho messo
<style>
label:not(:nth-of-type(1)) {
display: none !important
}
/* label:not(:first-of-type) {
display: none !important
}
label {
display: none !important
}
label[id="imObjectForm_2_1_label"] {
display: inline-block !important
}*/
</style>
ma come al solito non viene nemmeno esportato
Con la struttura che genera WS, il CSS che hai scritto, non può funzionare: gli elementi label devono avere lo stesso genitore, quindi essere fratelli, come in questo esempio: https://jsfiddle.net/0rqdfvjc/
Autor
ok, ma perché? io così seleziono tutte gli elementi presenti nella pagina (genitore comune) e poi ne escludo uno dall'insieme; dove sta scritto che devono essere fratelli?
Autor
...e perché non va nemmeno
$('form input:not(:first-of-type)').attr('type','hidden');
???
Per lo stesso motivo degli elementi label che WS genera.
Se vuoi cambiare l'attributo type di tutti gli input di un form tranne il primo, puoi usare questo:
Qui ne trovi altri: http://stackoverflow.com/questions/2259393/jquery-select-all-except-first
.
Autor
grazie lemon, interessanti alternative;
però jQuery é una libreria proprietaria e come tale può fare qualche deviazione dagli standard soggettivamente con ogni diritto;
invece non mi spiego perché un codice css sintatticamente ortodosso e irreprensibile non debba applicarsi secondo le previsioni ad una pagina creata dal programma; sarebbe a dire che la struttura di questa pagina non é compatibile con il css stabilito dal W3C? questo é assurdo ed impossibile;
ps: ho provato sia la formula del tuo suggerimento sia la seguente:
$('form input').not(':first').attr('type','hidden');
in entrambi i casi i campi spariscono tutti, anche il primo;
mi fai capire che cos'hanno di particolare questi elementi label generati dal programma tranne il fatto di non essere fratelli diretti? se io uso la formula
label {
display: none !important
}
label[id="imObjectForm_2_1_label"] {
display: inline-block !important
}
con una singola regola seleziono tutti gli elementi anche se non sono figli direttamente dello stesso padre, perché un selettore più complesso ma comunque corretto non deve funzionare se é conforme allo standard (ho già testato il risultato anche su Edge e Chrome con identico esito).
Autor
?
Infatti è assurdo e non capisco da dove l'hai dedotto.
Ho semplicemente detto che, nel codice generato da WS, l'elemento label non ha altri fratelli label.
Se osservi il codice generato ti accorgi che ogni label ha un suo div come genitore, ed è per questo motivo che non può funzionare :first-of-type (spero sia chiaro adesso).
Se vuoi un CSS che nasconde tutti gli elementi label tranne il primo (in WS) puoi usare uno di questi:
form div:not(:first-of-type) label {
display: none !important;
}
form div:not(:first-child) label {
display: none !important;
}
form div:not(:nth-child(1)) label {
display: none !important;
}
ps: ho provato sia la formula del tuo suggerimento sia la seguente:
$('form input').not(':first').attr('type','hidden');
in entrambi i casi i campi spariscono tutti, anche il primo;
Ovviamente era un esempio "teorico", anche perché si nasconderebbero pure i pulsanti "Invia" ed eventuale "Reset".
Lo puoi adattare al modulo mail di WS in questo modo:
Mi sfugge cosa vuoi fare ma se il tuo intento è lasciare visibile solo il primo campo (label compresa) di un modulo mail di WS, potresti usare questo CSS:
form div[id$="_container"]:not(:nth-child(1)) {
display: none !important;
}
Tutti i codici sono riferiti al modulo mail presente in questa pagina: manpower-monaco.webworks2017.pro/cv.php
Autor
grazie lemon per spenderti ancora;
ho appena trovato la conferma ai miei dubbi su quanto mi hai lasciato intendere (che quella specifica pseudoclasse sia abile solo nel contesto di un insieme di elementi direttamente figli di un medesimo elemento padre) qui:
https://www.w3.org/wiki/CSS/Selectors/pseudo-classes/:first-of-type
non ero in cerca di soluzioni pratiche che si sprecano ed avevo già trovato, ma di ragioni teoriche che stanno alla fonte;
grazie mille
qui chiudo l'OT sui css;
appena trovo il tempo e la voglia riapprofondisco il tema dei cookie via jQuery...
ps: solo per dovere di chiarezza verso chi legge, quando ho detto
non intendevo che necessariamente l'abbia fatta; in effetti chi conosce jQuery sa che una delle peculiarità più apprezzabili é il fatto di conservare la piena compatibilità formale con tutti i selettori css standard;
intendevo invece che la libreria js nel suo specifico aggiunge metodi sostitutivi a certe formule inerti css, nella fattispecie oltre ad usare la comune formula :not (chiamiamolo pure pseudofiltro, tanto per inventarci un neologismo), usa pure il metodo proprio .not, che non conoscevo prima
Prego.
Perché, di me non ti fidavi?
E' una battuta eh?
Autor
per esperienza sì, ma mi servivano certezze formali da parte di una autorità costituita in merito;
io non indago solo i come, ma anche i perché degli effetti ed i perché dei come;
in realtà il mio hobby sta trasformandosi sempre più dal webdesign alla programmazione applicata nello specifico di WSX5;
inoltre il mio incrollabile punto di partenza é sempre la certezza che TUTTI siamo fallibili, ma che il fallimento dura solo quanto lo facciamo durare, perché chi insiste a cercare prima o poi trova!
Autor
a proposito di fallibilità, mi correggo: é sufficiente il codice qui sopra per portare i dati dal form del blog via cookie php senza manomettere engine.php, poi é opportuno specificare opportunamente e soggettivamente i percorsi e gli altri parametri