Autor Tema: auto populate selectbox  (Leído 2774 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado moyo18

  • The Communiter-
  • *
  • Mensajes: 1719
auto populate selectbox
« : marzo 22, 2011, 09:01:12 am »
hey estoy teniendo problemas con ajax, json y mi php para hacer eso d auto populate. no se si mi json esta mal escrito , esto es mas o menos lo q kiero hacer

el user elige en la primer select el nombre del usuario q kiere y en la segunda mostrara el resultado de las paginas q tiene ese user.

esta asi

cuando el user elije el primero tngo un onchange para q envie el request con ajax a un php q hara el query en la db, este tiene q regresar un todos los datos en json al la pagina para ahcer crear el otro selectbox.


mas o menos asi

http://remysharp.com/wp-content/uploads/2007/01/select.html

este es el ajax q tengo

Código: [Seleccionar]

$.ajax({ 
            type: "POST", 
  url: "getUserPages.php", 
  data: "userId="+userId ,
  //dataType : "JSON",
success: function(data){

eval(data);
alert(data);
   
for(var i=0; i<data.length; i++){
var opt3 = document.createElement("option");
         // Add an Option object to Drop Down/List Box
      document.getElementById("pageId").options.add(opt3);
        // Assign text and value to Option object
        opt3.text = data[i].fileName;
        opt3.value = data[i].pageId;
 
}

var opt4 = document.createElement("option");
// Add an Option object to Drop Down/List Box
      document.getElementById("pageId").options.add(opt4);
      // Assign text and value to Option object
        opt4.text = "Create New Page";
        opt4.name = "createPage";




}
             
  });


este es el php

Código: [Seleccionar]
try {
$dbh = new PDO('mysql:host='.$hostName.';dbname='.$dbName.'', $userNameDB, $passwordDB);
 
//getting all Pages
$select = $dbh -> prepare('SELECT * FROM tbl WHERE userId=?');
  $select -> bindParam(1, $userId);
  $select -> execute();  
  $result = $select->fetchAll(PDO::FETCH_ASSOC);
  $displayAllPages = $result;
 
  $select = null;     



$dbh = null;
 
}catch (PDOException $e) {
echo "Error!: " . $e->getMessage() . "<br/>";
}

$json = array();

for($i=0 ; $i < count($displayAllPages); $i++){

$json[$i] = '{ "pageId":'.$displayAllPages[$i]['pageId'].' , "fileName":"'.$displayAllPages[$i]['fileName'].'"  }';
 

}

$json = json_encode($json);
print_r($json);



el json tiene q regresar unas 4 a 5 paginas minimo. regresaria el id d cada una y el nombre

Desconectado chester08

  • Sv Member
  • ***
  • Mensajes: 400
  • ahora tengo otro motivo para no dormir... thnks
    • My Web site
Re: auto populate selectbox
« Respuesta #1 : marzo 22, 2011, 10:47:11 am »
Y en si  q error te da...? o solo , No te aparece nada.

otra duda ¿Cuando o en q momento le envias el userId a la pagina de PHP? , porque yo no veo  cuando se lo envias
osea la pagina PHP lo recibe por POST, pero no veo en ninguna parte q hagas el
Código: [Seleccionar]
$_POST["userId"]o es  q lo haces de otra forma ???


------------------- Ch3st3r08-----------------------

Desconectado rdoggsv

  • Administrator
  • The Communiter-
  • *
  • Mensajes: 6530
  • "Once you go arch , u never go back"
    • SV CommunitY
Re: auto populate selectbox
« Respuesta #2 : marzo 22, 2011, 11:05:36 am »
Ya probaste el php manualmente para ver si el php por si solo esta funcionando ? y manda el json exactamente como debería de ser ?

Desconectado moyo18

  • The Communiter-
  • *
  • Mensajes: 1719
Re: auto populate selectbox
« Respuesta #3 : marzo 22, 2011, 11:29:18 am »
mas o menos esta asi la cosa , y tengo algo avanzado el script.

lo q hace el query es me regresa un array con los valores pageid y filename, ahora el problema esta q cuando paso el json al js no me lo reconocia, ahora ya me lo reconoce. aki esta mas o menos como lo llevo

Código: [Seleccionar]


$json = array("pageId" , "fileName");


for($i=0 ; $i < count($displayAllPages); $i++){

$pageId = $displayAllPages[$i]['pageId'];
$fileName = $displayAllPages[$i]['fileName'];


$json = array_fill_keys($json, $pageId , $fileName);


}




$json = '{ "page":'.json_encode($json).'}';


echo $json;



ahora mi problema es q como por usuario q elijo son minimo 5 paginas, entonces no puede usar push array para agregar al array cada pagina q es encontrada, estoy buscando algo asi

http://www.php.net/manual/en/function.array-fill-keys.php

para terminar con un json misilar a este

{ "pages" : page ["pageId": "id" , "fileName" : "name" ], etc (hasta q ya no hallan mas paginas }


para cuando este en js en la otra web pueda accesar d esta form

data.page.fileName

ahorita solo puedo accesar una pagina q seria la ultima del array pero estoy modificando para accesar todas las paginas.

es un array adentro d otro array ....

page [ pages [ infopages[], [] , [] ,etc ] ]
« Última Modificación: marzo 22, 2011, 12:03:58 pm por moyo18 »

Desconectado moyo18

  • The Communiter-
  • *
  • Mensajes: 1719
Re: auto populate selectbox
« Respuesta #4 : marzo 22, 2011, 12:28:39 pm »
despues d horas lol logre resolverlo..... otro momento les pongo la solucion, a mas d alguno le puede interesar.

Desconectado moyo18

  • The Communiter-
  • *
  • Mensajes: 1719
Re: auto populate selectbox
« Respuesta #5 : marzo 23, 2011, 07:56:08 am »
hola senores disculpar la tardanza, aki esta la solucion a mi problema

primero keria un javascript q creara el segundo selectbox usando los datos q provenian del php.

Código: [Seleccionar]

function getclientPages(){
userId = document.getElementById('userId').value;

document.getElementById('pageId').innerHTML = '';

$.ajax({ 
            type: "POST", 
  url: "getUserPages.php", 
  data: "userId="+userId ,
success: function(data){

var data = eval('(' + data + ')');

       
        if(data.pages.length > 0){
       
        var opt1 = document.createElement("optgroup");
        opt1.label = "Pages";

for(var i=0; i< data.pages.length; i++){
  var opt2 = document.createElement("option");
  opt2.value = data.pages[i].pageId;
  opt2.appendChild(document.createTextNode(data.pages[i].fileName));
  opt1.appendChild(opt2);
 
}

var opt3 = document.createElement("optgroup");
        opt3.label = "-------------";

var opt4 = document.createElement("option");
        opt4.name = "createPage";
        opt4.value = "createPage";
        opt4.appendChild(document.createTextNode("Create New Page"));
  opt3.appendChild(opt4);


  opt2.selected = true;

 
  var selectMenu = document.getElementById("pageId");
  while (selectMenu.hasChildNodes()) {
    selectMenu.removeChild(selectMenu.firstChild);
  }
 
  if (opt1.hasChildNodes()){
  selectMenu.appendChild(opt1);
  }
 
  if (opt3.hasChildNodes()) {
  selectMenu.appendChild(opt3);
  }
 
    }else{
   
   

  var opt3 = document.createElement("optgroup");
        opt3.label = "-------------";
       
        var opt4 = document.createElement("option");
        opt4.name = "createPage";
        opt4.value = "createPage";
        opt4.appendChild(document.createTextNode("Create New Page"));
  opt3.appendChild(opt4);

var opt5 = document.createElement("option");
        opt5.appendChild(document.createTextNode(""));
  opt3.appendChild(opt5);


         
        opt5.selected = true;

 
  var selectMenu = document.getElementById("pageId");
  while (selectMenu.hasChildNodes()) {
    selectMenu.removeChild(selectMenu.firstChild);
  }
 
  if (opt3.hasChildNodes()) {
  selectMenu.appendChild(opt3);
  }
 

}
}
             
  });



despues el php

Código: [Seleccionar]
try {
$dbh = new PDO('mysql:host='.$hostName.';dbname='.$dbName.'', $userNameDB, $passwordDB);
 
//getting all Pages
$select = $dbh -> prepare('SELECT pageId, fileName FROM tbl_pages WHERE userId=?');
  $select -> bindParam(1, $userId);
  $select -> execute();  
  $result = $select->fetchAll(PDO::FETCH_ASSOC);
  $displayAllPages = $result;
 
  $select = null;     



$dbh = null;
 
}catch (PDOException $e) {
echo "Error!: " . $e->getMessage() . "<br/>";
}


$json = array();

for($i=0 ; $i < count($displayAllPages); $i++){

$pageId = $displayAllPages[$i]['pageId'];
$fileName = $displayAllPages[$i]['fileName'];


$json[] = array("pageId" => $pageId , "fileName" => $fileName);

}

$json = '{ "pages":'.json_encode($json).'}';

echo $json;



para q entiendan un poco, primero hago un query y elijo todo los usuarios q estan en la base d datos, creo un selectbox con los resultados. de ahi cuando el usuario elije el usuario q kiere ver hago un onchance que llama el js q esta arriba. ese js llama al php para regresar un json con todas las paginas q tiene ese usuario y crea un nuevo selectbox. luego sigo on mi codigo q es crear la pagina para el usuario o mostrar la pagina q le muestra.