Comunidad de diseño web y desarrollo en internet online

Realizar búsqueda en MySQL

Citar            
MensajeEscrito el 25 Ago 2009 04:23 am
Hola a todos

Quiero pedir el favor de que me digan cómo hago para consultar (realizar la búsqueda de) un registro en MySQL, desde un formulario.
Por ejemplo, si en un campo de texto escribo "pablo" y le doy clic en el botón "Consultar", me retorna la información de pablo.

<form id="form1" name="form1" method="post" action="">
<label>Buscar
<input type="text" name="textfield" id="textfield" />
</label>
<label>
<input type="submit" name="button" id="button" value="Consultar" />
</label>
</form>

Gracias

Por Aurelio66

11 de clabLevel



 

msie7
Citar            
MensajeEscrito el 25 Ago 2009 05:25 am
Esto es lo que he hecho pero no me funciona


Esto es el código del calendario y el campo de texto donde aparece la fecha que se selecciona en el calendario (ver como va quedando en: http://www.asfaltart.com/prueba1.php) y el botón consultar (que no se si deba ir ahí).

<form id="testform" method="post" action="">
<fieldset>
<label for="dp-normal-1">Seleccione la fecha del ensayo que desea consultar:</label>
<p><input type="text" class="w8em format-d-m-y divider-dash highlight-days-12 no-fade" id="dp-normal-1" name="dp-normal-1" value="" maxlength="10" />
<label>


<input type="submit" name="consultar" id="testform" value="Consultar">

</label>
</p>
</fieldset>
</form>


Ahora este es el código que armé (basado en otros foros), que me permite realizar la consulta del registro según la fecha del campo de texto (del código anterior)

<?php

mysql_connect("localhost","xxxxxxxxxxxxxx","xxxxxxxx") or die ("no se ha podido conectar a la BD");
mysql_select_db("xxxxxxxxxxxx") or die ("no se ha podido seleccionar la BD");


$buscar=$_POST['consultar'];
$buscar=mysql_query("SELECT * FROM `archivos` where `fecha` like '%" . $buscar . "%'");
$consulta = mysql_query($sql) or die ("No se pudo ejecutar la consulta");
?>

Por Aurelio66

11 de clabLevel



 

msie7
Citar            
MensajeEscrito el 25 Ago 2009 01:16 pm
Esto es lo que está mal:

Código PHP :

$buscar=$_POST['consultar'];


debe ser

Código PHP :

$buscar=$_POST['dp-normal-1'];


Mira la otra pregunta que te respondí.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 25 Ago 2009 03:10 pm
Gracias DriverOp, voy a probar y mirar lo otro

Por Aurelio66

11 de clabLevel



 

msie7
Citar            
MensajeEscrito el 25 Ago 2009 04:40 pm
Tienes razón con lo del formato de fecha... así que cambié para que me la ubique como es yyyy/mm/dd
Ahora bien, no soy muy ducho en la materia y lo poco que sé es a pura deducción, foros y sobre todo, personas solidarias como tú, por eso de antemano gracias por tu valiosa ayuda.

Yo coloqué el siguiente código, pero lo que no encuentro es la manera de colocarle un botón de "Consultar" que inicie la busqueda basada en la fecha seleccionada (no me lo muestra cuando está en el servidor.
Te dejo el vínculo por si quieres Mirar como va quedando


Código PHP :

<table width="333">
  <tr>
    <td>Seleccione la fecha del ensayo que desea consultar<br>
    
      <input type "text" name="edit1" id="edit1" datepicker="true" datepicker_format="YYYY/MM/DD">   <br>
     
     
<?php
mysql_connect("localhost","paginade_usuario","goldroad") or die ("no se ha podido conectar a la BD");
    mysql_select_db("paginade_asfaltart") or die ("no se ha podido seleccionar la BD");


$buscar=$_POST['edit1'];
$buscar=mysql_query("SELECT * FROM `archivos` where `fecha` like '%" . $buscar . "%'");
$consulta = mysql_query($sql) or die ("No se pudo ejecutar la consulta"); 
?> 
     
     
      <input type="submit" name="edit1" id="edit1" value="Consultar">
      </td>
      </tr>
  
  <tr>
    </tr>
</table>

Por Aurelio66

11 de clabLevel



 

msie7
Citar            
MensajeEscrito el 25 Ago 2009 11:35 pm
Ajá, pero el "action" del tag "form" ¿a dónde apunta?.

Si has creído que poniendo el código PHP enmedio del HTML hará que estos "se entiendan" mutuamente estás equivocado. El código PHP se ejecuta en el servidor antes de servir la página. O dicho de otra forma, lo que ves en el navegador es el resultado de la ejecución del código PHP.

Como lo has puesto la consulta se ejecuta siempre y la variable $buscar no tiene ningún valor.

Lo que debes hacer es apuntar a un script .php en el parámetro "action" del "form". Si lo dejas vacío (así está en el código de la página que nos refieres) entonces cuando se hace click en "consultar" se recarga la propia página, lo cual está bien, pero debes poder discriminar si el visitante llega a la página por primera vez o como resultado de haber hecho click en "consultar". Si quieres hacerlo así entonces deberías hacer algo como esto.

Código PHP :

<?php 
if ($_SERVER["REQUEST_METHOD"] == "POST") {
mysql_connect("localhost","paginade_usuario","goldroad") or die ("no se ha podido conectar a la BD"); 
    mysql_select_db("paginade_asfaltart") or die ("no se ha podido seleccionar la BD"); 
 
 
$buscar=$_POST['edit1']; 
$buscar=mysql_query("SELECT * FROM `archivos` where `fecha` like '%" . $buscar . "%'"); 
$consulta = mysql_query($sql) or die ("No se pudo ejecutar la consulta");  

// Aquí falta el código para mostrar la consulta.

}
?>


Y por último. Tienes un mal diseño de la página. Estas queriendo poner el resultado de la consulta dentro del ámbito del tag "form". Deberías ponerlo a continuación.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 26 Ago 2009 12:28 am
Ok, muchísimas gracias por lel aporte, me pondré a trabajar en eso.

Por Aurelio66

11 de clabLevel



 

msie7
Citar            
MensajeEscrito el 27 Ago 2009 04:10 am
Hola de nuevo DriverOP

Bueno, hice lo siguiente (aclaro que aún no se como hacerlo funcionar, pero me gustaría que me dijeras si voy bien o mal - la única forma de aprender):

La página de consulta quedó así (asfaltart.com/prueba01.php)

El código del datyepicker

Código PHP :

  <input type "text" name="edit1" id="edit1" datepicker="true" datepicker_format="YYYY-MM-DD">


El código del botón que realiza la búsqueda

Código PHP :

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
mysql_connect("localhost","paginade_usuario","goldroad") or die ("no se ha podido conectar a la BD");
mysql_select_db("paginade_asfaltart") or die ("no se ha podido seleccionar la BD");

$buscar=$_POST['edit1'];
$buscar=mysql_query("SELECT * FROM `archivos` where `fecha` like '%" . $buscar . "%'");
$consulta = mysql_query($sql) or die ("No se pudo ejecutar la consulta"); 

}
?>
<form target="_blank" enctype="multipart/form-data" method="post" action="consultar.php" name="consultar">
  <input name="submit" value="Consultar" type="submit"><br>
</form>


al dar clic en el botón buscar me manda a consultar.php

Código PHP :

<?php

//establece una conexión con la base de datos.
$conexion = mysql_connect("localhost","paginade_usuario","goldroad") or die("No se pudo realizar la conexion con el servidor.");
mysql_select_db("paginade_asfaltart",$conexion) or die("No se puede seleccionar BD"); // tu_bd es el nombre de la Base de datos .. por siaca.

header("location: listar_imagenes.php");  // si ha ido todo bien
exit;
?> 


Lo que me abre listar_imagenes.php

Código PHP :

<?php
    mysql_connect("localhost","paginade_usuario","goldroad") or die ("no se ha podido conectar a la BD");

    mysql_select_db("paginade_asfaltart") or die ("no se ha podido seleccionar la BD");

    $sql = "SELECT id,archivo_nombre,archivo_tipo,archivo_peso,fecha FROM archivos";
    $consulta = mysql_query($sql) or die ("No se pudo ejecutar la consulta");

    While ($registro=mysql_fetch_assoc($consulta)){
        echo "<img src=\"ver.php?id=".$registro['id']."\">";
        echo "<br> Nombre archivo: ".$registro['archivo_nombre'];
        echo "<br> Tipo archivo (MIME formato): ".$registro['archivo_tipo'];
        echo "<br> Peso: ".$registro['archivo_peso']." bytes.";
      echo "<br> Fecha: ".$registro['fecha']."<br><br>";
      echo "<a href=\"ver.php?id=".$registro['id']."\">".$registro['fecha']."</a>";
    }

?> 


Y me sale todo el contenido de la tabla de la base de datos... quiero que me salga sólo los de la fecha seleccionada en un comienzo... pero no sé dónde hacer eso...
Tengo este código que arme con instrucciones de phpnet:

Código PHP :

<?php

$fecha = ' XXXXX';

$query = sprintf("SELECT id,archivo_nombre,archivo_tipo,archivo_peso,fecha FROM archivos WHERE XXXXX='%s'",
mysql_real_escape_string($fecha));


$result = mysql_query($query);

if (!$result) {
$message = 'Invalid query: ' . mysql_error() . "\n";
$message .= 'Whole query: ' . $query;
die($message);
}

// Use result
// Attempting to print $result won't allow access to information in the resource
// One of the mysql result functions must be used
// See also mysql_result(), mysql_fetch_array(), mysql_fetch_row(), etc.
while ($row = mysql_fetch_assoc($result)) {
echo $row['fecha'];
echo $row['archivo_nombre'];
echo $row['lote'];
echo $row['mezcla'];
}

// Free the resources associated with the result set
// This is done automatically at the end of the script
mysql_free_result($result);
?> 

Pregunto ¿es por ahí o estoy perdido? coloqué unas xxxxx donde no sé que colocar
No sabes cuánto le he pedido a mi Dios que te revista de paciencia jejeje.. Gracias

Por Aurelio66

11 de clabLevel



 

msie7
Citar            
MensajeEscrito el 27 Ago 2009 07:06 am
La página que me refieres no funciona (error 404) así que no la puedo ver.

De los códigos que has posteado aquí yo no sé si son errores de tipeo tuyo o qué, pero hay cosas que están mal.

Código PHP :

<input type "text" name="edit1" id="edit1" datepicker="true" datepicker_format="YYYY-MM-DD">


Falta un signo igual (=) entre type y "text".

En el código que tú llamas "El código del botón que realiza la búsqueda" hay un form que tiene solo un botón ¿y para qué pusiste un solitario input fuera del form?. ¿No será que querías hacer esto?:

Código PHP :

<form target="_blank" enctype="multipart/form-data" method="post" action="consultar.php" name="consultar"> 
  <input type "text" name="edit1" id="edit1" datepicker="true" datepicker_format="YYYY-MM-DD">
  <input name="submit" value="Consultar" type="submit"><br> 
</form>


Y ya que estamos enctype="multipart/form-data" no sirve para nada en este caso (se usa para enviar datos en binario al servidor como cuando subes un archivo).
En el código que has posteado tienes un pedazo de código PHP que es inútil porque en el form mandas la información del formulario a otra parte, al script "consulta.php"; a menos que el propio código que has posteado sea parte de "consulta.php" lo cual no parece ser el caso porque la URL que me has referido apunta a otro script diferente.

Luego dices correctamente que el formulario abre "consulta.php" el cual tiene código de conexión a la base de datos, ok, pero al final redireccionas al navegador a otra parte (a "listar_imagenes.php") con lo que la conexión que acabas de hacer pierde validez así como también pierdes los datos que el visitante ingresó en el formulario. En definitiva, un paso inútil.

Llegado hasta aquí lo que hagas en "listar_imagenes.php" es irrelevante porque perdiste lo que el usuario ingresó en el formulario HTML original.

Me temo que vas a tener que plantear bien qué quieres lograr, déjame ayudarte y responde esta pregunta:
- ¿Quieres que el visitante vea el resultado de la consulta en la misma página en la que está el formulario HTML de consulta (ese donde tienes el datetimepicker?.

Dependiendo de tu respuesta será la ayuda que te pueda dar.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 27 Ago 2009 02:09 pm
Pues, la verdad yo quiero que el usuario vea los resultados. Si es en esa página o en otra, no se qué es mejor. ¿Qué me aconsejas?
Qué pena que digité mal la página. es http://www.asfaltart.com/prueba001.php
Gracias

Por Aurelio66

11 de clabLevel



 

msie7
Citar            
MensajeEscrito el 28 Ago 2009 12:36 am
En la misma página entonces.

El código a continuación yo no lo puedo probar porque evidentemente no tengo tu base de datos:

Código PHP :

<form method="post" action="" name="consultar">  
  <input type="text" name="edit1" id="edit1" datepicker="true" datepicker_format="YYYY-MM-DD"> 
  <input name="submit" value="Consultar" type="submit"><br>  
</form>
<?php
function EsFechaValida($fecha) {

$aux = explode("-",$fecha);
if (count($aux) != 3) { return false; }
else {
  if (checkdate($aux[1],$aux[2],$aux[0]))  { return true; }
  else { return false; }
}
} // EsFechaValida


if ($_SERVER["REQUEST_METHOD"] == "POST") { 
$date = @$_POST["edit1"];
if (empty($date)) { echo "No ha seleccionado ninguna fecha."; }
else {
if (!EsFechaValida($date)) { echo "La fecha es incorrecta."; }
else {

$link = mysql_connect("localhost","paginade_usuario","goldroad") or die ("no se ha podido conectar a la BD"); 
mysql_select_db("paginade_asfaltart",$link) or die ("no se ha podido seleccionar la BD"); 
 
$buscar = mysql_query("SELECT * FROM `archivos` where `fecha` like '%" . $date . "%'"); 
$consulta = mysql_query($sql,$link) or die ("No se pudo ejecutar la consulta");  
     While ($registro=mysql_fetch_assoc($consulta)){ 
        echo "<img src=\"ver.php?id=".$registro['id']."\">"; 
        echo "<br> Nombre archivo: ".$registro['archivo_nombre']; 
        echo "<br> Tipo archivo (MIME formato): ".$registro['archivo_tipo']; 
        echo "<br> Peso: ".$registro['archivo_peso']." bytes."; 
      echo "<br> Fecha: ".$registro['fecha']."<br><br>"; 
      echo "<a href=\"ver.php?id=".$registro['id']."\">".$registro['fecha']."</a>"; 
    }
mysql_free_result($consulta);
mysql_close($link);
} // EsFecha
} // not empty
} // post 
?>


Deberías verificar que el campo "fecha" de la base de datos tiene el formato yyyy-mm-dd que estás usando.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 28 Ago 2009 01:12 am
Muchas Gracias DriverOP

Voy a probarlo. La fecha está en formato yyyy mm dd, tal como aparecen ACÁ

Por Aurelio66

11 de clabLevel



 

msie7
Citar            
MensajeEscrito el 28 Ago 2009 05:41 am
Bueno, parece que algo no está donde debería, me sale: "No se pudo ejecutar la consulta".
La monté en asfaltart.com/prueba002.php
al código le agregué dos líneas:

Código PHP :

echo "<br> Mezcla: ".$registro['mezcla'];
echo "<br> Fecha: ".$registro['fecha']; 


Te envío una captura de la tabla de la base de datos


Para poder visualizarla debes dar "guardar imagen como..." (ya se que sabes, pero deja que te explique alguna cosa jejeje)

Por Aurelio66

11 de clabLevel



 

msie7
Citar            
MensajeEscrito el 28 Ago 2009 07:18 am
Cometí un error en el código que te pegué. En la línea que dice

Código PHP :

$consulta = mysql_query($sql,$link) or die ("No se pudo ejecutar la consulta");   


debe decir:

Código PHP :

$consulta = mysql_query($buscar,$link) or die ("No se pudo ejecutar la consulta");   

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 29 Ago 2009 04:30 am
Bien, he estado desde esta mañana analizando y buscando cuál puede ser la causa para que siga saliendo el mismo mensaje. Dame hasta mañana para seguir en eso (así aprendo un poco más de lo mucho que me has explicado). Si no soy capaz de hallar el quid del asunto, te lo hare saber... mil gracias

Por Aurelio66

11 de clabLevel



 

msie7
Citar            
MensajeEscrito el 29 Ago 2009 06:26 am
Como pa cortarme las venas :-(

Nada que doy con el chiste (como decimos en Colombia)
pregunta ¿este array --- $date = @$_POST["edit1"]; --- elimina la posibilidad de que no funcione el código si los registros globales están off?

puse hasta el While en minúscula, reescribí todas las comillas, quité el @ al @$_POST["edit1"]; y un resto de cosas, pero nada... te juro que he intentado por lo menos durante 6 horas y nada...

Por Aurelio66

11 de clabLevel



 

msie7
Citar            
MensajeEscrito el 29 Ago 2009 01:37 pm
A ver. Algo está pasando con la consulta.

Modifica estas líneas de código:

Código PHP :

...
$consulta = mysql_query($buscar,$link) or die ("No se pudo ejecutar la consulta");   
     While ($registro=mysql_fetch_assoc($consulta)){  
...


Por estas:

Código PHP :

...
$consulta = mysql_query($buscar,$link);
   if (mysql_errno($link) != 0) {
     echo mysql_errno($link).": ".mysql_error($link);
     exit;
   }
     While ($registro=mysql_fetch_assoc($consulta)){  
...


Eso debería decirte por qué falla la consulta.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 30 Ago 2009 03:31 am
1065: Query was empty

Por Aurelio66

11 de clabLevel



 

msie7
Citar            
MensajeEscrito el 30 Ago 2009 04:08 am
así es la estructura de la tabla
[img]www.asfaltart.com/bd01.jpg[/img]

Por Aurelio66

11 de clabLevel



 

msie7
Citar            
MensajeEscrito el 30 Ago 2009 06:04 am
Hola DriverOP

cambié la línea

Código PHP :

 if ($_SERVER["REQUEST_METHOD"] == "POST") {  


por esta otra

Código PHP :

if ($_SERVER['REQUEST_METHOD']!="POST"){


Ya no muestra el error de la imposibilidad de ejecutar la consulta, pero igual no muestra los resultados.

Por Aurelio66

11 de clabLevel



 

msie7
Citar            
MensajeEscrito el 30 Ago 2009 07:28 am
xD

Esa línea que me dices en el último mensaje, déjala como estaba.
Y esta:

Código PHP :

$buscar = mysql_query("SELECT * FROM `archivos` where `fecha` like '%" . $date . "%'");  

Cambiala por esta:

Código PHP :

$buscar = "SELECT * FROM `archivos` where `fecha` like '%" . $date . "%'";  


Por las barbas de Gandalf que era un error tonto.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 30 Ago 2009 09:28 pm
Clap, clap, clap clap.- Bravo torero Dos oreja un rabo y hasta las cuatro patas. graaaaaacias mil. está funcionando a cinco mil maravillas

Por Aurelio66

11 de clabLevel



 

msie7
Citar            
MensajeEscrito el 30 Ago 2009 11:44 pm
Por cierto, ¿por qué esa línea no lleva mysql_query?

Por Aurelio66

11 de clabLevel



 

msie7
Citar            
MensajeEscrito el 31 Ago 2009 01:17 pm
Era un error tonto.
mysql_query() es la función que ejecuta la sentencia SQL en la base de datos, pero por culpa de "copiar y pegar" no me di cuenta que se estaba ejecutando sin ninguna sentencia cargada, de hecho no ví que esa línea en realidad era para asignar la sentencia SQL a la variable $buscar y luego usar esa variable en la verdadera búsqueda.

Por DriverOp

Claber

2510 de clabLevel



 

opera

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.