Ir para conteúdo

POWERED BY:

Arquivado

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

Paulo Gitch

[Resolvido] Auto Completar Formulário

Recommended Posts

Olá a todos.

 

Estou buscando uma solução para preencher um determinado campo automaticamente, dei uma revirada no Google e mesmo assim não conseguir resolver o problema.

 

Tenho um formulário para cadastro de endereço IP. A rede 192.168.3.X pertence a Filial3, 192.168.4.X pertence a Filial4, e assim sucessivamente. Gostaria que quando fosse digitado o IP, por exemplo, 192.168.3.120 a loja Filial3 fosse automaticamente selecionada no campo abaixo no formulário, isso evitaria que o IP(192.168.3.120) da Filial3 fosse cadastrando como sendo da Filial4. Alguém, por gentileza, teria algum script ou poderia me indicar onde conseguir.

 

 

Tenha uma boa noite.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, um exemplo funcional utilizando JQuery:

 

Primeiro criei uma tabela:

 
CREATE TABLE `filiais`.`Filiais`(
	`idFiliais` mediumint(8) UNSIGNED NOT NULL AUTO_INCREMENT,
	`filialName` varchar(50) NOT NULL,
	`filialIP` varchar(11) NOT NULL,
	PRIMARY KEY (`idFiliais`),
	KEY `filialIP`(`filialIP`)
) ENGINE = MyISAM;

 

Os dados depois de populados ficaram assim:

mysql> select * from `Filiais`;
+-----------+------------+-----------+
| idFiliais | filialName | filialIP |
+-----------+------------+-----------+
| 	1 | Filial 1 | 192.168.1 |
| 	2 | Filial 2 | 192.168.2 |
| 	3 | Filial 3 | 192.168.3 |
| 	4 | Filial 4 | 192.168.4 |
+-----------+------------+-----------+
4 rows in set (0.00 sec)

Bom, agora o formulário:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http-~~-//www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="pt_BR" xml:lang="pt_BR" xmlns="http-~~-//www.w3.org/1999/xhtml" >
<head>
	<title>Preenchimento automático</title>
	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
	<script type="text/javascript" src="public/js/jquery-1.3.2.min.js"></script>
	<script type="text/javascript" src="public/js/ips.js"></script>
</head>
<body>
	<form id="cadastro" action="ips.php?add" method="post">
		<fieldset>
			<label for="ip">
				<span>IP:</span>
				<input id="ip" type="text" name="ip" size="15" />
			</label>
			<label for="filial">
				<span>Filial:</span>
				<input id="filial" type="text" name="filial" disabled="disabled" />
			</label>
		</fieldset>
	</form>
</body>
</html>

 

Veja que nesse formulário utilizamos dois arquivos javascript, um deles é o do jquery, você conseguirá baixá-lo no site oficial, o outro, ips.js segue abaixo:

$( function(){
	$( '#ip' ).change( function(){
		var ip = $(this);
		var pt = ip.val().split( '.' );
		
		if ( pt.length && pt.length == 4 ){
			$.ajax( {
				type		: 'post',
				url			: 'ips.php?get',
				data		: { ip:pt.slice( 0 , 3 ).join( '.' ) },
				dataType	: 'json',
				success		: function( msg ){
					if ( !msg.success ){
						ip.val( '' );
						alert( msg.message );
					} else {
						$( '#filial' ).val( msg.data );
					}
				}
			} );
		}
	} );
} );

Agora a parte PHP:

ips.php

<?php
$ret = new stdClass();
$ret->success	= false;
$ret->message	= 'Bad Request';
$ret->data		= null;

if ( isset( $_GET[ 'get' ] ) ){
$ip =& $_POST[ 'ip' ];
$pt = null;

if ( preg_match( '/(\d{1,3})\.(\d{1,3})\.(\d{1,3})/' , $ip , $pt ) ){
	require 'Filiais.php';

	try {
		$filiais = new Filiais();

		if ( ( $name =& $filiais->getFilialByIP( $ip ) ) !== false ){
			$ret->success	= true;
			$ret->message	= 'Ok';
			$ret->data		=& $name;
		} else {
			$ret->message	= 'Nenhuma filial encontrada com essa faixa de IP';
		}
	} catch ( Exception $e ){
		$ret->message = $e->getMessage();
	}
} else {
	$ret->message = 'IP Inválido';
}
}

echo json_encode( $ret );

 

E o kara que faz o acesso a dados:

Filiais.php

<?php
class Filiais {
/**
 * @var PDO
 */
private $pdo;

public function __construct(){
	$this->pdo = new PDO( 'mysql:host=127.0.0.1;dbname=filiais' , 'user' , 'password' ); //Troque user e password pelos dados do seu banco
}

/**
 * Recupera o nome de uma filial pelo IP
 * @param string $ip
 * @return string|boolean Retorna FALSE se o IP não for encontrado
 */
public function &getFilialByIP( &$ip ){
	$ret = false;
	$stmt = $this->pdo->prepare( 'SELECT `filialName` from `Filiais` f where `f`.`filialIP`=:filialIP;' );
	$stmt->bindParam( ':filialIP' , $ip , PDO::PARAM_STR );

	if ( $stmt->execute() ){
		if ( ( $obj = $stmt->fetch( PDO::FETCH_OBJ ) ) !== false ){
			$ret =& $obj->filialName;
		}
	}

	return $ret;
}
}

 

Bom, é isso ai, quando for digitado no input ip 192.168.3, o nome Filial 3 aparecerá no outro 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.