query per popolare una select tramite ajaxc php e xml !

  • Creatore Discussione Creatore Discussione Kelly
  • Data di inizio Data di inizio

Kelly

Utente Attivo
5 Set 2008
112
1
18
mi sono proprio incastrata...!
ho seguito un esempio su un libro ed è andato tutto liscio, però ora ho
un'esigenza diversa rispetto all'esempio e non so come risolvere, vorrei quindi
se possibile qualche delucidazione.

Il mio scenario è questo: ho una form con due input text (codice cliente, password) e una select dove andranno i
destinatari collegati al codice cliente inserito.
Non riesco a capire come popolare la select senza stravolgere il lavoro che ho già fatto.
Riesco con successo a reperire i risultati della query destinatari che dovrebbe riempire la select,
risultato che inserisco in un array perchè potrebbero essere più di uno, ma poi il codice che trasferisce il risultato accoglie
stringa(responsetext) e non l'array, e poi cmq non saprei come inserirlo nella select essendo alla primissime armi....
Ho fatto una prova con un semplice testo l'ho passato al responsetext come potete vedere in more.php, poi in more.js tramite la
funzione handleServerResponse (myDiv = document.getElementById("risultato");
myDiv.innerHTML = responseText;) mi ritrovo direttamente la stringa nel div, quindi ho capito come funziona se trattasi di stringa,
ma non so proprio come elaborare il risultato della query che potrebbe essere più di un record, e tramite js passarlo alla select.

cmq riporto il codice....se qualcuno volesse spendere qualche minuto per capirci qualcosa gliene
sarei veramente grata 0:)

index.php
HTML:
<html>
  <head>
    <title>Practical AJAX: PHP Parameters and Error Handling</title>
    <script type="text/javascript" src="morephp.js"></script>
    <meta name="viewport" content="width=device-width, user-scrollbar=no">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Ordini On Line</title>
  </head>
  <body>
<table class="tablogin" border="1" align="center">
  <tr class="trblu">
    <td><img src="logo.gif" id="imglogo"/></td>
   <td colspan="2" align="center" class="textreg"><p>Se sei già REGISTRATO inserisci Login e Password<br>
   altrimenti richiedi i codici al servizio clienti della Rino Pratesi
   Tel. +39.06.79.07.61</td>
  </tr>
  <tr>
    <td class="tdwhite" colspan="3">Rino Pratesi ordini on-line</td>
  </tr>
  <tr>
    <td class="tdrosso">&nbsp;</td>
    <td  valign="top" class="corpo"><label for="area" class="area">Accedi alla tua Area Riservata per effettuare gli ordini on-line</label>
    <form method="post" name="modulo">
    <fieldset class="raccoglitore"> <br> <legend>LOGIN:</legend>
     <label for="codice" class="lblcodice">Codice</label><input type="text" name="txtcodice" id="codice" class="txtcod"/>
     <label for="password" class="lblpassw">Password</label><input type= "text" name= "txtpassword" id="password" class="txtpassw"/>
     <input type= "button" value="Send" onClick="process()" class="mnubutton"/> </fieldset>
     <br><fieldset><legend>SELEZIONA DESTINATARIO:</legend>
     <select name="listadest" class="combolista">
     </select>
     <p><p>
     <div id= "risultato" />
     </fieldset>
    </form>
    </td>
    <td class="tdrosso">&nbsp;</td>
  </tr>
  </table>  
  </body>
</html>

more.php
Codice:
<?php
$codice = $_GET['codice'];
$password = $_GET['password'];

// chiamata alla funzione di connessione
 $data->connetti();

 $sqlLogCli="select CODICE, PASSWORD1, E_MAIL, RAGIONE_SOCIALE, INDIRIZZO, CITTA, PR from " .$db_clienti. " where CODICE =". $codice ." AND PASSWORD1= '".$password."'"; 

 $risultlogincli= $data->query($sqlLogCli);
 $NUMRECCLI=mysql_num_rows($risultlogincli);
 
 if ($NUMRECCLI > 0)
 {
   $rescli=$data->estrai($risultlogincli);  
   $RAGSOCCLI=$rescli->RAGIONE_SOCIALE;
   $CITTA=$rescli->CITTA;
   $PR=$rescli->PR;
   $daticlienti=$RAGSOCCLI . " ". $CITTA;
     
   $sqlLogDest="select CODCLI, CODDES, RAGIONE_SOCIALE,INDIRIZZO,CAP,CITTA,PR from " . $db_dest. " where CODCLI =". $codice;      
   //filtro la tabella destinatari
   $risultlogindest= $data->query($sqlLogDest);
   $NUMRECDEST = mysql_num_rows($risultlogindest);
   $datidest= "";
   //questi dati mi servono per popolare la select
   if($NUMRECDEST>0)
   {
      $i=0;
      	while($row = mysql_fetch_array($risultlogindest))
     	{
         $clientiDest[] = array(
         'RAGIONE_SOCIALE' => $row['RAGIONE_SOCIALE'],
         'INDIRIZZO' => $row['INDIRIZZO']);
    	 $i++;
     	}  
    }
    else
        header("Location: diario.php?smslogin=".$clientiDest[1]);
 }
   //questa parte di codice inserisce il risultato nel mydiv, e funziona se trattasi di stringa
  //ma non di array. 

    $data->disconnetti(); 
    $dom= new DOMDocument();
 	$response = $dom->createElement('response');
 	$dom->appendChild($response);
 	$responseText = $dom->createTextNode($clientiDest[1]);
 	$response->appendChild($responseText);
 	$xmlString = $dom->saveXML();
 	echo $xmlString;
    
?>

more.js
Codice:
function handleServerResponse()
{
  // retrieve the server's response packaged as an XML DOM object
  var xmlResponse = xmlHttp.responseXML;
  // catching potential errors with IE and Opera
  if (!xmlResponse || !xmlResponse.documentElement)
    throw("Invalid XML structure:\n" + xmlHttp.responseText);
 
  // catching potential errors with Firefox
  var rootNodeName = xmlResponse.documentElement.nodeName;
  if (rootNodeName == "parsererror") 
    throw("Invalid XML structure:\n" + xmlHttp.responseText);
  // getting the root element (the document element)
  xmlRoot = xmlResponse.documentElement;
  // testing that we received the XML document we expect
  if (rootNodeName != "response" || !xmlRoot.firstChild)
    throw("Invalid XML structure:\n" + xmlHttp.responseText);
  // the value we need to display is the child of the root <response> element
  responseText = xmlRoot.firstChild.data;
  // display the user message
  myDiv = document.getElementById("risultato");
 // $risultato = responseText;
  myDiv.innerHTML = responseText;
}
 
Ciao e Benvenuta :fonzie:
anche tu membro dell' U.C.A.S. ? (Ufficio Complicazione Affari Semplici)
Ti sei proprio incasinata.
Con tutta la buona volontà stasera non riesco a comprendere il codice che hai postato, magari ci riprovo domani a mente fresca.
Il discorso comunque è molto semplice :
Tutto quello che mandi in echo nella pagina chiamata da ajax verrà mostrato nel div indicato nella chiamata.
Ti posto un esempio molto semplice di come potresti fare:
index.php - contiene il form e la chiamata ajax
HTML:
<script type="text/javascript">
    function richiesta_ajax(code){  
        var xmlHttp = new XMLHttpRequest();
        xmlHttp.open('GET', 'more.php?code=' + code , true);    
        xmlHttp.onreadystatechange = function() {      
            if(xmlHttp.readyState == 4) {              
                if (xmlHttp.status == 200) {    
                    document.getElementById("risultato").innerHTML=xmlHttp.responseText;
                }
            }
        };   
        xmlHttp.send(null);
    }
</script>
<form>
    <input id="code" type="text" name="codice" />
    <input onclick="richiesta_ajax(document.getElementById('code').value)" type="button" name="send" value="send"/>
    <div id="risultato"></div>
</form>
more.php - contiene l'elaborazione della richiesta
PHP:
<?php
if ($_GET['code'] == '123456') {
    $dest = array("pippo", "pluto", "paperino");
    ?>
    <select name="listadest">
        <?php
        foreach ($dest as $key => $value) {
            echo "<option value='$key'>$value</option>";
        }
        ?>
    </select>
    <?php
} else {
    echo "<p> ! codice errato ! Accesso negato </p>";
}
?>
Ho usato un semplice array per farti capire meglio la struttura.
Il codice potrebbe diventare ancora più semplice utilizzando la libreria Jquery ma questo è un altro discorso.

Non ho commentato ma sono poche righe di codice e se sei riuscita a decifrare quel libro non dovresti aver problemi. :book:
 
Ultima modifica:
scusa se mi inserisco in questa discussione,
ho creato i due file che hai postato, nella stessa dir,
win 7, ie 11, mi chiede e acconsento, contenuto bloccato
inserisco il codice 123456 ma nulla succede
forse un controllo nelle "opzioni internet",
mi puoi dare una dritta ?
grazie infinite e ancora scusa
Marino
 
Strano non dovrebbe bloccarti il contenuto,
ho riprovato anche con ie 11,
prova a vedere se qui ti fa la stessa cosa
 
dal tuo link funziona

sul pc ho abilitato l'estensione di 3e parti e non mi chede più l'attivazione

ma continua a non rispondere
grazie, se ti viene in mente qualcosa
ciao
Marino
 
ho attivato il debug

Riga: 7
Errore: Accesso negato.
xmlHttp.open('GET', ....

se hai un suggerimento
ciao
Marino
 
Sinceramente non mi viene in mente
cominciamo ad escludere i problemi di compatibilità:
lo script che ho postato in effetti non funziona sulle versioni vecchie di IE ( sulla 11 si però)
modificalo cosi e riprova
HTML:
<script type="text/javascript">
    function richiesta_ajax(code) {
        var xmlHttp = null;
        if (window.XMLHttpRequest) {
            // IE7+, Firefox, Chrome, Opera, Safari
            xmlHttp = new XMLHttpRequest();
        }
        if (window.ActiveXObject) {
            // IE5, IE6
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlHttp.open('GET', 'more.php?code=' + code, true);
        xmlHttp.onreadystatechange = function() {
            if (xmlHttp.readyState == 4) {
                if (xmlHttp.status == 200) {
                    document.getElementById("risultato").innerHTML = xmlHttp.responseText;
                }
            }
        };
        xmlHttp.send(null);
    }
</script>
Eventualmente per non intasare questa discussione sporterò i messaggi in una nuova
 
query per popolare una select tramite ajaxc php e xml !

grazie infinite....non sai da quanto tempo cerco una risposta....
adesso faccio delle prove.....poi in caso ti scrivo....
grazie ancora :love:




Ciao e Benvenuta :fonzie:
anche tu membro dell' U.C.A.S. ? (Ufficio Complicazione Affari Semplici)
Ti sei proprio incasinata.
Con tutta la buona volontà stasera non riesco a comprendere il codice che hai postato, magari ci riprovo domani a mente fresca.
Il discorso comunque è molto semplice :
Tutto quello che mandi in echo nella pagina chiamata da ajax verrà mostrato nel div indicato nella chiamata.
Ti posto un esempio molto semplice di come potresti fare:
index.php - contiene il form e la chiamata ajax
HTML:
<script type="text/javascript">
    function richiesta_ajax(code){  
        var xmlHttp = new XMLHttpRequest();
        xmlHttp.open('GET', 'more.php?code=' + code , true);    
        xmlHttp.onreadystatechange = function() {      
            if(xmlHttp.readyState == 4) {              
                if (xmlHttp.status == 200) {    
                    document.getElementById("risultato").innerHTML=xmlHttp.responseText;
                }
            }
        };   
        xmlHttp.send(null);
    }
</script>
<form>
    <input id="code" type="text" name="codice" />
    <input onclick="richiesta_ajax(document.getElementById('code').value)" type="button" name="send" value="send"/>
    <div id="risultato"></div>
</form>
more.php - contiene l'elaborazione della richiesta
PHP:
<?php
if ($_GET['code'] == '123456') {
    $dest = array("pippo", "pluto", "paperino");
    ?>
    <select name="listadest">
        <?php
        foreach ($dest as $key => $value) {
            echo "<option value='$key'>$value</option>";
        }
        ?>
    </select>
    <?php
} else {
    echo "<p> ! codice errato ! Accesso negato </p>";
}
?>
Ho usato un semplice array per farti capire meglio la struttura.
Il codice potrebbe diventare ancora più semplice utilizzando la libreria Jquery ma questo è un altro discorso.

Non ho commentato ma sono poche righe di codice e se sei riuscita a decifrare quel libro non dovresti aver problemi. :book:
 
Kelly, Nique :confused:
Siete due o una sola?

@Marino
certo, c'è bisogno del web server per interpretare il codice php
 
Ultima modifica:
query per popolare una select tramite ajaxc php e xml !

Stessa persona, ho avuto problemi con il recupero della vecchia password
allora mi sono registrata di nuovo...
e quindi alla fine ho fatto confusione....quindi se vuoi cancellarne uno dei due per me va bene,
mantenendo la discussione attuale....!

perdona i casini!

Kelly, Nique :confused:
Siete due o una sola?

@Marino
certo, c'è bisogno del web server per interpretare il codice php
 
Non ti preoccupare :fonzie:
chiedo all'amministratore come procedere e ti faccio sapere
 
query per popolare una select tramite ajaxc php e xml !

Ho provato il tuo esempio .... c'è una cosa che non capisco...
ovvero, mentre nel libro c'è questa istruzione:

xmlHttp.responseText=xmlRoot.firstChild.data;

nel tuo esempio il responseText non lo assegni...
sembrerebbe che già contenga il valore......


:-)
 
Ultima modifica di un moderatore:
Il codice che hai postato è incompleto e fa uso di XML, inutile per quello che devi fare tu
Ho trovato questa discussione che credo contenga l'intero codice che stai utilizzando
 
query per popolare una select tramite ajaxc php e xml !

E' un esempio che sta nello stesso libro che sto utilizzando, il mio codice è incompleto nel senso che
non ho riportato ad esempio in dettaglio le interrogazioni al database, e la costruzione dell'oggetto
xmlHttp solo per semplificare la lettura....cmq ora cercherò di modificare il codice intorno al tuo....

grazie :-)




Il codice che hai postato è incompleto e fa uso di XML, inutile per quello che devi fare tu
Ho trovato questa discussione che credo contenga l'intero codice che stai utilizzando
 

Discussioni simili