Comunidad de diseño web y desarrollo en internet online

Variables con nombre que depende de un valor de un campo

Citar            
MensajeEscrito el 02 Jul 2009 07:59 pm
Quiero hacer un test que tiene almacenadas las preguntas y respuestas en una base de datos mysql,
El test se muestra mediante un formulario con un bucle. Por lo tanto todos los campos input type se llaman igual. Quiero que cada campo:
<input type="radio" name="xxxxxx"> se llame de una forma diferente y que dependa de un valor numerico, por ejemplo de la variable i del bucle que muestra las preguntas para poder guardarlas en un array.
Alguien sabe como hacerlo, he intentado hacer esto: pero no me sale.
<?php
for ($i=0; $i <$num_results; $i++)
{
$row = mysql_fetch_array($result);
echo '<p><input type="radio" name="valor[<?php echo $i; ?>]"> value="a" .'</p>';
echo '<p><input type="radio" name="valor[<?php echo $i; ?>]"> value="b" .'</p>';
echo '<p><input type="radio" name="valor[<?php echo $i; ?>]"> value="c" .'</p>';
}
?>
Como veis es para hacer un test donde el name de la variable cambie segun el valor de i.
Se os ocurre algo?
Gracias.

Por antoniuskas

4 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Jul 2009 09:56 pm

Código PHP :

function extractPairs( $prefix , Array $params)
{
   $pairs = array();
   $len = strlen($prefix);
   foreach ($params as $key => $parValue)
   {
      if (strpos($key, $prefix) !== FALSE)
      {
         $pairKey =  substr($key, $len);
         if (is_numeric($pairKey))
         {
            $pairs[$pairKey] = $parValue;
         }
      }
   }
   return $pairs;
}


Uso:

Código PHP :

// "valor" porque es el prefijo de "valor1", "valor2", "valorN";
// $_POST o $_GET segun como lo uses 
$params = extractPairs("valor", $_POST); 
print_r($params);


saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 03 Jul 2009 07:49 am
Perdona, pero y cual sería el código del formulario, tal y como lo puse no va.
Gracias

Por antoniuskas

4 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 Jul 2009 07:39 pm
HE probado esto y tampoco me funciona. A ver si alguien puede decirme como hacerlo.
<html>
<head>
</head>
<body>
<h1>AYUDITA POR FAVOR</h1>
<form method="post" action="pagina2.php">
<?php
for ($i=0; $i <5; $i++)
{

echo '<input type="radio" name=eval(echo "valor".$i) value="1">';

}
?>
<input type="submit" value="confirmar">
</form>
</body>
</html>

Por antoniuskas

4 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Jul 2009 10:07 am

Maikel escribió:

Código PHP :

function extractPairs( $prefix , Array $params)
{
   $pairs = array();
   $len = strlen($prefix);
   foreach ($params as $key => $parValue)
   {
      if (strpos($key, $prefix) !== FALSE)
      {
         $pairKey =  substr($key, $len);
         if (is_numeric($pairKey))
         {
            $pairs[$pairKey] = $parValue;
         }
      }
   }
   return $pairs;
}


Uso:

Código PHP :

// "valor" porque es el prefijo de "valor1", "valor2", "valorN";
// $_POST o $_GET segun como lo uses 
$params = extractPairs("valor", $_POST); 
print_r($params);


saludos
Maikel

Esta clase solo le sirve para la captura de datos en el caso de que se crearan campos dinámicos y se envíen por POST o GET lo cual solucionara su problema de captura de la información del formulario posteriormente, pero si entendí bien el problema, el lo que requiere es a partir de una base de datos generar los campos de un formulario.

antoniuskas

Bueno tengo que hacer notar algo >

Código PHP :

<?php
for ($i=0; $i <$num_results; $i++)
{
$row = mysql_fetch_array($result);
echo '<p><input type="radio" name="valor[<?php echo $i; ?>]"> value="a" .'</p>';
echo '<p><input type="radio" name="valor[<?php echo $i; ?>]"> value="b" .'</p>';
echo '<p><input type="radio" name="valor[<?php echo $i; ?>]"> value="c" .'</p>';
}
?>
Si ejecutas este código te aparecerá un error en la línea 5 aproximadamente por que estas declarando una etiqueta php dentro de una etiqueta php

No hagas esto>

Código :

<?php
...
<?php ?>
...
?>


Una posible solución podría ser de estas dos formas:

____________________________________________________
Crear los campos sin consultar una base de datos y obteniendo los valores desde un array

Código PHP :

<html>
<head>
</head>
<body>
<h1>AYUDITA POR FAVOR</h1>
<form method="post" action="pagina2.php">
<?php 
//Este array contendria los valores
$valores = array("rojo","verde","azul", "amarillo");

$num = 1;
//foreach es el ciclo que se utiliza para recorrer array de manera práctica en php
foreach ($valores as $valor){
   print "<label for=\"valor".$num."\" >Valor ".$valor." </label>";
   print "<input type=\"radio\" name=\"valor\" id=\"valor".$num."\" value=\"".$valor."\"><br />\n";
   $num++;
}
?>
<input type="submit" value="confirmar">
</form>
</body>
</html>
Cabe resaltar varias cosas:

Primero: Si deseas crear más radios solo tienes que insertar un elemento dentro del array $valores.

Segundo: Si los input son de tipo radio tienes que tener en cuenta que el name es igual para todos los input que pertenezcan a un mismo grupo, por lo cual se debe variar el id no el name.

Tercero: Es recomendable utilizar la etiqueta LABEL junto con el atributo for para los textos adjuntos a los input, ya que estos permiten que sea seleccionado el radio también al cliquear el texto.

Cuarto: Utilice print pero puedes utilizar echo si gustas, es más veloz echo.

____________________________________________________
Crear los input consultando una base de datos

Código PHP :

<html>
<head>
</head>
<body>
<h1>AYUDITA POR FAVOR</h1>
<form method="post" action="pagina2.php">
<?php 
//mysql_connect sirve para conectarse a mysql, el primer parametro es el hostname, el segundo el user, el tercero el password
mysql_connect("localhost", "root", "") or die("No se pudo realizar la conexión: " . mysql_error());

//mysql_select_db sirve para determinar a que base te deseas conectar dentro de mysql
mysql_select_db("mi_base");

//La siguiente instruccion te permite generar una consulta sql y guardar los resultados dentro de una variable
$result = mysql_query("SELECT valores FROM preguntas");

//Realiza un ciclo while para recorrer todos los valores estraidos de la base
$num = 1;
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
    echo "<label for=\"valor".$num."\" >Valor ".$row[0]." </label>";
   echo "<input type=\"radio\" name=\"valor\" id=\"valor".$num."\" value=\"".$row[0]."\"><br />\n";
   $num++;
}

mysql_free_result($result);

?><br/>
<input type="submit" value="confirmar">
</form>
</body>
</html>
Cabe resaltar varias cosas:

Primero: En

esutoraiki escribió:

mysql_connect("localhost", "root", "")
Tiene que poner tu hostname que por lo general puede ser localhost, tu usuario el cual puede ser distinto a root y el password el cual no siempre es vació.

Segundo: En

esutoraiki escribió:

mysql_select_db("mi_base");
Pon el nombre de tu base de datos.

----------------------------------------------------------
Si esta respuesta te generar muchas dudas revisa las funciones y código que no conozcas en www.php.net en dicha página existe un completo tutorial en español que podrá sacarte de muchas dudas.

Un saludo :wink:

Por esutoraiki

Claber

548 de clabLevel

4 tutoriales

Genero:Masculino  

Aplicaciones para Web

opera

 

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