PHP - Cargar pagina con varios divs desde BD

 
Vista:
sin imagen de perfil

Cargar pagina con varios divs desde BD

Publicado por Eva (9 intervenciones) el 11/11/2014 18:07:29
Hola!

Este tema es para que me ayuden a resolver un problema que tengo en cargar mi Index y como vi uno parecido en este foro de php creo que me van a poder ayudar.

Tengo mi index.php con un div id="contenido" al que le cargo desde la base (mysql) de forma inicial sitios mejores calificados, esto implica un query con join de tablas por lo que termino devolviendo un select con 6 datos por cada sitio, es decir una lista de sitios con 6 datos por mostrar cada uno.

Para eso llamo desde el header a "js/archivo.js" -> donde tengo:
function ()
{
var ini = "uno"; cargarIndex(ini)
}
function nuevoAjax() {
var xmlhttp = false;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest != 'undefined')
{
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}

function cargarIndex(ini)
{
//debugger;
var uno; var capa = document.getElementById("contenido");
var ajax = nuevoAjax();
ajax.open("POST", "http://localhost/.../controllerPHP.php", true);
ajax.setRequestHeader("Content-Type", "application/x-www-form.urlencoded");
ajax.send("d=" + ini);
ajax.onreadystatechange = function () {
if (ajax.readyState == 4) {
if(ajax.responseText != null)
capa.innerHTML = '<div class="contArticIzq"><article id="articPublic1" class="articPublic"><div class="parteSupArtic"><hgroup><a href="detalles_publicacion.php"><h3 class="tituloPublic">'+ajax.responseText[1]+'</h3></a></hgroup><div id="ciudadPublic1"><p class="ciudadPublic">'+ajax.responseText[5]+','+ajax.responseText[4]+'</p></div><img id="imagenPublic1" class="thumb" src="../imagenes/Hotel_Parque_Y_Sol.jpg" alt="Hotel Parque Y Sol"><div id="textoPublic1"><p>'+ajax.responseText[3]+'</p></div></div><div class="parteInfArtic"><div class="califPublic"><img src="../imagenes/5Estrellas.gif"></div></div></article></div>';
}
}
}


. . . hasta ahora lo traigo asi porque estoy probando que en la base solo hay un sitio para mostrar (primero que salga lo simple y despues lo extiendo) por lo que mi php seria
<?php
include("../coneccion.php");
class establecimientoIndex{
public $val1;
public $val2;
public $val3;
public $val4;
public $val5;
public $val6;

function __construct($val1, $val2,$val3,$val4,$val5,$val6) {
$this->val1= $val1;
$this->val2= $val2;
$this->val3= $val3;
$this->val4= $val4;
$this->val5= $val5;
$this->val6= $val6;
}
}

$tipoDato=$_POST['d'];
//switch($tipoDato)
if($tipoDato == 'uno') {
echo obtenerLosMejoresCalificados();
//break; //case 'dos': echo 'no implemetado'; break;
}
function obtenerLosMejoresCalificados(){
$db = conectarbd();
$sql = "SELECT e.idEstableci,e.nombre,e.direccion,e.descripcion,p.descripcion,c.descripcion FROM establecimiento e inner join ciudad c on e.idCiudad = c.id inner join provincia p on c.idProvincia = p.id WHERE calificacion = 5 and e.idEstado = 1 ORDER BY lat LIMIT 1";
$mejores = array();
$result = ejecutarQuery($db, $sql);
while($row = $result->fetch_assoc()){
$data= new establecimientoIndex($row['e.idEstableci'], $row['e.nombre'],$row['e.direccion'],$row['e.descripcion'],$row['p.descripcion'],$row['c.descripcion']); array_push($mejores, $data);
}

cerrarConexion($db,$sql);
echo json_encode($mejores);
}
?>

Esto me devuelve todo undefined para cada campo y no se si es por la forma de consulta que estoy haciendo ya que el select traeria todos los registros que cumplan con la condicion y yo en el ajax.responseText los trato como si fueran valores planos de un array simple (no se si me explico bien! o si es otra cosa), lo estuve revisando y cambiando ajax.responseText[x][y] pero claramente eso no es y no encuentro la solucion. Tal vez sepan una mejor forma de hacerlo y de paso resolver cuando tenga mas datos en la base. Ademas es la primera vez que empiezo con POO en php y con ajax crei que seria mas facil..

Espero puedan ayudarme
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Cargar pagina con varios divs desde BD

Publicado por Ismael (41 intervenciones) el 11/11/2014 23:56:26
Hola,
le he respondido en el otro post, pero la respuesta mia es corta.

En la consulta SQL en el SELECT intenta hacer alias a unas tablas pero le falta indicarlo con AS, por ejemplo:
ha puesto "FROM establecimiento e" en vez de "FROM establecimiento AS e" y así con todas las demás.

A simple vista es lo que he visto, no se si sería eso.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Cargar pagina con varios divs desde BD

Publicado por Ismael (41 intervenciones) el 12/11/2014 22:37:03
Hola,
efectivamente como decías el responseText devuelve en texto plano todo, otra solución a lo que necesitas en el responseText, es que todo lo que estas metiendo en el innerHTML, ya sea código html o texto, lo montes todo en el PHP que ahí si podras controlar donde quieres poner las variables de PHP y luego lo recoges con el responseText y lo metes ahora sí en el innerHTML.
No se si me explico.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Cargar pagina con varios divs desde BD

Publicado por Eva (9 intervenciones) el 13/11/2014 17:25:50
Hola Ismael

En teoria asi, mas o menos me doy idea de lo que me sugeris pero no se me ocurre como llevarlo a codigo..
un ejemplo de como seria podrias mostrarme si no es muca molestia???
Porque justamente ese es mi problema..no se me ocurre como ver los errores o datos de otra manera!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Cargar pagina con varios divs desde BD

Publicado por Eva (9 intervenciones) el 13/11/2014 17:27:07
Si, gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Cargar pagina con varios divs desde BD

Publicado por Ismael (41 intervenciones) el 13/11/2014 18:29:16
Entonces ya bien?

por si acaso, me refería a que montaras el codigo que has hecho en el innerHTML, montarlo por ejemplo en el echo de respuesta en el PHP.

1
2
3
4
5
6
echo"<div class='contArticIzq'><article id='articPublic1' class='articPublic'><div class='parteSupArtic'><hgroup>
<a href='detalles_publicacion.php'><h3 class='tituloPublic'>$variable1</h3></a></hgroup><div id='ciudadPublic1'>
<p class='ciudadPublic'>$variable2,$variable3</p></div>
<img id='imagenPublic1' class='thumb' src='../imagenes/Hotel_Parque_Y_Sol.jpg' alt='Hotel Parque Y Sol'>
<div id='textoPublic1'><p>$variable4</p></div></div><div class='parteInfArtic'><div class='califPublic'>
<img src='../imagenes/5Estrellas.gif'></div></div></article></div>';";

Aunque si trabajas con MVC te cargas un poco la teoria....

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Cargar pagina con varios divs desde BD

Publicado por Eva (9 intervenciones) el 13/11/2014 18:56:07
Ah...aja
ahora lo veo. Y ahi si podria recorrer los resultados con un for..no?
en estos momentos no lo puedo probar pero me gustaria saber si es asi que podré mostrar cuando sean mas de un resultado...y lo de MVC todavia lo estoy viendo porque me esta generando problemas..de todos modos si saben de algun sitio o foro donde me ayuden con eso agradezco!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Cargar pagina con varios divs desde BD

Publicado por Eva (9 intervenciones) el 14/11/2014 16:32:29
Sigo sin poder resolverlo..de todos modos gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Cargar pagina con varios divs desde BD

Publicado por Ismael (41 intervenciones) el 14/11/2014 22:42:20
Hola Eva, perdona,
no me había fijado que estabas retornando un Json, con razón intentabas recoger los datos con el responseText[0], etc...
para recoger el Json y tratarlo necesitas hacer algo, ya que devuelve una cadena Json y tienes que "armarla de nuevo"

en el

1
2
3
4
5
6
7
8
ajax.onreadystatechange = function () {
 if (ajax.readyState == 4) {
  var data = JSON.decode(responseText);
  for(var key in responseText) {
   //acciones a realizar
  }
 }
}

por otro lado si no está segura de la consulta si devuelve algún resultado o para comprobar que la consulta la estás haciendo bien, si tienes el PHPMyAdmin, puedes escribir la consulta y ver si hay errores o si no devuelve nada.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Cargar pagina con varios divs desde BD

Publicado por Eva (9 intervenciones) el 17/11/2014 13:30:24
Hola si!!
Mi problema es y fue ese: no saber tratar el resultado del json y pasarlo al html/php.
Con
for(var key in responseText) {
//acciones a realizar
}
obtendria cada conjunto de datos?

con la linea var data = JSON.decode(responseText);

no le estoy pasando el resultado a data?

Puedo poner el capa.innerhtml dentro del for?

Pregunto porque tengo hasta unas horas para poder probarlo y quiero despejar dudas je
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar