Problema di invio dati AJAX-PHP

tommaso862000

Nuovo Utente
1 Ott 2008
6
0
0
Salve a tutti spero possiate aiutarmi in questo dilemma
allora io ho creato un form contenente delle select che si popolano mediante ajax.Fin qui tutto bene poi ho avuto la necessita di creare un tasto che alla sua pressione mi creasse altre due select uguali a due gia presenti nel form.
il tasto funziona benissimo le select si popolano
il problema è che quando premo il tasto invia per inviare i dati a php mi rileva solo le ultime due select inserite
AIUTOOOOOOOOOO
se avete bisogno del codice ditemelo che ve lo posto.
GRAZIE CIAO
 
> il problema è che quando premo il tasto invia per inviare i dati a php
> mi rileva solo le ultime due select inserite

In che senso? Queste due select sono popolate via AJAX? Quali sono tutti i campi? Come passi i dati?

etc etc etc... :)
 
> il problema è che quando premo il tasto invia per inviare i dati a php
> mi rileva solo le ultime due select inserite

In che senso? Queste due select sono popolate via AJAX? Quali sono tutti i campi? Come passi i dati?

etc etc etc... :)

si le select sono popolate da ajax ti metto il codice che crea queste select
Codice:
function Aggiungi()
{
	
	
		
 	 a++;
	    	//creo le righe e le colonne per inserire le select
		var oTr=document.createElement("tr");
	
		var oTd1=document.createElement("td");
		var oTd2=document.createElement("td");
		var oText=document.createTextNode("corso "+a);
		var oTr2=document.createElement("tr");
		 var oTd3=document.createElement("td");
		var oTd4=document.createElement("td"); 
		var tbody = document.createElement("tbody");
			 var oText=document.createTextNode("corso"+a);
	  	 var oText1=document.createTextNode("materia"+a);
	Corso[a]=document.createElement("SELECT");
	Materia[a]=document.createElement("SELECT");
	scuola=document.getElementById("categoria");
	Via=document.getElementById("Via");
		Corso.setAttribute("id", "corso"+a);
		 Corso.setAttribute("name", "corso"+a);	
		 scuola=document.getElementById("categoria");
		 Materia.setAttribute("id", "materia"+a);
		 Materia.setAttribute("name", "materia"+a);
//questa azione mi riempie la select delle materie
		 Corso.onChange=GetMateria(scuola.options[scuola.selectedIndex].value);
	     oTd1.appendChild(oText);
		 oTd2.appendChild(Corso);
		 oTr.appendChild(oTd1);
		  oTr.appendChild(oTd2);
		  oTd3.appendChild(oText1);
		   oTd4.appendChild(Materia);
		    oTr2.appendChild(oTd3);
			 oTr2.appendChild(oTd4);
			 tbody.appendChild(oTr);
			  tbody.appendChild(oTr2);
		
		
		 
		 //questa funzione mi riempie la select corso
		  GetClasse(Via.options[Via.selectedIndex].value, scuola.options[scuola.selectedIndex].value);
	document.getElementById("tabella").appendChild(tbody);
	nascosto=document.getElementById("numero");  
		nascosto.setAttribute("value",a);
	}


Ti ripeto che le select vengono popolate corretamente ,cmq vengono prelevate da una query in php se vuoi il codice dimmelo.
il problema è che se chiamo la funzione aggiungi più volte,quindi piu select nel form, alla pressione del tasto invia cioè qundo faccio il submit del form nell'array post esistono solo le ultime select aggiunte
Se non sono stato chiaro dimmelo ciao e grazie
 
No, non molto :)

Puoi pubblicare la pagina di esempio cosi provo a capire che succede?

si ecco il codice Html
Codice:
<form action="insdocenteDB.php" method="get" id="form1">
  <table width="100%" border="0" cellspacing="0" cellpadding="0" id="tabella">
    <tr>
      <td>Nome</td>
      <td colspan="2"><input type="text" name="nome" id="nome" /></td>
    </tr>
    <tr>
      <td>Cognome</td>
      <td colspan="2"><input type="text" name="cognome" id="cognome" /></td>
    </tr>
    <tr>
      <td>Email</td>
      <td colspan="2"><input type="text" name="email" id="email" /></td>
    </tr>
    <tr>
      <td>Scuola</td>
      <td><label>
        <select name="scuola" id="categoria" onChange="Getplesso(this.options[this.selectedIndex].id)">
            <option>--seleziona la scuola--</option>
         <option value="1" id="1">Infanzia</option>
          <option value="2" id="2">Primaria</option>
          <option value="3" id="3">Primo Grado</option>
        </select>
      </label></td>
    </tr>
     <tr valign="top">
      <td>Via del Plesso</td>
      <td><label>
         <select name="Via" disabled="disabled" id="Via" onChange="GetClasse(this.options[this.selectedIndex].value, scuola.options[scuola.selectedIndex].value)" >
           <option selected="selected">---seleziona la via del plesso---</option>
         </select>
      </label>       </td>
    </tr>


      <tr>

      <td>Classe e Corso</td>
      <td colspan="2"><label>
       <select name="corso0"  disabled="disabled" id="corso0" onChange="GetMateria(scuola.options[scuola.selectedIndex].value,0)"  >
           <option>---seleziona il corso---</option>
         </select>
      </label> <label></label></td>
    </tr>
     <tr>

      <td>Materia</td>
      <td><label>
       <select name="materia0"  disabled="disabled" id="materia0" onChange="abilita()"  >
           <option>---seleziona il corso---</option>
        </select>
      </label> <label></label></td>
       <tbody id="contenuto" name="contenuto">
       </tbody>

      <td></td>
      <td><input name="numero" type="hidden" value="" id="numero"  /></td>
    </tr>
	  </table>
	   <div align="left"><input name="button" type="button" id="add" value="aggiungi materia e corso" onClick="Aggiungi()" /></div>
       <div align="right">
        <input name="submit" type="submit" value="invia"  />
      </div>
</form>


il tasto aggiungi maeteria e corso mi deve aggiungere altre due select materia e corso.La funzione aggiungi te l'ho impostata sopra.
Il problema è che quando clicco sul tasto invia mi prende i campi nome,cognome,email scuola,via e poi mi prende solo le ultime due select aggiunte.
 
Ti inivio anche il codice completo di ajax con tutte le funzioni sicuramente il codice non sarà ottiamale anche perche e da due giorni che sto usando ajax
Codice:
var url = "select1.php";
var url1 = "selectsezione.php";
var what = "SetLinguaggi(req.responseText)";
var what1 = "SetLinguaggi1(req1.responseText)";
var url3 = "selectMateria.php";
var what3 = "SetMateria(req2.responseText)";

function Getplesso(Categoria)
{

  InviaDati("categoria="+Categoria);
}

function SetLinguaggi(Linguaggi)
{

  var linguaggioBox = document.getElementById("Via");

   linguaggioBox.disabled=false;

  if(Linguaggi != "")
  {

    var arrLinguaggi = Linguaggi.split(",");
	    linguaggioBox.options[linguaggioBox.options.length] =
        new Option("","");
    for(i = 1; i < arrLinguaggi.length; i=i+2)
    {
      if(arrLinguaggi[i] != "")
      {

        linguaggioBox.options[linguaggioBox.options.length] =
        new Option(arrLinguaggi[i], arrLinguaggi[i-1]);

      }
    }

	}


}
function InviaDati(data)
{
  // istanziamo l'oggetto XMLHttpRequest
  if (window.XMLHttpRequest)
  {
    req = new XMLHttpRequest();
    req.onreadystatechange = PocessaDati;
    req.open('POST', url, true);
    req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    req.send(data);
  }
  // controlliamo la versione di ActiveX
  else if (window.ActiveXObject)
  {
    req = new ActiveXObject('Microsoft.XMLHTTP')
    if (req)
    {
      req.onreadystatechange = PocessaDati;
      req.open('POST', url, true);
      req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      req.send(data);
    }
  }
}

function PocessaDati()
{
  // monitoriamo lo stato dell'invio
  if (req.readyState == 4)
  {
    // restituiamo lo stato della richiesta
    if (req.status == 200)
    {
      eval(what);
    }else{
      alert('Problema nella gestione dei dati: ' +
      req.responseText);
    }

  }
}

function GetClasse(id_via,id_tipo)
{
	InviaDati2("id_plessotipo="+id_via+" "+ id_tipo);

	}

	function InviaDati2(data)
{

  // istanziamo l'oggetto XMLHttpRequest
  if (window.XMLHttpRequest)
  {
    req1 = new XMLHttpRequest();
    req1.onreadystatechange = PocessaDati1;
    req1.open('POST', url1, true);
    req1.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    req1.send(data);
  }
  // controlliamo la versione di ActiveX
  else if (window.ActiveXObject)
  {
    req1 = new ActiveXObject('Microsoft.XMLHTTP')
    if (req1)
    {
      req1.onreadystatechange = PocessaDati;
      req1.open('POST', url1, true);
      req1.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      req1.send(data);
    }
  }
}
function PocessaDati1()
{
  // monitoriamo lo stato dell'invio
  if (req1.readyState == 4)
  {
    // restituiamo lo stato della richiesta
    if (req1.status == 200)
    {
      eval(what1);
    }else{
      alert('Problema nella gestione dei dati: ' +
      req1.responseText);
    }
  }
}

function SetLinguaggi1(Linguaggi2)
{

	var numcorso="corso"+a;
  var linguaggioBox = document.getElementById(numcorso);
  linguaggioBox.options.length = 0;
   linguaggioBox.disabled=false;
 if(Linguaggi2 == "")alert("Spiacente ma non sono stati ancora definiti i corsi per questo plesso");
  if(Linguaggi2 != "")
  {
	  linguaggioBox.options[linguaggioBox.options.length] =
        new Option("","");
    var arrLinguaggi = Linguaggi2.split(",");

    for(i = 1; i < arrLinguaggi.length; i=i+2)
    {
      if(arrLinguaggi[i] != "")
      {
        linguaggioBox.options[linguaggioBox.options.length] =
        new Option(arrLinguaggi[i], arrLinguaggi[i-1]);

      }
    }

	}


}


function GetMateria(Categoria)
{

  InviaMateria("categoria="+Categoria);
}

function SetMateria(Materia)
{

  var linguaggioBox = document.getElementById("materia"+a);
  linguaggioBox.options.length = 0;
   linguaggioBox.disabled=false;

  if(Materia != "")
  {
    var arrLinguaggi = Materia.split(",");
	 linguaggioBox.options[linguaggioBox.options.length] =
        new Option("","");
    for(i = 1; i < arrLinguaggi.length; i=i+2)
    {
      if(arrLinguaggi[i] != "")
      {

        linguaggioBox.options[linguaggioBox.options.length] =
        new Option(arrLinguaggi[i], arrLinguaggi[i-1]);

      }
    }

	}


}
function InviaMateria(data)
{

  // istanziamo l'oggetto XMLHttpRequest
  if (window.XMLHttpRequest)
  {
    req2 = new XMLHttpRequest();
    req2.onreadystatechange = PocessaMateria;
    req2.open('POST', url3, true);
    req2.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    req2.send(data);
  }
  // controlliamo la versione di ActiveX
  else if (window.ActiveXObject)
  {
    req2 = new ActiveXObject('Microsoft.XMLHTTP')
    if (req)
    {
      req2.onreadystatechange = PocessaMateria;
      req2.open('POST', url3, true);
      req2.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      req2.send(data);
    }
  }
}

function  PocessaMateria()
{

  // monitoriamo lo stato dell'invio
  if (req2.readyState == 4)
  {
    // restituiamo lo stato della richiesta
    if (req2.status == 200)
    {
      eval(what3);
    }else{
      alert('Problema nella gestione dei dati: ' +
      req2.responseText);
    }
  }
}
 
Ciao quarda che il problema lo risolto
separando la parte anagrafica ad quella di asseganzione dei corsi e elle materie in due pagine diverse sinceramente non ho capito dove stava il problema anche perche alla fine è la stessa cosa BAAAAAA.
Cmq sarei curioso di sapere il perchè percui quando hai tempo se puoi rispondimi grazie infinite per la disponibilità ciao
Tommy
 
Ciao credo di aver capito il problema anche se la cosa mi sembra assurda
Praticamente in javascript ogni volta che aggiungevo una nuova materia e un unovo corso disabilitavo le select delle materie e dei corsi precedenti
Praticamente qundo invio il form i campi disabilitati non esistono più
Sapresti darmi una spiegazione anche perche mi serve che questi campi vengono disabilitati. Grazie ciao
 

Discussioni simili