Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/08/2009, 11:39
crucifijo
 
Fecha de Ingreso: septiembre-2003
Mensajes: 182
Antigüedad: 21 años, 2 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.