Foros del Web » Programando para Internet » PHP »

problemas con llamada a base de datos

Estas en el tema de problemas con llamada a base de datos en el foro de PHP en Foros del Web. hola amigos: tengo el problema que no me recoge datos de la tabla cuando los pido en php, de la tabla avisos. no se porque ...
  #1 (permalink)  
Antiguo 09/06/2015, 05:05
 
Fecha de Ingreso: mayo-2003
Mensajes: 194
Antigüedad: 20 años, 11 meses
Puntos: 4
problemas con llamada a base de datos

hola amigos:

tengo el problema que no me recoge datos de la tabla cuando los pido en php, de la tabla avisos.

no se porque no recoge datos de esa tabla.




sin embargo en la tabla clientes si que me recoge bien los datos por que esta cogiendo los datos de la tabla clientes y no desde avisos.

<?php

$cont=0;
$consulta="SELECT * FROM clientes WHERE nombre_cli like '%$busca_avisos%'";
$resultado=mysqli_query($link,$consulta);
while($row=mysqli_fetch_array($resultado))
{
$cont++;
//Entro en un bucle que se va a ejecutar mientras se cumpla la condición
//Recojo los resultados de la consulta en variables
$nombre_cli=$row['nombre_cli'];
$codigo_cli=$row['codigo_cli'];


$link=mysqli_connect('localhost','root','','rtp') or die(mysqli_error());
$consulta2="SELECT * FROM avisos";
$resultado1=mysqli_query($link,$consulta2);
if($row1=mysqli_fetch_array($resultado1))
{

$codigo_avi=$row1['codigo_avi'];



}

?>






como podeis ver el resultado es este y no es correcto








yo lo que quiero que me muestre es cuantos avisos a tenido ese cliente y lo intento asi:

select * from avisos where codigo_cli=codigo_avi

o

select codigo_avi from avisos where codigo_cli=codigo_avi

en fin no se ya como ponerlo a ver si me podeis ayudar a ver por que no recoge datos de esa tabla.

un saludo y muchas gracias.

Última edición por vegas; 09/06/2015 a las 07:00
  #2 (permalink)  
Antiguo 09/06/2015, 08:35
Avatar de carlitosMiranda  
Fecha de Ingreso: marzo-2015
Ubicación: Colombia
Mensajes: 32
Antigüedad: 9 años, 1 mes
Puntos: 1
Respuesta: problemas con llamada a base de datos

Bueno, no se exactamente como quieres el resultado. Pero noto q no usas correctamente los cierres de las condiciones y los bucles, trata de indicar donde abre y donde cierra, para saber el contenido de "while" y de "if"
Veo q usas $link después de haber hecho una primera consulta. Te recomiendo que cuando uses cogido lo escribas dentro de formato de código, para q no se vea como texto plano.
Imagino q el cuadro de texto en la pgina es para ingresar el codigo del cliente.
Cualquier cosa comentas.
Saludos.

Última edición por carlitosMiranda; 09/06/2015 a las 08:52
  #3 (permalink)  
Antiguo 09/06/2015, 09:51
 
Fecha de Ingreso: abril-2015
Ubicación: Castelldefels
Mensajes: 76
Antigüedad: 9 años
Puntos: 3
Respuesta: problemas con llamada a base de datos

Si lo que quieres saber es cuantos avisos ha tenido un cliente, es decir el núm total de avisos, yo lo haría en una sola consulta uniendo las tablas clientes y avisos con JOIN, inclusive sin JOIN haciendo una consulta del tipo, select * from clientes,avisos WHERE clientes.nombre_cli like '%$busca_avisos%'" GROUP BY clientes.nombre_cli

de esta manera la consulta recogerá todos los datos de la tabla clientes, avisos cuando el cliente sea el que insertan en el form. Y los agrupará por cliente sumando los valores.

Es solo una forma.
  #4 (permalink)  
Antiguo 09/06/2015, 10:42
 
Fecha de Ingreso: mayo-2003
Mensajes: 194
Antigüedad: 20 años, 11 meses
Puntos: 4
Respuesta: problemas con llamada a base de datos

o muchas gracias por vuestra ayuda. lo tengo mas claro. voy a probar cerrando el bucle bien que seguro eso lo tengo mal y la segunda opcion tambiien la probaré.

lo he tenido que poner como texto plano por que no me aparecia la etiqueta de codigo php en este foro, lo siento. a sido al volver a editar el mensaje.

:)

ahora comento.

mil gracias amigos.
  #5 (permalink)  
Antiguo 09/06/2015, 10:54
 
Fecha de Ingreso: mayo-2003
Mensajes: 194
Antigüedad: 20 años, 11 meses
Puntos: 4
Respuesta: problemas con llamada a base de datos

no me sale, no me aclaro, he probado a cerrar las llaves del bucle en diferentes sitios pero no lo consigo. este es el el codigo a ver si me podeis decir las llave que esta mal. gracias de verdad.

Código PHP:
<?php

    $cont
=0;
    
$consulta=" select * from clientes,avisos WHERE clientes.nombre_cli like '%$busca_avisos%' GROUP BY clientes.nombre_cli";
    
$resultado=mysqli_query($link,$consulta);
    while(
$row=mysqli_fetch_array($resultado))
    {
        
$cont++;
        
//Entro en un bucle que se va a ejecutar mientras se cumpla la condición
        //Recojo los resultados de la consulta en variables 
        
$nombre_cli=$row['nombre_cli'];
        
$codigo_cli=$row['codigo_cli'];
        
$codigo_avi=$row['codigo_avi'];
        
    
        
    
        
?>
        <tr>
        
        
        
         <?php
        
        
        
//Ahora cierro php para mostrar los valores de las variables
        
?>
        <!-- Muestra una fila de la tabla en cada pasada del bucle -->
        <tr align="center" bgcolor="#FFFFFF">
        <!-- En cada celda imprimo el valor de la variable para las mini imagenes-->
        
        <!-- Muestra una fila de la tabla en cada pasada del bucle -->
       
        <!-- En cada celda imprimo el valor de la variable -->
      <td bgcolor="#00FFFF"><a href="aviso.php?nombre_cli=<?=$nombre_cli?>&codigo_cli=<?=$codigo_cli?>&busca_avisos=<?=$busca_avisos?>"><font color="#000000"><b><?=$nombre_cli?></b></font>
        
        <td><?=$codigo_cli?></td>
        <td><?=$codigo_avi?></td> 
      
       
        
       
        </tr>
        <?php
    
}
        
        
//Este bucle se va a repetir mientras se cumpla la condicion del select
        
    //Termina el bucle y cierro PHP para cerrar la tabla
    
    
    
?>
   
    
    
    <?php

    
    
    ?>
    
        <tr bgcolor="#CCFFCC">
    <td colspan="3" align="center"> <?php echo"Total productos encontrados $cont"?></td>
    </tr>
    </table> 
    
    <br /><br /><br />
   
<?PHP
}

else
{
?>    




<p align="center">consulta avisos por nombre del cliente</p>
<p align="center"><form action="historial_avisos.php" method="GET"></p>

<p align="center"><input type="text" name="busca_avisos" /></p>
<p align="center"><input type="submit" value="Consulta" /></p>

</form>

<?php
}
?>
  #6 (permalink)  
Antiguo 09/06/2015, 17:23
 
Fecha de Ingreso: abril-2015
Ubicación: Castelldefels
Mensajes: 76
Antigüedad: 9 años
Puntos: 3
Respuesta: problemas con llamada a base de datos

Cita:
Iniciado por vegas Ver Mensaje
no me sale, no me aclaro, he probado a cerrar las llaves del bucle en diferentes sitios pero no lo consigo. este es el el codigo a ver si me podeis decir las llave que esta mal. gracias de verdad.

Código PHP:
<?php

    $cont
=0;
    
$consulta=" select * from clientes,avisos WHERE clientes.nombre_cli like '%$busca_avisos%' GROUP BY clientes.nombre_cli";
    
$resultado=mysqli_query($link,$consulta);
    while(
$row=mysqli_fetch_array($resultado))
    {
        
$cont++;
        
//Entro en un bucle que se va a ejecutar mientras se cumpla la condición
        //Recojo los resultados de la consulta en variables 
        
$nombre_cli=$row['nombre_cli'];
        
$codigo_cli=$row['codigo_cli'];
        
$codigo_avi=$row['codigo_avi'];
        
    
        
    
        
?>
        <tr>
        
        
        
         <?php
        
        
        
//Ahora cierro php para mostrar los valores de las variables
        
?>
        <!-- Muestra una fila de la tabla en cada pasada del bucle -->
        <tr align="center" bgcolor="#FFFFFF">
        <!-- En cada celda imprimo el valor de la variable para las mini imagenes-->
        
        <!-- Muestra una fila de la tabla en cada pasada del bucle -->
       
        <!-- En cada celda imprimo el valor de la variable -->
      <td bgcolor="#00FFFF"><a href="aviso.php?nombre_cli=<?=$nombre_cli?>&codigo_cli=<?=$codigo_cli?>&busca_avisos=<?=$busca_avisos?>"><font color="#000000"><b><?=$nombre_cli?></b></font>
        
        <td><?=$codigo_cli?></td>
        <td><?=$codigo_avi?></td> 
      
       
        
       
        </tr>
        <?php
    
}
        
        
//Este bucle se va a repetir mientras se cumpla la condicion del select
        
    //Termina el bucle y cierro PHP para cerrar la tabla
    
    
    
?>
   
    
    
    <?php

    
    
    ?>
    
        <tr bgcolor="#CCFFCC">
    <td colspan="3" align="center"> <?php echo"Total productos encontrados $cont"?></td>
    </tr>
    </table> 
    
    <br /><br /><br />
   
<?PHP
}

else
{
?>    




<p align="center">consulta avisos por nombre del cliente</p>
<p align="center"><form action="historial_avisos.php" method="GET"></p>

<p align="center"><input type="text" name="busca_avisos" /></p>
<p align="center"><input type="submit" value="Consulta" /></p>

</form>

<?php
}
?>
Tienes errores en el código, te pongo la consulta que yo haría:

Código PHP:
    $consulta=" select * from clientes,avisos WHERE clientes.nombre_cli like '%$busca_avisos%' GROUP BY clientes.nombre_cli";
    
$resultado=mysqli_query($consulta);
    while(
$row=mysqli_fetch_array($resultado))
    {
        
                
$nombre_cli=$row['nombre_cli'];
        
$codigo_cli=$row['codigo_cli'];
        
$codigo_avi=$row['codigo_avi'];
        
    
        }
    
        
?> 
con esto extraes los datos de la bd.
Cuando insertes en las celdas las variables, ponlo correctamente:
Por ejemplo:

Tu tienes:
Código HTML:
<td><?=$codigo_cli?></td> 
por
Código HTML:
<td><?php echo "$codigo_cli"; ?></td> 
te debería funcionar sin problemas

Saludos
  #7 (permalink)  
Antiguo 10/06/2015, 03:16
 
Fecha de Ingreso: mayo-2003
Mensajes: 194
Antigüedad: 20 años, 11 meses
Puntos: 4
Respuesta: problemas con llamada a base de datos

gracias jlusc98 por la respuesta, pero me has puesto la misma consulta que ya tenia, no me funciona tampoco.

ni siquiera en phpmyadmin me devuleve una respuesta al poner esa sentencia.
un saludo.

MySQL ha devuelto un conjunto de valores vacío (es decir: cero columnas). ( La consulta tardó 0.0014 seg )

un saludo.

Última edición por vegas; 10/06/2015 a las 03:29
  #8 (permalink)  
Antiguo 10/06/2015, 04:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: problemas con llamada a base de datos

Si te devuelve ese mensaje, la consulta esta bien escrita, lo que NO tienes son datos que cumplan con la condición del WHERE.
Revisa los datos de la tabla y analiza la diferencia entre lo que tienes y lo que quisiste buscar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 10/06/2015, 08:28
 
Fecha de Ingreso: abril-2015
Ubicación: Castelldefels
Mensajes: 76
Antigüedad: 9 años
Puntos: 3
Respuesta: problemas con llamada a base de datos

Hola vegas,
Dime como tienes las tablas? como se relacionan, pon los campos de cada tabla para echarle un vistazo. La consulta es correcta porque la utilizo a diario, así que si lo que ocurre es que no inserta ningún dato, es el problema que te indica gnzsoloyo.

saludos
  #10 (permalink)  
Antiguo 10/06/2015, 13:14
 
Fecha de Ingreso: mayo-2003
Mensajes: 194
Antigüedad: 20 años, 11 meses
Puntos: 4
Respuesta: problemas con llamada a base de datos

hola amigos.

las tablas si insertan datos desde php update y delete cascade tambien estan funcionando bien, pero en las consultas SELECT es don de no me entero muy bien.ademas ahora me a surgido otro problemilla que no se por que ya que en una pagina me funciona bien y en otra no, y es un copy paste.

mira esta funciona bien:

$link=mysqli_connect('localhost','root','','rtp') or die(mysqli_error());

$insert1="UPDATE clientes SET nombre_cli='$nombre_cli',cif_cli='$cif_cli',direcc ion_cli='$direccion_cli',cp_cli='$cp_cli',poblacio n_cli='$poblacion_cli',provincia_cli='$provincia_c li',telefono_cli='$telefono_cli',email_cli='$email _cli',observaciones_cli='$observaciones_cli' where codigo_cli='$codigo_cli'";

$result=mysqli_query($link,$insert1);

if ($result==1)
{
?><p align="center" style="font-size:18px"><font color="yellow"><?php echo"el Cliente $nombre_cli se a actualizado con exito";?></font></p>
<?php
}
else
{
?>
<p align="center" style="font-size:18px"><font color="red"><?php echo "El Cliente $nombre_cli no se a actualizado. Revisa que has introducido todos los datos";?></font></p>
<?php
}

}

if(isset($_GET['borrar']))

{

$link=mysqli_connect('localhost','root','','rtp') or die(mysqli_error());

$insert2="DELETE FROM clientes WHERE codigo_cli='$codigo_cli'";

$result2=mysqli_query($link,$insert2);

if ($result2==1)

el UPDATE Y DELETE FUNCIONAN BIEN


y en esta el delete no va y es exactamente lo mismo joder.

$link=mysqli_connect('localhost','root','','rtp') or die(mysqli_error());

$insert1="UPDATE tecnicos SET nombre_tec='$nombre_tec',cif_tec='$cif_tec',direcc ion_tec='$direccion_tec',cp_tec='$cp_tec',poblacio n_tec='$poblacion_tec',provincia_tec='$provincia_t ec',telefono_tec='$telefono_tec', email_tec='$email_tec',observaciones_tec='$observa ciones_tec',aviso='$aviso', mano_obra_tec='$mano_obra_tec',importe='$importe', materiales_tec='$materiales_tec' where codigo_tec='$codigo_tec'";

$result=mysqli_query($link,$insert1);

if ($result==1)
{
?><p align="center" style="font-size:18px"><font color="yellow"><?php echo"el Tecnico $nombre_tec se a actualizado con exito";?></font></p>
<?php
}
else
{
?>
<p align="center" style="font-size:18px"><font color="red"><?php echo "El Tecnico $nombre_tec no se a actualizado. Revisa que has introducido todos los datos";?></font></p>
<?php
}

}

if(isset($_GET['borrar']))

{

$link=mysqli_connect('localhost','root','','rtp') or die(mysqli_error());

$insert3="DELETE FROM tecnicos WHERE codigo_tec='$codigo_tec'";

$result3=mysqli_query($link,$insert3);

if ($result3==1)
{
?><p align="center" style="font-size:18px"><font color="yellow"><?php echo"La ficha del Tecnico $nombre_tec se a borrado con exito";?> </font></p>
<?php

}
else


el UPDATE funciona pero el delete no.

vaya misterio.
  #11 (permalink)  
Antiguo 10/06/2015, 16:23
 
Fecha de Ingreso: abril-2015
Ubicación: Castelldefels
Mensajes: 76
Antigüedad: 9 años
Puntos: 3
Respuesta: problemas con llamada a base de datos

Hola Vegas, mira bien los corchetes no sea que haya alguno que sobre....
que error te da el segundo 'delete'?
  #12 (permalink)  
Antiguo 10/06/2015, 16:31
 
Fecha de Ingreso: mayo-2003
Mensajes: 194
Antigüedad: 20 años, 11 meses
Puntos: 4
Respuesta: problemas con llamada a base de datos

gracias amigo:

no me da ningun error, se va directamente hasta el ELSE:
Código PHP:
<?php
if(isset($_GET['borrar']))

{

$link=mysqli_connect('localhost','root','','rtp') or die(mysqli_error());

        
$insert3="DELETE FROM tecnicos WHERE codigo_tec='$codigo_tec'";  
         
        
$result3=mysqli_query($link,$insert3);
        
        if (
$result3==1)
        { 
        
?><p align="center" style="font-size:18px"><font color="yellow"><?php echo"La ficha del Tecnico  $nombre_tec  se a borrado con exito";?> </font></p>
            <?php
            
        
}
        else
        {
            
?>
            <p align="center" style="font-size:18px"><font color="red"><?php echo "la ficha del Tecnico  $nombre_tec no se a borrado.";?></font></p>
            <?php
        
}     
            
}

?>
los corchetes creo que estan bien solo hay tres corchetes y los cierro como en las otras paginas anteriores que si funciona bien.

es algo muy raro.¿no?

de verdad gracias por la ayuda.

Última edición por vegas; 11/06/2015 a las 02:42
  #13 (permalink)  
Antiguo 11/06/2015, 03:49
 
Fecha de Ingreso: abril-2015
Ubicación: Castelldefels
Mensajes: 76
Antigüedad: 9 años
Puntos: 3
Respuesta: problemas con llamada a base de datos

Cita:

no me da ningun error, se va directamente hasta el ELSE:

<?php
if(isset($_GET['borrar']))

{

$link=mysqli_connect('localhost','root','','rtp') or die(mysqli_error());

$insert3="DELETE FROM tecnicos WHERE codigo_tec='$codigo_tec'";

$result3=mysqli_query($link,$insert3);

if ($result3==1)
{
?><p align="center" style="font-size:18px"><font color="yellow"><?php echo"La ficha del Tecnico $nombre_tec se a borrado con exito";?> </font></p>
<?php

}
else
{
?>
<p align="center" style="font-size:18px"><font color="red"><?php echo "la ficha del Tecnico $nombre_tec no se a borrado.";?></font></p>
<?php
}

}

?>
donde recoges la variable $codigo_tec?
Si el formulario lo envias por post debes añadir
Código PHP:
 $codigo_tec $_POST['codigo_tec']; 
si es por get
Código PHP:
$codigo_tec $_GET['codigo_tec']; 
  #14 (permalink)  
Antiguo 11/06/2015, 12:51
Avatar de carlitosMiranda  
Fecha de Ingreso: marzo-2015
Ubicación: Colombia
Mensajes: 32
Antigüedad: 9 años, 1 mes
Puntos: 1
Respuesta: problemas con llamada a base de datos

Bueno, me perdi un poco en lo q en realidad se quiere ver como resultado. Pero lo q alcance a entender es que lo q se quiere es ver cuantos avisos existen por cada cliente. No es así?.
Ok, tengo entendido q hay 2 tablas: una llamada "Cliente" y otra "Avisos" y que existe una relacion de uno a muchos (Un cliente puede tener muchos avisos). Y por consiguiente existe una llave foranea en un "Aviso", q es basicamente la llave primaria de un "Cliente" es especifico. No?.
Pero si lo q quiere es saber "Cuántos" avisos tiene un cliente". No sería lo mismo decir: "Cuántos" registros existen (dentro de la tabla Avisos) con un codigo de cliente especifico.
Eso es lo q creo.
Y con eso comparto lo q dijo antes "jluc98", acerca de usar JOIN para las tablas.
Aqui tengo este codigo. Que hace lo q me refiero. . Ah y perdon x mi forma de programar =(
Se q puede haber mejoras
Espero sirva.

Código PHP:
Ver original
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <title>Avisos</title>
  5. </head>
  6. <body>
  7.     <table border="1">
  8.     <thead>
  9.     <tr>
  10.     <th>Id Cliente</th>
  11.     <th>Cliente</th>
  12.     <th># Avisos</th>
  13.     </tr>
  14.     <tbody>
  15.     <?php
  16.         $link = mysqli_connect("localhost","root",""); //conexion
  17.         mysqli_select_db($link,"consul");//nombre de la base de datos
  18.         $consultIds = "select cliente_id,nombre from cliente where 1"; //para seleccionar los nombre y los id de los clientes
  19.         $resultIds = mysqli_query($link,$consultIds);
  20.         while($ides = mysqli_fetch_assoc($resultIds)){//bucle
  21.             //Para saber cuantos registros existen en la tabla aviso con relacion a un cliente especifico
  22.             //Pero como estamos en un bucle lo hara con todos los clientes =)
  23.             $consultCliente = "select c.cliente_id from aviso as a inner join cliente as c
  24.                 on c.cliente_id=a.aviso_cliente_id
  25.                 where c.cliente_id = '".$ides['cliente_id']."'";
  26.             $resultCliente = mysqli_query($link,$consultCliente);
  27.             $numAvisosCliente = mysqli_num_rows($resultCliente);//cuenta numero de registros obtenidos
  28.             //muestra de los resultados
  29.             echo "<tr>
  30.                     <td>".$ides['cliente_id']."</td>
  31.                     <td>".$ides['nombre']."</td>
  32.                     <td>".$numAvisosCliente.(($numAvisosCliente == 1)?" Aviso":" Avisos")."</td>
  33.                   </tr>";
  34.         }
  35.         mysqli_close($link);
  36.     ?>
  37.     </tbody>
  38.     </thead>
  39.     </table>
  40. </body>
  41. </html>

Ah! y deben haber registros, claro =)
Los nombres de las columnas se han cambiado. Pues lo hice a la carrera =)
Saludos.
  #15 (permalink)  
Antiguo 11/06/2015, 13:47
 
Fecha de Ingreso: mayo-2003
Mensajes: 194
Antigüedad: 20 años, 11 meses
Puntos: 4
Respuesta: problemas con llamada a base de datos

Si si tiene buena pinta. mañana lo pruebo y os cuento, hoy ya no doy mas de mi.

muchas gracias por las respuestas, sin vuestra ayuda seria imposible.

mañana os cuento.

Etiquetas: llamada, select, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:35.