PDA

Ver la Versión Completa : Error al insertar varios registros


el_barto
22-11-2010, 15:36:55
Buenos dias, he estado trabajando con PHP y he hecho un for para insertar una serie de respuestas a una encuesta que se carga dinamicamente pero al momento de insertar algunas respuestas si se insertan y otras no se insertan en mi base de datos MYSQL, he comprobado que es aleatorio no siempre se insertan las mismas respuestas por eso creo que es algo que me hace falta para manejar la transaccionalidad, si me puedieran ayudar al respecto les agradeceria al respecto, anexo el codigo usado:

Aca recorro el formulario y llamo la funcion guardarResPUMOD que manda a ejecutar el Query.


function guardarRespuestas(formCrear,i,j){
for(c=0; c<parseInt(i); c++){
var pcerrada=document.getElementById("preguntaCerrada"+c).value;
var rcerrada=document.getElementById("respuestaCerrada"+c).value;
formCrear.action="../../../src/despacho/guardarResPUMOD.php?pcerrada="+pcerrada+"&rcerrada="+rcerrada+"&val=c"+"&pasadas="+<?php echo($pasadas); ?>+"&idDespacho="+<?php echo($idDespacho); ?>+"&idDetalle="+<?php echo($idDetalle); ?>+"&idCultivo="+<?php echo($idCultivo); ?>; // NUEVO
formCrear.submit();
}
for(a=0; a<parseInt(j); a++){
var pabierta=document.getElementById("preguntaAbierta"+a).value;
var rabierta=document.getElementById("respuestaAbierta"+a).value;
formCrear.action="../../../src/despacho/guardarResPUMOD.php?pabierta="+pabierta+"&rabierta="+rabierta+"&val=a"+"&pasadas="+<?php echo($pasadas); ?>+"&idDespacho="+<?php echo($idDespacho); ?>+"&idDetalle="+<?php echo($idDetalle); ?>+"&idCultivo="+<?php echo($idCultivo); ?>; // NUEVO
formCrear.submit();
}
}


Aca muestro lo que estoy haciendo en el archivo guardarResPUMOD.php


if ($_GET["val"]=="c") {
$idDespacho = $_GET["idDespacho"];
$idDetalle = $_GET["idDetalle"];
$idCultivo = $_GET["idCultivo"];
$pcerrada = $_GET["pcerrada"];
$rcerrada = $_GET["rcerrada"];
$pasadas = $_GET["pasadas"];
if(!empty($rcerrada)){
$consulta = guardarPU($idDespacho,$idDetalle,$idCultivo,$pcerrada,$rcerrada,$pasadas);
}
}
if ($_GET["val"]=="a") {
$idDespacho = $_GET["idDespacho"];
$idDetalle = $_GET["idDetalle"];
$idCultivo = $_GET["idCultivo"];
$pabierta = $_GET["pabierta"];
$rabierta = $_GET["rabierta"];
$pasadas = $_GET["pasadas"];
if(!empty($rabierta)){
$consulta = guardarPU($idDespacho,$idDetalle,$idCultivo,$pabierta,$rabierta,$pasadas);
}
}


Y aca esta la funcion que envio a la BD:


function guardarPU($idDespacho,$idDetalle,$idCultivo,$pregunta,$respuesta,$pasadas){
require_once("../functions.php");
$consulta = 1;
$query = "INSERT INTO RESP_PUERTO (ID_PASADAS,DESP_CONS,CTRACOP_IDENT,ACOPTR_CONS,PREG_CONS,RESP_DESC)"
. " VALUES($pasadas,$idDespacho,$idDetalle,$idCultivo,$pregunta,'$respuesta')";
mysql_query($query);
//mysql_close();
return $consulta;
}


Debo hacer algo adicional para que se inserten siempre las respuestas?, Gracias

el_barto
23-11-2010, 19:59:14
Buenas tardes, hice una modificacion a mi codigo, agregando el string de conexion al insert, ahora ya confirme que siempre me inserte la primera pregunta, cosa que no pasaba antes, pero en los registros que fallan me muestra este error "Warning: mysql_query(): supplied argument is not a valid MySQL-Link", acaso debo cerrar la conexion a la BD o que debo hacer para evitar este error, gracias. Anexo el codigo como quedo despues de mi ultimo cambio.


function guardarPU($idDespacho,$idDetalle,$idCultivo,$pregunta,$respuesta,$pasadas){
require_once("../functions.php");
$consulta = 1;
$query = "INSERT INTO RESP_PUERTO (ID_PASADAS,DESP_CONS,CTRACOP_IDENT,ACOPTR_CONS,PREG_CONS,RESP_DESC)"
. " VALUES($pasadas,$idDespacho,$idDetalle,$idCultivo,$pregunta,'$respuesta')";
mysql_query($query,$link);
//mysql_close();
return $consulta;
}

georkis
18-12-2010, 01:57:13
Hace poco publique un código en el sitio www.mygnet.com, pero te lo ofresco por acá... es este

// Esta es la página form.php

<form id="form1" name="form1" method="post" action="form_1.php">
<input name="cantidad" type="text" id="cantidad" value="" />
<input type="submit" name="Submit" value="Agregar cantidad de registros" />
</form>

//Esta es la página form_1.php

<?
if( isset( $_POST["submit"] ) ) // se envio el formulario?
echo "Se ha insertado los registros satisfactoriamente";
for($x =0 ; $x <= $_POST['cantidad'] ; $x++) // recorremos los posibles registros, puedes poner los que necesites
// se recuperan cada uno de los datos del form siempre y cuando se hayan enviado, de lo contrario los omite

if(isset($_POST["opcStatus" . $x])) // se envio el registro opcStatus1, opcStatus2, ... etc. ?
{
// obtenemos cada uno de los datos
$txtNombre= $_POST["txtNombre".$x ];
$txtApellidos=$_POST["txtApellido".$x ];

// tu cadena correspondiente para la actualizacion de datos.

/*Justo aqui es donde tu colocas el codigo correspondiente a la actualizacion
26.
27.o a la insercion de los datos a tu base de datos, este script se limita a
28.
29.proponer la funcionalidad, el resto esta de tu parte. */
$insertSQL="INSERT INTO usuarios (nombre, apellidos) VALUES ('$txtNombre', '$txtApellidos')";
mysql_select_db($database_my, $my);
$Result1 = mysql_query($insertSQL, $my) or die(mysql_error());


}

?>
</p>
<p>
<?
$cantidad=1;

While($cantidad<=$_POST['cantidad']){



?>
</p>
<form method="POST">
<p>Registro <? echo "$cantidad"; ?><br>
<br>
Nombre:
<input type="text" name="txtNombre<? echo "$cantidad";?>">
Apellidos:
<input type="text" name="txtApellido<? echo "$cantidad";?>">
<br>
:
<input name="opcStatus<? echo "$cantidad";?>" type="hidden"">
<input name="cantidad" type="hidden" id="cantidad" value="<? echo "$_POST[cantidad]"; ?>" />
</p>
<hr>
<?
$cantidad++;
}

?>
<input type ="submit" name="submit" value="OK">
</form>

/// base de datos de MySQL
CREATE TABLE usuarios (
ID int(3) NOT NULL auto_increment,
nombre varchar(15) NOT NULL,
apellidos varchar(25) NOT NULL,
PRIMARY KEY (ID)
)