
ASIGNAR VARIABLES A un arhcivo a partir de un formulario dinamico
#1
Escrito 08 agosto 2013 - 01:50
[js]"
" <span class='add-on'>Nombre : </span>"
" <input type='text' size='10' placeholder='Aqui va el Nombre' name=' " Nombre "nomb' id=' " Nombre "nomb'>"
" <br />"
" <br />"
" <span class='add-on'> Apellido Paterno:</span>"
" <input type='text' size='5' placeholder='Aqui va el Apellido Paterno ' name=' " Nombre "apat' id=' " Nombre "apat'>"
" <br />"
" <br />"
[/js]
pero ahora no se como pasarlos o asignarlos a una estructura xml por decir para este ejemplo se hace el REQUEST que está el el archivo prueba.php tal y como está en el ejemplo de la pag http://elpoli.delphi...mpos-dinamicos/ de donde me basé para hacerlos, y a la hora de guardar me queda algo así en el navegador
Array
(
[1nomb] => Juan
[1apat] => Ramírez
[2nomb] => Oscar
[2apat] => Islas
[Guardar] => Guardar
[PHPSESSID] => gr4mmav8kvs2e3kn2782udp494
)
pero ahora quiero que se mande a un archivo XML para que quede algo de esta forma
<autor>
<nombre> Juan </nombre>
<apellidopat>Ramírez</apellidopat>
</autor>
<autor>
<nombre> Oscar</nombre>
<apellidopat>Islas</apellidopat>
</autor>
pero no se como asignar los valores que capturo en mi archivo y mandarlos, supongo que primero tengo que identificar las variables de mi formulario no ?? y así para saber que va con que, es por eso que pongo a la variable "Nombre" como identificador para el "nom" y el "apat" de mi autor.. por favor si me puedes ayudar a saber con que programas .. o una idea de hacerlo ya que me vi en otros foros que con Ajax.. pero quiero saber como asignar lo que ya tengo hecho de mis variables y en mis identificadores y a ellos asignarles una etiqueta o un atributo de mi archivo XML .. gracias por tu tiempo y ayuda me ha servido de mucho y eh podido explicarles a mis compañeros sobre lo que tu me has enseñado y obvio eh recomendado tu pagina a todos mi conocidos.. gracias por ayudarnos ...
#2
Escrito 08 agosto 2013 - 02:26
gracias por tu tiempo y ayuda me ha servido de mucho y eh podido explicarles a mis compañeros sobre lo que tu me has enseñado y obvio eh recomendado tu pagina a todos mi conocidos.. gracias por ayudarnos ...
Es un gusto ayudar. Me parece que tu necesidad puede ser de ayuda a otros.

Sobre los identificadores para los campos te sugiero que identidiques cada campo por el contenedor al que pertenece. Ejemplo
Contenerdor1
cnt1_cmp1_nombrecampo
cnt1_cmp2_nombrecampo
Contenerdor2
cnt2_cmp1_nombrecampo
cnt2_cmp2_nombrecampo
Contenerdor3
cnt3_cmp1_nombrecampo
cnt3_cmp2_nombrecampo
es una sugerencia
#3
Escrito 08 agosto 2013 - 03:51
#4
Escrito 13 agosto 2013 - 03:29
#5
Escrito 14 agosto 2013 - 07:27

#6
Escrito 14 agosto 2013 - 07:40
Cuando realizas el post del formulario, todos los inputs asociados son enviados al servidor y estos pueden obtenerse a través de la super variable $_POST,
$_POST no es otra cosa que un arreglo por lo que si haces print_r($_POST) podrás ver su contenido. Ahora bien para convertir esa información a XML puedes hacer uso de algo como lo que publicaron en el siguiente blog:
http://www.codigogra...r-array-en-xml/
Me avisas si con esto puedes avanzar. Saludos
#7
Escrito 14 agosto 2013 - 04:09
[1nom]=>Oscar
[1apat]=>Luz
[2nom]=>Jorge
[2apat]=>Islas
y en mi código XML quiero queme aparezca algo así
<maestros>
<profesor>
<nom>Oscar</nom>
<apat>Luz</apat>
</profesor>
<profesor>
<nom>Oscar</nom>
<apat>Islas</apat>
</profesor>
</maestros>
no se como identificar cada uno de los identificadores de mi Array y tampoco se insertar los atributos para las etiquetas que también van de acuerdo a los identificadores del Array espero y me entiendas ya que no logro poder hacerlo de antemano gracias por tu tiempo y apoyo ......
#8
Escrito 14 agosto 2013 - 05:18
Creas un archivo index.html
<html>
<head>
<title>Usuarios</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<script src="http://code.jquery.c...1.js"></script>
<script type="text/javascript">
function envia() {
document.frmusers.submit();
}
function agregaUsuario() {
var usuarios = $('#usuarios');
var newuser = '<div>'
'Nombre: <input type="text" name="nombres[]" size="20" placeholder="Nombre" /><br/>'
'Apellido : <input type="text" name="apelidos[]" size="20" placeholder="Apellido">'
'</div><br/><br/>';
$(usuarios).append(newuser);
}
</script>
</head>
<body>
<form name="frmusers" method="post" action="guarda.php">
<div id="usuarios">
<div>
Nombre: <input type='text' name="nombres[]" size='20' placeholder='Nombre' /><br/>
Apellido : <input type='text' name="apelidos[]" size='20' placeholder='Apellido'>
</div><br/><br/>
</div>
<br/>
<br/>
<input type="button" value="agregar" onclick="agregaUsuario()"> <input type="button" value="guardar" onclick="envia()">
</form>
</body>
</html>
En este caso hago uso de jquery para la creacion de los campos dinamicos.
Luego creamos un archivo guarda.php
function generaXml() {
$log = fopen("xmlusers" . date("h-m-s") . ".xml", "w");
$xml = new DOMDocument('1.0', 'iso-8859-1');
$xml->formatOutput = true;
$nombres = $_REQUEST['nombres'];
$apellidos = $_REQUEST['apelidos'];
for ( $i = 0; $i < count($nombres); $i ) {
$autor = $xml->appendChild($xml->createElement("autor"));
$nombre = $autor->appendChild($xml->createElement("nombre"));
$nombre->appendChild($xml->createTextNode($nombres[$i]));
$apellido = $autor->appendChild($xml->createElement("apellidopat"));
$apellido->appendChild($xml->createTextNode($apellidos[$i]));
}
fwrite($log, $xml->saveXML());
fclose($log);
}
generaXml();
Y asi se genera el archivo xml que necesitas.
Por falta de tiempo no detalo muy bien los pasos a seguir. Si te sirvio mañana los detallo un poco más.
Espero y te sirva, Saludos...
#9
Escrito 15 agosto 2013 - 12:51
#10
Escrito 15 agosto 2013 - 01:03
#11
Escrito 15 agosto 2013 - 01:26
En un directorio de pruebas creamos estos dos archivos:
- index.html
- guarda.php
En index.html agragamos el siguiente codigo.
<html>
<head>
<title>Usuarios</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<!-- INCLUIMOS JQUEY EN NUESTRA PAGINA -->
<script src="http://code.jquery.c...1.js"></script>
<!-- CREAMOS UN SCRIP NUEVO ESCRIPT -->
<script type="text/javascript">
// funcion que envia el formulario con todos los datos
function envia() {
document.frmusers.submit();
}
// funcion que agrega nuevos campos para capturar datos
function agregaUsuario() {
var usuarios = $('#usuarios');
var newuser = '<div>'
'Nombre: <input type="text" name="nombres[]" size="20" placeholder="Nombre" /><br/>'
'Apellido : <input type="text" name="apelidos[]" size="20" placeholder="Apellido">'
'</div><br/><br/>';
$(usuarios).append(newuser);
}
</script>
</head>
<body>
<!-- NUESTRO FORMULARIO PARA CAPTURAR LOS DATOS -->
<form name="frmusers" method="post" action="guarda.php">
<div id="usuarios">
<div>
Nombre: <input type='text' name="nombres[]" size='20' placeholder='Nombre' /><br/>
Apellido : <input type='text' name="apelidos[]" size='20' placeholder='Apellido'>
</div><br/><br/>
</div>
<br/>
<br/>
<input type="button" value="agregar" onclick="agregaUsuario()"> <input type="button" value="guardar" onclick="envia()">
</form>
</body>
</html>
Ahora en guarda.php agrgamos el siguiente codigo.
<?php
// Aqui podemos hacer un print de $_REQUEST para verificar que recibimos los datos
print_r($_REQUEST);
function generaXml() {
// Esta funcion te crea el archivo xml en el mismo directorio
// donde tienes index.html y guarda.php
$log = fopen("xmlusers" . date("h-m-s") . ".xml", "w");
// creamos un objeto xml
$xml = new DOMDocument('1.0', 'iso-8859-1');
$xml->formatOutput = true;
// Asignamos los arreglos obtenidos por medio de $_REQUEST a variables
$nombres = $_REQUEST['nombres'];
$apellidos = $_REQUEST['apelidos'];
// Empezamos a general el codigo xml
for ( $i = 0; $i < count($nombres); $i ) {
$autor = $xml->appendChild($xml->createElement("autor"));
$nombre = $autor->appendChild($xml->createElement("nombre"));
$nombre->appendChild($xml->createTextNode($nombres[$i]));
$apellido = $autor->appendChild($xml->createElement("apellidopat"));
$apellido->appendChild($xml->createTextNode($apellidos[$i]));
}
// Gardamos el objeto xml en el archivo xml
fwrite($log, $xml->saveXML());
fclose($log);
}
generaXml();
?>
Al guardar se te generara un archivo xml en el mismo directorio donde estan index.html y guarda.php como el siguiente que se me genero a mi:
<?xml version="1.0" encoding="iso-8859-1"?>
<autor>
<nombre>Juan</nombre>
<apellidopat>Perez</apellidopat>
</autor>
<autor>
<nombre>Pedro</nombre>
<apellidopat>Lopez</apellidopat>
</autor>
Espero y te sirva, si te genera algun nos dices.
Saludos...
#12
Escrito 15 agosto 2013 - 04:48
#13
Escrito 15 agosto 2013 - 05:18
Es este archivo al que llamaremos 'crea.php' agrega este codigo:
<?php
$file = fopen("prueba.txt","w");
fwrite($file, "Esta es una prueba...");
fclose($file);
?>
Si no te crea el archivo, es cuestion de permisos.
Respecto a los atributos, ¿A que elementos se los quieres asignar o modificar? eso seria los mas facil. Solo explicanos cuales y a que.
#14
Escrito 16 agosto 2013 - 11:12
Array (
[1_nomb] => Oscar
[1apat] => Avila
[1amat] => Sarmiento
[1oficina] => AT-123
[1email] => @oscarsarmiento
[1aulavirtual] => www.oscarsarmiento.com
[1aseo1dia] => lunes
[1aseo1inicio] => 9:00
[1aseo1hasta] => 10:00
[1aseo1lugar] => at101
[1aseo2dia] => martes
[1aseo2inicio] => 9:00
[1aseo2hasta] => 10:00
[1aseo2lugar] => at102
[2_nomb] => David
[2apat] => Lopez
[2amat] => Perez
[2oficina] => RS-123
[2email] => @david.com
[2aulavirtual] => www.david.com
[2aseo3dia] => jueves
[2aseo3inicio] => 12:00
[2aseo3hasta] => 13:00
[2aseo3lugar] => S-122
[2aseo4dia] => viernes
[2aseo4inicio] => 11:00
[2aseo4hasta] => 13:00
[2aseo4lugar] => at102
[Guardar] => Guardar )
y deseo que se vea en mi archivo xml algo asi
<profesores>
<profesor>
<nombre>
<nomb>Oscar</nomb>
<apat>Avila</apat>
<amat>Sarmiento</amat>
</nombre>
<oficina>AT-123</oficina>
<email>@oscarsarmiento </email>
<aulavirtual>www.oscarsarmiento.com </aulavirtual>
<asesorias>
<asesoria dia="lunes" de="9:00" hasta="10:00" lugar="at101"/>
<asesoria dia="martes" de="9:00" hasta="10:00" lugar="at102"/>
</asesorias>
</profesor>
<profesor>
<nombre>
<nomb>David</nomb>
<apat>Lopez</apat>
<amat>Perez</amat>
</nombre>
<oficina>RS-123</oficina>
<email>@david.</email>
<aulavirtual>www.david.com</aulavirtual>
<asesorias>
<asesoria dia="jueves" de="12:00" hasta="13:00" lugar="S-122"/>
<asesoria dia="viernes" de="11:00" hasta="13:00" lugar="at102"/>
</asesorias>
</profesor>
<profesores>
como ves identifique cada uno de los profesores ya sea con "1" o "2" al principio y mi idea es de ahí partir e ir identificando cada campo en su respectiva etiqueta o atributo, por decir el identificador [2aseo3dia] => jueves, va a dar pauta para crear una etiqueta asesoría donde se crearía el atributo (día="jueves") y después el siguiente que es [2aseo3inicio] => 12:00 va a crear el atributo (de="12:00") el siguiente [2aseo3hasta] => 13:00 crearía el atributo (hasta="13:00") y por ultimo [2aseo3lugar] => S-122 el atributo (lugar="S-122") la idea es irse moviendo entre los identificadores y agruparlos para así poder determinar cual es con cual ... no se si me entiendas y veas la utilidad de mis identificadores para cada uno de mis profesores y su etiquetas y atributos ojalá y me puedas ayudar la verdad me ayudarías mucho..... te agradezco tu tiempo y ayuda ......
#15
Escrito 16 agosto 2013 - 12:32
No hay problema con generar el archivo xml de la forma que quieras. Antes me gustaria hacerte unas recomendaciones:
Es más facil que en lugar de crear y enviar multiples elemetos 'input' envies solo uno como un arreglo, por ejemplo:
<input type='text' name="1_nomb" size='20' />
<input type='text' name="2_nomb" size='20' />
<input type='text' name="3_nomb" size='20' /> ...
es más practico que envies solo un elemento 'input' (nomb[]) como arreglo
<input type='text' name="nomb[]" size='20' />
Asi se enviara un arreglo del tamaño que sea necesario, el cual podras recorrer y accesar a sus indices de la forma que quieras.
Y asi para todos los campos que necesites: nomb[], apat[], amat[], oficina[], ...
Ahora respecto a la funcion de jquery que utilice es bastante sencilla y lo que hace es crearte nuevos campos de captura e insertarlos debajo de los ultimos que ya tienes, puedes modificar la varibale 'newuser ' de la funcion 'agregaUsuario()' a tu gusto, solo debe ser igual a los elementos que defines en tu formulario de captura.
Espero me entiendas hasta ahi

Cuando envias esto y haces un print_r($_REQUEST) veras que te llegaron multiples arreglos ordenados con los indices correspondientes a cada profesor que capturaste.
Ya que recibiste los datos correctamente la generacion del archivo xml la puedes hacer igual a la que me pusiste de ejemplo.
Porque no intentas primero esto y si te sale todo bien hasta este paso, con gusto te digo como generar el archivo xml que necesitas...
Saludos...
#16
Escrito 16 agosto 2013 - 05:19
[1aseo1dia] => lunes
[1aseo1inicio] => 9:00
[1aseo1hasta] => 10:00
[1aseo1lugar] => at101
[1aseo2dia] => martes
[1aseo2inicio] => 9:00
[1aseo2hasta] => 10:00
[1aseo2lugar] => at102
Esto en idea es que el profesor numero "1" tiene una asesoría "aseso"... la cual está identificada por otro contador 1 o 2 ..... donde la asesoría 1 es el día lunes inicio a las 9:00 hasta 10:00 lugar at101 la segunda asesoría para el profesor numero 1 es el día martes inicia a las 9:00 hasta las 10:00 lugar at102 .. y siguiendo con la secuencia el profesor 1 puede tener n asesorías pero esas asesorías están identificadas con el lugar inicio hasta y lugar ... a la ves el formulario puede agregar otro profesor el cuál en mis identificadores cambiaría a el numero 2 y de igual forma este también puede o no tener asesorías .... mira voy a subir los archivos para que te des mejor una idea..... ojalá y me puedas ayudar ya que este ejemplo es uno facíl ... jajaja por que son solo dos formularios dinámicos uno dentro de otro pero tengo otros en donde tengo 5 formularios dinámicos uno dentro de otro y como te digo quiero identificarlos y poder mandarlos a un archivo XML... de ante mano gracias por tiempo y apoyo