Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Problema al trabajar con zend framework

Estas en el tema de Problema al trabajar con zend framework en el foro de Frameworks JS en Foros del Web. Hola amigos nuevamente molestandolos ya que anteriormente puse un post para saber como podria jalar o desplegar datos de una BD solo, al momento que ...
  #1 (permalink)  
Antiguo 21/08/2009, 11:39
 
Fecha de Ingreso: septiembre-2003
Mensajes: 182
Antigüedad: 20 años, 8 meses
Puntos: 1
Pregunta Problema al trabajar con zend framework

Hola amigos nuevamente molestandolos ya que anteriormente puse un post para saber como podria jalar o desplegar datos de una BD solo, al momento que yo escribiera la clave en una caja de texto, obviamente me mandaron un pos de ejemplo donde trae un tutorial para trabajar con Zend Framework, bueno corriendo el ejmplo y siguiendo los pasos puse lo siguiente obviamente solo cambia la ruta de mi path:

Para empezar cree la base de datos como se muestra:

Código SQL:
Ver originalCopiar
CREATE TABLE IF NOT EXISTS `usuario` (
`usuario_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`nombre` varchar(30) NOT NULL,
`telefono` varchar(10) NOT NULL,
`color_favorito` varchar(20) NOT NULL,
`pizza` tinyint(4) NOT NULL,
PRIMARY KEY (`usuario_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

INSERT INTO `usuario` (`usuario_id`, `nombre`, `telefono`, `color_favorito`, `pizza`) VALUES
(1, 'Fulanito', '123456', 'Verde', 1),
(2, 'Sutanito', '654321', 'Azul', 0);

Posteriormente segui con los pasos de crear el codigo para llamar todo lo correspondiente con Zend Framework

<?php
// Establecemos el Path a las librerias de Zend Framework
//set_include_path(get_include_path(). PATH_SEPARATOR . 'C:\WebRoot\Zend\ZendFramework-1.9.1\library');
set_include_path(get_include_path(). PATH_SEPARATOR . 'C:\AppServ\www\ZendFramework-1.9.1\library');

// Registramos el Autoloader para evitar cargar todas las clases manualmente
//require 'Zend/Loader/Autoloader.php';
require 'C:\AppServ\www\ZendFramework-1.9.1\library\Zend\Loader\Autoloader.php';
$autoloader = Zend_Loader_Autoloader::getInstance();

// Establecemos los datos de conexion
$dbSettings = array(
'host' => 'localhost',
'username' => 'root',
'password' => '9610',
'dbname' => 'usuario'
);

// Creamos una instancia de Zend_Db_Adapter_*
$db = Zend_Db::factory('Pdo_Mysql', $dbSettings);

// Preparamos un array para la respuesta
$response = array();

// Obtenemos el ID de usuario desde POST
$UsuarioID = (int) $_POST['usuario_id'];

// Comprobamos que hayan datos
if ($UsuarioID <= 0) {
$response['error'] = 'El parámetro UsuarioID es incorrecto';
}

// Generamos el Select y extraemos los datos
$select = $db->select();
$select->from('usuario', '*')->where('usuario_id=?', $UsuarioID);
$db->setFetchMode(Zend_Db::FETCH_ASSOC);
$userData = $db->fetchRow($select);

// Si fue encontrado agregamos los datos si no mostramos un error
if ($userData === false) {
$response['error'] = 'El usuario no fue encontrado';
} else {
$response['data'] = $userData;
$response['error'] = 'ok';
}
// Enviamos la respuesta de regreso al script
header('Content-type: text/plain');
echo json_encode($response);

?>

Código HTML:
Ver originalCopiar
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js" type="text/javascript"></script>
<script type="text/javascript">
function getData() {
resetData(true);
var usuario_id = parseInt($('#usuario_id').val());
if (usuario_id > 0) {
$.post('get_data.php', {usuario_id: usuario_id}, function (response) {
if (response.error != 'ok') {
alert(response.error);
} else {
var record = response.data;
$('#nombre').val(record.nombre);
$('#telefono').val(record.telefono);
$('#color_favorito').val(record.color_favorito);
if (record.pizza == "1") {
$('#pizza')[0].checked = true;
}
}
}, 'json');
} else {
alert('#Por favor pon un numero mayor a 0');
}
}

function resetData(keepUser) {
if(keepUser != true) {
$('#usuario_id').val('');
}
$('#nombre').val('');
$('#telefono').val('');
$('#color_favorito').val('');
$('#pizza')[0].checked = false;
}
</script>
<title>Ejemplo de JQuery con JSON/Zend Framework</title>
</head>
<body>
<form action="file.php" method="post">
<table>
<tr>
<td>ID de Usuario:</td>
<td>
<input type="text" name="usuario_id" id="usuario_id" value="" />
<input type="button" name="get_data" value="Obtener Datos" onclick="getData();"></td>
</tr>
<tr>
<td>Nombre:</td>
<td><input type="text" name="nombre" id="nombre" value="" /></td>
</tr>
<tr>
<td>Telefono:</td>
<td><input type="text" name="telefono" id="telefono" value="" /></td>
</tr>
<tr>
<td>Color favorito:</td>
<td>
<select name="color_favorito" id="color_favorito">
<option value="">- Select -</option>
<option value="Verde">Verde</option>
<option value="Rojo">Rojo</option>
<option value="Azul">Azul</option>
</select>
</td>
</tr>
<tr>
<td>Te gusta la Pizza?</td>
<td><input type="checkbox" value="1" name="pizza" id="pizza" /></td>
</tr>
<tr>
<td colspan="2">
<input type="button" name="guardar" value="Guardar" onclick="" />
<input type="button" name="borrar" value="Limpiar" onclick="resetData(false);" />
</td>
</tr>
</table>
</form>
</body>
</html>

Aquí la parte interesante es el tratar los datos de regreso con JSON, esto se hace en el callback que pasamos a $.post, que es esta parte:

Código Javascript:
Ver originalCopiar
$.post('get_data.php', {usuario_id: usuario_id}, function (response) {
if (response.error != 'ok') {
alert(response.error);
} else {
var record = response.data;
$('#nombre').val(record.nombre);
$('#telefono').val(record.telefono);
$('#color_favorito').val(record.color_favorito);
if (record.pizza == "1") {
$('#pizza')[0].checked = true;
}
}
}, 'json');

El problema es que de entrada me manda el siguiente error;
Fatal error: Uncaught exception 'Zend_Db_Adapter_Exception' with message 'The mysql driver is not currently installed' in C:\AppServ\www\ZendFramework-1.9.1\library\Zend\Db\Adapter\Pdo\Abstract.php:112 Stack trace: #0 C:\AppServ\www\ZendFramework-1.9.1\library\Zend\Db\Adapter\Pdo\Mysql.php(96): Zend_Db_Adapter_Pdo_Abstract->_connect() #1 C:\AppServ\www\ZendFramework-1.9.1\library\Zend\Db\Adapter\Abstract.php(832): Zend_Db_Adapter_Pdo_Mysql->_connect() #2 C:\AppServ\www\ZendFramework-1.9.1\library\Zend\Db\Adapter\Abstract.php(902): Zend_Db_Adapter_Abstract->quote(0, NULL) #3 C:\AppServ\www\ZendFramework-1.9.1\library\Zend\Db\Select.php(930): Zend_Db_Adapter_Abstract->quoteInto('usuario_id=?', 0, NULL) #4 C:\AppServ\www\ZendFramework-1.9.1\library\Zend\Db\Select.php(463): Zend_Db_Select->_where('usuario_id=?', 0, NULL, true) #5 C:\AppServ\www\pruebas\prueba2.php(41): Zend_Db_Select->where('usuario_id=?', 0) #6 {main} thrown in C:\AppServ\www\ZendFramework-1.9.1\library\Zend\Db\Adapter\Pdo\Abstract.php on line 112

Quisiera saber si necesito instalar una libreria extra como la de JSON o si mando llamar erroneamente la libreria de zend framewrok o que hacer espero alguien me pueda orientar o porque me da ese error y no se que estoy haciendo mal.
  #2 (permalink)  
Antiguo 22/08/2009, 22:13
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Problema al trabajar con zend framework

Si te fijas el error que te da es que no tienes la libreria de Pdo_Mysql instalada, verifica en tu php.ini y descomenta las lineas: php_pdo.dll y php_pdomysql.dll

Saludos.
  #3 (permalink)  
Antiguo 25/08/2009, 11:24
 
Fecha de Ingreso: septiembre-2003
Mensajes: 182
Antigüedad: 20 años, 8 meses
Puntos: 1
Respuesta: Problema al trabajar con zend framework

Hola si mira ya verifique mi php.ini y ya descomente la parte de php_pdo.dll pero en el otro dll que me comentas php_pdomysql.dll
no viene en el php.ini
  #4 (permalink)  
Antiguo 25/08/2009, 13:07
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Problema al trabajar con zend framework

Muy raro yo si la tengo: php_pdo_mysql.dll Revisa bien ya que es necesaria, o en su caso, puedes usar mysqli (si lo tienes instalado).

Saludos.
  #5 (permalink)  
Antiguo 26/08/2009, 10:05
 
Fecha de Ingreso: septiembre-2003
Mensajes: 182
Antigüedad: 20 años, 8 meses
Puntos: 1
Respuesta: Problema al trabajar con zend framework

Hola GatorV fijate que ya pude instalar este driver pero ahora me manda el siguiente error y quisiera saber por que lo manda es que estoy haciendo mal

Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\pruebas\index.php:6) in C:\AppServ\www\pruebas\index.php on line 88
{"error":"El usuario no fue encontrado"}

Te dejo todo el codigo para ver si puedes orientar un poco de antemano te agradezco toda tu ayuda que me has proporcionado.


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script src="http://code.jquery.com/jquery-latest.js" type="text/javascript"></script>
<script type="text/javascript">
function getData() {
resetData(true);
var usuario_id = parseInt($('#usuario_id').val());
if (usuario_id > 0) {
$.post('get_data.php', {usuario_id: usuario_id}, function (response) {
if (response.error != 'ok') {
alert(response.error);
} else {
var record = response.data;
$('#nombre').val(record.nombre);
$('#telefono').val(record.telefono);
$('#color_favorito').val(record.color_favorito);
if (record.pizza == "1") {
$('#pizza')[0].checked = true;
}
}
}, 'json');
} else {
alert('#Por favor pon un numero mayor a 0');
}
}

function resetData(keepUser) {
if(keepUser != true) {
$('#usuario_id').val('');
}
$('#nombre').val('');
$('#telefono').val('');
$('#color_favorito').val('');
$('#pizza')[0].checked = false;
}
</script>

</head>
<?php
// Establecemos el Path a las librerias de Zend Framework
//set_include_path(get_include_path(). PATH_SEPARATOR . 'C:\WebRoot\Zend\ZendFramework-1.9.0\library');
set_include_path(get_include_path(). PATH_SEPARATOR . 'C:\AppServ\www\ZendFramework-1.9.1\library');

// Registramos el Autoloader para evitar cargar todas las clases manualmente
require 'Zend/Loader/Autoloader.php';
$autoloader = Zend_Loader_Autoloader::getInstance();

// Establecemos los datos de conexion
$dbSettings = array(
'host' => 'localhost',
'username' => 'root',
'password' => '9610',
'dbname' => 'innodb'
);

// Creamos una instancia de Zend_Db_Adapter_*
$db = Zend_Db::factory('Pdo_Mysql', $dbSettings);

// Preparamos un array para la respuesta
$response = array();

// Obtenemos el ID de usuario desde POST
$UsuarioID = (int) $_POST['usuario_id'];

// Comprobamos que hayan datos
if ($UsuarioID <= 0) {
$response['error'] = 'El parámetro UsuarioID es incorrecto';
}

//Generamos el Select y extraemos los datos
$select = $db->select();
$select->from('usuario', '*')->where('usuario_id=?', $UsuarioID);
$db->setFetchMode(Zend_Db::FETCH_ASSOC);
$userData = $db->fetchRow($select);

// Si fue encontrado agregamos los datos si no mostramos un error
if ($userData === false) {
$response['error'] = 'El usuario no fue encontrado';
} else {
$response['data'] = $userData;
$response['error'] = 'ok';
}

// Enviamos la respuesta de regreso al script
header('Content-type: text/plain');
echo json_encode($response);

?>
<body>
<form action="file.php" method="post">
<table>
<tr>
<td>ID de Usuario:</td>
<td>
<input type="text" name="usuario_id" id="usuario_id" value="" />
<input type="button" name="get_data" value="Obtener Datos" onclick="getData();"></td>
</tr>
<tr>
<td>Nombre:</td>
<td><input type="text" name="nombre" id="nombre" value="" /></td>
</tr>
<tr>
<td>Telefono:</td>
<td><input type="text" name="telefono" id="telefono" value="" /></td>
</tr>
<tr>
<td>Color favorito:</td>
<td>
<select name="color_favorito" id="color_favorito">
<option value="">- Select -</option>
<option value="Verde">Verde</option>
<option value="Rojo">Rojo</option>
<option value="Azul">Azul</option>
</select>
</td>
</tr>
<tr>
<td>Te gusta la Pizza?</td>
<td><input type="checkbox" value="1" name="pizza" id="pizza" /></td>
</tr>
<tr>
<td colspan="2">
<input type="button" name="guardar" value="Guardar" onclick="" />
<input type="button" name="borrar" value="Limpiar" onclick="resetData(false);" />
</td>
</tr>
</table>
</form>

</body>
</html>
  #6 (permalink)  
Antiguo 26/08/2009, 11:17
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 20 años, 9 meses
Puntos: 105
Respuesta: Problema al trabajar con zend framework

Holas,

Estas enviando creo esta cabecera:

header('Content-type: text/plain');

Despues de que estas enviando HTML, mejor ordenalo quien va primero y luego recien lo haces, el error dice que ya enviastes una cabecera y que ya no puedes enviarlos otra vez.

El codigo PHP ponle al comienzo y depues al final le colocas todo el HTML que sigue

Saludos
Gildus
__________________
.: Gildus :.
  #7 (permalink)  
Antiguo 27/08/2009, 12:03
 
Fecha de Ingreso: septiembre-2003
Mensajes: 182
Antigüedad: 20 años, 8 meses
Puntos: 1
Respuesta: Problema al trabajar con zend framework

Hola amigos nuevamente fijense que ya no tengo problemas de errores de bibliotecas ni de drivers ni de headers ahora el unico detalle es que ya me arroja este error que viene
al momento de que se esta cargando la pagina y se genera desde el scrpit de php:

{"error":"El usuario no fue encontrado"}

entonces al momento de hacer que me mande llamar los datos dando click en el boton de "obtener datos" me hace la bsuqueda pero no me jala ningun dato
verifico el error que me aparece de que cuando una pagina no carga correctamente que envia el explorer y me pone esto:

Linea: 35
Car: 5
Error: Object expected
Código: 0
URL: http://172.18.1.135/pruebas/index.php

aqui pongo nuevamente ya el codigo corregido:

<?php
// Establecemos el Path a las librerias de Zend Framework
//set_include_path(get_include_path(). PATH_SEPARATOR . 'C:\WebRoot\Zend\ZendFramework-1.9.0\library');
set_include_path(get_include_path(). PATH_SEPARATOR . 'C:\AppServ\www\ZendFramework-1.9.1\library');

// Registramos el Autoloader para evitar cargar todas las clases manualmente
require 'Zend/Loader/Autoloader.php';
$autoloader = Zend_Loader_Autoloader::getInstance();

// Establecemos los datos de conexion
$dbSettings = array(
'host' => 'localhost',
'username' => 'root',
'password' => '9610',
'dbname' => 'test'
);

// Creamos una instancia de Zend_Db_Adapter_*
$db = Zend_Db::factory('Pdo_Mysql', $dbSettings);

// Preparamos un array para la respuesta
$response = array();

// Obtenemos el ID de usuario desde POST
$UsuarioID = (int) $_POST['usuario_id'];

// Comprobamos que hayan datos
if ($UsuarioID <= 0) {
$response['error'] = 'El parámetro UsuarioID es incorrecto';
}

//Generamos el Select y extraemos los datos
$select = $db->select();
$select->from('usuario', '*')->where('usuario_id=?', $UsuarioID);
$db->setFetchMode(Zend_Db::FETCH_ASSOC);
$userData = $db->fetchRow($select);

// Si fue encontrado agregamos los datos si no mostramos un error
if ($userData === false) {
$response['error'] = 'El usuario no fue encontrado';
} else {
$response['data'] = $userData;
$response['error'] = 'ok';
}

// Enviamos la respuesta de regreso al script
header('Content-type: text/plain');
echo json_encode($response);
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script src="http://code.jquery.com/jquery-latest.js" type="text/javascript"></script>
<script type="text/javascript">
function getData() {
resetData(true);
var usuario_id = parseInt($('#usuario_id').val());
if (usuario_id > 0) {
$.post('get_data.php', {usuario_id: usuario_id}, function (response) {
if (response.error != 'ok') {
alert(response.error);
} else {
var record = response.data;
$('#nombre').val(record.nombre);
$('#telefono').val(record.telefono);
$('#color_favorito').val(record.color_favorito);
if (record.pizza == "1") {
$('#pizza')[0].checked = true;
}
}
}, 'json');
} else {
alert('#Por favor pon un numero mayor a 0');
}
}

function resetData(keepUser) {
if(keepUser != true) {
$('#usuario_id').val('');
}
$('#nombre').val('');
$('#telefono').val('');
$('#color_favorito').val('');
$('#pizza')[0].checked = false;
}
</script>

</head>
<body>
<form action="file.php" method="post">
<table>
<tr>
<td>ID de Usuario:</td>
<td>
<input type="text" name="usuario_id" id="usuario_id" value="" />
<input type="button" name="get_data" value="Obtener Datos" onclick="getData();"></td>
</tr>
<tr>
<td>Nombre:</td>
<td><input type="text" name="nombre" id="nombre" value="" /></td>
</tr>
<tr>
<td>Telefono:</td>
<td><input type="text" name="telefono" id="telefono" value="" /></td>
</tr>
<tr>
<td>Color favorito:</td>
<td>
<select name="color_favorito" id="color_favorito">
<option value="">- Select -</option>
<option value="Verde">Verde</option>
<option value="Rojo">Rojo</option>
<option value="Azul">Azul</option>
</select> </td>
</tr>
<tr>
<td>Te gusta la Pizza?</td>
<td><input type="checkbox" value="1" name="pizza" id="pizza" /></td>
</tr>
<tr>
<td colspan="2">
<input type="button" name="guardar" value="Guardar" onclick="" />
<input type="button" name="borrar" value="Limpiar" onclick="resetData(false);" /> </td>
</tr>
</table>
</form>

</body>
</html>
  #8 (permalink)  
Antiguo 27/08/2009, 12:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Problema al trabajar con zend framework

Si te dice que el objeto no fue encontrado es por eso, revisa que la base de datos tenga datos, el select se genera aqui:

$select->from('usuario', '*')->where('usuario_id=?', $UsuarioID);

Así que revisa que exista un usuario_id que sea igual al parámetro que envias por POST.

Saludos.
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 03:28.