• User Attivo

    Grosso problema con passaggio di parametri

    Ciao, a tutti....
    Ho un problemone che non riesco a risolvere da giorni, giorni e giorni... ormai ho provato di tutto e non so più cosa inventarmi, spero che possiate darmi una mano.
    :dhò:
    Faccio un piccolo riepilogo:
    ho necessità, dato un id, di confrontare il valore contenuto nei campi del record appartenente a quell'id, col valore contenuto negli altri campi uguali all'interno di TUTTO il db (es. campo 'zona' dell' id scelto con il campo 'zona' di tutti gli altri record) ed estrarre tutti quelli che contengono uguale valore (es. campo 'zona' id ='stadio' mi servono tutti gli altri campi 'zona' presenti nel db che abbiano valore 'stadio), in breve si tratta di confrontare campi che contengono richieste, con campi che contengono offerte. Sto effettuando un test solo su alcuni campi:

    'cognomenome_ric' (_ric sta x richiedente)
    'cognomenome_off' (_off sta x offerente)
    'zona'(senza suffisso '_.......' sta x richiedente)
    'zona_off'(_off sta x offerente)
    ```Tra i vari, ho fatto un tentativo in cui, in una pagina ho passato, con $_GET i dati dell'id di riferimento su cui effettuare il confronto con tutti gli atri dati presenti nel db, da un link:
    
     [html]<a href="search_x.php?id=<? echo $record['id']  ?>"> search_x</a><br>[/html]Poi nella pagina in questione:
    
    [php]if (isset($_GET['id'])) {$id=$_GET['id'];} else {$id="";}
    if (isset($_GET['cognomenome_ric'])) {$cognomenome_ric=$_GET['cognomenome_ric'];} else {$cognomenome_ric="";}//passaggio dei dati dell'id 
     [/php]E fin qui tutto bene poi, sempre nella stessa pagina, ho passato i dati dei campi che mi interessano in tutto il db (non solo quelli relativi al record di riferimento):
    [php]<?
    $zona_off="SELECT zona_off FROM scheda ";
    $risultato=mysql_query($zona_off,$db);
    while($record=mysql_fetch_assoc($risultato)) 
    { 
    echo $record ['zona_off'];
    ?>
     <hr />
     <?  } ?>
     <hr />[/php]Questa query mi stampa a video i risultati aspettati  presenti in TUTTO il db
    Anche questa query:
    [php]$query1="SELECT * FROM scheda WHERE id='".$_GET['id']."'";[/php]Mi restituisce l'id del record di riferimento, insieme ai dati richiesti
    Ma se faccio:
    [php]$query1="SELECT * FROM scheda WHERE id='".$_GET['id'] . "'  AND zona='$zona' OR zona_off='$zona_off' ";[/php]Oppure:
    [php]$query1="SELECT * FROM scheda WHERE id='$id' AND zona='$zona' OR zona_off='$zona_off'";[/php]Pagina bianca... questa volta però senza i messaggi d'errore ottenuti in precedenti tentativi, quindi suppongo ci siano errori nel passaggio dei parametri.
    Ripeto che però la stessa query testata in phpmyadmin senza variabili:
    

    SELECT cognomenome_ric,cognomenome_offFROM scheda WHERE id= 'pippo' AND zona= 'stadio' OR zona_off = 'stadio'

    Ho provato anche :
    [php]$SELECT="SELECT zona, zona_off FROM scheda WHERE id='".$_GET['id']."'";
    $QUERY = mysql_query($SELECT,$db);
    $OBJ = mysql_fetch_object($QUERY);
    $zona = ($OBJ->zona); // CAMPO zona DELLA TABELLA scheda
    $zona_off = ($OBJ->zona_off); // CAMPO zona_off DELLA TABELLA scheda
    $query1="SELECT * FROM scheda WHERE zona='$zona' AND zona_off='$zona_off'";
    $risultato1=mysql_query($query1,$db);
    $rigo1=mysql_fetch_assoc($risultato1);?>[/php]....... pagina vuota.
    Nel db è tutto in una sola tabella. Avevo pensato di differenziare la tabella 'richieste' e la tabella 'offerte' ma mi chiedo: se in mysql funge anche con tutti i campi contenuti in una sola tabella, il problema sta evidentemente nel modo di passare i parametri, facendo due tabelle, una per le offerte (es.:zona_off) ed una per le richieste (es.:zona), non avrei gli stessi problemi o magari forse anche qualcuno in piu?...
    Getto questo messaggio nell'ultima bottiglia prima del naufragio...
    Grazie a tutti i soccorritori.  :cry:

  • User Attivo

    Evidentemente, se non funziona, le variabili sono nulle ossia non contengono nulla.

    Prova a fare qualche echo delle variabili controlla se arriva qualche valore

    CIAO


  • User

    Ciao, avevo aperto la posta per ringraziarti delle dritte e del tempo.
    Piano piano mi hai fatto capire diverse cose ed alla fine ho risolto, tra l'altro in un modo che mi avevi suggerito.
    Semplicemente differenziando le tabelle e stabilendo una relazione di tipo JOIN. Ha funzionato subito. POsto il codice semmai dovesse servire a qualcun altro:
    <?
    include("config.inc.php");
    include("connect.php");

    if (isset($_GET['id'])) {$id=$_GET['id'];} else {$id="";}

    if (isset($_GET['cognome'])) {$cognome=$_GET['cognome'];} else {$cognome="";}
    if (isset($_GET['zona'])) {$zona=$_GET['zona'];} else {$zona="";}
    if (isset($_GET['prezzo'])) {$prezzo=$_GET['prezzo'];} else {$prezzo="";}

    $ip=$_SERVER['REMOTE_ADDR'];

    $query1="SELECT offerte.id,offerte.cognome,offerte.zona,offerte.prezzo FROM richieste JOIN offerte WHERE richieste.id='".$_GET['id']. "' AND richieste.zona= offerte.zona AND richieste.prezzo= offerte.prezzo";

    $risultato=mysql_query($query1,$db);
    while($record=mysql_fetch_assoc($risultato)) // costruisco le tabelle per gli articoli
    { ?>

    Una domanda. Ritieni possibile (dal momento che la mia formazione, come penso quella di molti altri, è nata come autodidatta sul web... e magari purtoppo si vede) un percorso didattico come si deve a distanza per approfondire alcuni aspetti o semplicemente per colmare alcune lacune ?
    Se lo ritieni possibile tu saresti disposto a darmi una mano? ed eventualmente a quali costi?

    Grazie ancora e buona giornata.
    A presto


  • User Attivo
    $query1="SELECT offerte.`id`,offerte.`cognome`,offerte.`zona`,offe rte.`prezzo` FROM richieste JOIN offerte WHERE richieste.id='".$_GET['id']. "' AND richieste.`zona`= offerte.`zona` AND richieste.`prezzo`= offerte.`prezzo`";
    ```**PERICOLOSISSIMO!!** Stai passando al database un valore ($_GET['id']) che ti è stato "consegnato" dall'utente senza prima controllarlo! Non ti pare di fidarti un po' troppo? ;) E se il tuo utente scrivesse nella query string (che è quella che popola l'array $_GET) qualcosa tipo:
    

    1'; DELETE * FROM richieste; SELECT 1 FROM offerte WHERE '1

    
    Primo suggerimento: usa un framework per parlare con il DB (ovviamente il primo suggerimento è http: / / pear.php.net/package/MDB2)
    Secondo: leggiti questa pagina di manuale: http: / / it2.php.net/mysqlescapestring (e anche tante altre!!)
    
    HTH, ciao! :)