Comunidad de diseño web y desarrollo en internet online

Extraer datos separados por comas de campo text en mysql

Citar            
MensajeEscrito el 13 Nov 2011 09:12 pm
Hola

Tengo un programa que me genera una serie de resultados en plan array, los guardo en una base de datos mysql separados por comas, se trata de un programa generador de actividades , por cada actividad me guarda 4 numeros separados por comas, si hago 5 actividades me guarda 20 numeros separados por comas , por ejemplo:

a,b,c,d,a,b,c,d,a,b,c,d,.........
Donde
a ---> número de página.
b ---> tipo de página. Sopa de letras, respuesta múltiple, etc
c ---> Evaluación de la página:0 NO INTENTADO,1 BIEN,2 MAL,3 NO ES UNA
ACTIVIDAD.
d ---> Número de intentos.

y asi se repiten y repiten las series tantas series como actividades haya hecho.

El script que guarda los datos es el siguiente:

Código PHP :

<?php
//Este es un script muy simple para ver las posibilidades de LIM y php

if (empty($_POST)){
//Si no recibe datos.
}
else
{
    include('config.php');
    $resul = $_POST['iresul'];
    $titulo = $_POST['ititulo'];
    $intime = $_POST['itime'];
    $id = $_POST['iid'];
    $user= $_POST['inom'];
    $nota = 0;
   
    //$user contiene la identificación del usuario, se debe obtener por sesión, cookie , etc, para este ejemplo utilizamos un valor fijo
    //$user='$inom';
    //$id es la identificación del libro-LIM, puede pasarse desde el propio libro mediante &id=...., o por código
    if ($id!='')
    {
        $conect=mysql_connect($dservidor, $duser, $dpass)or die ("");
       
        echo "conexion<br/>";
       
        if ($conect)
        {
            mysql_select_db ($base, $conect);
            $sql = "SELECT * FROM  $tabla WHERE id_libro=".$id." AND usuario='".$user."';";
                    $result = mysql_query($sql) or die (mysql_error());
                    $nume = mysql_num_rows($result);
                   
                   
                    $arrayDatos=explode(",",$resul);
                    $num=count($arrayDatos)/4;
                   $suma=0;
               
                    for ($f=0;$f<$num;$f++)
                    {
                        $nump++;
                       
                        switch ($arrayDatos[$m+2])
                        {
                            case "1":
                                $suma++;
                                break;
                            default:
                                break;
                        }

                        if ($arrayDatos[$m+2]=="3") $nump--;
                        $m=$m+4;
                     }
                     
                     $nota=number_format(($suma/$nump)*10,1);
                   
            if ($nume>0)
            {
                $sql ="UPDATE $tabla SET id_libro='".$id."',libro='".$titulo."', nota = '".$nota."', datos='".$resul."',fecha=NOW() WHERE id_libro=".$id." AND usuario='".$user."';";
            }
            else
            {
                $sql ="INSERT INTO $tabla ( `id_libro`, `usuario`, `libro`, `nota`, `datos`, `fecha`) VALUES ('".$id."','".$user."','".$titulo."','".$nota."', '".$resul."', NOW());" ;
            }

            $result = mysql_query($sql)or die(mysql_error());

            echo "$resul, $titulo, $intime, $id, $user, $nota";


        }
    }
}
?>


Tambien tengo un script que me permite ver los resultados pero no me los guarda en la BBDD, solo para visualizarlos :

Código PHP :

</head>

<body>
<div id="isla"></div>
<div id="contenedor_tabla_resultados">
  <?php
include('config.php');
$marcab='<img src="marcab.png"/>';
$marcam='<img src="marcam.png"/>';
$marcac='<img src="marcac.png"/>';
$suma=0;
$nump=0;
$num=0;
////Valores para este ejemplo, en un entorno real deben obtenerse de la sesión, post, get , etc
$id=10;
$user=$row_notas['usuario'];
print '<p class="final">Alumno: '.$row_notas['usuario'].'</p>';
?>
  <table width="600" border="1" cellpadding="2" cellspacing="0">
  <tr class="cabecera">
    <td width="150">P&aacute;gina</td>
    <td width="150">Correcta</td>
    <td width="150">Intentos</td>
    <td width="150">No es un actividad </td>
  </tr>
  <p>&nbsp;</p>
  <p>
    <?php
if ($id!=''){
$conect=mysql_connect($dservidor, $duser, $dpass)or die ("");
if ($conect){
mysql_select_db ($base, $conect);
$sql = "SELECT * FROM  $tabla WHERE id_libro=".$id." AND usuario='".$user."';";
      $result = mysql_query($sql) or die (mysql_error());
      $nume = mysql_num_rows($result);
      if ($nume>0) {
while($fila = mysql_fetch_assoc($result))
{
   $titulo=$fila['titulo'];
   $fecha=$fila['fecha'];
   $resultado=explode(",",$fila[datos]);
   $num=count($resultado)/4;
   for ($f=0;$f<$num;$f++)
   {
      $nump++;
      print ('<tr class="datos">');
      print ("<td>".($f+1)."</td>");
      
      switch ($resultado[$m+2])
      {
       case "0":
         print ("<td>".$marcac."</td>"); 
         break;
         case "1":
         print ("<td>".$marcab."</td>"); 
         $suma++;
         break;
         case "2":
         print ("<td>".$marcam."</td>"); 
         break;
         default:
         print ("<td></td>"); 
         break;
      }

       if ($resultado[$m+2]=="3")
       {
          print ("<td>----</td>"); 
          print ("<td>".$marcac."</td>"); 
          $nump--;
       }
       else
       {
         print ("<td>".$resultado[$m+3]."</td>"); 
         print ("<td></td>");
       }
       print ("</tr>");
       $m=$m+4;
    }
}

if ($suma>0){
$nota=number_format(($suma/$nump)*10,1);
}else{
$nota=0;
}


$texto='Fecha:'.$fecha.'<br>';
$texto=$texto."Correctas: ".$suma." de ".$nump." actividades"." ---- ";
$texto=$texto."Nota: ".$nota."";
print "</table>";
print ('<p class="final">'.$texto.'</p>');
}
}
}
  ?>
  </p>

<div id="contenedor_pirata_nota">
  <div id="texto_nota_pirata"><?php echo $nota ?>
  </div>
</div>
</body>
</html>



Ahora bien, me gustaria extraer los datos del array, digamos decodificarlo y hacer que tenga sentido, como hacerlo?????? alguna orientación por favor?
un saludo

Por cartagines

2 de clabLevel



 

chrome
Citar            
MensajeEscrito el 13 Nov 2011 09:17 pm
este es un ejemplo de datos separados por comas que se guardan en la variable $iresul
1,2,3,0,2,4,0,1,3,38,0,0,4,38,0,0,5,38,0,0,6,38,0,0,7,38,0,0,8,38,0,0,9,38,1,2,10,38,0,0,11,38,0,0,12,38,0,0,13,38,0,0,14,38,0,0,15,38,0,0,16,38,0,0,17,38,0,0,18,8,0,0,19,8,0,0,20,8,0,0,21,8,0,0,22,8,0,0,23,14,1,2,24,14,1,1,25,14,0,0,26,18,0,0,27,18,0,0,28,2,3,0,29,38,0,0,30,38,0,0,31,38,0,0,32,2,3,0

Por cartagines

2 de clabLevel



 

chrome
Citar            
MensajeEscrito el 13 Nov 2011 11:45 pm
Hay alguna posibilidad de rediseñar la base de datos?, porque esto, tal como lo comentas, viola todas las reglas de normalización de base de datos.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 14 Nov 2011 08:46 am
Si, s ite fijas en el script que guarfa los datos , los auna en la variable $iresul separados por comas el problema es que hay y cifras separados por comas por ejercicio y nunca un numero fijo de ejercicios, puede haber una actividad con 3 ejercicios y otra con 10 ejercicios y esos datos se guardan ahi separados por comas.

Por cartagines

2 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.