entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Optimizar codigo para evitar eventuales errores

segun ustedes si voy añadiendo mas tablas podrian haber problemas, como se podria optimizar mi codigo para que sea mas eficiente, como se podrian mostrar el tiempo que paso para hacer la busqueda tipo google, cuales errores podrian surgir en un futuro, valuto cualquier sugerencia y consejo gracias


<form method="get" action="test.php">
 <input type="text" name="busqueda" placeholder="keyword">
 <input type="submit" value="search" name="boton_enviar">
 </form>
 <nav>
    <ul>
        <li><a href="">clothes</a></li>
        <li>madone2012</li>
        <li>verano2012</li>
        <li>verano2013</li>
    </ul>
 </nav>
<?php
if(isset($_GET['boton_enviar']))
{
$consulta = $_GET['busqueda'];
$conexion = mysql_connect('localhost', 'root', 'admin') or die(mysql_error());
mysql_select_db('test', $conexion) or die(mysql_error());

$sql = mysql_query("SELECT * FROM photos");
$verano2013 = mysql_query("SELECT * FROM verano2013");
$verano2012 = mysql_query("SELECT * FROM verano2012");

$encontrado = false;

while($fila = mysql_fetch_array($verano2012))
{
    if($consulta == $fila['name']){
    $encontrado = true;
    $registro = $fila['path'];
    echo "<img src=".$registro.">";
}

}

while($fila = mysql_fetch_array($verano2013))
{
    if($consulta == $fila['name']){
        $encontrado = true;
        $registro = $fila['path'];
        echo "<img src=".$registro.">";
    }
}

while($fila = mysql_fetch_array($sql))
{
    if($consulta == $fila['name']){
        $encontrado = true;
        $registro = $fila['path'];
        echo "<img src=".$registro.">";
    }
}

if(!$encontrado) { echo "No se encontro ningun resultado";}

     }

    ?>

<style>body{background-color:whitesmoke;}body>img{width:250px;height:250px;}body>img:first-child{transform:rotate(90deg);}@media screen and (max-width: 300px) 
{body>img{display:block;}}</style>

Peter comentado Mar 11

Por favor abre una pregunta por duda y no 5 preguntas en una misma.

Saludos.

steven comentado Mar 12

no estoy haciendo nuevas preguntas en una pregunta, estoy comentando el codigo de las respuestas señalando las dudas del codigo no creo que estoy sea considerado como pregunta nueva.

1 Respuesta

2votos

Leonardo-Tadei Puntos216110

Hola @steven,

son muchas cosas... vamos punto por punto:

La optimización hace que el código se ejecute más rápido y consumiendo menos recursos: no tiene nada que ver con evitar errores.

Evitar errores es que un software siempre dé la respuesta que se le pide sin fallar. Para esto hay que sanear las entradas para que no intente ejecutar cosas erróneas, por ejemplo una query con errores de sintaxis.

Las nuevas bibliotecas MySQLi y PDO incluyen opciones de saneo de las querys. Si no querés meterte con la Programación Orientada a Objetos, las mysqli_X tienen una forma de uso estructurada, muy similar a las mysql_X.

Tu código se puede generalizar para que no depende de las tablas que tengas creadas, con lo que al tener menos líneas, será más fácil hacer que tenga menos errores.

La sentencia SQL SHOW TABLES; es una consulta que devuelve todas las tablas que tiene una base de datos. El resultado es semejante a cuando hacés una consulta cualquiera, y te permitiría recorrer todas las tablas sin tener que irlas agregando a tu script.

La sentencia SQL SHOW FILEDS FROM una_tabla; es una consulta que devuelve todos las campos que tiene una tabla. El resultado es semejante a cuando hacés una consulta cualquiera, y te permitiría buscar en todos los campos sin tener que irlos agregando a tu script.

Para calcular el tiempo que tarda la ejecución de un script tenés la función microtime(). La ejecutás al principio, luego al final, y la diferencia de los valores es lo que tardó el script.

Con esto, la estructura de tu código quedaría algo como:

obtener las tablas;
para (todas las tablas){
  obtener los campos;
  para (todos los campos){
    armar la query;
    ejecutarla;
    obtener los resultados;
  }
}

es decir, te quedarían dos bucles anidados.

Por último, es incorrecta tu aproximación de hacer un

SELECT * FROM una_tabla

y recorrerla para buscar un resultado. Lo correcto cuando usás un SGBDR es que sea el propio motor el que haga la búsqueda, es decir, una query del tipo

SELECT * FROM una_tabla WHERE campo1="variable" OR campo2="variable" OR campo..n="variable"

De esta forma TODOS los resultados son los que corresponden, y no hace falta compararlos con el valor a buscar, además de que la DB hace esto mucho más rápido que cualquier bucle en un programa.

Saludos cordiales!

PD: por favor, si tenés preguntas puntuales sobre alguna de todas estas cosas, abrí una nueva pregunta, explicá bien lo que te pasa, poné el código que escribiste y que no funciona o que no hace lo que querés, y aportá los datos suficientes para que entendamos la situación.

Peter comentado Mar 15

Un mismo bloque de código se puede utilizar para 600 cosas diferentes y no se pueden tratar en la misma pregunta.

Si tu duda es como optimizar codigo para evitar eventuales errores, esa es la duda, se resuelve y se abre otra.

Por favor abre una pregunta nueva por cada duda que tengas.

Saludos.

steven comentado Mar 15

ok peter lo hare pero no me podrias dar tu la respuesta a esta duda asi evitamos de crear mas preguntas sobre preguntas, porfa peter cumpleme este deseo todavia me falta mucho para completar mi proyecto pero acabar en esta parte seria un progreso
no te lo tomes a mal la peticion, despues de todo esramos en esta comunidad para ayudarnos mutuamente, cordiales saludos

Peter comentado Mar 15

No hay que evitar crear mas preguntas. Si una duda es como hacer helado de chocolate y la otra como cambiarle el aceite a un coche, son dos cosas completamente diferentes, así es que no lo evites. Si son cosas diferentes, por favor abre preguntas diferentes.

Cuando alguien con la misma duda "original" entra, se encuentra otra cosa, cuando alguien entra a ayudar con la duda "original" se encuentra otra cosa, lo que hace es perjudicar a todos, así es que por favor, para dudas diferentes, preguntas diferentes.

Saludos.

steven comentado Mar 15

@Leonardo-Tadei acabo de encontrar la solucion, antes de hacer eso comente mi ultima duda y luego lo instancie en una nueva pregunta y me di cuenta en ese momento del error, te mencione en la respuesta y te vuelvo a dar las gracias.
cordiales saluditos

Leonardo-Tadei comentado Mar 15

Hola @steven,

estuve ocupado hoy y no pude pasar por ED.
Me alegra que hayas podido avanzar con el código.

Espero que nuestra larga interacción te haya servido!!!

Saludos cordiales.

Por favor, accede o regístrate para responder a esta pregunta.

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Otras Preguntas y Respuestas


Actividad Reciente

...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta