
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
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


0