Foros del Web » Programando para Internet » PHP »

Buscar en BD y mostrar esa fila

Estas en el tema de Buscar en BD y mostrar esa fila en el foro de PHP en Foros del Web. Hola a todos. ando flojo de php y no se como realizar esto, estaría saber que funciones me tendría que mirar para poder realizarlo y ...
  #1 (permalink)  
Antiguo 15/01/2014, 20:55
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 13 años, 11 meses
Puntos: 468
Buscar en BD y mostrar esa fila

Hola a todos. ando flojo de php y no se como realizar esto, estaría saber que funciones me tendría que mirar para poder realizarlo y aprendermelo para un futuro.

He metido el archivo en mi hosting de pruebas http://www.rodrys.com/elmasodiado y pueden ver el ejemplo en vivo.

He realizado una serie de personajes de ejemplo con un numero de votos que funciona perfectamente. Ahora lo que intento realizar es que en el campo de arriba al poner un nombre y dando a buscar, muestre únicamente los nombres que se hayan buscado y lo muestre en esa misma página.

Os pego el código que tengo realizado también.

Código PHP:
Ver original
  1. <!DOCTYPE html>
  2. <html lang="es">
  3. <head>
  4. <meta charset="utf-8" />
  5. <title>Ranking el más odiado</title>
  6.  
  7. <style type="text/css">
  8. body            { font-family: Arial, Verdana, Sans; font-size: 14px; }
  9. table.tabla-bd      { border-right:1px solid #ccc; border-bottom:1px solid #ccc; }
  10. table.tabla-bd th   { background:#eee; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc; }
  11. table.tabla-bd td   { padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc; }
  12. .cabecera {
  13.     background-color:#DDD;
  14.        font-family:Helvetica,Futura,Arial,Verdana,sans-serif;
  15.        border: 1px dotted rgb(221, 221, 221);
  16.          border-left: 1px hidden;
  17.         border-right: 1px hidden; }
  18. </style>
  19.  
  20. </head>
  21. <body>
  22.  
  23. <?php
  24. $conexion = mysql_connect("XXX.XXX.XXX.XXX" , "XXX" , "XXXXXX");
  25. mysql_select_db("XXX",$conexion);
  26.  
  27. ?>
  28. <div align="center">
  29. <form align="center" action="index.php" method="post">
  30. <input type="text" name="buscar" value="Busca un personaje" /> <input type="submit" value="Buscar"/>
  31. </form>
  32. <br>
  33. <div align="center">
  34.  
  35.  
  36.  
  37. <table class=borde  align="center">
  38. <tr class="cabecera">
  39.   <td  align=left>Nombre</td>
  40.   <td  align=center>Votos</td>
  41. </tr>
  42.  
  43.  
  44. <?php
  45. $sql= "SELECT * FROM elmasodiado ORDER BY votos DESC"; // muestra las consultas ordenadas por mayor a menor la columna votos
  46. $result = mysql_query($sql);
  47. while($fila = mysql_fetch_array($result))
  48.   {
  49.   $numero = 0;
  50.     echo "<tr>";
  51.     echo "  <td align=left>".$fila['nombre']."</td>";
  52.     echo "  <td align=center>".$fila['votos']."</td>";
  53.     echo "</tr>";
  54.     $numero++;
  55.   }
  56.  
  57.  ?>
  58. </table>
  59.  
  60.  <?php
  61. ?>
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #2 (permalink)  
Antiguo 15/01/2014, 22:46
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.551
Antigüedad: 12 años, 4 meses
Puntos: 977
Respuesta: Buscar en BD y mostrar esa fila

Básicamente, debes verificar si has recibido datos a través del método POST que es el que estás utilizando, de ser así, desinfectas el dato recibido (importante) y haces la búsqueda en la BD mediante una condición, en la que debe haber un dato de algún campo de la tabla en la BD (eso lo debes de determinar) cuyo valor coincida con el digitado por el usuario, caso contrario, se realiza la consulta que muestras.

Código PHP:
Ver original
  1. if ($_POST) {
  2.     $dato = mysql_real_escape_string(strip_tags($_POST["buscar"]));
  3.  
  4.     $consulta = sprintf("SELECT * FROM elmasodiado WHERE campo = '%s' ORDER BY votos DESC", $dato);
  5.     $result = mysql_query($consulta);
  6.  
  7.     //Siempre verifica que se hayan obtenido datos en la consulta
  8.     if (mysql_num_rows($result)) {
  9.         while($fila = mysql_fetch_array($result)) {
  10.             $numero = 0;
  11.             echo "<tr>";
  12.             echo "  <td align=left>" . $fila['nombre'] . "</td>";
  13.             echo "  <td align=center>" . $fila['votos'] . "</td>";
  14.             echo "</tr>";
  15.             $numero++;
  16.         }
  17.     }
  18.     else
  19.         echo "No se encontraron datos en la consulta";
  20. }
  21. else {
  22.     $sql= "SELECT * FROM elmasodiado ORDER BY votos DESC";
  23.     $result = mysql_query($sql);
  24.  
  25.     //Siempre verifica que se hayan obtenido datos en la consulta
  26.     if (mysql_num_rows($result) {
  27.         while($fila = mysql_fetch_array($result)) {
  28.             $numero = 0;
  29.             echo "<tr>";
  30.             echo "  <td align=left>".$fila['nombre']."</td>";
  31.             echo "  <td align=center>".$fila['votos']."</td>";
  32.             echo "</tr>";
  33.             $numero++;
  34.         }
  35.     }
  36.     else
  37.         echo "No se encontraron datos en la consulta";
  38. }
  39.  

Te recomiendo que empieces a utilizar la extensión MySQLi, ya que MySQL está en desuso y desaparecerá en futuras versiones de PHP.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 16/01/2014, 07:50
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 13 años, 11 meses
Puntos: 468
Respuesta: Buscar en BD y mostrar esa fila

Si que funciona. lo que tendré que mirar ahora es que no diferencie entre mayúsculas y minúsculas y que si busco un nombre, aparezcan todos los personajes con ese nombre aunque tengan apellidos distintos. ya uqe ahora para que muestre uno tengo que poner el nombre y apellidos
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #4 (permalink)  
Antiguo 16/01/2014, 08:22
 
Fecha de Ingreso: diciembre-2013
Mensajes: 1
Antigüedad: 10 años, 3 meses
Puntos: 1
Respuesta: Buscar en BD y mostrar esa fila

para no distinguir entre minúsculas/mayusculas tendrias que usar el operador LIKE
en la consulta sql (incluso si tiene palabras adelantes o atras como el apellido )

SELECT * FROM elmasodiado WHERE campo LIKE '%MaUrO%' ORDER BY votos DESC

saludos
  #5 (permalink)  
Antiguo 16/01/2014, 08:38
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 13 años, 11 meses
Puntos: 468
Respuesta: Buscar en BD y mostrar esa fila

He avanzado algo más. He insertado también otra parte del script, aunque no se finalizarla.

Lo que he realizado ahora es que puedes votar a un personaje, al votarlo se añade a la base de datos, ahora lo que intento realizar es que. en el caso de que el personaje ya exista, en vez de añadirlo de nuevo, simplemente se le sume 1 al numero de votos.

Vuelvo a pegar mi código:

Código PHP:
Ver original
  1. <!DOCTYPE html>
  2. <html lang="es">
  3. <head>
  4. <meta charset="utf-8" />
  5. <title>Ranking el más odiado</title>
  6.  
  7. <style type="text/css">
  8. body            { font-family: Arial, Verdana, Sans; font-size: 14px; }
  9. table.tabla-bd      { border-right:1px solid #ccc; border-bottom:1px solid #ccc; }
  10. table.tabla-bd th   { background:#eee; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc; }
  11. table.tabla-bd td   { padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc; }
  12. .cabecera {
  13.     background-color:#DDD;
  14.        font-family:Helvetica,Futura,Arial,Verdana,sans-serif;
  15.        border: 1px dotted rgb(221, 221, 221);
  16.          border-left: 1px hidden;
  17.         border-right: 1px hidden; }
  18. </style>
  19.  
  20. </head>
  21. <body>
  22.  
  23. <?php
  24. $conexion = mysql_connect("XXX.XXX.XXX" , "XXXXXXX" , "XXXXXXX");
  25. mysql_select_db("XXXXXXXX",$conexion);
  26.  
  27. ?>
  28.  
  29.  
  30. <div align="center">
  31. Escribe el nombre del personaje publico que MAS ODIAS, <br>
  32. si este no esta en nuestro ranking se añadira, <br>
  33. pero si ya esta se le sumara el voto <br>
  34. <br>
  35. <form align="center" action="index.php" method="post">
  36. <input type="text" size="50" name="votar" value="A quien odias mas" /> <input type="submit" value="Vota"/>
  37. </form>
  38. <br>
  39.  
  40. <?php
  41. if ($_POST["votar"]) {
  42.     $dato = mysql_real_escape_string(strip_tags($_POST["votar"]));
  43.     $votonuevo = $_POST['votar'];
  44.     $sql = "INSERT INTO elmasodiado(nombre, votos) VALUES ('$votonuevo','1')";
  45.     $result = mysql_query($sql);
  46.     echo 'Has votado a '. $votonuevo . 'como tu personaje MAS ODIADO';
  47.         }
  48. ?>
  49.  
  50. <div align="center">
  51. <br>
  52. <br>
  53. <div align="center">
  54. <form align="center" action="index.php" method="post">
  55. <input type="text" size="30" name="buscar" value="Busca un personaje" /> <input type="submit" value="Buscar"/>
  56. </form>
  57. <br>
  58. <div align="center">
  59.  
  60.  
  61.  
  62. <table class=borde  align="center">
  63. <tr class="cabecera">
  64.   <td  align=left>Nombre</td>
  65.   <td  align=center>Votos</td>
  66. </tr>
  67. <?php
  68.  
  69. if ($_POST["buscar"]) {
  70.         $dato = mysql_real_escape_string(strip_tags($_POST["buscar"])); // si hemos recogido un dato del formulario _POST
  71.      
  72.         $consulta = sprintf("SELECT * FROM elmasodiado WHERE nombre = '%s' ORDER BY votos DESC", $dato); // buscamos la consulta
  73.         $result = mysql_query($consulta);
  74.      
  75.         //Siempre verifica que se hayan obtenido datos en la consulta
  76.         if (mysql_num_rows($result)) {
  77.             while($fila = mysql_fetch_array($result)) {
  78.                 $numero = 0;
  79.                 echo "<tr>";
  80.                 echo "  <td align=left>" . $fila['nombre'] . "</td>";
  81.                 echo "  <td align=center>" . $fila['votos'] . "</td>";
  82.                 echo "</tr>";
  83.                 $numero++;
  84.             }
  85.         }
  86.         else
  87.             echo "No se encontraron datos en la consulta";
  88.     }
  89.     else {
  90.         $sql= "SELECT * FROM elmasodiado ORDER BY votos DESC";
  91.         $result = mysql_query($sql);
  92.      
  93.         //Siempre verifica que se hayan obtenido datos en la consulta
  94.         if (mysql_num_rows($result)) {
  95.             while($fila = mysql_fetch_array($result)) {
  96.                 $numero = 0;
  97.                 echo "<tr>";
  98.                 echo "  <td align=left>".$fila['nombre']."</td>";
  99.                 echo "  <td align=center>".$fila['votos']."</td>";
  100.                 echo "</tr>";
  101.                 $numero++;
  102.             }
  103.         }
  104.         else
  105.             echo "No se encontraron datos en la consulta";
  106.     }
  107.      
  108. ?>
  109. </table>
Intentaré buscarlo por mi cuenta también si no encuentro respuesta por aquí, Gracias!!!

EDITO: Acabo de ver que tengo que usar UPDATE para ello, veré si encuentro algún ejemplo que me haga ver claro como se usa!!
__________________
No te olvides de dar +1 a quien te echa un cable ;)

Última edición por rodrypaladin; 16/01/2014 a las 08:45
  #6 (permalink)  
Antiguo 16/01/2014, 09:19
Avatar de alexisverano  
Fecha de Ingreso: septiembre-2008
Ubicación: La Habana.Cuba
Mensajes: 298
Antigüedad: 15 años, 6 meses
Puntos: 36
Respuesta: Buscar en BD y mostrar esa fila

rodrypaladin,

Primeramente haces un select para obtener la cantidad de votos que tiene el personaje y despues con UPDATE le sumas uno y guardas el nuevo valor. Ah, te recomiendo que mejor trates los registros por un identificador unico ID y no por los nombres.

Saludos,
  #7 (permalink)  
Antiguo 16/01/2014, 09:39
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 13 años, 11 meses
Puntos: 468
Respuesta: Buscar en BD y mostrar esa fila

De acuerdo, añadiré un campo para la ID, tengo que poner la ID en primaria ?? o no es necesario ??

Por otro lado no se como construir la condición para que en el caso de que el nombre no exista, haga el INSERT y que en el caso de que si haga lo que me has mencionado. con un simple if valdría ? o es mejor usar otra funcion?
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #8 (permalink)  
Antiguo 16/01/2014, 11:02
Avatar de alexisverano  
Fecha de Ingreso: septiembre-2008
Ubicación: La Habana.Cuba
Mensajes: 298
Antigüedad: 15 años, 6 meses
Puntos: 36
Respuesta: Buscar en BD y mostrar esa fila

rodrypaladin,

Te modifique un poco la programacion, prueba con estos cambios y despues me dices...

Código PHP:
Ver original
  1. if ($_POST["votar"]) {
  2.         $dato = mysql_real_escape_string(strip_tags($_POST["votar"]));
  3.        
  4.     $sql = mysql_query("SELECT * FROM elmasodiado WHERE nombre = '".$_POST['votar']."' ");
  5.     $row = mysql_fetch_assoc($sql);
  6.  
  7.     if ($row['nombre']==""){
  8.        mysql_query("INSERT INTO elmasodiado (nombre, votos) VALUES ('".$_POST['votar']."','1')");
  9.     }else{ 
  10.       $votoactual = $row['votos']+1;
  11.       mysql_query("UPDATE elmasodiado SET votos='$votoactual' WHERE nombre = '".$_POST['votar']."' ");
  12.     }
  13.        
  14.         echo 'Has votado a '. $_POST['votar'] . ' como tu personaje MAS ODIADO';
  15.     }

Última edición por alexisverano; 16/01/2014 a las 11:12
  #9 (permalink)  
Antiguo 16/01/2014, 11:26
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 13 años, 11 meses
Puntos: 468
Respuesta: Buscar en BD y mostrar esa fila

Funciona a la perfección. Gracias. Justo lo que necesitaba. Para más perfección aunque ponga el nombre en minusculas y en la bd este con mayusculas pone el boton en el mismo sitio, osea que perfecto.

Veré ahora como hago para que cuando busquen por ejemplo "belen" aparezcan todos los que se llamen belen pero el apellido sea distinto.
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #10 (permalink)  
Antiguo 16/01/2014, 11:56
Avatar de alexisverano  
Fecha de Ingreso: septiembre-2008
Ubicación: La Habana.Cuba
Mensajes: 298
Antigüedad: 15 años, 6 meses
Puntos: 36
Respuesta: Buscar en BD y mostrar esa fila

Aqui te dejo este arreglo, sustituye y prueba y despues me dices...

Código PHP:
Ver original
  1. if ($_POST["buscar"]) {
  2.             $dato = mysql_real_escape_string(strip_tags($_POST["buscar"])); // si hemos recogido un dato del formulario _POST
  3.         $consulta = ("SELECT * FROM elmasodiado WHERE nombre LIKE '%".$_POST["buscar"]."%' ORDER BY votos DESC"); // buscamos la consulta
  4.             $result = mysql_query($consulta);

Aqui creo que solo te queda un detalle, que valides que al darle clic en el boton buscar, tenga contenido la caja de texto o de lo contrario que te muestre todos los elementos de la db, esto es a tu gusto.

Saludos,
  #11 (permalink)  
Antiguo 16/01/2014, 12:03
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 13 años, 11 meses
Puntos: 468
Respuesta: Buscar en BD y mostrar esa fila

Como siempre funciona a la perfección, Mil gracias!!, voy a ver ahora si le meto algo de css y algunas imagenes, para que quede mas bonito y luego me pongo a investigar para que un mismo usuario no pueda votar mil veces al mismo personaje.
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #12 (permalink)  
Antiguo 17/01/2014, 07:14
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 13 años, 11 meses
Puntos: 468
Respuesta: Buscar en BD y mostrar esa fila

Tengo otra duda y aprovecho este hilo para realizarla aunque no sigue el tema del título pero bueno...

Voy a añadir una opción para que cuando votes tengas que añadir una razón, cuando votes aparte de añadirse al ranking y sumar el voto, se generará una página del personaje con todas las razones de los votos.

Mi duda es la siguiente:

Como creo la bd ?? Una tabla por cada personaje y una fila para cada razón ?? o una tabla para cada personaje ?? No se que opción es la más acertada.

Sería como un sistema de comentarios, pero nunca he creado ninguno por eso me vienen estas dudas.

EDITO: siguiendo la misma linea he intentado añadir la opción pero obviamente no me ha funcionado XD

pego el código:

Código PHP:
Ver original
  1. <?php
  2. $conexion = mysql_connect("XXX.XXX.XXX.X" , "XXX.XXX" , "XXX.XXX.XX");
  3. mysql_select_db("elmasodiado",$conexion);
  4.  
  5. ?>
  6.  
  7.  
  8. <div align="center">
  9. <IMG SRC="logoprov.png" Align="center"><br>
  10. Escribe el nombre del personaje publico que MAS ODIAS<br>
  11. si este no esta en nuestro ranking se añadira<br>
  12. pero si ya esta se le sumara el voto<br>
  13. <br>
  14. <form align="center" action="index.php" method="post">
  15. <input type="text" size="50" name="votar" placeholder="A quien odias mas" /> <br>
  16. <textarea name="mensaje" rows="10" cols="40" placeholder="La razon de tu voto"></textarea> <br>
  17. <input type="submit" value="Vota"/>
  18. </form>
  19. <br>
  20.  
  21. <?php
  22.     if ($_POST["votar"]) {
  23.             $dato = mysql_real_escape_string(strip_tags($_POST["votar"]));
  24.             $dato2 = mysql_real_escape_string(strip_tags($_POST["mensaje"]));
  25.            
  26.         $sql = mysql_query("SELECT * FROM elmasodiado WHERE nombre = '".$_POST['votar']."' ");
  27.         $sql = mysql_query("INSERT INTO razones (id, nombre, texto) VALUES ('','".$_POST['votar']"','".$_POST["mensaje"]"')");
  28.         $row = mysql_fetch_assoc($sql);
  29.      
  30.         if ($row['nombre']==""){
  31.            mysql_query("INSERT INTO elmasodiado (nombre, votos) VALUES ('".$_POST['votar']."','1')");
  32.         }else{
  33.           $votoactual = $row['votos']+1;
  34.           mysql_query("UPDATE elmasodiado SET votos='$votoactual' WHERE nombre = '".$_POST['votar']."' ");
  35.         }
  36.            
  37.             echo '</h2>Has votado a <b>'. $_POST['votar'] . ' </b>como tu personaje MAS ODIADO</h2>';
  38.         }
  39. ?>
  40.  
  41. <div align="center">
  42. <IMG SRC="ranking.jpg" Align="center"><br>
  43. <br>
  44. <div align="center">
  45. <form align="center" action="index.php" method="post">
  46. <input type="text" size="30" name="buscar" placeholder="Busca un personaje" /> <input type="submit" value="Buscar"/>
  47. </form>
  48. <br>
  49. <div align="center">
  50.  
  51.  
  52.  
  53. <table class=borde  align="center">
  54. <tr class="cabecera">
  55.   <td  align=left>Nombre</td>
  56.   <td  align=center>Votos</td>
  57. </tr>
  58. <?php
  59.  
  60.     if ($_POST["buscar"]) {
  61.                 $dato = mysql_real_escape_string(strip_tags($_POST["buscar"])); // si hemos recogido un dato del formulario _POST
  62.             $consulta = ("SELECT * FROM elmasodiado WHERE nombre LIKE '%".$_POST["buscar"]."%' ORDER BY votos DESC"); // buscamos la consulta
  63.                 $result = mysql_query($consulta);
  64.      
  65.         //Siempre verifica que se hayan obtenido datos en la consulta
  66.         if (mysql_num_rows($result)) {
  67.             while($fila = mysql_fetch_array($result)) {
  68.                 $numero = 0;
  69.                 echo "<tr>";
  70.                 echo "  <td align=left>" . $fila['nombre'] . "</td>";
  71.                 echo "  <td align=center>" . $fila['votos'] . "</td>";
  72.                 echo "</tr>";
  73.                 $numero++;
  74.             }
  75.         }
  76.         else
  77.             echo "No se encontraron datos en la consulta";
  78.     }
  79.     else {
  80.         $sql= "SELECT * FROM elmasodiado ORDER BY votos DESC";
  81.         $result = mysql_query($sql);
  82.      
  83.         //Siempre verifica que se hayan obtenido datos en la consulta
  84.         if (mysql_num_rows($result)) {
  85.             while($fila = mysql_fetch_array($result)) {
  86.                 $numero = 0;
  87.                 echo "<tr>";
  88.                 echo "  <td align=left>".$fila['nombre']."</td>";
  89.                 echo "  <td align=center>".$fila['votos']."</td>";
  90.                 echo "</tr>";
  91.                 $numero++;
  92.             }
  93.         }
  94.         else
  95.             echo "No se encontraron datos en la consulta";
  96.     }
  97.      
  98. ?>
__________________
No te olvides de dar +1 a quien te echa un cable ;)

Última edición por rodrypaladin; 17/01/2014 a las 07:43
  #13 (permalink)  
Antiguo 17/01/2014, 07:45
Avatar de alexisverano  
Fecha de Ingreso: septiembre-2008
Ubicación: La Habana.Cuba
Mensajes: 298
Antigüedad: 15 años, 6 meses
Puntos: 36
Respuesta: Buscar en BD y mostrar esa fila

Esto es muy sencillo, deberas crear una tabla para los comentarios que estara relacionada con la tabla que almacenas el nombre de los personajes y los votos, y aqui como te dije anteriormente entrara a funcionar el identificador unico (id) que sera por el cual estableceras la relacion entre ellas y despues es solo mostrar los comentarios que estan asociados a un personaje.
  #14 (permalink)  
Antiguo 17/01/2014, 08:01
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 13 años, 11 meses
Puntos: 468
Respuesta: Buscar en BD y mostrar esa fila

lo que intentaba realizar con el código que he puesto es que a la vez que se vota, se añada a la tabla "razones" el nombre y el texto de la razón. y luego en una página solo tendría que mostrar los comentarios que tengan el nombre del personaje" pero no funciona directamente echa error en la linea que añade los datos a la tabla
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #15 (permalink)  
Antiguo 17/01/2014, 08:10
Avatar de alexisverano  
Fecha de Ingreso: septiembre-2008
Ubicación: La Habana.Cuba
Mensajes: 298
Antigüedad: 15 años, 6 meses
Puntos: 36
Respuesta: Buscar en BD y mostrar esa fila

Postea el codigo para poder ayudarte.

Lo habilitastes a la URL anterior: http://www.rodrys.com/elmasodiado/
  #16 (permalink)  
Antiguo 17/01/2014, 08:16
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 13 años, 11 meses
Puntos: 468
Respuesta: Buscar en BD y mostrar esa fila

ahí va:
Código PHP:
Ver original
  1. <?php
  2.     $conexion = mysql_connect("XXX.XXX.XXX.X" , "XXX.XXX" , "XXX.XXX.XX");
  3.     mysql_select_db("elmasodiado",$conexion);
  4.     mysql_query($sql);
  5.      
  6.     ?>
  7.      
  8.      
  9.     <div align="center">
  10.     <IMG SRC="logoprov.png" Align="center"><br>
  11.     Escribe el nombre del personaje publico que MAS ODIAS<br>
  12.     si este no esta en nuestro ranking se añadira<br>
  13.     pero si ya esta se le sumara el voto<br>
  14.     <br>
  15.     <form align="center" action="index.php" method="post">
  16.     <input type="text" size="50" name="votar" placeholder="A quien odias mas" /> <br>
  17.     <textarea name="mensaje" rows="10" cols="40" placeholder="La razon de tu voto"></textarea> <br>
  18.     <input type="submit" value="Vota"/>
  19.     </form>
  20.     <br>
  21.      
  22.     <?php
  23.         if ($_POST["votar"]) {
  24.                 $dato = mysql_real_escape_string(strip_tags($_POST["votar"]));
  25.                 $dato2 = mysql_real_escape_string(strip_tags($_POST["mensaje"]));
  26.                
  27.             $sql = mysql_query("SELECT * FROM elmasodiado WHERE nombre = '".$_POST['votar']."' ");
  28.             $sql = mysql_query("INSERT INTO razones (id, nombre, texto) VALUES ('','".$_POST['votar']"','".$_POST["mensaje"]"')");
  29.             $row = mysql_fetch_assoc($sql);
  30.          
  31.             if ($row['nombre']==""){
  32.                mysql_query("INSERT INTO elmasodiado (nombre, votos) VALUES ('".$_POST['votar']."','1')");
  33.             }else{
  34.               $votoactual = $row['votos']+1;
  35.               mysql_query("UPDATE elmasodiado SET votos='$votoactual' WHERE nombre = '".$_POST['votar']."' ");
  36.             }
  37.                
  38.                 echo '</h2>Has votado a <b>'. $_POST['votar'] . ' </b>como tu personaje MAS ODIADO</h2>';
  39.             }
  40.     ?>
  41.      
  42.     <div align="center">
  43.     <IMG SRC="ranking.jpg" Align="center"><br>
  44.     <br>
  45.     <div align="center">
  46.     <form align="center" action="index.php" method="post">
  47.     <input type="text" size="30" name="buscar" placeholder="Busca un personaje" /> <input type="submit" value="Buscar"/>
  48.     </form>
  49.     <br>
  50.     <div align="center">
  51.      
  52.      
  53.      
  54.     <table class=borde  align="center">
  55.     <tr class="cabecera">
  56.       <td  align=left>Nombre</td>
  57.       <td  align=center>Votos</td>
  58.     </tr>
  59.     <?php
  60.      
  61.         if ($_POST["buscar"]) {
  62.                     $dato = mysql_real_escape_string(strip_tags($_POST["buscar"])); // si hemos recogido un dato del formulario _POST
  63.                 $consulta = ("SELECT * FROM elmasodiado WHERE nombre LIKE '%".$_POST["buscar"]."%' ORDER BY votos DESC"); // buscamos la consulta
  64.                     $result = mysql_query($consulta);
  65.          
  66.             //Siempre verifica que se hayan obtenido datos en la consulta
  67.             if (mysql_num_rows($result)) {
  68.                 while($fila = mysql_fetch_array($result)) {
  69.                     $numero = 0;
  70.                     echo "<tr>";
  71.                     echo "  <td align=left>" . $fila['nombre'] . "</td>";
  72.                     echo "  <td align=center>" . $fila['votos'] . "</td>";
  73.                     echo "</tr>";
  74.                     $numero++;
  75.                 }
  76.             }
  77.             else
  78.                 echo "No se encontraron datos en la consulta";
  79.         }
  80.         else {
  81.             $sql= "SELECT * FROM elmasodiado ORDER BY votos DESC";
  82.             $result = mysql_query($sql);
  83.          
  84.             //Siempre verifica que se hayan obtenido datos en la consulta
  85.             if (mysql_num_rows($result)) {
  86.                 while($fila = mysql_fetch_array($result)) {
  87.                     $numero = 0;
  88.                     echo "<tr>";
  89.                     echo "  <td align=left>".$fila['nombre']."</td>";
  90.                     echo "  <td align=center>".$fila['votos']."</td>";
  91.                     echo "</tr>";
  92.                     $numero++;
  93.                 }
  94.             }
  95.             else
  96.                 echo "No se encontraron datos en la consulta";
  97.         }
  98.          
  99.     mysql_free_result($result);
  100.     ?>
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #17 (permalink)  
Antiguo 17/01/2014, 08:21
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 13 años, 11 meses
Puntos: 468
Respuesta: Buscar en BD y mostrar esa fila

acabod de darme cuenta que tendría también que añadir el código que genere una nueva página con el código para que muestre en ella todos los comentarios asociados a un nombre.

tendría que hacerlo con esto no es cierto ?

Código PHP:
Ver original
  1. $nuevoarchivo = fopen('pedro.php', "w+");
  2.     fwrite($nuevoarchivo,"<?php echo '<div class=\"capa\"></div>'; ?>");
  3.     fclose($nuevoarchivo);
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #18 (permalink)  
Antiguo 17/01/2014, 09:25
Avatar de alexisverano  
Fecha de Ingreso: septiembre-2008
Ubicación: La Habana.Cuba
Mensajes: 298
Antigüedad: 15 años, 6 meses
Puntos: 36
Respuesta: Buscar en BD y mostrar esa fila

Aqui te mando los arreglos, prueba esto y dime...

Pagina Web:

Código PHP:
Ver original
  1. if ($_POST["votar"]) {
  2.                 $dato = mysql_real_escape_string(strip_tags($_POST["votar"]));
  3.                 //$dato2 = mysql_real_escape_string(strip_tags($_POST["mensaje"]));
  4.                    
  5.                 $sql = mysql_query("SELECT * FROM elmasodiado WHERE nombre = '".$_POST['votar']."' ");
  6.                 //$sql = mysql_query("INSERT INTO razones (id, nombre, texto) VALUES ('','".$_POST['votar']"','".$_POST["mensaje"]"')");
  7.                 $row = mysql_fetch_assoc($sql);
  8.              
  9.                 if ($row['id']==""){
  10.                    mysql_query("INSERT INTO elmasodiado (nombre, votos) VALUES ('".$_POST['votar']."','1')");
  11.            $rsPersonaje = mysql_query("SELECT * FROM elmasodiado ORDER BY id DESC");
  12.            $rowPersonaje = mysql_fetch_assoc($rsPersonaje);
  13.            $idpersonaje = $rowPersonaje['id'];
  14.            mysql_query("INSERT INTO razones (idpersonaje, razones) VALUES ('$idpersonaje','".$_POST['mensaje']."')");
  15.                 }else{
  16.                   $votoactual = $row['votos']+1;
  17.                   mysql_query("UPDATE elmasodiado SET votos='$votoactual' WHERE id = '".$row['id']."' ");
  18.           mysql_query("INSERT INTO razones (idpersonaje, razones) VALUES ('".$row['id']."','".$_POST['mensaje']."')");
  19.                 }
  20.                    
  21.                     echo '</h2>Has votado a <b>'. $_POST['votar'] . ' </b>como tu personaje MAS ODIADO</h2>';
  22.                 }


Tabla razones:
Código PHP:
Ver original
  1. CREATE TABLE IF NOT EXISTS `razones` (
  2.   `id` int(11) NOT NULL AUTO_INCREMENT,
  3.   `idpersonaje` int(11) NOT NULL,
  4.   `razones` varchar(500) NOT NULL,
  5.   PRIMARY KEY (`id`)
  6. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
  #19 (permalink)  
Antiguo 17/01/2014, 09:47
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 13 años, 11 meses
Puntos: 468
Respuesta: Buscar en BD y mostrar esa fila

he añadido a la tabla principal que ya tenia el campo de id con auto-incremento, la vacio y y añado ejemplos de nuevo ?


EDITO: lo he probado y funciona perfectamente, pero en la tabla razones me he fijado que la ponga el personaje que ponga siempre aparece la id = 0 al igual que en los personajes, aunque añada nuevos la id siempre aparece 0 habiendola puesto en auto-incremento, que falla ?
__________________
No te olvides de dar +1 a quien te echa un cable ;)

Última edición por rodrypaladin; 17/01/2014 a las 09:54
  #20 (permalink)  
Antiguo 17/01/2014, 10:11
Avatar de alexisverano  
Fecha de Ingreso: septiembre-2008
Ubicación: La Habana.Cuba
Mensajes: 298
Antigüedad: 15 años, 6 meses
Puntos: 36
Respuesta: Buscar en BD y mostrar esa fila

No deberia darte problemas, pues el campo esta declarado como int(11) NOT NULL AUTO_INCREMENT,

Cada vez que insertes un elemento el incrementara su valor en 1.
  #21 (permalink)  
Antiguo 17/01/2014, 10:25
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 13 años, 11 meses
Puntos: 468
Respuesta: Buscar en BD y mostrar esa fila

Disculpa mi error, la id de la tabla nueva "razones" si que sube la id. lo que no sube la id, es la idpersonaje, al no subir la del personaje se ve que no sube esta tampoco, voy a resivarla

EDITO: Efectivamente funciona a la perfección fué error mio que no puse el auto-incremento en la id del personaje.

Veré si me aclaro para que al crear un nuevo personaje en la bd se cree también un archivo php con el código para que muestre los comentarios, y a su vez tenga un link en el ranking para acceder a dicha página.
__________________
No te olvides de dar +1 a quien te echa un cable ;)

Última edición por rodrypaladin; 17/01/2014 a las 10:31
  #22 (permalink)  
Antiguo 17/01/2014, 10:38
Avatar de alexisverano  
Fecha de Ingreso: septiembre-2008
Ubicación: La Habana.Cuba
Mensajes: 298
Antigüedad: 15 años, 6 meses
Puntos: 36
Respuesta: Buscar en BD y mostrar esa fila

Lo que puedes hacer es crear un enlace a una pagina desde el nombre de los personajes, que haga la llamada a otra pagina y que esta filtre los comentarios, contra el id del personaje.

Saludos y suerte...
  #23 (permalink)  
Antiguo 17/01/2014, 11:10
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 13 años, 11 meses
Puntos: 468
Respuesta: Buscar en BD y mostrar esa fila

Claro pero yo no se que personajes van a hacer, si no que la página tiene que generarse sola con el código que muestra los comentarios una vez se cree el personaje.

Y en el ranking el nombre de los personajes tendrá como dices un enlace a dicha página
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #24 (permalink)  
Antiguo 17/01/2014, 11:20
Avatar de alexisverano  
Fecha de Ingreso: septiembre-2008
Ubicación: La Habana.Cuba
Mensajes: 298
Antigüedad: 15 años, 6 meses
Puntos: 36
Respuesta: Buscar en BD y mostrar esa fila

Cita:
Iniciado por rodrypaladin Ver Mensaje
Claro pero yo no se que personajes van a hacer
Esto esta claro.

Cita:
Iniciado por rodrypaladin Ver Mensaje
... si no que la página tiene que generarse sola con el código que muestra los comentarios una vez se cree el personaje.
Esto esta claro tambien, pero lo que tu programas es UNA SOLA pagina para todos personajes, y dicha pagina solo mostrara el personaje y sus comentarios, dependiendo del valor (id) que le pases en el link, que te propuse que fuera encima del nombre del personaje, esto lo puedes hacer por POST o por GET como mas te guste.
  #25 (permalink)  
Antiguo 17/01/2014, 11:31
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 13 años, 11 meses
Puntos: 468
Respuesta: Buscar en BD y mostrar esa fila

vaya, no lo había pensado como tu dices, es mucho mejor. veré si me aclaro al hacerlo y te digo!!. Mil gracias!!
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #26 (permalink)  
Antiguo 17/01/2014, 14:09
Avatar de alexisverano  
Fecha de Ingreso: septiembre-2008
Ubicación: La Habana.Cuba
Mensajes: 298
Antigüedad: 15 años, 6 meses
Puntos: 36
Respuesta: Buscar en BD y mostrar esa fila

en la pagina index.php - Modifica estos valores

Código PHP:
Ver original
  1. else {
  2.                 $result = mysql_query("SELECT * FROM elmasodiado ORDER BY votos DESC");
  3.                 //Siempre verifica que se hayan obtenido datos en la consulta
  4.                 if (mysql_num_rows($result)) {
  5.                     while($fila = mysql_fetch_array($result)) {
  6.                         $idperson = $fila['id'];
  7.                         $numero = 0;
  8.                         echo "<tr>";
  9.                         echo "  <td align=left><a href='razones.php?id=".$idperson."'>".$fila['nombre']."</a></td>";
  10.                         echo "  <td align=center>".$fila['votos']."</td>";
  11.                         echo "</tr>";
  12.                         $numero++;
  13.                     }
  14.                 }
  15.                 else
  16.                     echo "No se encontraron datos en la consulta";
  17.             }
  18.              
  19.         mysql_free_result($result);

Crea una pagina razones.php
Código PHP:
Ver original
  1. $conexion = mysql_connect("localhost" , "root" , "xxx");
  2.    mysql_select_db("odio",$conexion);
  3.    mysql_query($sql);
  4.  
  5.     $sqlp = mysql_query(" SELECT * FROM elmasodiado WHERE id = '".$_GET['id']."' ");
  6.     $rowp = mysql_fetch_assoc($sqlp);
  7.     echo "Nombre del personaje: " .$rowp['nombre'];
  8.     echo '<br>'.'<br>';
  9.     echo "Razones:".'<br>';
  10.    
  11.     $sqlr = mysql_query(" SELECT * FROM razones WHERE idpersonaje = '".$_GET['id']."' ");
  12.     while ($rowr = mysql_fetch_assoc($sqlr)){
  13.       echo "- " .$rowr['razones'] .'<br>';
  14.     }
  #27 (permalink)  
Antiguo 17/01/2014, 15:00
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 13 años, 11 meses
Puntos: 468
Respuesta: Buscar en BD y mostrar esa fila

Mil gracias de nuevo, por cierto.. como soluciono el tema de las ñ y los acentos ?? nunca me los muestra bien poniendo el cotejamiento utf8 spain
__________________
No te olvides de dar +1 a quien te echa un cable ;)

Etiquetas: bd, fila, html, mysql, select, sql, 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 17:40.