Hola buenas tardes, quisiera me ayudaran con mi código.
Quiero hacer un combobox o menu desplegable apartir del "id" de la base de datos, actualmente el código despliega cuando se escribe en una caja de texto, ahora por medio del combobox quiero que despliegue las tablas.
Dejo mi código esperando que me puedan ayudar.
<HTML LANG="es">
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<html>
<head>
<img align="center" src="fg.jpg" />
<BR>
<BR>
</head>
<body>
<head>
<link rel="stylesheet" href="style10.css" type="text/css" media="screen"/>
</head>
<center><form name="form1" method="post" action="Buscador11k.php" id="cdr" >
<h3>REUBICACIONES</h3>
<p>
<input name="busca" type="text" id="busqueda">
<input type="submit" name="Submit" value="buscar" />
</p>
</form>
<form name="form2" method="post" action="">
</form>
</center>
<?php$busca="";$busca=$_POST['busca'];mysql_connect("localhost","root","root");// conexionmysql_select_db("Red");//nombre de la base de datosif($busca!=""){$busqueda=mysql_query("SELECT * FROM f11 WHERE ID='$busca'");?>
<table class="table1" style="width:100%" border="2" >
<tr>
<th>
<font size=2>OFICIO</font>
</th>
<th>
<font size=2>MOVIMIENTO</font>
</th>
<th>
<font size=2>ID</font>
</th>
<th>
</tr>
<?php while($f=mysql_fetch_array($busqueda)){echo '<tr>';echo '<td><font size=2>'.$f['OFICIO'].'</td></font>';echo '<td><font size=2>'.$f['T_MOV'].'</td></font>';echo '<td><font size=2>'.$f['ID'].'</td></font>'; } }?>
</table>
<p> </p>
<br>
Después que te explique como es la forma de trabajar te voy a pegar el código mas o menos que hace lo que pediste para poder orientarte. El código hice los posible para adaptar con el tuyo porque he visto como le llama a los campo los id el formulario la base de datos no es la forma correcta te conviene llamar por su nombre no tan abreviado. Pero de modo de ejemplo yo le llame como vos le llamaste.
Este es el index.php
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Ejemplo</title>
<link href="css/style10.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<center>
<form id="cdr" >
<h3>REUBICACIONES</h3>
<p>
<input name="busca" type="text" id="busca">
<input id="buscar" type = 'button' value="buscar" />
<!--<input class="input" id = "botonEnviar" type = 'button' value = 'Enter>-->
</p>
</form>
</center>
<table class="table1" style="width:100%" border="2" >
<thead>
<tr>
<th>ID</th>
<th>OFICIO</th>
<th>MOVIMIENTO</th>
</tr>
</thead>
<tbody id="contenido">
</tbody>
</table>
<p> </p>
<br>
<script src="js/jquery.min.js" type="text/javascript"></script>
<script src="js/funciones.js" type="text/javascript"></script>
<script>
$("#buscar").on('click', function () {
buscar();
//alert("hola");
});
</script>
</body>
</html>
Como veras uso jquery que es un plugins de javaScript que podes descargar de internet.
Los estilos para enlazar se tiene que hacer en le head y solo una vez se escribe el head no repetido como los otros.
clases es una carpeta donde va las conexiones y la clase php
conexion con base de datos
<?php// clase que se llama mysqlclass mysql { // attributos private $servidor = "localhost"; private $usuario = "root"; private $password = "tu contraseña"; private $database = "red"; // metodos (funciones) public function conectar() { if (!isset($this->conexion)) { $this->conexion = (mysqli_connect($this->servidor, $this->usuario, $this->password)) or die(mysqli_error()); mysqli_select_db($this->conexion, $this->database) or die(mysqli_error()); mysqli_set_charset($this->conexion, 'utf8'); } } public function consulta($query) { $resultado = mysqli_query($this->conexion, $query); if (!$resultado) { echo 'MySQL Error: ' . mysqli_error(); exit; } return $resultado; }}
clase f11 donde van las consulta
<?phprequire_once 'mysql.class.php';// 5. listar los productos accediendo a la base de datos y generando el componente (card)class f11 extends mysql { public function __construct() { $this->conectar(); } public function buscar($buscar) { $sql = "SELECT * FROM f11 " . "where id = '" . $buscar . "'"; $rs = $this->consulta($sql); $registros = ""; while ($row = mysqli_fetch_array($rs, MYSQLI_ASSOC)) { $registros .= '<tr>'; $registros .= '<td>' . $row["id"] . '</td>'; $registros .= '<td>' . $row["oficio"] . '</td>'; $registros .= '<td>' . $row["movimiento"] . '</td>'; $registros .= '</tr>'; } $arr = array('registros' => $registros); return ($arr); }}?>
php es otra carpeta donde van los codigo php
<?phprequire_once '../clases/f11.class.php';$buscar = $_POST['busca'];error_log("--> " . $buscar);$f11 = new f11();$arr = $f11->buscar($buscar);echo json_encode($arr);?>
js es una carpeta donde va los codigo javaScript
function buscar() {
var datos_formulario = $('#cdr').serialize();
//console.log("--> "+datos_formulario);
$.ajax({
type: 'POST',
url: 'php/buscar.php',
data: datos_formulario,
dataType: 'json',
beforeSend: function (objeto) {
},
success: function (json) {
$("#contenido").html(json.registros);
},
error: function (e) {
alert("No se puedo conectar al servidor");
},
complete: function (objeto, exito, error) {
}
});
}
Como veras utilizo ajax para que no se vaya a recargar las pagina cada vez que haga una consulta.
Bueno en este caso yo no tengo mucha idea de como es la mejor forma de proceder.
Pero en lugar de public function buscar($buscar) {
$sql = "SELECT * FROM f11 " .
"where id = '" . $buscar . "'";
$rs = $this->consulta($sql);
$registros = "";
while ($row = mysqli_fetch_array($rs, MYSQLI_ASSOC)) {
$registros .= '<tr>';
$registros .= '<td>' . $row["id"] . '</td>';
$registros .= '<td>' . $row["oficio"] . '</td>';
$registros .= '<td>' . $row["movimiento"] . '</td>';
$registros .= '</tr>';
}
$arr = array('registros' => $registros);
return ($arr);
}
yo pondria
public function buscar($buscar) {
$sql = "SELECT * FROM f11 " .
"where id = '" . $buscar . "'";
$rs = $this->consulta($sql);
$registros = "";
while ($row = mysqli_fetch_array($rs, MYSQLI_ASSOC)) {
$registros .= '<tr>';
$registros .= '<td>' . $row["id"] . '</td>';
$registros .= '<td>' . $row["oficio"] . '</td>';
$registros .= '<td>' . $row["movimiento"] . '</td>';
$registros .= '</tr>';
}
return ($registros);
}
la pagina php que llama a la clase
<?phprequire_once '../clases/f11.class.php';$buscar = $_POST['busca'];error_log("--> " . $buscar);$f11 = new f11();echo $f11->buscar($buscar);?>
y en el jquery
function buscar() {
//console.log("--> "+datos_formulario);
$.ajax({
type: 'POST',
url: 'php/buscar.php',
data: $('#cdr').serialize(),
beforeSend: function (objeto) {
},
success: function (data) {
$("#contenido").html(data);
},
error: function (e) {
alert("No se puedo conectar al servidor");
},
complete: function (objeto, exito, error) {
}
});
}
No se si es correcto o da algun problema de tipo seguridad o lo que sea. Esperemos que algun administrador que controle de php o otro usuario nos ayude a saber si mejor json_encode siempre o para arrays solo. Saludos.
Buenas json_encode básicamente pienso que deba usarse cuando quieras representar la información en formato json, que es un formato normalizado y por tanto te permite muchas más funcionalidades que si tienes los datos en un formato no normalizado.
En general será interesante usar json cuando tengas que escribir a archivo o hacer la información de alguna manera persistente (incluso podrías guardar una cadena json en una base de datos). En otros casos a lo mejor no tiene demasiado interés.
Ejemplo
<?php$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);echo json_encode($arr);?>
Devuelve {"a":1,"b":2,"c":3,"d":4,"e":5}
Esto tiene la ventaja de estar normalizado.
Un aspecto interesante de usar json es que en cierta medida independizas los datos de la lógica del programa. Por ejemplo un archivo con datos en formato json podrás mantenerlo aunque cambies la lógica del programa. En cambio si tienes un archivo con datos organizados "a tu aire" tendrás que cambiar su estructura (o adaptarte a ella) cuando cambies la lógica del programa.
Salu2