Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal,
Estou iniciando em PHP e confesso estar sofrendo um bom bocado. Mas vamos lá.
Tenho o seguinte objeto:
function consulta($parametro, $pordem)
{
$sql = "SELECT Pais_Codigo, Pais_Nome ";
$sql .= "FROM a001_paises ";
if ($parametro != "")
{
$sql .= "WHERE ".$parametro;
}
if ($pordem != "")
{
$sql .= "ORDER BY ".$pordem;
} else {
$sql .= "ORDER BY Pais_Nome";
}
$query = mysql_query($sql);
while ($res = mysql_fetch_assoc($query))
{
echo($res['Pais_Codigo'].". ".$res['Pais_Nome'].'<br />');
}
}
E tenho o formulário:
<?php
include('objeto/paises.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PÁGINA INICIAL</title>
<link rel="stylesheet" type="text/css" href="estilos.css"/>
</head>
<body>
<div class="div arredonda">
<div class="titulo">Consultar Países</div>
<div>
<form method="get" enctype="multipart/form-data" action="">
<div>Digite uma parte do nome do país:</div>
<div><input name="busca" type="text" class="campos1" /></div>
<div style="margin-top:10px;"><input name="btnConsulta" type="button" value="Consultar" class="button pesquisa" /></div>
</form>
</div>
<div style="margin-top:20px;">
<?php
$busca = $_GET['busca'];
if (isset($busca))
{
consulta("Pais_Nome LIKE '%".$busca."%'", "Pais_Nome");
}
?>
</div>
</div>
</body>
</html>
Ao executar esta página, aparece o erro:
>
Notice: Undefined index: busca in C:\xamp\htdocs\aulas\PaisConsulta.php on line 27
Onde estou errando?
Grato,
Ilano
Não é um erro é um aviso
Undefined index: busca quer dizer que ***$_GET['busca'];*** esta sem valor
se $_GET['busca'] você pega da url e na url não tiver o parâmetro aparece isso.
site.com?busca=chile
site.com : aki ao tentar $busca = $_GET['busca']; terá um aviso
você pode trocar:
$busca = $_GET['busca'];
if (isset($busca))
{
por
if (isset( $_GET['busca']))
{
$busca = $_GET['busca'];
ou
delisgar o aviso
ou
por '@' na frente de $_GET['busca'];
>
Não é um erro é um aviso
Undefined index: busca quer dizer que $_GET['busca']; esta sem valor
Na realidade não é sem valor, é literalmente que não existe.
Bom dia sou nova aqui no fórum e não entendo nada de scripts rsrsrsrs, mas preciso da ajuda de vocês.
Queria colocar esse formulário no meu site, mas quando clico no botão enviar dá uma mensagem de erro. :(
<form action="admin/form/envio.php" method="post" name="f_contato" id="f_contato" onsubmit="MM_validateForm('Nome','','R','Email','','RisEmail','DDD','','RinRange11:99','Telefone','','R','DDD2','','NinRange11:99','Qtd_Pessoas','','RisNum','data_evento','','R','security_code','','R');return document.MM_returnValue">
<h2>Dados Pessoais</h2>
<p> <span class="col1_form">Empresa: *</span>
<input name="Nome" class="formcampo1" id="Nome" size="30" maxlength="250" type="text">
<br>
<span class="col1_form">E-mail: *</span>
<input name="Email" class="formcampo1" id="Email" size="30" maxlength="250" type="text">
<br>
<span class="col1_form">DDD / Telefone 1: *</span>
<input name="DDD" class="formcampo1" id="DDD" size="2" maxlength="2" type="text">
<input name="Telefone" class="formcampo3" id="Telefone" size="15" maxlength="15" type="text">
<br>
<span class="col1_form">DDD / Telefone 2: </span>
<input name="DDD2" class="formcampo1" id="DDD2" size="2" maxlength="2" type="text">
<input name="Telefone2" class="formcampo3" id="Telefone2" size="15" maxlength="15" type="text">
</p>
<h2>Detalhes da Empresa</h2>
<p><span class="col1_form">Regime Tributário: * </span>
<select name="Regime Tributário" class="formcampo1" id="Regime Tributário">
<option value="" selected="selected">-- Selecione --</option>
<option value="Simples Nacional">Simples Nacional</option>
<option value="Lucro Presumido">Lucro Presumido</option>
<option value="Lucro Real">Lucro Real</option>
<option value="MEI">MEI</option>
<option value="Não Sei">Não Sei</option>
</select>
<br>
<span class="col1_form">Quantidade de Funcionários: </span>
<input name="Qtd_Func" class="formcampo1" id="Qtd_Func" size="5" maxlength="5" type="text">
<p><span class="col1_form">Finalidade do Orçamento * </span>
<select name="Finalidade do Orçamento" class="formcampo1" id="Finalidade do Orçamento">
<option value="" selected="selected">-- Selecione --</option>
<option value="Mudança de Contador">Mudança de Contador</option>
<option value="Abertura de Empresa">Abertura de Empresa</option>
</select>
<br>
<span class="col1_form">Como nos conheceu?</span>
<select name="como_chegou" size="1" class="formcampo1">
<option selected="selected" value="">-- Selecione --</option>
<option value="Indicação">Indicação</option>
<option value="Google">Google</option>
<option value="Outro_meio">Outro meio</option>
</select>
<br>
<span class="col_form_captcha"><script type="text/javascript">document.write(constrcap());</script><img src="CONTATO_arquivos/captcha.jpg" name="capt" id="capt" align="middle" vspace="2">
<br>
</span>
<input name="security_code" class="formcampo1" id="security_code" onfocus="this.value=''" size="10" maxlength="10" type="text">
<span class="obsform"> Digite o código ao lado</span><br>
</p><div class="clear_captcha"></div>
<span class="col1_form">
<input name="tituloMensagem" id="tituloMensagem" value="Formulário de Orçamento" type="hidden">
</span>
<input name="bt_envcont" class="formbt2 bordared1" id="bt_envcont" value="Enviar" onclick="return validaform(this,form,Periodo,Tipo_Cardapio,Tipo_de_evento,Espaco)" type="submit">
<input name="bt_limpcont" class="formbt1 bordared1" id="bt_limpcont" value="Limpar" type="reset">
<p></p>
<h2><p class="tx_pequeno"><em><strong>ATENÇÃO:</strong> Campos com * são de preenchimento obrigatório </em></p></h2>
</form>Ariane Magalhães, não poste esse tipo de duvida nos tópicos de outros, crie um tópico novo com usa duvida
Olá pessoal,
Obrigado pela atenção de todos e desculpem a demora em responder, mas sabem como é o dia-a-dia.
Bom, o erro desapareceu. Mas não está retornando resultado algum. A tabela encontra-se populada. Será que tem algum problema com o objeto Consulta?
Outra coisa, no objeto Consulta tem como, antes de ser executada, salvar a string sql para saber como está sendo executada?
Estou desenvolvendo no Dreamweaver CS5. Tem como fazer um breakpoint?
Pessoal, o "arroba" não! Que coisa feia! :P :no:
O arroba serve pra prevenir erros que não podem ser testados de antemão, como serviços indisponíveis, IMAP etc. Isso poderia simplesmente ser resolvido com isset(). Falei sobre isso aqui:
http://rberaldo.com.br/as-mensagens-de-erros-mais-comuns-do-php/#undef_index
em suma:
$busca = isset( $_GET['busca'] ) ? $_GET['busca'] : null;
if ( $busca != null )
{
// ...
:thumbsup:
Mais sobre o controverso arroba: http://rberaldo.com.br/boas-praticas-ao-programar-2/#arroba
Quanto a não retornar resultado, como está seu código atual?
Olá Roberto,
Obrigado por sua atenção.
O objeo não foi alterado, continua como acima, só a página php onde fica o formulário está alterado:
>
<?php
include('objeto/paises.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="[http://www.w3.org/1999/xhtml">](http://www.w3.org/1999/xhtml)
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PÁGINA INICIAL</title>
<link rel="stylesheet" type="text/css" href="estilos.css"/>
</head>
<body>
<div class="div arredonda">
<div class="titulo">Consultar Países</div>
<div>
<form method="get" enctype="multipart/form-data" action="">
<div>Digite uma parte do nome do país:</div>
<div><input name="busca" type="text" class="campos1" /></div>
<div style="margin-top:10px;"><input name="btnConsulta" type="button" value="Consultar" class="button pesquisa" /></div>
</form>
</div>
<div style="margin-top:20px;">
<?php
$busca = isset( $_GET['busca'] ) ? $_GET['busca'] : null;
if ( $busca != null )
{
consulta(" Pais_Nome LIKE '%".$busca."%'", "Pais_Nome");
}
?>
</div>
</div>
</body>
</html>
E quanto o action do form? Precisa ter alguma coisa lá?
como ficaria:
function consulta($parametro, $pordem) {
$sql = "SELECT Pais_Codigo, Pais_Nome ";
$sql .= "FROM a001_paises ";
$parametro = ($parametro !== "") ? "WHERE " . $parametro: '';
$pordem = ($pordem !== "") ? 'ORDER BY ' . $pordem :"ORDER BY Pais_Nome " ;
$sql .= $pordem ." DESC ";
$query = mysql_query($sql);
while ($res = mysql_fetch_assoc($query)) {
echo($res['Pais_Codigo'] . ". " . $res['Pais_Nome'] . '<br />');
}
}
executando:
$busca = filter_input(INPUT_GET,'busca', FILTER_DEFAULT);
if (isset($busca)) {
echo consulta(" (Pais_Nome LIKE '%" . $busca . "%' ) ", "Pais_Nome");
}Só para fins de teste, dentro da função dê um echo nisto:
echo "total: " . mysql_num_rows( $query );
Bom dia galera!
Fiz a alteração no objeto que o paulinhosupriano sugeriu mas parece brincadeira, não funciona, nem mesmo a função para contar as linhas sugerida pelo Web Developer (PHP) (Roberto Beraldo).
Mas quando uso a função sem passar os parâmetros e a ordem, apenas echo consulta("", ""); aí traz tudo, inclusive a contagem das linhas.
Alguém sabe o porque desse mistério? Abaixo, vai todos os objetos (conexao.php e paises.php) e a página (PaisConsulta.php) que deveria trazer os resultados.
OBJETO CONEXAO.PHP:
<?php
function conexao()
{
$banco = 'familia';
$usuario = 'root';
$senha = '';
$host = 'localhost';
$porta = '3306';
$conn = mysql_connect($host, $usuario, $senha) or die ('Erro na rotina de conexão: '.mysql_error());
mysql_select_db($banco) or die ('Erro ao selecionar o banco de dados: '.mysql_error());
//As linhas abaixo servem para corrigir problemas com acentuação no banco de dados.
mysql_query("SET NAMES ('utf8')");
mysql_query("SET character_set_connection=utf8");
mysql_query("SET character_set_client=utf8");
mysql_query("SET character_set_results=utf8");
}
?>
OBJETO PAISES.PHP:
<?php
include('conexao.php');
conexao();
function consulta($parametro, $ordem)
{
$sql = "SELECT Pais_Codigo, Pais_Nome ";
$sql .= "FROM a001_paises ";
$parametro = ($parametro !== "") ? "WHERE " . $parametro: '';
$ordem = ($ordem !== "") ? 'ORDER BY ' . $ordem :"ORDER BY Pais_Nome " ;
$sql .= $ordem;
$query = mysql_query($sql);
while ($res = mysql_fetch_assoc($query))
{
echo($res['Pais_Codigo'] . ". " . $res['Pais_Nome'] . '<br />');
}
echo "total: " . mysql_num_rows( $query );
}
function incluir($nome)
{
if (mysql_query("INSERT INTO a001_paises (Pais_Nome) VALUES ('".$nome."');"))
{
return true;
} else {
return false;
}
}
function alterar($codigo, $nome)
{
if (mysql_query("UPDATE a001_paises SET Pais_Nome = '".$nome."' WHERE Pais_Codigo = ".$codigo.";"))
{
return true;
} else {
return false;
}
}
?>
PÁGINA PAISCONSULTA.PHP
<?php
include('objeto/paises.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PÁGINA INICIAL</title>
<link rel="stylesheet" type="text/css" href="estilos.css"/>
</head>
<body>
<div class="div arredonda">
<div class="titulo">Consultar Países</div>
<div>
<form method="GET" enctype="multipart/form-data" action="">
<div>Digite uma parte do nome do país:</div>
<div><input name="busca" type="text" class="campos1" value="Brasil" /></div>
<div style="margin-top:10px;"><input name="btnConsulta" type="button" value="Consultar" class="button pesquisa" /></div>
</form>
</div>
<div style="margin-top:20px;">
<?php
/* @$busca = isset( $_GET['busca'] ) ? $_GET['busca'] : null;
if ( @$busca != null )
{
consulta(" Pais_Nome LIKE '%".@$busca."%' ", "Pais_Nome");
} */
$busca = filter_input(INPUT_GET,'busca', FILTER_DEFAULT);
if (isset($busca))
{
echo consulta(" Pais_Nome LIKE '%" . $busca . "%' ", "Pais_Nome");
}
?>
</div>
</div>
</body>
</html>tente isto:
function consulta($parametro, $ordem)
{
$sql = "SELECT Pais_Codigo, Pais_Nome ";
$sql .= "FROM a001_paises ";
$parametro = ($parametro !== "") ? "WHERE " . $parametro . " " : '';
$ordem = ($ordem !== "") ? 'ORDER BY ' . $ordem :"ORDER BY Pais_Nome " ;
$sql .= $parametro;
$sql .= $ordem;
$query = mysql_query($sql) or exit( mysql_error() );
while ($res = mysql_fetch_assoc($query))
{
echo($res['Pais_Codigo'] . ". " . $res['Pais_Nome'] . '<br />');
}
echo "total: " . mysql_num_rows( $query );
}Parece mentira pessoal, mas não executa.
Fiz um teste passando um valor para a variável e consegui trazer o resultado da consulta. Mas do modo como estávamos querendo não consigo fazer. A única coisa que penso é que o objeto está correto. Está faltando alguma coisa na página PaisConsulta.php para que isso seja executado, pois no código já fiz tudo o que foi sugerido aqui.
Já tentei colocar o código PHP dentro do form e ainda assim não foi executado. E agora?
<?php
/*
@$busca = isset( $_GET['busca'] ) ? $_GET['busca'] : null;
if ( @$busca != null )
{
consulta(" Pais_Nome LIKE '%".@$busca."%' ", "Pais_Nome");
}
$busca = filter_input(INPUT_POST,'busca', FILTER_DEFAULT);
if (isset($busca))
{
echo consulta(" Pais_Nome LIKE '%" . $busca . "%' ", "Pais_Nome");
}
*/
$busca = "Brasil";
echo consulta(" Pais_Nome LIKE '%" . $busca . "%' ", "Pais_Nome");
?>Teste:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR...nsitional.dtd">
<?php include('funcoes.php'); ?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PÁGINA INICIAL</title>
<link rel="stylesheet" type="text/css" href="estilos.css"/>
</head>
<body>
<div class="div arredonda">
<div class="titulo">Consultar Países</div>
<div>
<form method="get" enctype="multipart/form-data" action="">
<div>Digite uma parte do nome do país:</div>
<div>
<input name="busca" type="text" class="campos1" /></div>
<div style="margin-top:10px;">
<input name="btnConsulta" type="submit" value="Consultar" class="button pesquisa" /></div>
</form>
</div>
<div style="margin-top:20px;">
<?php
$buscar = filter_input(INPUT_GET,'busca', FILTER_DEFAULT);
if ( !empty($buscar) )
{
$consulta = Select('a001_paises', "WHERE (Pais_Nome LIKE '%".$buscar."%') ORDER BY id DESC");
$totalRegistros= sizeof($consulta);
if($totalRegistros === 0){
echo 'Não encontramos resultados, tente novamente.';
}else{
foreach($consulta as $Registros):
echo $Registros['Pais_Codigo'] . ". " . $Registros['Pais_Nome'] . '<br />';
endforeach;
}
}
?>
</div>
</div>
</body>
</html>
Arquivo Fucoes
<?php
define('HOST','localhost');
define('USER','root');
define('PASS','');
define('DBSA','test');
function Conectar(){
$pdo = new PDO('mysql:host='.HOST.';dbname='.DBSA.';', USER, PASS);
return $pdo;
}
function Select($Tabela, $Where = null){
$pdo = Conectar();
$Condicao = ($Where != '') ? $Where : '' ;
$sql = "SELECT * FROM {$Tabela} {$Condicao}";
$exeSQl = $pdo->prepare($sql);
$exeSQl->execute();
$res = $exeSQl->fetchAll(PDO::FETCH_ASSOC);
return $res;
}Olá paulinhosupriano,
Cara, eu nem acredito! Funcionou. Porque da forma que eu fiz não estava dando certo? Vou ter que fazer a conexão em todas os objetos?
Só tenho mais uma dúvida. Alguns caracteres agora estão como símbolos. No código atual onde coloco as linhas abaixo?
>
//As linhas abaixo servem para corrigir problemas com acentuação no banco de dados.
mysql_query("SET NAMES ('utf8')");
mysql_query("SET character_set_connection=utf8");
mysql_query("SET character_set_client=utf8");
mysql_query("SET character_set_results=utf8");Logo após a conexão com o DB
Modifique a função Conectar() conforme informado abaixo:
function Conectar(){
$opcao = ;
$pdo = new PDO('mysql:host='.HOST.';dbname='.DBSA.';', USER, PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8'));
return $pdo;
}