Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ariane Stela

[Resolvido] Preencher imput à partir de id.

Recommended Posts

Olá pessoal, olha eu aqui novamente precisando de exemplos ou ajuda de vcs.

 

É o seguinte, consegui este exemplo: http://www.wbruno.com.br/blog/?p=12 ( http://www.wbruno.com.br/scripts/combo-preenche-input.php ) utilizando jquery e ajax, porém não vou utilizar Jquery.

preciso que um imput (text) seja preenchido automaticamente com o nome do cliente a partir de um id (por chave estrangeira) do cliente.

 

Sugestões ou exemplos??

Compartilhar este post


Link para o post
Compartilhar em outros sites

mesma coisa, só trocar a parte jQuery por javascript comum ^_^

 

agora pergunta: pq não quer usar jQuery ?

você quer fazer com ou sem o refresh da tela ?

 

para fazer com php puro, você terá que fazer um formulário mesmo, básico, que envia o input através do submit, e retorna o resultado, depois de fazer a consulta.

 

Se quiser sem o refresh, ai só usando javascript mesmo, e jQuery não é nada mais do que um framework js.

Compartilhar este post


Link para o post
Compartilhar em outros sites

faça as perguntas... qual a dúvida ? deu erro ? qual ?

 

mostre como ficou o teu código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu utilizo Zend framework

 

este é o meu Controller:

private function montaSelect()
	{
    	$usuario = new Usuario();
    	$opt = array();
    	
    	if(count($usuario->findColletion())>0)
        {
        	foreach($usuario->findColletion() as $key => $dados)
            {
            	$opt .= '<option value="'.$dados['pk_usuario'].'">'.$dados['pk_usuario'].'</option>';
            }
		}
		else
			$opt = '<option value="0">""</option>';
		
		return $opt;
	}
	
	/**
	 * função que devolve em formato JSON os dados do cliente
    */
    private function retorna( $id=null )
	{
		$id = (int)$id;
		$usuario = new Usuario();
		
		$json = ' [';
		
		if(count($usuario->findUserById($id))>0)
		{
			foreach($usuario->findUserById($id) as $key => $dados)
            {
				$json .= "{cliente: '{$dados['nome_usuario']}'}";;
			}
		}
		else
			$json = 'cliente: não encontrado';

		$json .= ']';
		
		return $json;
	}
	
	
	/**
	 * Description
	 *
	 * Filtro para o relatório de entregas
	 *
	 * @author Ariane Stela <arianeqcf@gmail.com>
	 *
	 */
	public function entregasAction()
	{
		$auth = Zend_Auth::getInstance()->getIdentity();
		$user = (int) $auth['pk_usuario'];
		
		$this->view->js	   = array('lib/prototype.js', 'register.js', 'menu.js', 'relatorio.js');
		$this->view->css   = array('style.css', 'menu.css', 'register.css', 'table.css');
		
		$this->view->cliente = $this->montaSelect();
				
		if( isset($_GET['pk_usuario']) )
		{
       		$this->view->retorna = $this->retorna($_GET['pk_usuario']);
		}

	}

aparentemente funcionando, porém não está pegando nada no $_GET

 

esta é a view

 

<div class="filtro">
		<form name="filtro" action="" method="post">
			<label>Cliente: <select name="nome">
			<option value="">--</option>
<?php
			//select
			echo $this->cliente;
?>
			</select></label>
		
	    	<label><input type="text" name="cliente" value="" /></label>
	    	<?php echo $this->retorna; ?> 
		</form>
		</div>

este é o .js

 

<script type="text/javascript" src="jquery.js"></script>

$(document).ready(function(){
	$("select[name='nome']").change(function(){
			$("input[name='cliente']").val('Carregando...');

                	$.getJSON(
                			'RelatoriosController.php',
                            {pk_cliente: $(this).val()},
                            function(data){
                            	$.each(data, function(i, obj){
                            		$("input[name='cliente']").val(obj.cliente);
                                })
                            });
	});
});

ao clicar no código não consigo passar o pk_cliente para q seja preenchida a input

Compartilhar este post


Link para o post
Compartilhar em outros sites

e onde você fez a chamada das funções??

 

qual é o arquivo:

RelatoriosController.php ?

 

acesse ele diretamente:

localhost/RelatoriosController.php?pk_cliente=3

 

e veja oque aparece na tela...

 

além disso, a formação do teu jSON está incorreta, você precisa de uma , separando os dados.

 

 

onde você chama: entregasAction() ??

você só postou a declaração do método.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O controller é o RelatoriosControler

O entregasAction passa os valores para a view entregas.phtml

 

ao invez de relatoriosControler mudei para '/relatorios/entregas',

mesmo assim não está funcionando..

nunk usei esse json

Compartilhar este post


Link para o post
Compartilhar em outros sites

Assim não vai funcionar... O que você precisa é criar um action que vai imprimir o json, só que será acessado pelo jQuery. Algo assim:

 

	private function montaSelect ()
	{
		$usuario = new Usuario();
		$opt = array();
		if (count($usuario->findColletion()) > 0) {
			foreach ($usuario->findColletion() as $key => $dados) {
				$opt .= '<option value="' . $dados['pk_usuario'] . '">' . $dados['pk_usuario'] .
				 '</option>';
			}
		} else
			$opt = '<option value="0">""</option>';
		return $opt;
	}
	/**
	 * função que devolve em formato JSON os dados do cliente
	 */
	private function retorna ($id = null)
	{
		$id = (int) $id;
		$usuario = new Usuario();
		$json = ' [';
		if (count($usuario->findUserById($id)) > 0) {
			foreach ($usuario->findUserById($id) as $key => $dados) {
				$json .= "{cliente: '{$dados['nome_usuario']}'}";
				;
			}
		} else
			$json = 'cliente: não encontrado';
		$json .= ']';
		return $json;
	}
        // aqui está retornando o json
	public function retornoAction()
	{
		if (isset($_GET['pk_usuario'])) {
			echo $this->retorna($_GET['pk_usuario']);
		}
                $this->_helper->layout()->disableLayout();
		$this->_helper->viewRenderer->setNoRender(true);
	}
	
	/**
	 * Description
	 *
	 * Filtro para o relatório de entregas
	 *
	 * @author Ariane Stela <arianeqcf@gmail.com>
	 *
	 */
	public function entregasAction ()
	{
		$auth = Zend_Auth::getInstance()->getIdentity();
		$user = (int) $auth['pk_usuario'];
		$this->view->js = array('lib/prototype.js', 'register.js', 'menu.js', 
		'relatorio.js');
		$this->view->css = array('style.css', 'menu.css', 'register.css', 
		'table.css');
		$this->view->cliente = $this->montaSelect();
	}
Na sua view, você faz assim:

<script type="text/javascript" src="jquery.js"></script>

$(document).ready(function(){
        $("select[name='nome']").change(function(){
                        $("input[name='cliente']").val('Carregando...');

                        $.getJSON(
                                        'relatorios/retorno',
                            {pk_cliente: $(this).val()},
                            function(data){
                                $.each(data, function(i, obj){
                                        $("input[name='cliente']").val(obj.cliente);
                                })
                            });
        });
});
Aí, para testar se está retornando correto, você acessa diretamente pela URL. Algo como relatorios/retorno?pk_cliente=1 e veja se retorna o json correto.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

mathias, ao invez de criar outra action eu utilizei os recursos do zend mesmo, veja:

 

public function entregasAction()
	{
		$idUsuario = (int) $this->_getParam('id');
		
		$auth = Zend_Auth::getInstance()->getIdentity();
		$user = (int) $auth['pk_usuario'];
		
		$this->view->js	   = array('lib/prototype.js', 'register.js', 'menu.js', 'jquery.js', 'relatorio.js');
		$this->view->css   = array('style.css', 'menu.css', 'register.css', 'table.css');
		
		$this->view->cliente = $this->montaSelect();
				
		if($idUsuario) {
			$this->_helper->viewRenderer->setNoRender(true);
			
			$usuario = new Usuario();
			
			$infoUsuario = $usuario->findUserById($idUsuario);
			
			if ($infoUsuario) {
				$infoUsuario['nome_usuario'] = utf8_encode($infoUsuario['nome_usuario']);
			}
			
			$this->getResponse()->setBody(Zend_Json::encode($infoUsuario));
		}

	}

e no .js:

jQuery.noConflict();

jQuery(document).ready(function(){
	jQuery("select[name='nome']").change(function(){
		jQuery("input[name='cliente']").val('Carregando...');

		jQuery.getJSON('/relatorios/entregas',
        {'id': jQuery(this).val()},
        function(data){
        	jQuery("input[name='cliente']").val(data.nome_usuario);
        });
	});
});

e a função "retorna" foi excluída.. brigada Mathias, brigada WilBruno

=*

Compartilhar este post


Link para o post
Compartilhar em outros sites

Surgiu um pedido do cliente aqui, posso ressucitar o tópico ou devo abrir outro??

 

Seguinte, quando selecionamos algo no combo e retornamos para o valor "--" o valor dos inputs fica "Carregando.."

 

Gostaria que voltasse a ser vazio.

Alguém me ajuda?

 

Obrigada.

beijo

Compartilhar este post


Link para o post
Compartilhar em outros sites

consegue pensar numa lógica para 'barrar' isso ?

 

a mais simples:

$(document).ready(function(){
        $("select[name='nome']").change(function(){
               if( $(this).val()!='' )
               {
                        $("input[name='cliente']").val('Carregando...');

                        $.getJSON(
                          //...
ou seja, 'só coloca o 'carregando', e só executa a consulta, se for enviado algum valor.

mas ai, digamos que você já fez uma consulta, e queria que ao voltar pro '--' (que nesse caso, tem value=""), que apagasse o input..

 

simples também, ne?!

basta adicionar um else ^_^, ou seja

-> se for diferente de vazio, executa

-> caso contrário, limpa o input

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.