Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    68

    Variabili php con mysql

    Ciao a tutti,
    avrei gentilmente bisogno di aiuto per impostare delle variabili php in una query mysql.
    Mi spiego meglio, dovrei fare una ricerca in un db mysql tramite un form php dove nei campi vengono inserite le variabili per una determinata ricerca.
    Ora se tutte le variabili hanno un valore tutto funziona regolarmente.
    Nel momento in cui manca una sola variabile il tutto va in errore.
    Come devo impostare le variabili per le quali non sono interessato eseguire la ricerca e fare così in modo che la ricerca venga fatta solo ed esclusivamente per le variabili inserite?
    Spero di essermi spiegato bene.
    Grazi e ciao
    Federico

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Devi generare dinamicamente la clausola where (suppongo che le variabili di cui parli vadano lì).
    Mettiamo che nel form chiedi marca e modello di un'auto e l'utente può lasciare qualche campo vuoto

    Codice PHP:
    // questa serve in caso l'utente non scriva proprio niente
    // nota lo spazio prima di WHERE
    $where " WHERE 1 = 1";

    if ( 
    $_POST['marca'] != '' )
    {
        
    // nota lo spazio prima di AND
        
    $where .= " AND marca = '" $_POST['marca'] . "'";
    }

    if ( 
    $_POST['modello'] != '' )
    {
        
    // nota lo spazio prima di AND
        
    $where .= " AND modello = '" $_POST['modello'] . "'";
    }

    $query "SELECT * FROM auto " $where
    Io ho messo direttamente i valori che arrivano dal form per motivi di brevità, tu ovviamente dovrai fare i controlli del caso per garantire la sicurezza.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    68
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Devi generare dinamicamente la clausola where (suppongo che le variabili di cui parli vadano lì).
    Mettiamo che nel form chiedi marca e modello di un'auto e l'utente può lasciare qualche campo vuoto

    Codice PHP:
    // questa serve in caso l'utente non scriva proprio niente
    // nota lo spazio prima di WHERE
    $where " WHERE 1 = 1";

    if ( 
    $_POST['marca'] != '' )
    {
        
    // nota lo spazio prima di AND
        
    $where .= " AND marca = '" $_POST['marca'] . "'";
    }

    if ( 
    $_POST['modello'] != '' )
    {
        
    // nota lo spazio prima di AND
        
    $where .= " AND modello = '" $_POST['modello'] . "'";
    }

    $query "SELECT * FROM auto " $where
    Io ho messo direttamente i valori che arrivano dal form per motivi di brevità, tu ovviamente dovrai fare i controlli del caso per garantire la sicurezza.
    Esattamente, grazie.
    In pratica devo mettere tanti if quanti sono i campi per i quali voglio creare delle condizioni particolari.
    Posso inserire anche l'operatore OR?
    Ciao e grazie ancora.
    Federico

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Certo puoi crearla come vuoi la clausola, puoi usare OR, LIKE... tutto ciò che ti mette a disposizione MySQL, basta che alla fine la stringa generata sia corretta.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    68
    Scusa il ritardo per ringraziarti, ma il lavoro mi stà prendendo molto tempo....Grazie.
    Avrei un altro quesito da porti!!
    Dovrei popolare un campo select fatto con php con una determinata colonna del DB Mysql e che oltretutto si trova in un'altra tabella.
    Mi spiego meglio:
    dal mio file index.php gestisco una serie di campi input e select, dove il campo select 'pinco' viene popolato da una colonna della Tabella_2 e il campo select 'pallino' viene popolato da una colonna della Tabella_3 e che alla pressione del tasto invia tutti i dati inseriti compresi quelli selezionati nei campi select vanno a memorizzarsi in Tabella_1.
    E' possibile fare questo?

    Grazie ancora per la disponibilità
    Federico

  6. #6
    Utente di HTML.it L'avatar di kingpin
    Registrato dal
    May 2014
    residenza
    London, UK
    Messaggi
    30
    Quote Originariamente inviata da bonimba Visualizza il messaggio
    E' possibile fare questo?
    Tutto è possibile

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    68
    Quote Originariamente inviata da kingpin Visualizza il messaggio
    Tutto è possibile

    Scusa ma non mi sembra sia stato di aiuto...
    immaginavo che fosse possibile, il problema è come fare, un dritta, un esempio (vedi post di Alhazred che ringrazio ancora)...

    Ciao
    Federico

  8. #8
    Utente di HTML.it L'avatar di kingpin
    Registrato dal
    May 2014
    residenza
    London, UK
    Messaggi
    30
    Quote Originariamente inviata da bonimba Visualizza il messaggio
    Scusa ma non mi sembra sia stato di aiuto...
    immaginavo che fosse possibile, il problema è come fare, un dritta, un esempio (vedi post di Alhazred che ringrazio ancora)...

    Ciao
    Federico
    Hai ragione. Anche se amichevole, la risposta non è stata molto d'aiuto dal punto di vista pratico.

    Detto questo, cito menzionando parti del messaggio iniziale:

    Quote Originariamente inviata da bonimba Visualizza il messaggio
    Mi spiego meglio, dovrei fare una ricerca in un db mysql tramite un form php dove nei campi vengono inserite le variabili per una determinata ricerca.
    Qui manca il contesto pratico. Che tipo di variabili? Che tipo di "determinata ricerca"?
    Ci potrebbero essere diversi tipi di variabili e/o diversi tipi di "determinata ricerca" (ad esempio basase sull' "AND", o sull' "OR" di determinati parametri. O entrambi.).

    Quote Originariamente inviata da bonimba Visualizza il messaggio
    Ora se tutte le variabili hanno un valore tutto funziona regolarmente.
    Nel momento in cui manca una sola variabile il tutto va in errore.

    Nel momento in cui qualcosa "manca" e "tutto va in errore", direi che:
    1) dovresti prevenire che tutto vada in errore in anticipo
    2) se c'è un errore, dovresti mostrare all'utente finale un messaggio significativo che la ricerca o qualsiasi cosa essa fosse non è andata a buon fine. Nota che qui non intendo dire che dovresti sputare fuori uno stack trace del codice. L'utente non ha bisogno di vedere questo. Per non menzionare che far ciò potrebbe tradursi in un problema di sicurezza.
    3) dato che c'è un errore, dietro le quinte dovresti fare in modo di venire a conoscenza di tale errore in qualche modo (logging, monitoring) e agire di conseguenza (direttamente o in differita).

    Quote Originariamente inviata da bonimba Visualizza il messaggio
    Come devo impostare le variabili per le quali non sono interessato eseguire la ricerca e fare così in modo che la ricerca venga fatta solo ed esclusivamente per le variabili inserite?
    Spero di essermi spiegato bene.
    Com'è il tuo form? Che tipo di ricerca stai cercando di far girare?
    Non dai contesto e minimi dettagli. Si può solamente assumere come ha fatto Alzaret.

    E riguardo quell'esempio, seppur pienamente valido, è assolutamente insicuro. Se la sicurezza non ti preoccupa in questo caso d'uso specifico, allora continua pure. Se invece c'è anche solo la minima preoccupazione da parte tua (o chi per te) che qualcuno possa creare danni al tuo sistema, allora ti consiglio vivamente di rivedere il modo in cui stai progettando il tutto.

    Personalmente ti consiglierei di usare prepared statements e/o query escaping. In questo modo potrai garantire almeno un minimo di sicurezza ed evitare potenziali attacchi di SQL injection. E nota che non so come stai sputando fuori le variabili passate nel frontend quando queste sono sbagliate. Qui mi riferisco anche a potenziali attacchi XSS.

    Quote Originariamente inviata da bonimba Visualizza il messaggio
    dal mio file index.php gestisco una serie di campi input e select, dove il campo select 'pinco' viene popolato da una colonna della Tabella_2 e il campo select 'pallino' viene popolato da una colonna della Tabella_3 e che alla pressione del tasto invia tutti i dati inseriti compresi quelli selezionati nei campi select vanno a memorizzarsi in Tabella_1.
    E' possibile fare questo?
    Si. Un form invia sempre i dati selezionati di solito. Non c'è magia dietro a questo meccanismo.
    Se poi vuoi inviare i dati sputati fuori E ANCHE quelli selezionati, permettimi di dire che il tuo design è sbagliato. In tal caso che bisogno hai di inviare avanti e indietro TUTTI i dati + quelli selezionati e inviati dall'utente? Nessuno probabilmente, tanto tu tratterai solo quelli inviati al 99%.

    Se c'è qualcosa che non è chiaro sarò più che felice di chiarire.

  9. #9
    Non capisco quale sia il problema. Fai una query cicli sul resultset e popoli la select! Cosa non ti è chiaro?
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    68
    ...il codice non mi è chiaro...

    Federico

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.