Problema con variables y AJAX !!

Iniciado por Diabliyo, 7 Agosto 2008, 01:38 AM

0 Miembros y 2 Visitantes están viendo este tema.

Diabliyo

POST EDITADO (13 Agosto 08)
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) [Seleccionar]
<?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>";

$consconsultar_enorden"UNIDADES_MEDIDA""ID" );
while( $bufmysql_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>";

$consconsultar_enorden"MENUS""ID" );
while( $bufmysql_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) [Seleccionar]
<?php
/*####################################
###### MOSTRAR SECCIONES #####
## Muestra secciones en capa ##
######################################*/

else if( !strcmp$_GET["mov"], "mostrar_secciones") )
{
$xconsconsultar_con"MENUS""ID='"$_GET["categoria_id"]. "'" );
$xbufmysql_fetch_array($xcons);
unset($xcons);
$cons_secconsultar_enorden_con"SECCIONES""RELACION='"$xbuf["NOMBRE"]. "'""ID" );
unset($xbuf);

echo "Secciones: <select name=\"seccion_producto\">";
echo "<option value=\"error\"></option>";
while( $buf_secmysql_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 (javascript) [Seleccionar]
//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);
}

Freeze.

Mira esto a ver si te sirve:
http://www.formatoweb.com.ar/ajax/select_dependientes_3_niveles.php

Por cierto que yo quiero saber como obtener el value de un select o mejor dicho del option :P
No he podido me toco usar 'radio' en mi web :xD

Diabliyo

Cita de: Freeze. en  7 Agosto 2008, 01:44 AM
Mira esto a ver si te sirve:
http://www.formatoweb.com.ar/ajax/select_dependientes_3_niveles.php

Por cierto que yo quiero saber como obtener el value de un select o mejor dicho del option :P
No he podido me toco usar 'radio' en mi web :xD

Aqui tengo un ejemplo que SI funciona, vaya, que ilustra lo que quiero hacer en mi formulario, pero no lo logro :S !!...

Miren el codigo:

INDEX.PHP
Código (php) [Seleccionar]

<html>

<head>

<script src="funciones.js"></script>

<title>Documento sin t&iacute;tulo</title>

</head>



<body>

<form name="formulario" method="post" action="#">

<table>

<tr>

<td>Caracteres</td>

<td><select name="combo" onkeypress="tabular(event,this)" onchange="agregarCombo(this.value,'agregarCombo','akiEscriboAjax')">

<option value="">Select...</option>

<option value="Letras">Letras</option>

<option value="Numeros">Numeros</option>

</select></td>

</tr>

<tr>

<td><div id='akiEscriboAjax'></div></td>

</tr>

<tr>

<td><input name="enviar" type="submit" value=" Enviar" /></td>

</tr>

</table>

</form>



<?

if(isset($_POST['combo']))

{

echo "Variable Post creada con AJAX: ".$_POST["caracteres"];

}

?>



</body>

</html>


AJAX.PHP
Código (php) [Seleccionar]
<?



if($_GET['Id'] == 'agregarCombo')

{

if($_GET['caracter'] == 'Letras')

{

$array = array('a','b','c');

}

elseif($_GET['caracter'] == 'Numeros')

{

$array = array(1,2,3);

}



echo $_GET['caracter']." ";

echo "<select name='caracteres'>";

for ($i=0; $i<count($array); $i++)

{

echo "<option value='$array[$i]'>$array[$i]</option>";

}

echo "</select>";

}







?>


SCRIPT.js
Código (javascript) [Seleccionar]
// javascript Document



var peticion = false;

var  testPasado = false;

try {

  peticion = new XMLHttpRequest();

  } catch (trymicrosoft) {

  try {

  peticion = new ActiveXObject("Msxml2.XMLHTTP");

  } catch (othermicrosoft) {

  try {

  peticion = new ActiveXObject("Microsoft.XMLHTTP");

  } catch (failed) {

  peticion = false;

  }

  }

}

if (!peticion)

alert("ERROR AL INICIALIZAR!");



function agregarCombo(caracter,Id,element)

{

element = document.getElementById(element)

var url = 'ajax.php?Id='+Id+'&caracter='+caracter;  //construimos la url definitiva

    peticion.open("GET", url);

peticion.onreadystatechange = function()

{

        if (peticion.readyState == 4)

{

element.innerHTML = peticion.responseText;

        }

    } 

   peticion.send(null);

}


alone-in-the-chat

Eh probado el segundo y funciona bien , puedes postear tu codigo.

El que utilizas tu , al que esta arriba le falta el archivo js.

Cosa que lo puedo chekar .


Saludos¡¡

Because maybe
You're gonna be the one that saves me
And after all
You're my wonderwall
d[n_n]b

Diabliyo

Cita de: alone-in-the-chat en 12 Agosto 2008, 17:32 PM
Eh probado el segundo y funciona bien , puedes postear tu codigo.

El que utilizas tu , al que esta arriba le falta el archivo js.

Cosa que lo puedo chekar .


Saludos¡¡



He editado el primer post agregando el scrip.js !! Porfavor miralo, gracias por tu atencion !!

bye bye

alone-in-the-chat

Lo eh revisado , solo modifique la parte como cargas los combos (no use una bd , coloque valores x defecto) y funciona de lo mas normal .

Recuerdo que en una oportunidad me paso algo asi , agregaba campos a un form mediante ajax , y luego al enviar el form estos no pasaban , creo que esto va por un tema de browsers lo eh probado en firefox 2.0 y en el IE 6.0 para linux y me va bien.

No eh probado en ie7 ni en el ie6 de windows .

Como te digo a mi me va bien , lo tienes en linea? .
Que browser usas?.

Tal vez si me agregas al gmail podamos ver mejor el problema.

Saludos¡¡


Because maybe
You're gonna be the one that saves me
And after all
You're my wonderwall
d[n_n]b

Diabliyo

Cita de: alone-in-the-chat en 12 Agosto 2008, 23:38 PM
Lo eh revisado , solo modifique la parte como cargas los combos (no use una bd , coloque valores x defecto) y funciona de lo mas normal .

Recuerdo que en una oportunidad me paso algo asi , agregaba campos a un form mediante ajax , y luego al enviar el form estos no pasaban , creo que esto va por un tema de browsers lo eh probado en firefox 2.0 y en el IE 6.0 para linux y me va bien.

No eh probado en ie7 ni en el ie6 de windows .

Como te digo a mi me va bien , lo tienes en linea? .
Que browser usas?.

Tal vez si me agregas al gmail podamos ver mejor el problema.

Saludos¡¡

Se te paso darme tu correo :S, o sera: alone-in-the-chat@gmail.com ??...

Regresando con el tema...

Entonces a tu te funciono de lo mas normal ??, pero weno, en tu caso usaste valores generados sin la BDD, pero weno, la vdd no he realizado asi la prueba ya que en mi caso pues me intersa consultar a la BDD para obtener los valores xD !! (ya que son muchos como para escirbirlos uno a uno).

Por otro lado, actualmente programo de forma local con Apache como Servidor HTTP, Firefox 3 como navegador y Gentoo Linux mi GNU/Linux.


Diabliyo

#7
Ya realize la prueba armando el SELECT de AJAX sin consultar la BDD, realizando directamente la generacion de 3 options, y aun asi No se envia esa variable :S !!...

Aqui el code que modifique:

AJAX.PHP
Código (php) [Seleccionar]
<?php
else if( !
strcmp$_GET["mov"], "mostrar_paises") )
{
echo "Paises: <select name=\"pais\">";
echo "<option value=\"error\"></option>";
echo "<option value=\"pais\">Pais</option>";
echo "<option value=\"pais2\">Pais2</option>";
echo "<option value=\"pais3\">Pais3</option>";
echo "<option value=\"pais4\">Pais4</option>";
echo "</select><br>";
}
?>

Diabliyo

He editado totalmente el post hoy 13 de agosto, para ver si se entiende y puedan ayudarme un poco mas con mi problea...

bye bye

Diabliyo

Cita de: Diabliyo en 13 Agosto 2008, 22:07 PM
He editado totalmente el post hoy 13 de agosto, para ver si se entiende y puedan ayudarme un poco mas con mi problea...

bye bye

Aun no lo consigo :S !!... Sigo atorado en esto de obtener el valor de un SELECT creado con AJAX :S !!... Ya he realizado ejemplos sencillos y estos si funcionan pero el codigo del formulario que tengo no funciona esa parte :S !!...

bye bye