Foros del Web » Programando para Internet » PHP »

envio de campos duplicados

Estas en el tema de envio de campos duplicados en el foro de PHP en Foros del Web. buenas amigos primero que nada quiero darle un saludo a la comunidad agradeciendo de antemano todo el contenido que ofrecen que me ah ayudado mucho ...
  #1 (permalink)  
Antiguo 31/10/2013, 00:12
 
Fecha de Ingreso: octubre-2013
Ubicación: venezuela
Mensajes: 3
Antigüedad: 10 años, 5 meses
Puntos: 0
Pregunta envio de campos duplicados

buenas amigos primero que nada quiero darle un saludo a la comunidad agradeciendo de antemano todo el contenido que ofrecen que me ah ayudado mucho ... debo realizar un sistema para un proyecto sociotecnologico donde debo realizar gestion cargas de notas y crear modulos para los profesores de manera que ellos especifiquen las actividades que ellos evaluaran durante el modulo y su fecha correspondiente... Ya puedo duplicar campos para que el profesor pueda cargar varias actividades pero no puedo tomar los valores que se tomaron en cada campo que se duplico y los envie a la base de datos.... el codigo es el siguiente:

//este lo llame pruebaduplicar2.php
<?php
include("libreria.php")
?>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
<style type="text/css">
<!--
.Estilo1 {color: #FFFFFF}
-->
</style>
</head>

<body>
<style type="text/css">
table,tr,td{border:1px solid black;}
</style>
<table id="titlebar" cellspacing="0px" bordercolor="#000000">
<tr>
<td bgcolor="#000066" style="width:20px;"><div align="center"><span class="Estilo1">✓</span></div></td>
<td bgcolor="#000066" style="width:186px;"><div align="center"><span class="Estilo1">Descripcion</span></div></td>
<td bgcolor="#000066" style="width:92px;"><span class="Estilo1">Actividades</span></div></td>
<td bgcolor="#000066" style="width:206px;"><div align="center"><span class="Estilo1">Fecha</span></div></td>


</tr>
</table>
<form action="receptor.php" method="POST" name="form">
<table id="dataTable" width="auto" style="margin:-4px 0 0 0;" cellspacing="0px" border="1">
<tr>
<td style="width:20px;"><INPUT type="checkbox" name="chk" /></td>
<td><textarea name="descripcion" cols="" rows="" placeholder="Describa la actividad a evaluar"></textarea></td>
<td><select name="actividades">
<option value="Examen">Examen</option>
<option value="Exposicion">Expocis&oacute;n</option>
<option value="Tarea">Tarea</option>
<option value="Practica">Practica</option>
<option value="otros">otros</option>
</select></td>
<td><INPUT type="date" name="fecha" style="width:200px;" autocomplete="on" placeholder="season" required/></td>

</tr>

</table>
<INPUT type="button" value="Agregar actividades" onClick="addRow('dataTable')" />
<INPUT type="button" value="Eliminar Actividad" onClick="deleteRow('dataTable')" />
<INPUT type="submit" value="Send" name="button" onClick="confimar()"/>
</form>


</body>
</html>

//esta la libreria donde estan las funciones duplican y eliminan campos llamada libreria.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<SCRIPT language="javascript">
function addRow(tableID) {
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
var row = table.insertRow(rowCount);
var colCount = table.rows[0].cells.length;
for(var i=0; i<colCount; i++) {
var newcell = row.insertCell(i);
newcell.innerHTML = table.rows[0].cells[i].innerHTML;
//alert(newcell.childNodes);
switch(newcell.childNodes[0].type) {
case "text":
newcell.childNodes[0].value = "";
break;
case "text":
newcell.childNodes[0].value = "";
break;
case "text":
newcell.childNodes[0].value = "";
break;
case "text":
newcell.childNodes[0].value = "";
break;
case "text":
newcell.childNodes[0].value = "";
break;
case "checkbox":
newcell.childNodes[0].checked = false;
break;
case "select-one":
newcell.childNodes[0].selectedIndex = 0;
break;
}
}
}
function deleteRow(tableID) {
try {
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
for(var i=0; i<rowCount; i++) {
var row = table.rows[i];
var chkbox = row.cells[0].childNodes[0];
if(null != chkbox && true == chkbox.checked) {
if(rowCount <= 1) {
alert("NO PUEDES BORRAR TODAS LAS ACTIVIDADES!!");
break;
}
table.deleteRow(i);
rowCount--;
i--;
}
}
}catch(e) {
alert(e);
}
}
</SCRIPT>


<SCRIPT language="javascript">
function addRow2(tableID) {
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
var row = table.insertRow(rowCount);
var colCount = table.rows[0].cells.length;
for(var i=0; i<colCount; i++) {
var newcell = row.insertCell(i);
newcell.innerHTML = table.rows[0].cells[i].innerHTML;
//alert(newcell.childNodes);
switch(newcell.childNodes[0].type) {
case "text":
newcell.childNodes[0].value = "";
break;
case "text":
newcell.childNodes[0].value = "";
break;
case "text":
newcell.childNodes[0].value = "";
break;
case "text":
newcell.childNodes[0].value = "";
break;
case "text":
newcell.childNodes[0].value = "";
break;
case "checkbox":
newcell.childNodes[0].checked = false;
break;
case "select-one":
newcell.childNodes[0].selectedIndex = 0;
break;
}
}
}
function deleteRow2(tableID) {
try {
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
for(var i=0; i<rowCount; i++) {
var row = table.rows[i];
var chkbox = row.cells[0].childNodes[0];
if(null != chkbox && true == chkbox.checked) {
if(rowCount <= 1) {
alert("NO PUEDES BORRAR TODAS LAS ACTIVIDADES!!");
break;
}
table.deleteRow(i);
rowCount--;
i--;
}
}
}catch(e) {
alert(e);
}
}
</SCRIPT>

<SCRIPT language="javascript">
function addRow3(tableID) {
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
var row = table.insertRow(rowCount);
var colCount = table.rows[0].cells.length;
for(var i=0; i<colCount; i++) {
var newcell = row.insertCell(i);
newcell.innerHTML = table.rows[0].cells[i].innerHTML;
//alert(newcell.childNodes);
switch(newcell.childNodes[0].type) {
case "text":
newcell.childNodes[0].value = "";
break;
case "text":
newcell.childNodes[0].value = "";
break;
case "text":
newcell.childNodes[0].value = "";
break;
case "text":
newcell.childNodes[0].value = "";
break;
case "text":
newcell.childNodes[0].value = "";
break;
case "checkbox":
newcell.childNodes[0].checked = false;
break;
case "select-one":
newcell.childNodes[0].selectedIndex = 0;
break;
}
}
}
function deleteRow3(tableID) {
try {
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
for(var i=0; i<rowCount; i++) {
var row = table.rows[i];
var chkbox = row.cells[0].childNodes[0];
if(null != chkbox && true == chkbox.checked) {
if(rowCount <= 1) {
alert("NO PUEDES BORRAR TODAS LAS ACTIVIDADES!!");
break;
}
table.deleteRow(i);
rowCount--;
i--;
}
}
}catch(e) {
alert(e);
}
}
</SCRIPT>
<SCRIPT language="javascript">
function confimar(button){
var preg=confirm ("Estas seguro que desea modificar este/os modulo/s?");
if (preg==true){
document.form.submit();
}
else{
return false;
}
</SCRIPT>
</body>
</html>

//El siguiente archivo se supone que me deberia recibir los datos de los campos duplicados pero solo me toma en cuenta 1... es llamado receptor.php

<html>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<?php
include('mysql.php');
$descripcion = mysql_real_escape_string(stripslashes($_POST['descripcion']));
$actividades = mysql_real_escape_string(stripslashes($_POST['actividades']));
$fecha = mysql_real_escape_string(stripslashes($_POST['fecha']));
$sql="INSERT INTO modulos (actividades,descripcion,fecha)
VALUES
('$actividades','$descripcion','$fecha')";
if (!mysql_query($sql,$con)){
die('Error: ' . mysql_error());
}
echo "las actividades se han registrado exitosamente!!";
mysql_close($con);
}
?>
</body>
</html>
  #2 (permalink)  
Antiguo 31/10/2013, 06:00
Avatar de juanito1712  
Fecha de Ingreso: mayo-2010
Ubicación: Valencia
Mensajes: 1.124
Antigüedad: 13 años, 11 meses
Puntos: 66
Respuesta: envio de campos duplicados

uhhh menudo chorrón de código

puedes crear una funcion que recorra todos los input que tengan cierto classname y en un campo que tengas oculto, serializar el contenido de todos los campos segun se vayan modificando, eso será lo que almacenes en la base de datos el string serializado de todos los campos y cuando lo recuperes lo des serializas y generas los campos que hay

te paso un trocito que uso yo para serializar de-serializar (los serialize y los unserialice de php me daban por saco con la base de datos)

Código:
function my_encode($array){
	$string='';
	for($x=0;$x<count($array);$x++){
		if($x==0){
			$string.=$array[$x];
		}else{
			$string.='|#|'.$array[$x];
		}
	}
	return $string;
}
function my_decode($string){
	if($string!=''){
		return explode('|#|',$string);
	}else{
		return array();
	}
	
}
el decode es para poder obtener el string tipo valor1|#|valor2|#|valor3 de la base de datos como un array y el encode para generar el string a partir de un array, pero tendrás que hacerlo con javascript para que reescriba el campo, solo traducirlo ya que el funcionamiento es igual

Última edición por juanito1712; 31/10/2013 a las 06:26
  #3 (permalink)  
Antiguo 31/10/2013, 14:20
 
Fecha de Ingreso: octubre-2013
Ubicación: venezuela
Mensajes: 3
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: envio de campos duplicados

ok esa variable $array la reemplazaria por la variable que me recibe los post cierto? es decir por ejemplo:

function my_encode($array){
$string='';
for($x=0;$x<count($array);$x++){
if($x==0){
$string.=$array[$x];
}else{
$string.='|#|'.$array[$x];
}
}
return $string;
}
function my_decode($string){
if($string!=''){
return explode('|#|',$string);
}else{
return array();
}

}

//llamandolos a la base de datos
$descripcion=$_POST["descripcion"];
my_encode($descripcion);
$descripcion=my_decode();
$sql="INSERT INTO modulos (descripcion)
VALUES
('$descripcion')";
if (!mysql_query($sql,$con)){
die('Error: ' . mysql_error());
}

disculpa mi ignorancia la verdad es lamentable que las mismas personas que nos exigen un sistema no supieron capacitarnos para realizar esta tarea y aun asi exigen maravillas.. considero que eh aprendido mas en esto con ustedes que con aquellos que se suponen deben educarnos.. gracias..
  #4 (permalink)  
Antiguo 31/10/2013, 14:56
Avatar de juanito1712  
Fecha de Ingreso: mayo-2010
Ubicación: Valencia
Mensajes: 1.124
Antigüedad: 13 años, 11 meses
Puntos: 66
Respuesta: envio de campos duplicados

a ver, el problema que creo entender que tienes es que estás generando campos dinamicamente y con php en un principio no puedes saber cuantos tienes o cuantos ni los nombres que tendrán ni te funciona nada, una solución podria ser está:

has de conseguir que javascript escriba esto en un input con todos los valores que tienes en los diferentes campos

des1|#|act1|#|fec1|.|des2|#|act2|#|fec2|.|des3|#|a ct3|#|fec3

y una vez consigas recorrer todos los campos y escribir todas las entradas de ese modo en el input supongamos que ese campo se llama comodin

Código PHP:
$definitivo=array();
$grupos=explode('|.|',$_POST['comodin']);
foreach(
$grupos as $grupo){
     
$subgrupo=explode('|#|',$grupo);
     
array_push($definitivo,$subgrupo);

de este modo

$definitivo[0][0]=des1;
$definitivo[0][1]=des2;
$definitivo[1][2]=fec2;

y una vez ya tienes montado el array en php ya lo puedes ir guardando o hacer lo que quieras


esto te servirá de "inspiración" para poder escribir la función de javascript que monte la cadena de texto
Código PHP:
$string='';
    for(
$x=0;$x<count($array);$x++){
        if(
$x==0){
            
$string.=$array[$x];
        }else{
            
$string.='|#|'.$array[$x];
        }
    }
    return 
$string

y por si te quieres culturizar un poco ;)
http://us1.php.net/manual/es/function.explode.php
http://us1.php.net/manual/es/control...es.foreach.php
  #5 (permalink)  
Antiguo 31/10/2013, 22:16
 
Fecha de Ingreso: octubre-2013
Ubicación: venezuela
Mensajes: 3
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: envio de campos duplicados

function addRow(tableID) {
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
var row = table.insertRow(rowCount);
var colCount = table.rows[0].cells.length;
for(var i=0; i<colCount; i++) {
var newcell = row.insertCell(i);
newcell.innerHTML = table.rows[0].cells[i].innerHTML;
//alert(newcell.childNodes);
switch(newcell.childNodes[0].type) {
case "text":
newcell.childNodes[0].value = "" ;

//asi quedaria el codigo para concatenar cada input?

var string='';
for(x=0;x<count.length;x++){
if(x==0){
string + array[x];
}else{
string + '|#|' + array[x];
}
}
return string;
break;
case "text":
newcell.childNodes[0].value = "" ;
var string='';
for(x=0;x<count.length;x++){
if(x==0){
string + array[x];
}else{
string + '|#|' + array[x];
}
}
return string;
break;
case "checkbox":
newcell.childNodes[0].checked = false;
break;
case "select-one":
newcell.childNodes[0].selectedIndex = 0 + "|#|";
break;
}
}
}

Etiquetas: campos, duplicados, fecha, html, mysql, select, sql
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 04:38.