Problemas con la salida de datos en la base de datos usando PHP

Por favor, ayude, estoy llamando a los datos de mi base de datos en una función y quiero mostrárselos al usuario en un formato de tabla. Lo que pretendo lograr es que todos los nombres de mi base de datos se vean así:

John   Peter   James    Steven
Jess   Syndey  Monique  Lynda

pero lo que obtengo es esto:

John   John   John   John
Peter  Peter  Peter  Peter
James  James  James  James
etc    etc    etc    etc

Aquí está mi código:

function public_navigation($sel_subject, $sel_page, $public = true) {
  $output = "<table border=\"1\">";
  $subject_set = get_all_subjects($public);
  $column_count = mysql_num_fields($subject_set);
  while ($subject = mysql_fetch_array($subject_set)) {
    $output .= "<tr>";
    for($column_num = 0; $column_num < $column_count; $column_num++) {
      $output .= "<td><a href=\"index.php?subj=" . urlencode($subject["id"]) . 
                 "\">{$subject["menu_name"]}</a></td>";
    }           
  }
  $output .= "</tr></table>";
  return $output;
}

preguntado el 09 de noviembre de 11 a las 13:11

esto es causado por el bucle for. ¿Qué intentas repetir allí? -

Estoy tratando de mostrar todos los nombres que están en mi base de datos en mi sitio web, por ejemplo. 1 2 3 4 y luego pasar a la siguiente línea 5 6 7 8 pero todo lo que obtengo es 1 1 1 1 y en la siguiente línea 2 2 2 2 y así sucesivamente, ¿qué estoy haciendo mal? -

Agregue más código de ejemplo que muestre lo que tiene en la base de datos y cómo se ve su consulta real. -

Necesitamos ver su consulta real, parece que hay un problema con su get_all_subjects (); función. No creo que devuelva lo que crees que devuelve;) Además, ¿por qué no usar un bucle foreach? -

3 Respuestas

Tratar:

function public_navigation ($sel_subject, $sel_page, $public = true, $column_count = 4) {
  $output = '<table border="1">'; // Start table element
  $subject_set = get_all_subjects($public); // Get data
  for ($i = 1; $subject = mysql_fetch_array($subject_set); $i++) { // Loop data witha counter
    if ($i == 1) {
      // Start of a new row
      $output .= '<tr>';
    }
    // Cell for this record
    $output .= '<td><a href="index.php?subj='.htmlspecialchars(urlencode($subject["id"])).'">'.htmlspecialchars($subject["menu_name"]).'</a></td>';
    if ($i >= $column_count) {
      // End of this row
      $i = 0;
      $output .= '</tr>';
    }
  }
  if ($i > 1 && $i <= $column_count) {
    // Pad with an empty cell if needed
    $colspan = ($column_count + 1) - $i;
    $output .= "<td colspan=\"$colspan\" /></tr>";
  }
  $output .= '</table>'; // End of table
  return $output; // Return output
}

respondido 09 nov., 11:17

wow, esa construcción con el for es inteligente, nunca antes había visto eso, +1 para eso, pero me gustan mis cosas internas con el% mejor - Flo

Oigan, tal vez ustedes puedan ayudarme con otro problema que estoy teniendo, solo soy un principiante con esto y ustedes son profesionales. Publiqué mi problema en este enlace (stackoverflow.com/questions/8064170/…) ¿Podrías ayudarme con esto también? - user1002749

Tiene dos bucles anidados, el while siempre lee una nueva línea y el for lo genera con tanta frecuencia como filas. Abre el

<tr> 

antes de un rato y ciérrelo después de un rato. Entonces establezca

$i=0;

antes de tiempo.

Mientras tanto, haz esto:

if ($i%5 == 0)
{
    echo "</tr><tr>";
}
$i++;

Esto debería hacerlo.

respondido 09 nov., 11:17

Cuando tenga problemas con la consulta de la base de datos, siempre debe publicar la consulta junto con ella. Está bien si disfraza los nombres de los campos y demás, pero es difícil identificar el problema sin más detalles.

Para empezar, parece que está ordenando por nombre, aunque no quiera. Eliminar "ORDER BY [FIELDNAME]" de la consulta debería solucionar este problema.

En segundo lugar, parece que está "agrupando" algo o "uniendo" algo sin filtrar los resultados dobles. Al menos, ese es el problema más común cuando ves las mismas filas aparecer varias veces. Esto se puede solucionar utilizando un "DISTINCT ([FIELDNAME])" en su consulta.

Y, en una nota al margen, ¿por qué está usando get_all_subjects () y mysql_num_fields () en lugar de solo mysql_query ()? De hecho, ni siquiera estoy seguro de qué hace get_all_subjects (), php.net no lo tiene y definitivamente no es una función estándar de php ...

function public_navigation($sel_subject, $sel_page, $public = true) {
  $RowCount = 1;
  $SQL = mysql_query("YOUR QUERY");
  while ($Row = mysql_fetch_array($SQL) {
    $RowHTML = '<td>[CONTENTS OF CELL]</td>'.(($RowCount % 4) ? '</tr><tr>' : '');
    $RowCount++;
    }

 return eregi_replace('<tr></tr>','','<table><tr>'.$output.'</tr></table>');
 }

respondido 09 nov., 11:17

Perdón por esa estupidez de mi parte, gracias por tu tiempo y ayuda, funciona ahora. - user1002749

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.