Ir para conteúdo

POWERED BY:

Arquivado

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

Ilano

Iniciante em PHP - O que tem de errado nesse formulário?

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites
        <?php
            $busca = $_GET['busca'];
            if (isset($busca))
            {
                consulta("Pais_Nome LIKE '%".$busca."%'", "Pais_Nome");
            }
        ?>

Nessa parte $busca = $_GET['busca'];, você está usando a variavel $_GET['busca'] sem ela ter sido criada. Tente fazer assim:

        <?php
            $busca = @$_GET['busca'];
            if (isset($busca))
            {
                consulta("Pais_Nome LIKE '%".$busca."%'", "Pais_Nome");
            }
        ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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'];

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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">
<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á?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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");
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

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>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 );
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

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");
		?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

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");

Compartilhar este post


Link para o post
Compartilhar em outros sites

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;
}

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.