Nitinha 3 Denunciar post Postado Maio 13, 2011 Boa tarde, gente. Retorno aqui com um problema de algum tempo atrás, tinha resolvido deixar ele de lado mas ele voltou a me atormentar. Tenho um formulario de busca que foi feito em post ao invés de get (não é a melhor escolha na minha opinião, mas enfim...) o sistema do site esta meio complicadinho tbm, mas finalmente eu consegui achar onde estava o formulario e mudei o parametro de "post" para "get" só que agora o formulario não funciona mais, ele volta pra home. Testando com o Firebug eu descobri que o endereço de busca por GET seria este: http://www.site.com.br/index.php?controller=busca&criterio=nome&btn-buscar=Buscar Porém, quando eu mudei para get, ele não respeitou este caminho, ele "apagou" o "controller=busca" e direcionou o site de novo para o index dele. O que pode ser? Como eu arrumo isso? E tem outra maneira mais facil de pegar os resultados de uma busca que mantenha o formato post? (O cliente quer um botão que link para o resultado de uma busca de um produto dele) Se quiserem eu posto o codigo do form... Obrigada pela atenção. Compartilhar este post Link para o post Compartilhar em outros sites
DanielGerep 0 Denunciar post Postado Maio 14, 2011 Nitinha, sem dúvida no arquivo index.php deve ter alguma verificação do tipo IF ou SWITCH aonde você recebe o valor da variável controller, passada pela URL($_GET). Se você for nesse arquivo, você poderá mudar o método de envio de $_GET para $_POST. Se não der certo, posta o código do arquivo index.php para ficar mais fácil de te ajudar =) Compartilhar este post Link para o post Compartilhar em outros sites
Nitinha 3 Denunciar post Postado Maio 16, 2011 Olá! Obrigada por responder. Então, procurei em algumas páginas relacionadas com o form e não achei nada parecido com SWITCH ou IF, porem eu posso estar perdendo alguma coisa de vista. Aqui vai o codigo do index: <?php // Error Reporting error_reporting(E_ALL); //config.php // Configuration require("config.php"); // Security ini_set("register_globals", "Off"); if (ini_get("register_globals")) { exit("Erro: register_globals está ativado !"); } // /lib/locator.php // Locator include(DIR_LIBRARY . "locator.php"); $locator =& new Locator(); // Config $config =& $locator->get("config"); // /library/database // Database $database =& $locator->get("database"); // Settings $settings = $database->getRows("SELECT ... "); foreach ($settings as $setting) { // /lib/application/config.php $config->set($setting["chave"], $setting["valor"]); } // Language $language =& $locator->get('language'); // Template $template =& $locator->get("template"); // Language Code $template->set('code', $language->get('codigo')); // Base URL if (@$_SERVER["HTTPS"] != "on") { $template->set("base", HTTP_SERVER); } else { $template->set("base", HTTPS_SERVER); } // Request $request =& $locator->get("request"); // Response $response =& $locator->get("response"); // Controller $controller =& $locator->get("controller"); // Router $router =& $locator->get("router"); // Controller Directory //obtem o diretorio do controler $controller->setDirectory(DIR_CONTROLLER); // Default Controller $controller->setDefault("home", "index"); // Error Controller $controller->setError("erro", "index"); // Route Request //rotiador - pega os paramentros passado via get na request // ...?controller=category&path=19 $router->route($request); // Dispatch $controller->dispatch($request); // Output $response->output(); ?> e o codigo da controller=busca <?php class ControllerBusca extends Controller { function index() { $response =& $this->locator->get('response'); $template =& $this->locator->get('template'); $module =& $this->locator->get('module'); $session =& $this->locator->get('session'); $template->set('conteudo', $this->getList()); $template->set($module->fetch()); $response->set($template->fetch('layout.tpl')); } function getList() { $config =& $this->locator->get('config'); $request =& $this->locator->get('request'); $response =& $this->locator->get('response'); $template =& $this->locator->get('template'); $database =& $this->locator->get('database'); $tools =& $this->locator->get('tools'); $url =& $this->locator->get('url'); $session =& $this->locator->get('session'); $language =& $this->locator->get('language'); $image =& $this->locator->get('image'); $template->set('titulo', $config->get('config_empresa')); $view = $this->locator->create('template'); //busca if (strlen($session->get('produto.search'))>0) { $sql = "SELECT ... "; $results = $database->getRows($database->splitQuery($database->parse($sql, '%' . $session->get('produto.search') . '%', '%' . $session->get('produto.search') . '%'), $session->get('produto.page'), $config->get('config_max_produtos'))); if (sizeof($results)>0){ $produtos_dados = array(); foreach ($results as $result) { $produtos_dados[] = array( 'id' => $result['id_produto'], 'produto' => explode('/',stripslashes($result['produto'])), 'href' => $url->href('detalhe_produto', 'page', array('id' => $result['id_produto'], 'busca' => '1')), 'thumb' => ($result['arquivo']!=NULL) ? $image->resize($result['arquivo'], $config->get('config_largura_catalogo'), $config->get('config_altura_catalogo')) : NULL, 'thickbox' => ($result['arquivo']!=NULL) ? HTTP_IMAGE.$result['arquivo'] : NULL, 'sem_foto' => HTTP_IMAGE."cache/sem-foto-100x99.gif" ); } $view->set('produtos', $produtos_dados); $view->set('aviso', FALSE); $view->set('search', $session->get('produto.search')); } else { //o criterio de busca informado não foi encontrado $view->set('aviso', strtoupper('Não foi encontrado nenhum produto para critério informado!')); $view->set('produtos', array()); $view->set('search', $session->get('produto.search')); } }else{ $view->set('aviso', strtoupper('Não foi encontrado nenhum produto para critério informado !')); $view->set('produtos', array()); $view->set('search', $session->get('produto.search')); } $view->set('texto_resultado', $language->get('texto_resultado', $database->getFrom(), $database->getTo(), $database->getTotal())); $view->set('action', $url->href('busca', 'page')); $view->set('page', $session->get('produto.page')); $dados_pagina = array(); for ($i = 1; $i <= $database->getPages(); $i++) { $dados_pagina[] = array( 'texto' => $language->get('texto_paginas', $i, $database->getPages()), 'valor' => $i ); } $view->set('pages', $dados_pagina); return $view->fetch('conteudo/busca.tpl'); } function page() { $request =& $this->locator->get('request'); $response =& $this->locator->get('response'); $url =& $this->locator->get('url'); $session =& $this->locator->get('session'); if ($request->has('criterio', 'post')) { $session->set('produto.search', $request->get('criterio', 'post')); } if ($request->has('page', 'post')){ $session->set('produto.page', $request->get('page', 'post')); } $response->redirect($url->href('busca')); } } ?> espero que a resposta esteja ai. Desculpe a demora para responder, só acesso a internet de dia util e até às 18h. Compartilhar este post Link para o post Compartilhar em outros sites
DanielGerep 0 Denunciar post Postado Maio 16, 2011 Olá Nitinha, Existe uma classe chamada Locator() e é dentro dela que o sistema esta verificando o $_GET ou $_POST, da uma olhada nela por favor. Se tiver como, poste ele aqui ;) Compartilhar este post Link para o post Compartilhar em outros sites
Nitinha 3 Denunciar post Postado Maio 16, 2011 Daniel, achei a classe, mas não achei nada nela que se relaciona-se com Get ou Post.. ai vai o código <?php class Locator { var $data = array(); function &get($key) { if (!isset($this->data[$key])) { $this->data[$key] =& $this->create($key); } return $this->data[$key]; } function set($key, &$value) { $this->data[$key] =& $value; } function create($key) { $method = 'create' . $key; if (method_exists($this, $method)) { return $this->$method(); } else { exit('Erro: O sistema falhou ao criar o controller ' . $key . '!'); } } function createCache() { if (!is_writable(DIR_CACHE)) { exit('Error: Could not write to cache directory!'); } require_once(DIR_LIBRARY . 'cache/cache.php'); return new Cache(); } function createConfig() { require_once(DIR_LIBRARY . 'application/config.php'); return new Config(); } function createMoedaCorrente() { require_once(DIR_LIBRARY . 'model/moeda_corrente.php'); return new MoedaCorrente($this); } function createController() { require_once(DIR_LIBRARY . 'application/controller.php'); return new Controller($this); } function createCustomer() { require_once(DIR_LIBRARY . 'model/customer.php'); return new Customer($this); } function createDatabase() { require_once(DIR_LIBRARY . 'database/database.php'); $database =& new Database($this); //le as constantes do /config.php $database->connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); return $database; } function createDownload() { require_once(DIR_LIBRARY . 'filesystem/download.php'); return new Download(); } function createImage() { if (!is_writable(DIR_IMAGE)) { exit('Erro: O sistema falhou ao tentar escrever no diretorio image !'); } require_once(DIR_LIBRARY . 'image/image.php'); return new Image($this); } function createLanguage() { require_once(DIR_LIBRARY . 'language/language.php'); return new Language($this); } function createMail() { require_once(DIR_LIBRARY . 'mail/mail.php'); return new Mail(); } function createModel($key) { require_once(DIR_LIBRARY . 'application/model.php'); return new Model($this); } function createModule() { require_once(DIR_LIBRARY . 'model/module.php'); return new Module($this); } function createRequest() { require_once(DIR_LIBRARY . 'environment/request.php'); return new Request($this); } function createResponse() { require_once(DIR_LIBRARY . 'environment/response.php'); return new Response($this); } function createRouter() { require_once(DIR_LIBRARY . 'application/router.php'); return new Router($this); } function createSession() { require_once(DIR_LIBRARY . 'session/session.php'); return new Session($this); } function createUpload() { require_once(DIR_LIBRARY . 'filesystem/upload.php'); return new Upload(); } function createUrl() { require_once(DIR_LIBRARY . 'environment/url.php'); return new Url($this); } function createUser() { require_once(DIR_LIBRARY . 'user/user.php'); return new User($this); } function createTemplate() { require_once(DIR_LIBRARY . 'template/template.php'); //busca o diretorio do template "default" no config //a configuração vem do banco da tabela setting $config =& $this->get('config'); return new Template($config->get('config_template')); } function createTools() { require_once(DIR_LIBRARY . 'tools/tools.php'); return new Tools(); } } ?> Compartilhar este post Link para o post Compartilhar em outros sites
DanielGerep 0 Denunciar post Postado Maio 16, 2011 Olá Nitinha, mostre também o arquivo 'environment/url.php' por favor. Compartilhar este post Link para o post Compartilhar em outros sites
Nitinha 3 Denunciar post Postado Maio 16, 2011 O environment/url.php: <?php class Url { var $data = array(); function __construct(&$locator) { $this->config =& $locator->get('config'); $this->database =& $locator->get('database'); } function href($controller, $action = NULL, $query = array()) { return $this->create(HTTP_SERVER, $controller, $action, $query); } function ssl($controller, $action = NULL, $query = array()) { if (($this->config->get('config_ssl')) && (defined('HTTPS_SERVER')) && (HTTPS_SERVER)) { $server = HTTPS_SERVER; } else { $server = HTTP_SERVER; } return $this->create($server, $controller, $action, $query); } function create($server, $controller, $action = NULL, $query = array()) { $link = 'controller=' . $controller; if ($action) { $link .= '&action=' . $action; } foreach ($query as $key => $value) { if ($value) { $link .= '&' . $key . '=' . urlencode($value); } } if (isset($this->data[$link])) { $link = $this->data[$link]; } else { //$link = '?' . $link; $link = 'index.php?' . $link; } return $server . $link; } } ?> Acho que este não tem nada tbm.. :/ Compartilhar este post Link para o post Compartilhar em outros sites
DanielGerep 0 Denunciar post Postado Maio 16, 2011 Olá Nitinha, não esta ai, me passe o application/config.php por favor. Compartilhar este post Link para o post Compartilhar em outros sites
Nitinha 3 Denunciar post Postado Maio 16, 2011 Olha, não sei se serve de alguma coisa, mas eu achei este codigo na pasta environment com o nome de request.php <?php class Request { function __construct(&$locator) { //ini_get -- Obtém o valor de uma opção de configuração do php.ini if (ini_get('magic_quotes_gpc')) { $_GET = $this->stripSlashes($_GET); $_POST = $this->stripSlashes($_POST); $_COOKIE = $this->stripSlashes($_COOKIE); $_SERVER = $this->stripSlashes($_SERVER); $_ENV = $this->stripSlashes($_ENV); } } //retorna o valor da variavel passada via GET, POST ou COOKIE function get($key, $type = 'GET', $default = NULL) { switch (strtoupper($type)) { case 'GET': $data = $_GET; break; case 'POST': $data = $_POST; break; case 'COOKIE': $data = $_COOKIE; break; } return (isset($data[$key]) ? $data[$key] : $default); } function has($key, $type = 'GET') { switch (strtoupper($type)) { case 'GET': return isset($_GET[$key]); break; case 'POST': return isset($_POST[$key]); break; case 'COOKIE': return isset($_COOKIE[$key]); break; } } function set($key, $value, $type = 'GET') { switch (strtoupper($type)) { case 'GET': return $_GET[$key] = $value; break; case 'POST': return $_POST[$key] = $value; break; } } function isPost() { return (strtoupper($_SERVER['REQUEST_METHOD']) == 'POST'); } function isSecure() { return (@$_SERVER['HTTPS'] == 'on'); } //le os valores das variaveis de configuração do php.ini do servidor //atribui os valores $_GET, $_POST, $_COOKIE, $_SERVER e $_ENV function stripSlashes($data) { if (is_array($data)) { foreach ($data as $key => $value) { $data[$key] = $this->stripSlashes($value); } } else { $data = stripslashes($data); } return $data; } } ?> e o codigo config.php: <?php class Config { var $data = array(); function set($key, $value) { $this->data[$key] = $value; } function get($key) { return (isset($this->data[$key]) ? $this->data[$key] : NULL); } function has($key) { return isset($this->data[$key]); } function load($filename) { $file = DIR_CONFIG . $filename; if (file_exists($file)) { $cfg = array(); include($file); $this->data = array_merge($this->data, $cfg); } } } ?> Muito obrigada pela paciencia, Daniel! Compartilhar este post Link para o post Compartilhar em outros sites
DanielGerep 0 Denunciar post Postado Maio 16, 2011 Nitinha, realmente esta complicado, não se você pode, mas se sim, me envie um zip com os arquivos para eu ver aqui no meu PC, fica mais fácil, tem como? Só a parte de busca Compartilhar este post Link para o post Compartilhar em outros sites
Nitinha 3 Denunciar post Postado Maio 16, 2011 Vou ver aqui quais arquivos eu posso mandar, eu não fiz o site então fica mais dificil ainda achar os arquivos e a solução para o problema, mas enquanto isso, você sabe se da para fazer o botão do jeito que o cliente quer mantendo este formulario de busca em POST? Uma vez me falaram pra eu usar um "foreach" mas eu nunca usei ele e não consegui. Compartilhar este post Link para o post Compartilhar em outros sites
DanielGerep 0 Denunciar post Postado Maio 16, 2011 Nitinha, acredito que não tenha como mas você pode tentar, para as variáveis do sistema, tipo controller e criterio, você pode criar um campo do tipo hidden assim: <input type="hidden" name="controller" value="busca" /> <input type="hidden" name="criterio" value="nome" /> Talvez dê certo até encontrarmos uma solução melhor ;) Compartilhar este post Link para o post Compartilhar em outros sites
Nitinha 3 Denunciar post Postado Maio 16, 2011 Eu tinha pensado nessa gambiarra também, vou tentar fazer isso. Te mandei uma PM. Compartilhar este post Link para o post Compartilhar em outros sites