varios una tabla seleccionar registros recoger múltiple multiple mostrar formulario extraer desde datos consultas con campos php mysql checkbox radio-button

php - una - Seleccione datos de múltiples tablas en MySQL usando casillas de verificación y muestre el campo de la tabla de acuerdo con la casilla de verificación



seleccionar varios campos de una tabla en mysql (5)

Tengo dos tablas en la base de datos de mis usuarios.

La primera tabla contiene identificación única del usuario, nombre, número de contacto y otra información personal.

La segunda tabla contiene la identificación única del usuario de la primera tabla y la información del dispositivo, como su primer número de máquina, segundo número de máquina y muchos otros también.

Mi tabla no 2 estructura es ..

En la página de informes, estoy mostrando toda la información en forma de tabla usando esta

$sql = "SELECT e.* ,d.* FROM emitra_basic As e INNER JOIN emitra_device as d ON d.uid=e.uid"; $result = $conn->query($sql); if ($result->num_rows>0) {?> <table ><tr><td> Uid</td><td> Name</td> <td> Micro Atm</td>.......and all column of both tables </tr> <?php while($row = $result->fetch_array()) { echo "<td>". $row[''uid'']. "</td>"; echo "<td>". wordwrap($row[''name''],15,"/n",1). "</td>"; ....and all } echo "</table>";

Funciona bien. Pero quiero mostrar un informe personalizado. Significa que quiero dar la casilla de verificación / botón de opción para el usuario del campo de tablas. Si él selecciona el campo usa la casilla de verificación, entonces muestra solo el valor cuya casilla de verificación / botón de radio están seleccionados. Le gusta si el usuario selecciona tres casillas / botón de opción como Uid, name, m_atm. Muestra solo los detalles de tres columnas de ambas tablas y muestra la tabla de visualización de acuerdo con estas columnas.


Cuando desee mostrar la tabla con la columna dinámica, puede usar if....else loop si conoce exactamente el número de columnas consultadas. Similar a su problema, he creado 2 tablas. Primero, el employee

eId, nombre, dirección

Y segundo es job

jobId, eId, postName, Habilidad

La consulta para recuperar datos es:

$query="SELECT e.Name,e.Address,j.postName,j.Skill FROM employee AS e INNER JOIN job AS j ON e.eId=j.eId";

Para cada columna hay una casilla de verificación

<input type="checkbox" name="chkName"/> <input type="checkbox" name="chkAddress"/>......for all columns.

GET valores GET se compararán con las columnas respectivas.

Para mostrar columnas dinámicamente usando la checkbox de checkbox para la consulta anterior:

$checkArray=array(); if(isset($_GET[''chkName''])) $checkArray[0]=1; else $checkArray[0]=0; if(isset($_GET[''chkAddress''])) $checkArray[1]=1; else $checkArray[1]=0; if(isset($_GET[''chkPost''])) $checkArray[2]=1; else $checkArray[2]=0; if(isset($_GET[''chkSkill''])) $checkArray[3]=1; else $checkArray[3]=0; $query="SELECT e.Name,e.Address,j.postName,j.Skill FROM employee AS e INNER JOIN job AS j ON e.eId=j.eId"; $result = $con->query($sql); if ($result->num_rows>0) { ?> <table > <tr> <?php if($checkArray[0]==1){ ?> <td> Name</td> <?php } if($checkArray[1]==1){ ?> <td> Address</td> <?php } if($checkArray[2]==1){ ?> <td> Post</td> <?php } if($checkArray[3]==1){ ?> <td>Skioll</td> <?php } ?> </tr> <?php while($row = $result->fetch_array()) { echo "<tr>"; if($checkArray[0]==1) { echo "<td>". $row[0]. "</td>"; } if($checkArray[1]==1) { echo "<td>". $row[1]. "</td>"; } if($checkArray[2]==1) { echo "<td>". $row[2]. "</td>"; } if($checkArray[3]==1) { echo "<td>". $row[3]. "</td>"; } echo "</tr>"; }


Espero que esto ayude Cree una variable, por ejemplo: $condition y asigne un valor como

$condition = ""; if($check1) { $condition = " AND Uid=$id"; } if($check2) { $condition = " AND name=$name"; }

y agregue esta variable de condición $ en su consulta. obtendrás valores dinámicos Para mostrar el resultado, el método simple es usar AJAX en la casilla de verificación marcada.


Simplemente puede usar las casillas de verificación de la siguiente manera en su página

mypage.html

<form> <input class="form-check" type="checkbox" name="checkName"><label class="form-label">Name</label> <input class="form-check" type="checkbox" name="checkMicroATM"><label class="form-label">MicroATM</label> <!--and so on for each field--> </form> <div id="dataTable"> <!--Here your table will be displayed--> </div>

myquerypage.php

if($_POST){ $sql = "SELECT e.* ,d.* FROM emitra_basic As e INNER JOIN emitra_device as d ON d.uid=e.uid"; $result = $conn->query($sql); $displayColCount=0; // maintain the count of columns to be displayed $displayCol=array(); // contains the database column names to be displayed on the page echo ''<div id="dataTable">''; // very useful for replacing the content using ajax call if required echo ''<table>''; echo ''<tr>''; if(isset($_POST[''checkName''])){ $displayCol[$displayColCount++]=''name''; echo ''<th>Name</th>''; } if(isset($_POST[''checkMicroATM''])){ $displayCol[$displayColCount++]=''m_atm''; echo ''<th>MicroATM</th>''; } . . // and so on for each column echo ''</tr>''; while($row = $result->fetch_array()) { echo ''<tr>''; $i=0; while($i< $displayColCount){ echo "<td>". $row[displayCol[i++]]. "</td>"; } echo ''</tr>''; } echo ''</table>''; echo ''</div>''; }

puede llamar a la página de arriba usando ajax como

$(''.form-check'').change(function (e) { var form=this.form; var formData = $(''form'').serialize(); $.ajax({ type: ''POST'', url: ''myquerypage.php'', data: formData, cache: false, success: function (html) { $("#dataTable").html(html); }, error: function (xhr, ajaxOptions, thrownError) { alert(xhr.status); alert(thrownError); } }); });

Espero que esto te ayude.


Creo que entiendo tu punto. El siguiente código se puede usar en el mismo archivo pero, por razones obvias, es mejor separarlos.

Lo que he hecho, tengo una lista de las casillas de verificación basadas en los campos que tienes en la base de datos.

Publique estos campos y ejecute la consulta para obtener datos de solo estos campos que se publican.

Después de generar el código html / tabla con respecto a los campos publicados y los datos

<?php $result = []; $fields = []; $dbFields = []; $sql = ""; $fieldsNameMapping = [ ''e.uid'' => ''Uid'', ''d.block'' => ''Blocked'', ''d.m_atm'' => ''Atm'', ''d.uid_name'' => ''Name'' ]; if (isset($_POST)) { // build query based on the posted fields if (isset($_POST[''fields'']) && !empty($_POST[''fields''])) { $sql = "SELECT "; foreach ($_POST[''fields''] as $fieldValue) { $sql .= $fieldValue . ", "; // get field names $fields[] = $fieldsNameMapping[$fieldValue]; // mapping db field names, remove first two characters $dbFields[] = substr($fieldValue, 2); } // remove last comma $sql = substr($sql, 0, -2); $sql .= " FROM emitra_basic As e INNER JOIN emitra_device as d ON d.uid=e.uid"; // get result $result = $conn->query($sql); } } ?> <form method="post"> <input type="checkbox" name="fields[]" value="e.uid" />&nbsp;Uid<br /> <input type="checkbox" name="fields[]" value="d.block" />&nbsp;Blocked<br /> <input type="checkbox" name="fields[]" value="d.m_atm" />&nbsp;Atm<br /> <input type="checkbox" name="fields[]" value="d.uid_name" />&nbsp;Name<br /> <input type="submit" value="Show Result" /> </form> <?php if (!empty($fields)) { ?> <table> <thead> <tr> <?php foreach($fields as $fieldName) { ?> <th><?php echo $fieldName ?></th> <?php } ?> </tr> </thead> <?php if (!empty($result) && $result->num_rows > 0) { ?> <tbody> <?php while($row = $result->fetch_array()) { ?> <tr> <?php foreach($dbFields as $fieldDbName) { ?> <td><?php echo $row[$fieldDbName] ?></td> <?php } ?> </tr> <?php } ?> </tbody> <?php } ?> </table> <?php } ?>


Si te entiendo, para hacer eso debes agregar a ON d.uid=e.uid" algo como esto ON d.uid=e.uid" AND Uid=$id AND name=$name And m_atm=$atm , o para agregar esto a donde (a where I thinght no es bueno)

Por ejemplo

HTML:

<form method="get" action="/a.php"> <input type="checkbox" name="check1" value="text1"/> <input type="checkbox" name="check2" value="text2"/> <input id="submit" onclick="f();return false;" type="button" value="ok"/> </form>

PHP (test.php)

if(isset($_GET[''check1''])) $id=" AND Uid=''$_GET[check1]''"; //if is checked first if(isset($_GET[''check2''])) $name=" AND name=''$_GET[check2]''"; //if is checked second /* . . . */ $sql = "SELECT e.* ,d.* FROM emitra_basic As e INNER JOIN emitra_device as d ON (d.uid=e.uid $id $name )"; var_dump($sql);

JS:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> <script> function f() { var url; var xmlhttp, url="/text.php?"+$(''form'').serialize(); //change text.php if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); } else if (window.ActiveXObject) { xmlhttp = new ActiveXObject(''Microsoft.XMLHTTP''); } xmlhttp.open(''GET'', url, true); xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4) { myfunction(xmlhttp.responseText); } } xmlhttp.send(null); function myfunction(response) { alert(url+'' ''+response); //do something } } </script>

Ese código Php es simple, pero puede usar el valor de bucle y clave para que se vea mejor.

Por ejemplo, puede usar <input name=text[]> para todos los elementos de ckeckboxes y hacer esto

foreach ($_GET[''text''] as $key => $value) { if($key==0) $key=''uid''; else if($key==1) $key=''name''; else if($key==2) $key=''m_atm''; $q.="$key=''$value'' AND "; } $q=substr($q,0,strlen($q)-5); $sql2 = "SELECT e.* ,d.* FROM emitra_basic As e INNER JOIN emitra_device as d ON (d.uid=e.uid $q )"; var_dump($sql2);