Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Problema su una SELECT - Campi Vuoti

    Salve
    ho un problema provo ad effettuare la seguente select:

    Supponiamo che le REQUEST siano vuote, quindi il comando like incide solo su '%', ossia seleziono tutta la tabella.

    $sql_sel = "select * from magazzino_fornitori where ragione like '".$_REQUEST['ragsoc']."%' and piva like '".$_REQUEST["piva"]."%' and email like '".$_REQUEST["email"]."%' order by data_iscrizione DESC, ragione";

    Se i campi ragione,piva,email sono VALORIZZATI su tutta la tabella, va tutto ok , vengono vsualizzati i 2000 record della tabella !!! Invece se il campo ragione,piva,email di un qualsiasi record NON è valorizzato allora NON viene visualizzato quel record !!! In pratica NON CONSIDERA I valori NULL associati ai campi.

    Come posso ovviare a questa situazione ??? Volevo costruire una query dinamica, in base a certi input, cercavo SOLO ciò che avevo digitato, o ragione, o piva o email oppure combinazioni dei 3.

    Grazie Pietro

  2. #2
    usa OR e non AND.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Non posso usare OR. Devono verificarsi tutte le condizioni.

    se avessi per esempio:

    $sql_sel = "select * from magazzino_fornitori where ragione like 'p%' and piva like '%' and email like '%' order by data_iscrizione DESC, ragione";

    Seleziono tutti i records che iniziano (ragione) per p. Ma vengono presi SOLO quelli in cui la ragione inizia per p e piva è valorizzata e email è valorizzata !!!

    Per cui NON posso utilizzare OR

  4. #4
    boh! non sono certo di capire.

    Controlla se le variabilii sono valorizzate ed evita di metterle nel where se risultano vuote.

    ma ho molti dubbi di avere ben capito quello che fai.


    Se i campi ragione,piva,email sono VALORIZZATI su tutta la tabella, va tutto ok , vengono vsualizzati i 2000 record della tabella !!! Invece se il campo ragione,piva,email di un qualsiasi record NON è valorizzato allora NON viene visualizzato quel record !!! In pratica NON CONSIDERA I valori NULL associati ai campi.
    e ci mancherebbe. Si mettono NULL proprio perche' NON devono essere considerati. Non usare campi NULL se ti servono anche se vuoti.

    NULL non e' zero, non e' vuoto e non e' negativo. Semplicemente non esiste. Quindi la AND salta il campo NULL perche' tu richiedi campo = '%' dove % potrebbe anche essere vuoto.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Considera questo, ho una form con 3 campi di input:

    1) ragione
    2) partitaiva
    3) email

    a seconda di ciò che immetto in uno dei qualsiasi campi, desidero eseguire una query dinamicamente, quindi ho pensato di fare così:

    $sql_sel = "select * from magazzino_fornitori where ragione like '".$_REQUEST['ragione']."%' and piva like '".$_REQUEST["partitaiva"]."%' and email like '".$_REQUEST["email"]."%' order by data_iscrizione DESC, ragione";

    In questa maniera , in un unico colpo, seleziono, tutti i record che soddisfano le 3 condizioni, e non mi devo preoccupare di verificare se le REQUEST sono vuote o meno.

    Forse mi puoi consigliare qualcosa di + efficace ???

    p.s. spero di essere stato + chiaro

    Pietro

  6. #6
    in pratica se uno ti manda il form vuoto tu gli passi tutta la tabella.... come se fosse una injection ..... alla faccia della privacy.

    intanto l'uso di REQUEST e' massimalista, poi i dati andrebbero controllati. Se usi un form con method = POST usa $_POST.

    controlla almeno che i campi in arrivo dal form non siano tutti e tre vuoti e se nel caso lo fossero rimandi al form senza eseguire la query. Ti metto un esempio assolutamente non esaustivo. I dati che si ricevono vanno controllati, sia chiaro che e' un esempio.

    Codice PHP:

    <?php
    $_POST
    ['email'] = 'pippo_pippo@pippo.it';  // esempio di valore

    $cont 0;
    !empty(
    $_POST['ragione'])  ?    $ragione trim($_POST['ragione']) : $cont++;
    !empty(
    $_POST['partitaiva']) ?  $piva =  $_POST['partitaiva']  :  $cont++;
    !empty(
    $_POST['email']) ?       $email stripslashes($_POST['email']) :  $cont++;

    if(
    $cont == 3)  {
        echo 
    "nessun dato
    torna al form"
    ;
        exit;
        }

    echo 
    $sql_sel "select * from magazzino_fornitori 
    where ragione like '
    $ragione%' and piva like '$piva%' and email like '$email%' 
    order by data_iscrizione DESC, ragione"
    ;

    ?>
    si puo' fare anche in altri modi, quello che conta sono i controlli sui dati in ingresso che devono sempre essere eseguiti


    @edit.... l'esempio postato ti dara' dei notice in caso di variabili non settate. Ti ripeto che e' un semplice esempio "volutamente" massimalista. I dati vanno controllati, tutti. Non lo si ripetera' mai a sufficienza.


    .

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.