Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Problema con formulario de PHP y AJAX, pierdo el SELECT !! :S

Estas en el tema de Problema con formulario de PHP y AJAX, pierdo el SELECT !! :S en el foro de Frameworks JS en Foros del Web. Hola: Cierta parte de mi aplicacion trata de Agregar Productos a la BDD, para esto el formulario es cargado desde el mismo INDEX.PHP, de modo ...
  #1 (permalink)  
Antiguo 13/08/2008, 14:32
 
Fecha de Ingreso: diciembre-2003
Ubicación: En la luna
Mensajes: 29
Antigüedad: 20 años, 4 meses
Puntos: 0
Problema con formulario de PHP y AJAX, pierdo el SELECT !! :S

Hola:

Cierta parte de mi aplicacion trata de Agregar Productos a la BDD, para esto el formulario es cargado desde el mismo INDEX.PHP, de modo que parte importante del formulario es poder ubicar en una sección de alguna Categoria existente, he aqui donde entra la ayuda de AJAX.

Basicamente AJAX me ayudara a generar rapidamente (sin refrescar la hoja) un nuevo select en donde estaran las Secciones, para esto en el select de las Categorias colocare la funcion de ajax mediante onchange. Esto no me trae ningun problema, ya que una vez seleccionada la Categoria del select, inmediatamente se carga otro select con las Secciones correspondientes a dicha Categoria elejida.

El Problema surge al enviar el formulario (presionar el botn enviar), este boton realiza una accion del formulario enviando todo hacia la direccion index.php?id=productos&mov=agregar_producto, vaya esto ya es puro PHP, AJAX solo nos ayudo a generar el SELECT de Secciones, asi que, al momento de ir a agregar_producto, no logro recepcionar el contenido del select generado con ajax.

Basicamente aqui utilizo dos select que son: Categorias y Secciones, la variable donde porto el contenido de Categorias es categoria_productos y la variable donde porto las Secciones son: seccion_producto.

De modo que $_POST["seccion_producto"] no se genera o nose que sucede :S, pero no obtengo el valor de dicha variable.

Utilizo Gentoo Linux, Apache y Firefox-3.

Para una mejor ilustracion aqui dejo mi codigo resumido:

INDEX.PHP
Código:
<?php
switch( $_GET["mov"] )
	{
	case 'agregar_producto':
		echo "Categoria: ". $_POST["categoria_producto"];
		echo "<br>sección: ". $_POST["seccion_producto"];
		echo "<br>POST: ". count($_POST);
		echo "<br>";
		print_f($_POST); 
		break;
	default:
		echo "<form action=\"index.php?id=". $_GET["id"]. "&mov=agregar_producto\" method=\"POST\" enctype=\"multipart/form-data\">";
		echo "<div id=\"formulario_producto_nuevo\">";
		echo "Tipo de Prod.: <input type=\"radio\" name=\"tipo_producto\" value=\"1\" checked onclick=\"cargar_datos( 'id=". $_GET["id"]. "&mov=agregar_producto', 'formulario_producto_nuevo_lista', 'GET', '0' );\"> Normal";
		echo "<input type=\"radio\" name=\"tipo_producto\" value=\"2\" onclick=\"cargar_datos( 'id=". $_GET["id"]. "&mov=agregar_producto&ver=1', 'formulario_producto_nuevo_lista', 'GET', '0' );\">Kit<br>";
		echo "ID: <input type=\"text\" name=\"id_producto\"><br>";
		echo "Cantidad: <input type=\"text\" name=\"cantidad_producto\" style=\"width:50px;\"> ";
		echo "<select name=\"unidad_medida_producto\" style=\"width:120px;\">";
			echo "<option value=\"error\"></option>";

			$cons= consultar_enorden( "UNIDADES_MEDIDA", "ID" );
			while( $buf= mysql_fetch_array($cons) )
				echo "<option>". $buf["NOMBRE"]. "/". $buf["NOTACION"]. "</option>";
			unset($buf);
			unset($cons);
		echo "</select>";
		echo "<br>";
		echo "Nombre del Prod.: <input type=\"text\" name=\"nombre_producto\"><br>";
		echo "Precio Publico: <input type=\"text\" name=\"preciopublico_producto\"><br>";
		echo "Categoria: <select name=\"categoria_producto\" onchange=\"cargar_datos( 'id=". $_GET["id"]. "&mov=mostrar_secciones&categoria_id='+this.value, 'mostrar_secciones', 'GET', '0' );\">";
			echo "<option value=\"error\"></option>";
			
		$cons= consultar_enorden( "MENUS", "ID" );
		while( $buf= mysql_fetch_array($cons) )
			echo "<option value=\"". $buf["ID"]. "\">". $buf["NOMBRE"]. "</option>";				
		unset($buf);
		unset($cons);
			
		echo "</select>";
		echo "<div id=\"mostrar_secciones\"></div>";
		echo "Descripcion:<br>";
		echo "<textarea name=\"descripcion_producto\"></textarea><br>";
		echo "<span style=\"font-size:10px;\">Solo se permite adjuntar imagenes: <b>*.jpg</b>, <b>*.png</b> y <b>*.gif</b>.</span>";
		echo "<div id=\"formulario_producto_nuevo_imagenes\">";
		echo "<input type=\"file\" name=\"imagen_productos01\" style=\"font-size:9px;\">";
		echo "<input type=\"file\" name=\"imagen_productos02\" style=\"font-size:9px;\">";
		echo "</div>";
		echo "</div>";

		echo "<div id=\"formulario_producto_nuevo_lista\">";
		echo "</div>";
		echo "<center>";
		echo "<input type=\"submit\" value=\"Guardar Producto\" style=\"text-align:center;border:solid 1px black;font-family:verdana;font-size:12px;font-weight:bold;\">";
		echo "</center>";
		echo "</form>";
		break;
	}
?>

AJAX.PHP
Código:
<?php
	/*####################################
	######		MOSTRAR SECCIONES		#####
	##		Muestra secciones en capa		##
	######################################*/	
	else if( !strcmp( $_GET["mov"], "mostrar_secciones") )
		{
		$xcons= consultar_con( "MENUS", "ID='". $_GET["categoria_id"]. "'" );
		$xbuf= mysql_fetch_array($xcons);
		unset($xcons);
		$cons_sec= consultar_enorden_con( "SECCIONES", "RELACION='". $xbuf["NOMBRE"]. "'", "ID" );
		unset($xbuf);
		
		echo "Secciones: <select name=\"seccion_producto\">";
			echo "<option value=\"error\"></option>";
			while( $buf_sec= mysql_fetch_array($cons_sec) )
				echo "<option value=\"". $buf_sec["ID"]. "\">". $buf_sec["NOMBRE"]. "</option>";
		echo "</select>";
		
		unset($buf_sec);
		unset($cons_sec);
		}
?>

SCRIPT.js
Código:
//Funcion para obtener conector AJAX
function ajax()
	{
	var pagina=false; //conector ajax
	
	if( window.XMLHttpRequest ) //Navegador Firefox
		pagina= new XMLHttpRequest(); //creamos objeto para el navegador
	else if( window.ActiveXObject ) //Navegador Internet Explorer
		{
		try //Version Actual
			{
			pagina= new ActiveXObject( "Msxml2.XMLHTTP" ); //creamos objeto para el navegador
			}
		catch(e) //version Antigua
			{
			try
				{
				pagina= new ActiveXObject( "Microsoft.XMLHTTP" ); //creamos objeto para el navegador
				}
			catch(e)
				{
				}
			}
		}
	return pagina;
	}
	
function cargar_datos( vars, capaview, flujoddatos, varsform )
	{
	var conector, capa, url;
	
	url= 'ajax.php'; //mis funciones para ajax
	capa= document.getElementById(capaview);
	
	conector= ajax();
	conector.open( flujoddatos, url+'?'+vars, true );
	conector.onreadystatechange= function()
		{
		if( conector.readyState==1 )
			{
			capa.innerHTML= "<center><img src='../admin/imagenes/loading.gif'><br><b>CARGANDO...</b></center>";
			}
		else if( conector.readyState==4 )
			{
			if( conector.status==200 )
				{
				if( varsform!=0 )
					conector.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
				capa.innerHTML= conector.responseText;
				}
			else if( conector.status==404 )
				{
				capa.innerHTML= "La pagina que intentas cargar no existe...";
				}
			else
				{
				capa.innerHTML= conector.status;
				}
			}
		}
	//conector.setRequestHeader( "Content-Type", "multipart/form-data" );
	if( varsform!=0 )
		{
		var myarr= varsform.split(':'); //dividimos
		var trama="";
		var i=0;
		
		for( i=0; i<(myarr.length); i++ )
			{
			if( i>0 )
				trama += "&";
			trama += myarr[i]+"="+document.getElementById(myarr[i]).value;
			}
		alert(trama);

		conector.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
		conector.send(trama);
		}
	else
		conector.send(null);
	}
  #2 (permalink)  
Antiguo 13/08/2008, 14:45
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Problema con formulario de PHP y AJAX, pierdo el SELECT !! :S

Tema trasladado a AJAX.
  #3 (permalink)  
Antiguo 13/08/2008, 14:52
Avatar de julianmejio  
Fecha de Ingreso: agosto-2005
Ubicación: Medellín, Antioquia
Mensajes: 88
Antigüedad: 18 años, 8 meses
Puntos: 3
Respuesta: Problema con formulario de PHP y AJAX, pierdo el SELECT !! :S

Varias veces he hecho esto para un CMS que creé, y pues, la verdad no me metí mucho con AJAX, así que de pronto mi solución no sea tan "correcta", pero me sirvió; por lo menos puedes partir de ahí.

Los select se generan por medio de un script en PHP llamando algunos datos de una base de datos, pero es más o menos así:

Código:
<select name="type" id="type" onchange="MM_callJS('ajaxp(\'./sub/ajax/sc.php?t=\'+document.getElementById(\'type\').value,\'ajax_ville\')')">
la función javascript ajaxp es una función para llamar a páginas con AJAX que pasa dos parámetros: la página que quiero que cargue mediante ajax (que tiene un GET t para que me cree otra lista en base a ese valor), y el segundo es la ID del div donde quiero que me cargue. El caso es que esa página que llama se carga dentro del form (sí: el div se encuentra dentro de <form />), así que cuando envío el formulario, me la envía con ese campo que generé mediante ajax.

Me parece una solución rústica, pero lógica y funcional.

Si hay alguna duda me dices.
Espero que te sirva la respuesta.
  #4 (permalink)  
Antiguo 13/08/2008, 16:44
 
Fecha de Ingreso: diciembre-2003
Ubicación: En la luna
Mensajes: 29
Antigüedad: 20 años, 4 meses
Puntos: 0
Respuesta: Problema con formulario de PHP y AJAX, pierdo el SELECT !! :S

Cita:
Iniciado por julianmejio Ver Mensaje
Varias veces he hecho esto para un CMS que creé, y pues, la verdad no me metí mucho con AJAX, así que de pronto mi solución no sea tan "correcta", pero me sirvió; por lo menos puedes partir de ahí.

Los select se generan por medio de un script en PHP llamando algunos datos de una base de datos, pero es más o menos así:

Código:
<select name="type" id="type" onchange="MM_callJS('ajaxp(\'./sub/ajax/sc.php?t=\'+document.getElementById(\'type\').value,\'ajax_ville\')')">
la función javascript ajaxp es una función para llamar a páginas con AJAX que pasa dos parámetros: la página que quiero que cargue mediante ajax (que tiene un GET t para que me cree otra lista en base a ese valor), y el segundo es la ID del div donde quiero que me cargue. El caso es que esa página que llama se carga dentro del form (sí: el div se encuentra dentro de <form />), así que cuando envío el formulario, me la envía con ese campo que generé mediante ajax.

Me parece una solución rústica, pero lógica y funcional.

Si hay alguna duda me dices.
Espero que te sirva la respuesta.
Pues asi como lo relatas, es exactamente como lo hago yo comunmente, pero en mi caso yo no invoco la funcion MM_callJS(), solo invoco la funcion cargar_datos() con el metodo onchange, y me genera satisfactoriamente el SELECT, mi problema es que al enviar el formulario la variable del SELECT que se genero NO esa disponible para usarla :S, eso es lo que me saca de quisio !!...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:16.