Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/10/2007, 21:57
Avatar de ZydRick
ZydRick
 
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 20 años
Puntos: 4
Duda con INSERT múltiple

Hola a todos, estoy programando un sistema para crear encuestas y para dicho script he creado 2 tablas en MySQL:

encuestas
id_enc
pregunta

encuestas_opt
id_opt
opciones
num_votos
id_enc

El script completo es el siguiente:

Código PHP:
<?php
    
include('config.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<head>
<title>Encuestas</title>
<meta name="distribution" content="global" />
<meta name="robots" content="all" />
<style type="text/css">
body {
    font-family: 'Trebuchet MS', Verdana, Arial, Helvetica, sans-serif; /* Tahoma,Verdana, sans-serif*/
    Font-size: 10pt;
    background: #fff;
    padding: 0;
    margin: 0;
}
a.link {
    color: #0066cc;
    text-decoration: none;
}
a.link:hover {
    text-decoration: underline;
}
.file {
    display: block;
}
label {
    display: block;
}
span a {
    margin-left: 1em;
}
</style>
<script type="text/javascript">
var numero = 0;

// Funciones comunes
c = function (tag) { // Crea un elemento
   return document.createElement(tag);
}
d = function (id) { // Retorna un elemento en base al id
   return document.getElementById(id);
}
e = function (evt) { // Retorna el evento
   return (!evt) ? event : evt;
}
f = function (evt) { // Retorna el objeto que genera el evento
   return evt.srcElement ?  evt.srcElement : evt.target;
}

addField = function () {
   container = d('files');
   
   span = c('SPAN');
   span.className = 'file';
   span.id = 'file' + (++numero);

   field = c('INPUT');   
   field.name = 'opciones[]';
   field.type = 'text';
   
   a = c('A');
   a.name = span.id;
   a.href = '#';
   a.onclick = removeField;
   a.innerHTML = 'Quitar';

   span.appendChild(field);
   span.appendChild(a);
   container.appendChild(span);
}
removeField = function (evt) {
   lnk = f(e(evt));
   span = d(lnk.name);
   span.parentNode.removeChild(span);
}
</script>
</head>
<body>
    <?php
        
//Preguntamos si nuetro arreglo 'archivos' fue definido
        
if(isset($_POST['enviar'])) {
            if(
$_POST['pregunta'] == '') {
                echo 
"No has ingresado la pregunta de la encuesta. <a class='link' href='javascript:history.back()'>Regresar</a>";
            }else {
                
$pregunta strip_tags($_POST['pregunta']);
                
mysql_query("INSERT INTO encuestas (pregunta) VALUES('".$pregunta."')");
                
$id_enc mysql_insert_id();
                
$cont '1';
                
$cant count($_POST['opciones']);
                while(
$cont <= $cant){
                      
$opciones $opciones["$cont"];
                      
$sql mysql_query("INSERT INTO encuestas_opt (opciones, id_enc) VALUES ('$opciones', '$id_enc')");
                      
$cont++;
                }
                echo 
"exito";
            }
        }else {
    
?>
    <form name="frm" id="frm" action="pruebafrm.php" method="post">
        <label>T&iacute;tulo de la encuesta:</label>
        <input type="text" name="pregunta" size="30" /><br />
        <label>Opciones:</label>
        <a class="link" href="#" onclick="addField()" accesskey="5">Añadir opciones</a>
        <div id="files"></div>
        <input type="submit" value="Guardar datos" id="envia" name="enviar" />
    </form>
    <?php
        
}
    
?>
</body>
</html>
Ahora paso a explicar como trabaja el script, el javascript lo que hace es ir generando controles "input text" según las opciones que se vayan a añadir a una determinada encuesta, una vez enviados los datos hago una validación para saber si se ha ingresado el título de la encuesta, luego paso a hacer el primer INSERT en la tabla "encuestas" luego de ello declaro una variable para obtener la última id ingresada a MySQL en dicha tabla para usarla luego en el siguiente INSERT en la tabla "encuestas_opt", declaro una variable "$cont" y le asigno el valor "1" y otra variable "$cant" en la que cuento la cantidad de controles "input text" que contienen las opciones de la encuesta, luego hago un while comparando si $cont es menor o igual a $cant y finalmente hago el siguiente INSERT en bucle para ir ingresando en la tabla "encuestas_opt" las opciones y la id de la encuesta a la que pertenece, y aquí es donde me salta la duda y el problema y es que así como está el script, me inserta correctamente los datos en la tabla "encuestas" pero en la tabla "encuestas_opt" aparentemente lo hace bien, pero cuando checo en el phpMyadmin se aprecia que se han insertado en dicha tabla tantos registros como opciones se eligieron pero al entrar a ver los datos me muestra esto:

Voy a suponer que seleccioné 3 opciones(si, no y no opino; en ese orden), entonces enla tabla "encuestas_opt" muestra lo siguiente:



Si se dan cuenta sólo aparece la opción "no" y las demás filas ese campo aparece vacío. ¿Dónde puedo estar fallando?, espero que me puedan ayudar con ello, gracias de antemano.

Saludos