Post by pablich » Tue Apr 08, 2014 1:24 am

Hola gente, estoy haciendo una caja de búsqueda que se autocompleta.

El problema es que si uso este codigo, me funciona al perfeccion:

Code: Select all

$dblink = mysql_connect('192.168.x.x', 'opencart', 'opencart') or die( mysql_error() );
mysql_select_db('opencart');
 
$rs = mysql_query('select descripcion from transporte where descripcion like "'. mysql_real_escape_string($_REQUEST['term']) .'%" order by descripcion asc', $dblink);
// loop
$data = array();
if ( $rs && mysql_num_rows($rs) )
{
   while( $row = mysql_fetch_array($rs, MYSQL_ASSOC) )
   {
      $data[] = array('value' => $row['descripcion']);
   }
}
 
// jQuery wants JSON data
echo json_encode($data);
flush();
Pero si trato de hacerlo con este, no me funciona:

Code: Select all

$query = $this->db->query("SELECT descripcion from transporte where descripcion like '". mysql_real_escape_string($_REQUEST['term']) ."%' order by descripcion asc");
$products = array();
if ($query->num_rows > 0) {
    foreach ($query->rows as $result) {
        $products[] = array('value' => $result['descripcion']);
    }
}

// jQuery wants JSON data
echo json_encode($products);
flush();

Alguien sabe porque puede ser?

New member

Posts

Joined
Thu Feb 13, 2014 12:26 am

Post by cofran » Tue Apr 08, 2014 5:15 am

Que error da? o simplemente no da resultado, el json arroja un error...

Proba cambiando mysql_real_escape_string por $this->db->escape y también $_REQUEST['term'] por $this->request->post['term']

Pero también me gustaría saber donde estas poniendo este código... dentro del "model" o del "controller" o como lo pretendes hacer funcionar.
Si lo pretendes hacer funcionar como un archivo externo (ni dentro del model, ni dentro de controller) bueno, tendrás que instanciar y registrar las clases que pretendes utilizar, como por ejemplo la clase de la base de datos.

Saludos!

User avatar
Active Member

Posts

Joined
Thu Oct 01, 2009 7:37 am
Location - Córdoba, Argentina

Post by pablich » Wed Apr 09, 2014 12:54 am

cofran wrote:Que error da? o simplemente no da resultado, el json arroja un error...

Proba cambiando mysql_real_escape_string por $this->db->escape y también $_REQUEST['term'] por $this->request->post['term']

Pero también me gustaría saber donde estas poniendo este código... dentro del "model" o del "controller" o como lo pretendes hacer funcionar.
Si lo pretendes hacer funcionar como un archivo externo (ni dentro del model, ni dentro de controller) bueno, tendrás que instanciar y registrar las clases que pretendes utilizar, como por ejemplo la clase de la base de datos.

Saludos!
Gracias por la respuesta! Jaja crei que era el unico Cordobes en este foro, somos dos.

Con el primer código me funciona a la perfección (arroja bien los resultados), pero tiene la conexión a la base de datos directa y eso es inseguro y esta mal. Lo que quiero es hacerlo vía $this->db->query pero cuando lo hago asi deja de funcionar (No arroja ningún resultado la búsqueda en la caja de texto). Estoy seguro que el problema esta en este codigo porque tengo otros archivos.php hechos por mi que funcionan perfecto con $this->db->query.
Espero que me puedas entender jaja, gracias!

New member

Posts

Joined
Thu Feb 13, 2014 12:26 am

Post by pablich » Wed Apr 09, 2014 1:07 am

A lo que voy es que este codigo:

Code: Select all

$dblink = mysql_connect('192.168.x.x', 'opencart', 'opencart') or die( mysql_error() );
mysql_select_db('opencart');
 
$rs = mysql_query('select descripcion from transporte where descripcion like "'. mysql_real_escape_string($_REQUEST['term']) .'%" order by descripcion asc', $dblink);
Y este deberian hacer lo mismo:

Code: Select all

$rs = $this->db->query("SELECT descripcion from transporte where descripcion like '". mysql_real_escape_string($_REQUEST['term']) ."%' order by descripcion asc");
o no?

New member

Posts

Joined
Thu Feb 13, 2014 12:26 am

Post by cofran » Wed Apr 09, 2014 1:25 am

jajaa somos varios he, aunque no lo creas! tampoco una multitud pero hay un par más dando vuelta por ahí.

Con respecto al código por eso te preguntaba que si estas trabajando dentro del modelo o un archivo externo o dentro de un controlador eso quería saber porque opencart instancia el objeto $this->db en el index del sitio pero para ser utilizado por los controladores, modelos y vistas, no en un archivo externo, como por ejemplo consulta.php ubicado en la raíz del sitio por ejemplo.

Si podes publica todo el código entero (si no es muy largo...)

Saludos!

User avatar
Active Member

Posts

Joined
Thu Oct 01, 2009 7:37 am
Location - Córdoba, Argentina

Post by pablich » Wed Apr 09, 2014 2:38 am

Mira te pongo los archivos con sus rutas asi te ubicas mejor jaja:

Ruta: opencart\catalog\view\theme\sellegance\template\checkout\shipping_mehotd.tpl

Code: Select all

<script type="text/javascript" src="catalog/view/javascript/transporte.js"></script>
Transporte:
<input id="id_transporte" type="text" name="id_transporte" value="<?php include('catalog/model/checkout/transporte_defecto.php'); ?>"><br> 
Ruta: opencart\catalog\view\javascript\transporte.js

Code: Select all

jQuery(document).ready(function(){
            $('#id_transporte').autocomplete({
            source:'catalog/model/shipping/transporte.php', minLength:1});
        });
Ruta: opencart\catalog/model/shipping/transporte.php

Code: Select all

<?php
$dblink = mysql_connect('192.168.0.8', 'opencart', 'opencart') or die( mysql_error() );
mysql_select_db('opencart'); 
$term = trim(strip_tags($_GET['term']));
$resultado = mysql_query("SELECT * from transporte where descripcion LIKE '%".$term."%'");
		
$data = array();
if ( $resultado && count($resultado) )
{
	while( $row = mysql_fetch_array($resultado, MYSQL_ASSOC) )
	{
		$data[] = array('label' => $row['descripcion']);
	}
}
echo json_encode($data);
flush();
?>
Asi tal cual, con esos 3 archivos funciona a la perfeccion todo. Pero necesito eliminar esto:

Code: Select all

$dblink = mysql_connect('192.168.0.8', 'opencart', 'opencart') or die( mysql_error() );
mysql_select_db('opencart'); 

New member

Posts

Joined
Thu Feb 13, 2014 12:26 am

Post by cofran » Wed Apr 09, 2014 4:30 am

Ahora si!

edita el archivo catalog/model/shipping/transporte.php

arriba de todo pone esto:

Code: Select all

require_once('../../../config.php');
require_once(DIR_SYSTEM . 'startup.php');

$db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
y ahora utiliza el objeto de la DB como $bd-> no hace falta ahora el $this-> porque lo estas instanciando directamente. Podes utilizar $db->escape en reemplazo de mysql_real_escape_string podes mirar el archivo que esta en /system/database/ mysqli.php y también mysql.php para ver otras funciones que podes utilizar, o si queres extender la clase.

También cambia el $_REQUEST por lo que esperas recibir, si GET o POST, si no te pueden enviar por ambos términos.

Si anda me debes un fernet con 2 hielos!

User avatar
Active Member

Posts

Joined
Thu Oct 01, 2009 7:37 am
Location - Córdoba, Argentina

Post by pablich » Wed Apr 09, 2014 4:51 am

cofran wrote:Ahora si!

edita el archivo catalog/model/shipping/transporte.php

arriba de todo pone esto:

Code: Select all

require_once('../../../config.php');
require_once(DIR_SYSTEM . 'startup.php');

$db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
y ahora utiliza el objeto de la DB como $bd-> no hace falta ahora el $this-> porque lo estas instanciando directamente. Podes utilizar $db->escape en reemplazo de mysql_real_escape_string podes mirar el archivo que esta en /system/database/ mysqli.php y también mysql.php para ver otras funciones que podes utilizar, o si queres extender la clase.

También cambia el $_REQUEST por lo que esperas recibir, si GET o POST, si no te pueden enviar por ambos términos.

Si anda me debes un fernet con 2 hielos!
Jajajaj, genial, gracias! Vos sabes que yo probaba con require_once('../config.php'); y no me daba jajaja. Te debo el fernuco

New member

Posts

Joined
Thu Feb 13, 2014 12:26 am

Post by pablich » Fri Apr 11, 2014 3:28 am

cofran wrote:Ahora si!

edita el archivo catalog/model/shipping/transporte.php

arriba de todo pone esto:

Code: Select all

require_once('../../../config.php');
require_once(DIR_SYSTEM . 'startup.php');

$db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
y ahora utiliza el objeto de la DB como $bd-> no hace falta ahora el $this-> porque lo estas instanciando directamente. Podes utilizar $db->escape en reemplazo de mysql_real_escape_string podes mirar el archivo que esta en /system/database/ mysqli.php y también mysql.php para ver otras funciones que podes utilizar, o si queres extender la clase.

También cambia el $_REQUEST por lo que esperas recibir, si GET o POST, si no te pueden enviar por ambos términos.

Si anda me debes un fernet con 2 hielos!
Porque sera que si lo pongo en:
Ruta: opencart\catalog\view\theme\sellegance\template\checkout\confirm.tpl

Code: Select all

<?php 
				include('catalog/model/shipping/transporte.php'); 
				if (in_array($this->db->escape($data['id_transporte']), $data)) { ?>
				<div id="payment"><?php echo $payment; ?></div>
				<?php } else { ?>
				<span style=";font-family:sans-serif;font-size:16px;color:red;" >
				Atencion, el transporte <?php echo $this->db->escape($data['id_transporte']); ?> no es correcto, revise su pedido, gracias!
				</span>
				<?php } ?>
Me tira este error:

Warning: require_once(../../../config.php) [function.require-once]: failed to open stream: No such file or directory in C:\Archivos de programa\Apache Software Foundation\Apache2.2\www\opencart\catalog\model\shipping\transporte.php on line 2
Fatal error: require_once() [function.require]: Failed opening required '../../../config.php' (include_path='.;C:\php5\pear') in C:\Archivos de programa\Apache Software Foundation\Apache2.2\www\opencart\catalog\model\shipping\transporte.php on line 2


Pero en opencart\catalog\view\theme\sellegance\template\checkout\shipping_method.php me anda joya

New member

Posts

Joined
Thu Feb 13, 2014 12:26 am

Post by cofran » Fri Apr 11, 2014 6:56 am

proba sacando el require_once(../../../config.php); y te diría que el require_once(DIR_SYSTEM . 'startup.php'); también. Cuando haces un include el código que esta insertando comienza a comportarse de acuerda a donde estas, entonce por ejemplo perdés la relación de la ruta relativa.

Te digo que lo suprimas al código porque si haces un include dentro del TPL podes usar todos los objetos de opencart, por ejemplo $this->bd->query.

Entonce si a tu archivo PHP directamente lo armas con estos objetos, intentando acceder te va dar error pero si lo pones como un include dentro del TPL vas a ver que funciona bien, eso es porque el sistema ya arranco y se han instanciado las clases... proba

Saludos!

User avatar
Active Member

Posts

Joined
Thu Oct 01, 2009 7:37 am
Location - Córdoba, Argentina
Who is online

Users browsing this forum: No registered users and 96 guests