Visualizzazione risultati 1 fino 6 di 6

Discussione: selezione da menu a discesa con 2 variabili

  1. #1
    gianlucaweb non è connesso Utente attivo
    Data registrazione
    01-01-2003
    Messaggi
    470

    Predefinito selezione da menu a discesa con 2 variabili

    Ciao
    Ho questo codice:

    Codice PHP:

    <?php
    function dbconnect() {
    include(
    "dati.php");
    mysql_connect($dbhost, $db_login, $db_pass);
    @
    mysql_select_db("$database") or die ("Unable to select database");
    }
    dbconnect();
    $query = "SELECT * FROM clientidb ORDER BY cognome";
    $esegui = mysql_query($query)
    or die (
    "Non riesco ad eseguire la query $query");
    $righe = mysql_num_rows ($esegui);

    ?>

    <html>
    <head>
    <title>Trova cliente</title>
    <?echo "<b>Clienti presenti nella rubrica: <font color=\"#FF0000\">$righe</b></font><br>";?>
    </head>
    <body>
    <TABLE border=0 width=100% cellpadding=3>
    <tr>
    <td width=100% colspan=2>
    <p align=center><b>Trova il cliente
    <form method=POST action=<? $PATH_INFO ?>>
    </b></td></tr>
    <tr>
    <td width=25%><b>Cognome e Nome cliente</b></td>
    <td width=%><select name=clienti size=1>
    <option> </option>
    <?
    while ($valori = mysql_fetch_array ($esegui)){
    $a1 = $valori ["id_user"];
    $a2 = $valori ["cognome"];
    $a3 = $valori ["nome"];
    echo
    "<option> $a2 $a3</option>";
    }
    ?>
    </select>
    </td></tr>

    <td width=18%><b><input type=submit value=Trova></b></td>
    <td width=82%></form></td>
    </tr>
    </table>

    </body></html>
    In pratica richiamo dal Database il nome e cognome
    dei clienti, i quali sono visualizzati in un menu a discesa.

    Vorrei adesso, premendo il tasto trova, visualizzare nella stessa pagina (sotto al menu)
    il resto dei dati del cliente selezionato(città, data nascita ecc ecc) però non riesco
    a mettere insieme il codice php funzionante.
    ah proposito, selezionando lo spazio vuoto nel menu a discesa i dati precedenti dovrebbero
    essere cancellati (magari se ciò non fose possibile va bene anche un tasto reset.

    Potete aiutarmi?
    grazie

  2. #2
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Per una cosa del genere, non è che PHP ti serva a molto: dovresti preparare tutti i dati di ciascun cliente in vari DIV (e allora sì che PHP ti torna utile), ma poi dovresti usare JavaScript per una modifica "in tempo reale".

    Ecco un po' come verrebbe fuori il tutto:
    Codice PHP:
    <HEAD>
    <SCRIPT LANGUAGE="JavaScript">
    function changePopup (idx)
    {
    for (var i = 0; i < document.myForm.mySelect.length; i++)
    document.getElementById ('layer' + i).style.display = "none";
    if (idx >= 0 && idx < document.myForm.mySelect.length)
    document.getElementById ('layer' + idx).style.display = "block";
    }
    </SCRIPT>
    </HEAD>
    <BODY>
    <?php
    $db
    = mysql_connect ("localhost", "user", "pwd");
    mysql_select_db ("db_name");

    $query = "SELECT * FROM CLIENTI";
    $result = mysql_query ($query, $db);

    // qui ti prepari il codice della select
    $select_code = '<FORM NAME="myForm"><SELECT NAME="mySelect" onChange="changePopup(this.selectedIndex)">';

    // qui invece il codice con tutti i dati
    $div_code = '';

    // acquisisci i dati
    $count = 0;
    while (
    $line = mysql_fetch_array ($result))
    {
    // aggiungi i dati che preferisci in $select_code
    $select_code .= '<OPTION>' . $line['id'] . ' - ' . $line['nome'] . '</OPTION>';

    // ... e qui tutti i dati del relativo cliente
    $div_code .= '<DIV ID="layer' . $count++ . '" STYLE="display:none">' . ... . '</DIV>';
    }

    // chiudi la select e stampa
    $select_code .= '</SELECT></FORM>';
    echo (
    $select_code);
    echo (
    $div_code);
    ?>
    Non l'ho testato... fammi sapere se funziona

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  3. #3
    Guest

    Predefinito

    un altra soluzione può essere quella di usare ajax.
    Nella pagina tu metti il menu a tendina, poi richiami una funzione in javascript ogni volta che si cambia selezione, e nella funzione javascript fai stampare i dati che prendi da un altra pagina in php che preleva i dati dal database.

    ecco un codice di esempio

    Codice PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Titolo</title>
    <script type="text/javascript">
    // JavaScript Document
    function submit(FILE, METHOD, target)
    {
    var rnd = Math.random();
    var num = document.forms[0].elements.length;
    var url = "";

    for (var i = 0; i < num; i++)
    {
    var chiave = document.forms[0].elements[i].name;
    var valore = document.forms[0].elements[i].value;
    var tipo = document.forms[0].elements[i].type;

    if ( (tipo != "submit") && (tipo != "radio") && (tipo != "checkbox") )
    {
    url += chiave + "=" + valore + "&";
    }
    }

    var parameters = url;
    url = FILE + "?" + url + "&rnd" + rnd;

    if (METHOD == undefined)
    {
    METHOD = "GET";
    }
    if (METHOD == "GET")
    {
    ahah(url, target, '', METHOD);
    }
    else
    {
    ahah(FILE, target, '', METHOD, parameters);
    }

    document.getElementById(target).value = '';
    }

    function ahah(url, target, delay, method, parameters)
    {
    if (method == undefined)
    {
    if (window.XMLHttpRequest)
    {
    req = new XMLHttpRequest();
    }
    else if (window.ActiveXObject)
    {
    req = new ActiveXObject("Microsoft.XMLHTTP");
    }
    if (req)
    {
    req.onreadystatechange = function() {
    ahahDone(url, target, delay, method, parameters);
    };
    req.open("GET", url, true);
    req.send("");
    }
    }
    if ( (method == "GET") || (method == "get") )
    {
    if (window.XMLHttpRequest)
    {
    req = new XMLHttpRequest();
    }
    else if (window.ActiveXObject)
    {
    req = new ActiveXObject("Microsoft.XMLHTTP");
    }
    if (req)
    {
    req.onreadystatechange = function() {
    ahahDone(url, target, delay, method, parameters);
    };
    req.open(method, url, true);
    req.send("");
    }
    }
    if ( (method == "POST") || (method == "post") )
    {
    if (window.XMLHttpRequest)
    {
    req = new XMLHttpRequest();
    }
    else if (window.ActiveXObject)
    {
    req = new ActiveXObject("Microsoft.XMLHTTP");
    }
    if (req)
    {
    req.onreadystatechange = function() {
    ahahDone(url, target, delay, method, parameters);
    };
    req.open(method, url, true);
    req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    req.send(parameters);
    }
    }
    }

    function ahahDone(url, target, delay, method, parameters)
    {
    if (req.readyState == 4)
    {
    if (req.status == 200)
    {
    document.getElementById(target).innerHTML = ''+ req.responseText;
    }
    }
    }
    function send()
    {
    submit('dati.php', 'POST', 'result');
    }
    </script>
    </head>
    <body>
    <form action="" onkeyup="return false;" method="post">
    <select name="idx" onchange="send()">
    <?
    $db
    = mysql_connect('host', 'user', 'pass') or die(mysql_error());
    @
    mysql_select_db('name', $db) or die(mysql_error());

    $query = mysql_query('SELECT * FROM clientidb ORDER BY cognome', $db);
    while(
    $row = mysql_fetch_array($query) )
    {
    echo
    "<option value=\"" . $row['id_user'] . "\">" . $row['cognome' . ' ' . $row['nome'] . "</option>\n";
    }
    ?>
    </select>
    </form>
    <div id="result"></div>
    </body>
    </html>
    Codice PHP:
    <?
    $db
    = mysql_connect('host', 'user', 'pass') or die(mysql_error());
    @
    mysql_select_db('name', $db) or die(mysql_error());

    $idx = $_POST['idx'];

    $query = mysql_query('SELECT * FROM clientidb WHERE id_user = ' . $idx . ' ORDER BY cognome', $db);
    while(
    $row = mysql_fetch_array($query) )
    {
    echo
    "Citt&agrave;: " . $row['citta'] . "<br>\n" .
    "Data di nascita: " . $row['nascita'];
    }
    ?>
    il primo pezzo va in una pagina dove inserirai il menu a tendina per scegliere il cliente, il secondo va in un altra pagina, da dove verranno stampati presi i dati aggiuntivi dal database, e stampati nella pagina precedente.
    Ultima modifica di jostock : 03-11-2006 alle ore 22.48.53

  4. #4
    gianlucaweb non è connesso Utente attivo
    Data registrazione
    01-01-2003
    Messaggi
    470

    Predefinito

    Citazione Originalmente inviato da jostock

    il primo pezzo va in una pagina dove inserirai il menu a tendina per scegliere il cliente, il secondo va in un altra pagina, da dove verranno stampati presi i dati aggiuntivi dal database, e stampati nella pagina precedente.
    Grazie, prima di tutto a demenzialsite e jostock per l'interessamento.

    Ho provato entrambe le soluzioni.

    Il codice di demenzialsite richiama i dati dal db, però poi non ho capito come sviluppare il tutto;
    Il codice di jostock anch'esso richiama il cognome e nome dal db.
    Ho creato un altro file (dati.php) dove ho incollato il secondo codice suggerito (con le modifiche del caso)
    però nella pagina del menu mi ritrovo con questo messaggio di errore quando seleziono un nome:

    Warning: mysql_fetch_array(): supplied argument is
    not a valid MySQL result resource in c:\programmi\easyphp1-7\www\fattura\dati.php on line 8


    che corrisponde nella pagina dati.php a questo pezzo:

    while( $row = mysql_fetch_array($query) )


    strano: sembra tutto in ordine.

    Ho provato a cambiare un po' le cose (codice per la connessione ecc ecc) ma il risultato
    è lo stesso. C'è un errore o mi sfugge qualcosa?

    grazie ancora

  5. #5
    Guest

    Predefinito

    ho sistemato il codice, ora dovrebbe andare

  6. #6
    gianlucaweb non è connesso Utente attivo
    Data registrazione
    01-01-2003
    Messaggi
    470

    Predefinito

    Citazione Originalmente inviato da jostock
    ho sistemato il codice, ora dovrebbe andare
    provo subito e ti faccio sapere


    grazie


    EDIT:
    Citazione Originalmente inviato da jostock
    ho sistemato il codice, ora dovrebbe andare
    wooow! Funziona!
    Grazie.
    Ma cosa era che non andava?

    Avrei un'altra richiesta da fare.

    I dati dei clienti dovrebbero confluire in campi che non possono
    essere cambiati.
    Mi spiego meglio:
    I dati devono essere visibili e selezionabili col mouse (copia)
    ma non modificati o cancellati posizionandosi sopra con il cursore
    dal browser; come in alcuni programmi dove si vedono dati
    in grigietto sui quali non è possibile intervenire.
    Andrebbero bene anche le tabelle (se è possibile realizzarle)
    Ciao e grazie ancora



    FunCool: Non scrivere due messaggi consecutivi, utilizza il tasto Edita.
    Ultima modifica di funcool : 05-11-2006 alle ore 17.30.29

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •