• User

    da phpmyadmin in struttura deseleziona predefinito "NULL"...
    nei campi select se l'utente non segna la lingua quindi campo vuoto fai scrivere nel db "Non segnalato" (o quel che vuoi)..
    il campo null essendo un campo senza dato non viene letto nell ricerca db.. perchè non contiente nulla...
    quando poi stampi i record oltre a "italiano" o "inglese" apparirà "non segnalato" oppure tramite una condizione non fai comparire nulla...


  • User

    ciao marco1983, avevo gia' pensato a questa soluzione, era la mia "ultima spiaggia".
    Dal phpmyadmin e' possibile attribuire al campo NULL un valore di default, ad esempio "vuoto"? In questo caso se l'utente non compilasse la lingua, nel db rimarrebbe il valore di default "vuoto", e' possibile?


  • User

    ciao ragazzi, alla fine ho sostituito tutti i campi NULL con "-" e funziona tutto alla perfezione.
    Ora pero' dovrei filtrare i dati in base all'eta', nel senso:
    stampami tutti gli utenti con eta' compresa da 18 a 30;
    ho provato con BETWEEN:

    SELECT * FROM utenti WHERE eta BETWEEN 18 AND 30

    e funziona,
    ma come faccio a renderlo "dinamico", in modo che prelevi l'eta' da una select tipo la seguente?

    <select name="eta" id="eta">
    <option value="da 18 a 30">da 18 a 30</option>
    <option value="da 31 a 40">da 31 a 40</option>
    </select>


  • User Attivo

    i value dovranno essere
    "18 AND 30"
    "31 AND 40"

    SELECT * FROM utenti WHERE eta BETWEEN ".$_POST['eta']


  • User

    Ciao meis, ho provato, ma mi da errore "You have an error in your SQL syntax; check the manual…"
    Questo e' il codice:

    SELECT * FROM utenti WHERE eta BETWEEN ".$_POST['eta']." AND lingua LIKE '%%%s%%' …

    <select name="eta" id="eta">
    <option value="da 18 a 30">da 18 a 30</option>
    <option value="da 31 a 40">da 31 a 40</option>
    </select>

    Ho modificato il codice in modo che la ricerca avvenga con 2 select, lasciando più' libertà' all'utente:

    SELECT * FROM utenti WHERE eta ".$_POST['eta']." ".$_POST['eta2']." AND lingua LIKE '%%%s%%' …

    <select name="eta" id="eta">
    <option value="BETWEEN 18 ">18</option>
    <option value="BETWEEN 19">19</option>
    <option value="BETWEEN 20 ">20</option>
    ...
    </select>

    <select name="eta2" id="eta2">
    <option value="BETWEEN 18 ">18</option>
    <option value="BETWEEN 19">19</option>
    <option value="BETWEEN 20 ">20</option>
    ...
    </select>

    Così' funziona, ma e' corretto?

    Per una maggior pulizia del codice vorrei utilizzare i campi di testo al posto delle select, ed ho utilizzato il seguente codice:

    SELECT * FROM utenti WHERE eta ".$_POST['eta']." ".$_POST['eta2']." ".$_POST['eta3']." ".$_POST['eta4']." AND lingua LIKE '%%%s%%' …

    <input name="eta" type="hidden" id="eta" value="BETWEEN" />
    <input name="eta2" type="text" id="eta2" />
    <input name="eta3" type="hidden" id="eta3" value="AND" />
    <input name="eta4" type="text" id="eta4" />

    così' l'utente può' scrivere direttamente l'eta' senza "cercarla" nella select.
    Funziona, ma se non compilo i campi, mi da' errore "You have an error in your SQL syntax; check the manual…"
    Come posso fare?


  • User Attivo

    eta e eta3 puoi inserirli direttamente nella query, non serve farci degli input type=hidden.

    per risolvere l'errore puoi controllarlo: se eta2 o eta4 sono = a NULL generi un alert e torni al formulario... o comunque una soluzione simile


  • User

    i campi eta' hanno tutti un valore, l'ho meso come campo obbligatorio.
    Ho scritto cosi':
    SELECT * FROM utenti WHERE eta BETWEEN ".$_POST['eta']." AND ".$_POST['eta3']." AND lingua LIKE '%%%s%%' …
    mi da sempre errore, penso ci siano problemi tra l'AND del BETWEEN e l'AND successivo, quello della lingua.
    Ho provato anche cosi':
    SELECT * FROM utenti WHERE eta BETWEEN (".$_POST['eta']." AND ".$_POST['eta3'].") AND lingua LIKE '%%%s%%' …
    per isolare l'AND del BETWEEN dall'AND successivo, ma niente


  • User Attivo

    Con il between ci dovrebbero essere le virgolette, prova con:
    SELECT * FROM utenti WHERE eta BETWEEN ('".$_POST['eta']."' AND '".$_POST['eta3']."') AND lingua LIKE '%%%s%%'


  • User

    con questo:
    SELECT * FROM utenti WHERE eta BETWEEN ('".$_POST['eta']."' AND '".$_POST['eta3']."') AND lingua LIKE '%%%s%%'
    non funziona.
    Con questo:
    SELECT * FROM utenti WHERE eta BETWEEN ('".$_POST['eta']."') AND ('".$_POST['eta3']."') AND lingua LIKE '%%%s%%'
    funziona parzialmente, ma se non compilo i campi, mi da 0(zero), come risultato;
    quindi se voglio estrarre tutti gli utenti "italiani", tralasciando i campi eta', non mi estrae niente


  • User

    Se vuoi tutti gli italiani
    o inserisci nei campi età da 0 a 150 (cerca tutti gli italiani di età compresa fra 0 e 150)
    oppure devi fare una condizione che controlli i campi età lanciando 2 query differenziate a seconda del risultato (se età è stato tralasciato cerca tutti gli italiani altrimenti cerca gli italiani con età compresa fra eta ed eta3)
    oppure devi fare 2 condizioni prima di lanciare la tua query impostando dei valori predefiniti ai campi età nel caso questi vengano omessi (se non è stato inserito eta allora eta=0; se non è stato inserito eta3 allora eta3=150, cerca gli italiani con età compresa fra eta ed eta3)