Esta lección es parte de un tutorial de Encuesta / Encuesta en curso. La primera parte está aquí: cree su propia encuesta / sondeo, junto con todos los archivos que necesita.

En la lección de la parte anterior, echó un vistazo al código PHP para establecer una pregunta para su encuesta. Ahora veremos el código de la encuesta real. En un navegador web, se ve así:

El formulario HTML para esto consta de tres etiquetas RADIO y dos etiquetas SUBMIT. (La etiqueta SUBMIT le da un botón). Aquí está el HTML para el formulario:


>

>

>


>


>

Lo que hay que tener en cuenta aquí es que hay dos formas entre las etiquetas BODY. El primero, con el formulario NAME1, es para el botón "Haga clic aquí para votar". La ACCIÓN para este formulario es process.php. Este es un archivo separado que veremos pronto. El segundo formulario, con NAME form2, es para el botón "Ver resultados". La ACCIÓN para form2 es viewResults.php. Nuevamente, esta es una página separada que veremos más adelante.

Hay una o dos cosas a tener en cuenta sobre form1. Primero, hay una declaración impresa en la parte superior:

Esto imprimirá la pregunta. La segunda cosa a tener en cuenta son los botones HTML RADIO:

>
>
>

Los tres botones de RADIO tienen el mismo NOMBRE: 'q'. Esto es para que sean tratados como un solo grupo. El VALOR es A, B o C. Obtendremos el valor con código PHP. Las primeras declaraciones de impresión ($ answerA, $ answer y $ answerC) son para la propiedad CHECKED de los botones RADIO. Necesitamos saber qué botón seleccionó el usuario (marcado). Las segundas declaraciones de impresión ($ A, $ B, $ C) son para las tres opciones que sacaremos de la tabla de la base de datos.

El HTML para form2 es solo una etiqueta OCULTA. Tiene el NOMBRE h1 e imprime un ID. Los tomaremos cuando el formulario se envíe al viewResults.php página.

Echemos un vistazo al código PHP para survey.php. Es esto:

Código PHP para encuesta (se abre en una nueva pestaña del navegador como un archivo de texto)

La primera parte del código es para obtener un valor de la página setSurvey. Si recuerda, esta página tiene una lista desplegable donde puede establecer una pregunta para su encuesta. Pasa el número de identificación de la tabla de la base de datos. Esto es lo que obtenemos:

if (isset ($ _ GET['h1'])) {

$ qID = $ _GET['h1'];

} demás {

$ qID = 1;

}

La parte isset solo se activará si puede OBTENER un valor llamado h1. Este valor h1 se pasa de setSurvey.php. Si todo está bien, colocamos el ID de setSurvey en una variable llamada $ qID. Este contendrá un ID de la tabla de la base de datos. Si no puede obtener un valor para h1, entonces establecemos un valor predeterminado para $ qID - 1. Esto significa la fila 1 de la tabla. Habría un problema aquí, si no tuviera una fila con un ID de 1. Por lo tanto, podría consultar la base de datos y obtener cualquier ID válido para usarlo como predeterminado. Suponemos que hay una fila 1, ¡que no es lo más inteligente! Pero no queremos complicar demasiado las cosas.

Las siguientes líneas configuran algunas variables:

$ question = 'Pregunta no establecida';

$ answerA = 'sin marcar';
$ answerB = 'sin marcar';
$ answerC = 'sin marcar';

$ A = "";
$ B = "";
$ C = "";

Si no se puede establecer una pregunta, almacenaremos algunos valores predeterminados para la pregunta y las tres opciones, A, B y C. También dejamos los botones RADIO sin marcar.

Después de intentar contactar con el servidor y la base de datos, tenemos nuestra declaración preparada:

$ stmt = $ db_found-> prepare ("SELECCIONAR ID, Pregunta, OpciónA, OpciónB, OpciónC FROM tblsurvey WHERE ID =?");

Nuevamente, solo estamos seleccionando las columnas que necesitamos en el SQL:

SELECCIONE ID, Pregunta, OpciónA, OpciónB, OpciónC DE tblsurvey ¿DÓNDE ID =?

Las únicas columnas que necesitamos son ID, Pregunta, OptionA, OptionB y OptionC. Pero necesitamos hacer coincidir un ID, por lo que tenemos el signo de interrogación después de la cláusula WHERE.

Si la declaración está bien, podemos vincular los parámetros:

$ stmt-> bind_param ('i', $ qID);

La letra 'I' significa Integer, porque así es como configuramos nuestro campo de ID. El ID en sí se mantendrá en la variable llamada $ qID.

A continuación, ejecutamos la declaración e intentamos recuperar algunas filas:

$ stmt-> ejecutar ();

$ res = $ stmt-> get_result ();

Si encontramos algunas filas, podemos completar nuestras variables:

if ($ res-> num_rows> 0) {

$ qID = $ fila['ID'];

$ pregunta = $ fila['Question'];

$ A = $ fila['OptionA'];
$ B = $ fila['OptionB'];
$ C = $ fila['OptionC'];

}

Entonces accedemos a los campos Pregunta, OpciónA, OpciónB y OpciónC desde la base de datos y colocamos los valores en las variables llamadas $ pregunta, $ A, $ B, $ C.

Y eso es todo lo que necesitamos hacer. El resto del código PHP es solo una verificación de errores, con muchas otras partes de las declaraciones if.

Cuando el usuario selecciona una opción y activa el botón "Haga clic aquí para votar", se enviará a la process.php página. Esa variable $ qID anterior se enviará a la página de proceso. También se envía a la página de proceso la elección que hizo el usuario (A, B o C).

Echemos un vistazo a la página del proceso.

La página process.php

La página de proceso se utiliza para procesar la elección que hizo un usuario en la encuesta. Esa opción se agrega a la tabla de la base de datos de la encuesta y se muestra un mensaje adecuado una vez que se ha agregado el voto. Para hacer todo eso, se necesitan dos cosas del survey.php página: la elección que hizo el usuario (A, B o C) y un ID de fila de preguntas de la tabla.

El ID de fila está contenido en la variable $ qID de la página de la encuesta. Colocamos esto en una etiqueta HTML OCULTA:

>

En la página de proceso, podemos usar GET para obtener esa ID, simplemente usando el valor NAME, que era h1. Cuando se hace clic en un botón de RADIO, también puede OBTENER el valor de NOMBRE. A cada botón de RADIO se le dio el NOMBRE 'q':

>
>
>

Si usa $ _GET['q'] luego puede tomar el VALOR, que tenemos como A, B o C, en el código de arriba. Aquí está el código completo para process.php página:

Código PHP para procesar la encuesta (se abre en una nueva pestaña del navegador como un archivo de texto)

Al probar este código, busque la siguiente línea:

$ _SESIÓN['hasVoted'] = '1';

Comente esta línea; de lo contrario, recibirá el mensaje "Ya votó" cada vez que intente agregar un nuevo voto a su base de datos. Es posible que incluso deba cerrar su navegador y abrirlo nuevamente, dependiendo de cómo haya configurado sus cookies. No olvide descomentar la línea, si va a su sitio web. Pero está ahí para establecer una variable de sesión llamada hasVoted. Podemos verificar esto en la parte superior del código:

session_start ();

if ((isset ($ _ SESSION['hasVoted']))) {

si ($ _SESSION['hasVoted'] = '1') {

$ voteMessage = "Ya votó";

}

}

Esto comprueba si una sesión llamada hasVoted ha sido establecido. A continuación, verificamos si la sesión hasVoted tiene un valor de 1. Si ambas cosas son ciertas, significa que el usuario ya ha votado. (Por supuesto, puede borrar sus cookies y votar de nuevo. ¡Pero esta no es exactamente una aplicación que protege las Joyas de la Corona! Una aplicación más robusta podría crear una tabla de base de datos temporal y registrar que el usuario ha votado allí).

Si el usuario no ha votado, el demás parte de la sentencia if se ejecuta. Primero está este fragmento de código:

if (isset ($ _ GET['Submit1']) && isset ($ _ OBTENER['q'])) {

$ selected_radio = $ _GET['q'];
$ idNumber = $ _GET['h1'];

Esto verifica si se hizo clic en el botón Enviar en la página anterior. También comprueba si la variable q está configurada. Recuerde que esta variable q tiene un valor de nuestros botones de RADIO. Será A, B o C, según la opción seleccionada.

Si ambas cosas son ciertas, podemos continuar y almacenar los valores en variables:

$ selected_radio = $ _GET['q'];
$ idNumber = $ _GET['h1'];

La variable $ selected_radio tendrá la opción A, B o C; la $ idNumber La variable contendrá el ID de fila de nuestra tabla de base de datos.

La siguiente parte del código se conecta al servidor y la base de datos, donde creamos un nuevo mysqli objeto (ya conociste este código):

$ db_found = new mysqli (DB_SERVER, DB_USER, DB_PASS, $ base de datos);

Luego tenemos una declaración if que verifica si el objeto de la base de datos es válido:

if ($ db_found) {

}

Si se encuentran la base de datos y el servidor, debemos verificar que el botón RADIO seleccionado mantenga un valor de A, B o C:

if ($ selected_radio == "A") {
}
else if ($ selected_radio == "B") {
}
else if ($ selected_radio == "C") {
}
demás {

imprimir "Error - no se pudo registrar el voto";

}

Si $ selected_radio no es A, B o C, luego imprimimos un mensaje: Error: no se pudo registrar el voto.

¿El código para estos si ?? elseif ?? declaraciones, primero construye una declaración preparada:

$ voteSQL = "ACTUALIZAR tblsurvey SET VotedA = VotedA + 1 WHERE ID =?";

Queremos ACTUALIZAR la tabla y ESTABLECER un nuevo valor. Note esta parte:

Votado A = Votado A + 1

El campo de la tabla llamado votadoA se incrementará en 1, con este código. La parte DONDE al final es para hacer coincidir la fila correcta en la tabla con el valor de ID que le vamos a pasar.

Para preparar, vincular y ejecutar el SQL, tenemos esta línea:

$ voteMessage = insert_vote ($ db_found, $ votSQL, $ idNumber);

Esta es una llamada a una función en la parte inferior del código. Esta función:

function insert_vote ($ db, $ sql, $ id) {

$ stmt = $ db-> preparar ($ sql);
$ stmt-> bind_param ('i', $ id);
$ stmt-> ejecutar ();

// $ _ SESIÓN['hasVoted'] = '1';

volver "¡Gracias por votar!";

}

Le estamos pasando a la función tres cosas: el objeto de la base de datos ($ db), el SQL que queremos usar para preparar y ese número de identificación. Estos se utilizan en las dos primeras líneas:

$ stmt = $ db-> preparar ($ sql);
$ stmt-> bind_param ('i', $ id);

Los parámetros para enlazar son I y $ id. La i significa número entero y la variable $ id contiene el ID de fila de la mesa de encuesta.

Después de ejecutar la declaración preparada, configuramos la sesión:

$ _SESIÓN['hasVoted'] = '1';

Esto coloca un valor de 1 en la sesión llamada hasVoted. Una vez que establecemos algo en la variable de sesión, significa que el usuario no puede votar una y otra vez, porque recibirá el mensaje "Ya votó".

Lo último que hacemos con la función es devolver un mensaje:

volver "¡Gracias por votar!";

Y eso es todo para el process.php página. El objetivo del código es registrar un voto en la base de datos y evitar que los usuarios voten repetidamente.

Ahora echaremos un vistazo a viewResults.php código.



<- Atrás una página | Pasar a la siguiente parte ->

Volver a la página de contenido de PHP

Recomendado para ti