1

Tengo el siguiente formulario con radio button:

 <form action="registro.php">
  <label>1.- Selecciona tu nivel de inglés:</label>
   <label>
    <input type='radio' value='1' name='q1'>Bajo
   </label>
  <label>
   <input type='radio' value='2' name='q2'>Medio
 </label>
 <label>
  <input type='radio' value='3' name='q3'>Alto
 </label>
  <label>2.-Selecciona tu nivel de desarrollo:</label>
   <label>
    <input type='radio' value='1' name='q4'>Bajo
   </label>
  <label>
   <input type='radio' value='2' name='q5'>Medio
 </label>
 <label>
  <input type='radio' value='3' name='q6'>Alto
 </label>
 <button type='submit'>Enviar Respuestas</button>
 </form>

Y de la siguiente manera es como ingreso los datos a mysql tomados por método POST:

<?php
require 'conexion.php';
$respuesta1 = $_POST['q1'];
$respuesta2 = $_POST['q2'];
$respuesta3 = $_POST['q3'];
$respuesta4 = $_POST['q4'];
$respuesta5 = $_POST['q5'];
$respuesta6 = $_POST['q6'];

$sql = "INSERT INTO cuestionario (r1, r2, r3, r4, r5, r6) VALUES ('$q1', '$q2', '$q3', '$q4', '$q5', '$q6')";
$resultado = $mysqli->query($sql); 
?>

Mi duda es, ¿Cómo puedo insertar los mismos valores en otra tabla de MySql al mismo tiempo?, suponiendo que tenga otra tabla con el mismo insert into pero con otro nombre.

DjCrazy
  • 4,786
  • 3
  • 13
  • 33

1 Answers1

2

1. Si la tabla está en la misma base de datos

Sólo tienes que crear la otra consulta y ejecutarla, usando la misma conexión

$sql = "INSERT INTO cuestionario (r1, r2, r3, r4, r5, r6) VALUES ('$q1', '$q2', '$q3', '$q4', '$q5', '$q6')";
$rsCuestionario = $mysqli->query($sql); 

/*
   Esta sería la segunda consulta. Si las columnas se llaman 
   distinto de r1, r2 ... debes cambiar su nombre
*/

$sql = "INSERT INTO otraTabla (r1, r2, r3, r4, r5, r6) VALUES ('$q1', '$q2', '$q3', '$q4', '$q5', '$q6')";
$rsOtraTabla = $mysqli->query($sql); 

Ahí tendrás dos referencias a cada ejecución que podrás usar para lo que sea necesario, como evaluar si la fila se insertó realmente, etc.


2. Si las tablas están en bases de datos distintas

Todo igual, sólo que tendrás que conectar a la otra base de datos para la otra inserción.

require 'otraconexion.php';

#Esta es la segunda inserción, la primera queda tal cual
#Suponemos que en ese archivo la conexión se llama `$mysqliOther`

$sql = "INSERT INTO otraTabla (r1, r2, r3, r4, r5, r6) VALUES ('$q1', '$q2', '$q3', '$q4', '$q5', '$q6')";
$rsOtraTabla = $mysqliOther->query($sql); 

3. Un ejemplo completo controlando eventuales errores

Aquí se evalúa el estado de ambas llamadas a query, verificando si hay error o no. Se guarda todo en una variable $arrData que contiene dos claves, error y msg las cuales se usarán al final para mostrar lo que haya ocurrido.

#Ponemos claves en el array array para ir concatenando los eventuales mensajes y errores
$arrData['msg']=""; 
$arrData['error']=""; 

$sql = "INSERT INTO cuestionario (r1, r2, r3, r4, r5, r6) VALUES ('$q1', '$q2', '$q3', '$q4', '$q5', '$q6')";
$rsCuestionario = $mysqli->query($sql); 

#Verificamos si hubo error en la consulta y almacenamos el error si lo hubo o la cantidad de filas insertadas
( $rsCuestionario ) ? $arrData['msg'].=sprintf("Se insertaron %d filas en cuestionario\n", $mysqli->affected_rows) : $arrData['error']=sprintf("Error en cuestionario: %s\n", $mysqli->error);

    
/*
   Esta sería la segunda consulta. Si las columnas se llaman 
   distinto de r1, r2 ... debes cambiar su nombre
*/

$sql = "INSERT INTO otraTabla (r1, r2, r3, r4, r5, r6) VALUES ('$q1', '$q2', '$q3', '$q4', '$q5', '$q6')";
$rsOtraTabla = $mysqli->query($sql); 

#Verificamos si hubo error en la consulta y almacenamos el error si lo hubo o la cantidad de filas insertadas
( $rsOtraTabla ) ? $arrData['msg'].=sprintf("Se insertaron %d filas en otherTable\n", $mysqli->affected_rows) : $arrData['error'].=sprintf("Error en otherTable: %s\n", $mysqli->error);


/*
    MUY IMPORTANTE: Ahora hacemos una prueba sobre $arrData
    que consistirá en verificar si existe una clave error en el array, imprimiendo dicho error
    o los mensajes de éxito para cada consulta según el caso.
*/

$msg= (!empty($arrData['error'])) ? $arrData['error'] : $arrData['msg'];
echo $msg;

Notas

  1. En mysqli existe también una opción multiquery, pero ahora mismo no recuerdo si funciona con tablas distintas. Tampoco creo que valga la pena hacer uso de ella, pues si mal no recuerdo en algunos contextos necesita estar configurada.
  2. En cuanto a la seguridad, quiero señalar que tu consulta al altamente vulnerable a ataques de Inyección SQL. Un usuario mal intencionado puede manipular las variables y producir un código dañino para el sistema o para la base de datos (ver esta pregunta: ¿La Inyección SQL actúa sólo a nivel de la base de datos o el riesgo es aún mayor? para entender el nivel de gravedad que esto podría tener, aunque sean tablas de prueba). Para neutralizar ese riesgo usa consultas preparadas. Recomiendo que leas sobre el tema cuando sea posible.
A. Cedano
  • 86,578
  • 19
  • 122
  • 221
  • muy amable gracias, antes que nada ya había intentado lo que usted me escribió pero me arroja el error en la ventana que tengo realizada al finalizar la encuesta.

    ENCUESTA FINALIZADA EXITÓSAMENTE

    ERROR AL GUARDAR

    Regresar
    – MarianaKiabeth Sep 30 '19 at 13:41
  • @MarianaKiabeth es bueno establecer ciertos controles sobre el código, para controlar eventuales errores. Ahora edito la respuesta controlando los errores. – A. Cedano Sep 30 '19 at 13:54
  • @MarianaKiabeth revisa el apartado 3 de la respuesta editada. Haciéndolo así debería informarte de los eventuales errores que hayan ocurrido. – A. Cedano Sep 30 '19 at 14:26
  • muchas gracias dios lo bendiga... – MarianaKiabeth Sep 30 '19 at 14:29