Darse de alta en la web | Recuperar password   
Inicio / Foros / PHP / Operaciones
13 respuestas recibidas | 265 visitas | Categoría PHP

Operaciones

Avatar de elysa
Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1

(Nivel 1 - 23 posts)

#0 Offline elysa Usuario 04 mar 08 (11:10)  
Wenas, necesito realizar una operacion con unos datos que tengo en la base de datos y guardar dicha operacion en otra columna de la base de datos.
Intento recuperar los datos ya guardados de la siguiente manera:

Código PHP


<?php for($i=1;$i<=$num_respuestas;$i++): ?>
<?php $query
=mysql_fetch_row(mysql_query("SELECT * FROM form WHERE id_medico=".$i.""));

    print(
"$query");?>
    <?php endfor ?>


Quiero ir obteniendo fila por fila y ir realizando la operacion,es una mera multiplicacion,pero no consigo obtener los datos de las filas.
Gracias.

algo más de información

Avatar de jurena
Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5

(Nivel 5 - 729 posts)

#1 Offline jurena Usuario 06 mar 08 (09:40)  
elysa,
dinos qué campos de la base y tabla eliges, qué multiplicación es esa y entre qué tipo de campos, en qué columna (si es de la misma tabla o no), cómo es la consulta donde cargas los datos. Y hazlo con algún ejemplo. Esta pregunta es previa, pues es fácil hacer multiplicaciones en MySQL sin tener que recurrir a hacerlo en PHP, a cargar en un array y hacer luego las operaciones mediante interación, pero para eso necesitamos, yo al menos, más información.

Re: Operaciones

Avatar de elysa
Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1

(Nivel 1 - 23 posts)

#2 Offline elysa Usuario 06 mar 08 (14:34)  
id_medico preg1 preg2 preg3 preg4 preg5 preg6 preg7 SUS
1 4 2 0 0 0 0 0

Esta es la base de datos en la que guardo los datos de una encuesta.
Lo que necesitaria es obtener los campos preg1,preg,2,etc.,sumarlos y multiplicarlo por 2,5 y guardar dicho resultado en el campo SUS y posteriormente mostrarlo por pantalla y asi con cada uno de los encuestados,y con mostrar solo el SUS del que esta siendo encuestado valdria.
Con lo que puse anteriormente obtengo todos los campos hasta el id_medico y ese no es necesario para la operacion.
No se si seria mejor guardar el resultado en otra tabla,pero mejor todo en una.
Gracias.

a ver si esto

Avatar de jurena
Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5

(Nivel 5 - 729 posts)

#3 Offline jurena Usuario 06 mar 08 (16:36)  
eso es fácil. De todas formas deberías hacer el cálculo al cargar los datos y no tendrías que hacerlo ahora. Pero si quieres hacer una prueba pon esta consulta y verás que lo hace
UPDATE nombrebase SET SUS = 2.5*(preg1 + preg2 + preg3 + preg4 + preg5 + preg6 + preg7) WHERE id_medico = $numeroidquequieras
y si quieres hacerlo con todas a la vez
UPDATE nombrebase SET SUS = 2.5*(preg1 + preg2 + preg3 + preg4 + preg5 + preg6 + preg7) WHERE id_medico = id_medico

Pero lo mejor sería que al hacer la carga de datos en MySQL, ya hicieras la operación. Eso se hace ya en PHP y es tan fácil como esto. Dinos cómo son los datos del formulario y cómo procesas para subir a la base y te ayudaremos a hacerlo directamente insertando ya la suma multiplicada por 2.5, y no tendrás que hacer nada esto.
EDITO: te había puesto por 2, en lugar de 2.5
No sé si he entendido bien, pero dices que no sabes cómo obtener los datos. ¿Tendrás unos formularios de encuesta y pasarás los datos a un archivo para procesarlos, o no?
En cuanto a lo del id_medico, depende de lo que sea. ¿Qué es exactamente? Sí necesitarás un identificador y tal vez un campo fecha te vendría bien para saber cuándo se hizo la encuesta. Si el id_medico es el id de referencia de otro campo identificador de otra tabla, no debería ser primary key, aunque no lo sé si lo es en tu caso, aunque sí sería necesaria su carga para saber de quién es la encuesta. Explícanos algo más sobre ese id_medico.

Re: Operaciones

Avatar de elysa
Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1

(Nivel 1 - 23 posts)

#4 Offline elysa Usuario 08 mar 08 (18:46)  
Pues introduje la linea que pusiste en la pagina php de la siguiente manera:

Código PHP


<?php
mysql_query
("UPDATE form SET SUS = 2.5*(preg1+preg2+preg3+preg4+preg5+preg6+preg7+preg8+preg9+preg10) WHERE id_medico = id_medico");?>



Y realiza perfectamente la operacion.
El campo id_medico es simplemente un identificador no hace referencia a nada,en lo de la fecha no habia caido,gracias.
Ahora necesitaria hacer una consulta a la base de datos para imprimir por pantalla el SUS del ultimo ,es decir,del que esta siendo encuestado,pero a traves del campo id_medico tampoco se puede saber cual es el ultimo porque es autoincremental y nose la manera de seleccionar el ultimo para mostrarlo y seria lo ultimo que necesitaria.

mysql_insert_id ()

Avatar de jurena
Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5

(Nivel 5 - 729 posts)

#5 Offline jurena Usuario 08 mar 08 (19:22)  
Si te empeñas en hacerlo así...
tras hacer la inserción en php
$ultimo= mysql_insert_id ();
luego lanzas esta consulta y obtienes los datos del último número generado por el autoincremento:
SELECT * from form WHERE id_medico = $ultimo

Pero esto es en realidad algo innecesario y que te causará problemas. Si no generas SUS automáticamente y no como has hecho ahora, a posteriori, ese campo estará en blanco y no vas a actualizar algo cuando puedes generarlo automáticamente, cargarlo en la base y mostrarlo a la vez, y olvidarte de todo, sin tener que recurrir a hacer lo que te dije en el post anterior. Consejo: hazlo todo en el proceso de carga y cuando el usuario pulse el botón de envío; en ese instante envías los datos a tu base y le muestras los resultados, esto último con un simple echo. Es mi consejo.

Re: Operaciones

Avatar de elysa
Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1

(Nivel 1 - 23 posts)

#6 Offline elysa Usuario 09 mar 08 (11:52)  
Para registrar el formulario realizo lo siguiente:

Código PHP


<?php

print ("<H1>Formulario registrado</H1>\n");

define("NUM_PREGUNTAS",10);

$MAS_UNO=NUM_PREGUNTAS+1;

//La siguiente varable define el texto de las Preguntas, en lugar de que aparezca Pregunta1, Pregunta2..

$TEXTO_PREGUNTA=array(1=>"Pregunta1","Pregunta 2","Pregunta 3","Pregunta4","Pregunta5","Pregunta6","Pregunta7","Pregunta8", "Pregunta 9", "Pregunta 10");

if(!
$conexion = mysql_connect('localhost', 'root', 'root')) die("Hubo un error al conectar al servidor");

mysql_select_db ("formulario", $conexion);

for(
$i=1;$i<$MAS_UNO;$i++)
$respuesta[$i]=mysql_real_escape_string($_POST['pregunta'.$i]);
mysql_query("INSERT INTO form (preg1, preg2, preg3, preg4, preg5, preg6, preg7, preg8, preg9, preg10) VALUES (". implode(",",$respuesta).")");
mysql_close ($connection);

   
// Mostrar mensaje de agradecimiento
      
print ("<p>Su formulario ha sido registrado. Gracias por participar</p>\n");
      print (
"<a href='resultadosform.php'>Ver resultados</a>\n");
      
?>



Lo que me quieres decir que es mejor, es realizar la operacion y posteriormente realizar otro INSERT como en el caso de las preguntas?o en esa misma sentencia?pero en ese caso al utilizar el implode nose como seria introducir el SUS en su correspondiente columna.
Y despues para mostrar los resultados les envio a la pagina 'resultadosform.php' y ,realizando un simple echo me mostraria el ultimo resultado?

exactamente, eso es lo que quiero decirte

Avatar de jurena
Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5

(Nivel 5 - 729 posts)

#7 Offline jurena Usuario 09 mar 08 (12:41)  
No he probado nada de lo que ahora te voy a recomendar, pero tú me dirás qué tal. Lo que hago es incluirte una línea para obtener la puntuación con una suma de los datos del array multiplicados por 2.5. Luego hago la inserción de los datos del array; guardo en memoria el dato del autoincremental id_medico para una segunda consulta en la que insertaré el total, y finalmente muestro el dato.
Pruébalo tú a ver qué tal... Seguro que hay soluciones mejores, pero es la que se me ocurre ahora. De esta manera, cargas el datos SUS desde el primer momento y lo muestras sin tener que hacer ninguna consulta.

for($i=1;$i<$MAS_UNO;$i++)
$respuesta[$i]=mysql_real_escape_string($_POST['pregunta'.$i]);
$total=2.5*(array_sum($respuesta));
mysql_query("INSERT INTO form (preg1, preg2, preg3, preg4, preg5, preg6, preg7, preg8, preg9, preg10) VALUES (". implode(",",$respuesta).")");
$ultimo=mysql_insert_id();
mysql_query("UPDATE INTO form (SUS) VALUES ($total)) WHERE id_medico = $ultimo;
mysql_close ($connection);
echo 'puntuación obtenida: '. $total.' puntos';

EDITO para decirte que si quieres ahorrarte la segunda consulta, podrías hacerlo integrando el dato de $total en el array así, tras
$total=2.5*(array_sum($respuesta));
$respuesta[]=$total;

y más tarde en el
mysql_query("INSERT INTO form (preg1, preg2, preg3, preg4, preg5, preg6, preg7, preg8, preg9, preg10, SUS) VALUES (". implode(",",$respuesta).")");
y podrías eliminar lo demás, pero no lo he probado, la verdad. Si quieres hacerlo, ya sabes...

Re: Operaciones

Avatar de elysa
Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1

(Nivel 1 - 23 posts)

#8 Offline elysa Usuario 09 mar 08 (19:15)  
Probe lo primero que me dijiste, y el segundo INSERT no me guardaba el resultado pero poniendolo con el UPDATE si y la funcion mysql_last_insert(); no la reconocia y puse mysql_insert_id () .
De todas maneras lo he hecho como pusiste esta ultima vez y lo guarda todo a la vez perfectamente.
Formulario registrado
SUS obtenida: 25 puntos
Su formulario ha sido registrado. Gracias por participar

Ver resultados

y al mandar a la pagina para ver los resultados de la encuesta , al reutilizar codigo con el include en 'resultadosform.php'...me aparece en la misma pagina eso mismo pero sin guardar el resultado:
Formulario registrado
SUS obtenida: 0 puntos
Su formulario ha sido registrado. Gracias por participar
Ver resultados
RESPUESTAS
.......

Y claro al reutilizar el codigo no lo tendria que mostrar por pantalla para qno saliera de nuevo.Sera mejor que solo lo imprima al mostrar los resultados y ya esta..haciendo una consulta en la ultima pagina de resultados??

perdona, fueron errores míos

Avatar de jurena
Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5

(Nivel 5 - 729 posts)

#9 Offline jurena Usuario 09 mar 08 (22:29)  
claro, la función es mysql_insert_id (crucé con la función de MySQL), y la segunda consulta debe ser con UPDATE (edito el post y corrijo), pero yo también prefería la segunda opción que te puse, sin duda la mejor, pues evita una de las consultas.
En cuanto al envío a resultadosform.php, tendrías que enviar el valor de SUS, es decir, el de $total, por POST mediante hidden a través de la cabecera, o por GET a través de la URL para poder mostrarlo, pero eso no debe ser ningún problema, una vez que lo has generado. Es lógico que ahora no lo veas, pues cuando refrescas rediriges a la página resultadosform.php y lanzas la consulta a la vez, e imagino que lo primero es el direccionamiento. Si haces lo que te digo y recoges el valor de $total mediante $_POST O $_GET en la página resultadosform.php , podrás mostrarlo sin dificultad. Si tienes algún problema para hacerlo, dilo y te echaremos una mano...
Saludos

Re: Operaciones

Avatar de elysa
Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1

(Nivel 1 - 23 posts)

#10 Offline elysa Usuario 11 mar 08 (11:32)  
Pues si me ayudaras con esa ultima cosa, lo que pasa que al pasarlo por $_POST o $_GET, supongo que podre imprimirlo en cualquier lugar de la pagina resultadosform.php, pero no mantener el resultado q se inicializa de nuevo como puse en el post anterior, ya que no tengo ni esa frase en la pagina de resultados.O simplemente puedo quitar todo ese codigo para que no salga en la reutilizacion del mismo???
Y muchas gracias por ayudarme se agradece.

a ver si lo logramos

Avatar de jurena
Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5

(Nivel 5 - 729 posts)

#11 Offline jurena Usuario 11 mar 08 (23:18)  
yo lo haría por Post a través de un input hidden
en el formulario de envío de datos en el que haces todo, antes de cerrarlo y después del selector donde has creado $total
o si quieres antes de cerrar el formulario con </form> y antes del botón del submit, claro, escribes
<input type="hidden" name="total" value="<?php echo $total; ?>" />

luego en el archivo resultadosform.php recoges el dato mediante
$total=$_POST['total'];
y lo muestras donde quieras con un echo
echo 'el resultado obtenido es: '.$total.' puntos';
prueba a ver si funciona

Re: Operaciones

Avatar de elysa
Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1

(Nivel 1 - 23 posts)

#12 Offline elysa Usuario 12 mar 08 (13:24)  
Lo que pasa que primero tengo el formulario y despues envio al usuario a la pagina de 'formulario registrado' y no lo hago todo en la misma pagina.
Pero de todas maneras he creado un form en dicha pagina para pasar el valor y lo muestra sin ningun problema, he eliminado el echo $total de despues de calcularlo y lo muestro unicamente en la pagina de resultadosform.php.
Creo que asi valdra, de todas maneras si m surgiera alguna duda ya volvere preguntar.
Muchas gracias de verdad.

Operaciones

Avatar de jurena
Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5

(Nivel 5 - 729 posts)

#13 Offline jurena Usuario 12 mar 08 (15:33)  
Bien, elysa:
eso es lo que yo hubiera hecho. Naturalmente, el echo $total te lo puse para que vieras que se mostraba. Ahora ya no tendrás que preocuparte de actualizar ese dato SUS, pues el propio script lo actualizará directamente: a eso me refería desde un principio.
saludos, aquí estaremos.

Responder mensaje

Para poder participar debes estar registrado e identificado. Si no estás registrado como usuario de PHP-Hispano, :: Registrar ::
Login / Password   

Web alojada en Zilos

php-hispano.net 2002 - 2008 | XHTML 1.0
Datos Legales | Webmaster