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

    Convertire variabile vuota in valore NULL

    Ciao,
    ho una query SQL che potrebbe ricevere tre valori come parametri, ogniuno dei quali potrebbe essere valorizzato o vuoto.

    Nel caso siano vuoti, vorrei che tali parametri fossero passati alla query come valore NULL. In questo modo la query restituirebbe sempre tutti i valori.

    codice:
    // ricevo le variabili dal form ricerca.php
    $codice_libro=$_POST['codice_libro'];
    $utente=$_POST['utente'];
    
    SELECT *
    FROM  my_libri
    WHERE
    	 codice_libro = IFNULL('$codice',codice)
    AND	utente = IFNULL('$utente',utente)

    Come posso convertire un valore vuoto ricevuto via POST in valore NULL?


    Grazie

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Il problema, secondo me, è che il NULL di php ('', 0 o null) lo devi convertire nella stringa NULL da inserire nella query (che poi verrà interpretata come NULL da dbms). L'unica soluzione che mi viene in mente è questa:

    Codice PHP:
    $codice=(trim($_POST['codice_libro'])) ? "'".$_POST['codice_libro']."'" 'NULL';
    $utente=(trim($_POST['utente'])) ? "'".$_POST['utente']."'" 'NULL';

    SELECT *
    FROM  my_libri
    WHERE
        codice_libro 
    IFNULL($codicecodice)
    AND 
    utente IFNULL($utenteutente
    Ma a questo punto tanto vale scrivere:

    Codice PHP:
    $codice=(trim($_POST['codice_libro'])) ? "'".$_POST['codice_libro']."'" 'codice';
    $utente=(trim($_POST['utente'])) ? "'".$_POST['utente']."'" 'utente';

    SELECT *
    FROM  my_libri
    WHERE
        codice_libro 
    $codice
    AND utente $utente 
    Oppure, se ho capito le tue intenzioni, puoi costruirti la query dinamicamente:

    Codice PHP:
    $condition '1=1 ';

    if(
    trim($_POST['codice_libro'])){
        
    $condition " AND codice_libro='"$_POST['codice_libro'] ."'";
    }
    if(
    trim($_POST['codice_libro'])){
        
    $condition " AND utente ='"$_POST['utente'] ."'";
    }

    SELECT *
    FROM my_libri
    WHERE $condition 
    PS: In ogni caso andrebbe fatto l'escape di $_POST['utente'] e $_POST['codice_libro']
    Ultima modifica di boots; 06-09-2016 a 11:57

  3. #3
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    piccola correzione nell'ultimo script:
    Codice PHP:
    if(trim($_POST['codice_libro'])){
        
    $condition .= " AND codice_libro='"$_POST['codice_libro'] ."'";
    }
    if(
    trim($_POST['codice_libro'])){
        
    $condition .= " AND utente ='"$_POST['utente'] ."'";


  4. #4
    Quote Originariamente inviata da boots Visualizza il messaggio
    Il problema, secondo me, è che il NULL di php ('', 0 o null) lo devi convertire nella stringa NULL da inserire nella query (che poi verrà interpretata come NULL da dbms). L'unica soluzione che mi viene in mente è questa:

    Codice PHP:
    $codice=(trim($_POST['codice_libro'])) ? "'".$_POST['codice_libro']."'" 'NULL';
    $utente=(trim($_POST['utente'])) ? "'".$_POST['utente']."'" 'NULL';

    SELECT *
    FROM  my_libri
    WHERE
        codice_libro 
    IFNULL($codicecodice)
    AND 
    utente IFNULL($utenteutente
    Ma a questo punto tanto vale scrivere:

    Codice PHP:
    $codice=(trim($_POST['codice_libro'])) ? "'".$_POST['codice_libro']."'" 'codice';
    $utente=(trim($_POST['utente'])) ? "'".$_POST['utente']."'" 'utente';

    SELECT *
    FROM  my_libri
    WHERE
        codice_libro 
    $codice
    AND utente $utente 
    Oppure, se ho capito le tue intenzioni, puoi costruirti la query dinamicamente:

    Codice PHP:
    $condition '1=1 ';

    if(
    trim($_POST['codice_libro'])){
        
    $condition " AND codice_libro='"$_POST['codice_libro'] ."'";
    }
    if(
    trim($_POST['codice_libro'])){
        
    $condition " AND utente ='"$_POST['utente'] ."'";
    }

    SELECT *
    FROM my_libri
    WHERE $condition 
    PS: In ogni caso andrebbe fatto l'escape di $_POST['utente'] e $_POST['codice_libro']
    Ti ringrazio per le risposte, sei stato molto esplicativo. Purtroppo, provando a utilizzare questo codice:

    Codice PHP:
    $utente=(trim($_POST['utente'])) ? "'".$_POST['utente']."'" 'NULL'
    continua ad passare un valore empty (o blank) invece di NULL.
    Hai qualche altra idea?

    Grazie

  5. #5
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Davvero strano...
    Se fai

    Codice PHP:
    $_POST['utente'] = ' '// oppure = '' o = null
    $utente=(trim($_POST['utente'])) ? "'".$_POST['utente']."'" 'NULL';
      echo 
    $utente
    ti stampa NULL.

    Ha verificato cosa ti arriva tramite post? e puoi postare il codice ?

  6. #6
    Quote Originariamente inviata da boots Visualizza il messaggio
    Davvero strano...
    Se fai

    Codice PHP:
    $_POST['utente'] = ' '// oppure = '' o = null
    $utente=(trim($_POST['utente'])) ? "'".$_POST['utente']."'" 'NULL';
      echo 
    $utente
    ti stampa NULL.

    Hai verificato cosa ti arriva tramite post? e puoi postare il codice ?
    Ho provato ad adattare la tua soluzione che mi sembra ottima, anche ad una insert, alla quale, se gli passo da form i valori vuoti codice_libro e utente, mi inserisce allo stato attuale un valore blank o vuoto. Utilizzando il tuo suggerimento, continua a inserirmi nel campo un valore vuoto, nonostante mi passi NULL nella variabile. Nel campo del db il valore NULL se lo indicio io esplicitamente (uso HeidiSQL) � indicato come (NULL), mentre dopo la insert php ho sempre un valore blank.

    Ricevo la variabile via POST:
    Codice PHP:
    $utente=$_POST['utente'];
    $codice_libro=$_POST['codice_libro'];

    // Insert data into mysql
    $sql="
    INSERT INTO tabella_libri (
            codice_libro,
            utente
            )
        VALUES (
            '
    $codice_libro',
            '
    $utente'
                )"
    ;
    $result=mysql_query($sql);

    ...
    il codice continua con i controlli di inserimento e gestione dell'errore 
    Hai qualche idea?

    Grazie ancora


  7. #7
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Io ti consiglio di stamparti la query ($sql) a video e controllare se è esatta (se ci sono i NULL o i blank). Poi la esegui su heidisql (mai usato, quindi non ti so dire di più)

Tag per questa discussione

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.