Ir para conteúdo

POWERED BY:

Arquivado

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

Douglas Fabiano

[Resolvido] Deixar linha em branco

Recommended Posts

testa ae

<?php
//chama o arquivo de conexão com o bd
include("conexao_1_sysvtr.php");
?>
<form action="index_receber.php" method="post" name="form" id="frm">
 <SELECT ID="data"> 
  <OPTION VALUE="0" SELECTED>TODOS...</OPTION>
<?php
$sql = mysql_query("select distinct(data_manutencao) as data FROM tbl_principal");//mudei a sintaxe p/ filtrar datas diferentes(não repetir)
while($linha=mysql_fetch_array($sql)){                                 
    echo "<OPTION VALUE=".$linha['data'].">".$linha['data']."</OPTION>";
}
?>
</SELECT>
<INPUT TYPE=SUBMIT VALUE=PESQUISAR>
</FORM>

<?
include("conexao_1_sysvtr.php");
$data = $_POST["data"];
echo "o valor que chegou é: ".$data;//verificando se está recebendo a data como paramentro.
if($data!="0")   
        $sql = mysql_query("SELECT * FROM tbl_principal where data_manutencao = '$data' order by data_manutencao");
else 
    $sql = mysql_query("SELECT * FROM tbl_principal order by data_manutencao");
while($l=mysql_fetch_array($sql)){
      echo $l['vtr'];
      echo "<br>".$l['data_manutencao']; 
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos começar pelo início.

`codigo` tinyint(30) unsigned NOT NULL AUTO_INCREMENT,
 `vtr` varchar(50) DEFAULT NULL,
 `placa` varchar(10) DEFAULT NULL,
 `marca` varchar(20) DEFAULT NULL,
 `tipo_manutencao` varchar(20) DEFAULT NULL,
 `servico_realizado` varchar(100) DEFAULT NULL,
 `pecas_utilizadas` varchar(300) DEFAULT NULL,
 `qtd_de_pecas` varchar(10) DEFAULT NULL,
 `vr_unitario_servico` varchar(10) DEFAULT NULL,
 `vr_unitario_pecas` varchar(10) DEFAULT NULL,
 `vr_total_pecas` varchar(10) DEFAULT NULL,
 `vr_total_manutencao` varchar(10) DEFAULT NULL,
 `data_manutencao` date DEFAULT NULL,
 `qtd_abastecimento_litros` tinyint(5) unsigned DEFAULT NULL,
 `usuario` varchar(50) DEFAULT NULL,
 `data_cadastro` date DEFAULT NULL,
 `observacao` varchar(50) DEFAULT NULL,
 PRIMARY KEY (`codigo`)
) TYPE=MyISAM AUTO_INCREMENT=19;

Sua modelagem está errada. Você tem uma tabela de viaturas. Então, faça o relacionamento entre elas utilizando o id da viatura, e não o nome dela. Depois disto, você cria o formulário, mais ou menos assim:

<label for="viatura">Viatura</label>
<select name="viatura" id="viatura">
	<option value="">Todas as viaturas</option>
	<?php
	//chama o arquivo de conexão com o bd
	include 'conexao_1_sysvtr.php';
	// selecionamos todas as viaturas
	$viaturas = mysql_query('SELECT * FROM viatura') or die(mysql_error());
	// criamos o laço para exibir as viaturas, onde o value será o id da viatura 
	// e o que aparecerá será o nome da viatura
	while($ver = mysql_fetch_array($viaturas))
		echo '<option value="',$ver['viaturaId'],'" >',$ver['viaturaDescricao'],'</option>';
	?>
</select><br />
<label for="dataInicio">Data de Início</label>
<input type="text" name="dataInicio" id="dataInicio" class="calendario"><br />
<label for="dataFim">Data de Fim (deixe em branco caso seja hoje)</label>
<input type="text" name="dataFim" id="dataFim" class="calendario"><br />
Aí, na página que recebe os dados deste formulário, você faz algo assim

<?php
include 'conexao_1_sysvtr.php';
// evitando Injection
$viatura = (int)$_POST['viatura'];
// transformando a data digitada DD/MM/AAAA em AAAA-MM-DD, para efetuar a consulta ao banco de dados
$dataInicio = (isset($_POST['dataInicio']))? implode('-',array_reverse(explode('/',addslashes($_POST['dataInicio'])))): '';
// transformando a data digitada DD/MM/AAAA em AAAA-MM-DD, para efetuar a consulta ao banco de dados
// além disto, verificamos se foi digitada alguma coisa. Se não foi, colocamos a data de hoje.
$dataFim = (isset($_POST['dataFim']) && !empty($_POST['dataFim'])) ? implode('-',array_reverse(explode('/',addslashes($_POST['dataFim'])))) : date('Y-m-d');

// montando a query
$sql = "SELECT * FROM tabela JOIN viatura USING (viaturaId) WHERE data_cadastro BETWEEN ('$dataInicio' AND '$dataFim')";
if(!empty($viatura))
	$sql .= 'AND viaturaId = '.$viatura;
	
// mantenha esta linha somente durante o desenvolvimento
$resultado = mysql_query($sql) or die('Erro. Consulta enviada '.$sql.'<br />Erro do MySQL '.mysql_error());
// quando finalizar, utilize esta segunda linha
// $resultado = mysql_query($sql) or die('Erro inesperado.');

// Se existirem registros, exibe-os abaixo
if (mysql_num_rows($resultado) > 0 )
{
	// aqui você faz a exibição dos dados da tabela
	while($l = mysql_fetch_assoc($resultado))
	{
		echo $l['vtr'];
		echo "<br />".$l['data_manutencao'];
	}
}
// senão, exibe a mensagem
else
	echo 'Não há registros';
?>

Atente-se aos nomes dos campos na tabela e à modelagem da tabela. Só vai funcionar se você modificar os registros, ou seja, se você modificar os registros nesta tabela, colocando o id da viatura ao invés do nome dela.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja o erro que apareceu:

 

Erro. Consulta enviada SELECT * FROM tbl_principal JOIN vtr USING (viaturaId) WHERE data_manutencao BETWEEN ('2010-03-01' AND '2010-03-20')AND viaturaId = 11
Erro do MySQL Table 'banco.vtr' doesn't exist

Veja como ficou meu formulário onde coloco os períodos:

<select name="viatura" id="viatura">
        <option value="">Todas as viaturas</option>
        <?php
        //chama o arquivo de conexão com o bd
        include 'conexao_1_sysvtr.php';
        // selecionamos todas as viaturas
        $viaturas = mysql_query('SELECT * FROM tbl_viaturas') or die(mysql_error());
        // criamos o laço para exibir as viaturas, onde o value será o id da viatura 
        // e o que aparecerá será o nome da viatura
        while($ver = mysql_fetch_array($viaturas))
                echo '<option value="',$ver['viaturaId'],'" >',$ver['vtr_descricao'],'</option>';
        ?>
</select><br />

Veja o código onde recebe os dados: "viatura_receber_dados.php"

 

<?php
include 'conexao_1_sysvtr.php';
// evitando Injection
$viatura = (int)$_POST['viatura'];
// transformando a data digitada DD/MM/AAAA em AAAA-MM-DD, para efetuar a consulta ao banco de dados
$dataInicio = (isset($_POST['dataInicio']))? implode('-',array_reverse(explode('/',addslashes($_POST['dataInicio'])))): '';
// transformando a data digitada DD/MM/AAAA em AAAA-MM-DD, para efetuar a consulta ao banco de dados
// além disto, verificamos se foi digitada alguma coisa. Se não foi, colocamos a data de hoje.
$dataFim = (isset($_POST['dataFim']) && !empty($_POST['dataFim'])) ? implode('-',array_reverse(explode('/',addslashes($_POST['dataFim'])))) : date('Y-m-d');

// montando a query
$sql = "SELECT * FROM tbl_principal JOIN vtr USING (viaturaId) WHERE data_manutencao BETWEEN ('$dataInicio' AND '$dataFim')";
if(!empty($viatura))
        $sql .= 'AND viaturaId = '.$viatura;
        
// mantenha esta linha somente durante o desenvolvimento
$resultado = mysql_query($sql) or die('Erro. Consulta enviada '.$sql.'<br />Erro do MySQL '.mysql_error());
// quando finalizar, utilize esta segunda linha
// $resultado = mysql_query($sql) or die('Erro inesperado.');

// Se existirem registros, exibe-os abaixo
if (mysql_num_rows($resultado) > 0 )
{
        // aqui você faz a exibição dos dados da tabela
        while($l = mysql_fetch_assoc($resultado))
        {
                echo $l['vtr'];
                echo "<br />".$l['data_manutencao'];
        }
}
// senão, exibe a mensagem
else
        echo 'Não há registros';
?>

Lembrando que existe dados nesse período ok.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Table 'banco.vtr' doesn't exist

 

Olha o erro... Bem claro... A tabela vtr não existe no banco de dados banco.

 

Carlos Eduardo

 

EDIT - Vi um erro pequeno, mas que vai aparecer...

 

 $sql .= ' AND viaturaId = '.$viatura;
Adicione um espaço antes do AND.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Matias Rezende auterei mas ainda está apreentando erro:

 

veja:

Erro. Consulta enviada SELECT * FROM tbl_principal JOIN tbl_viaturas USING (viaturaId) WHERE data_manutencao BETWEEN ('2000-01-01' AND '2010-03-07')
Erro do MySQL You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

veja se essa linha está certo:

$sql = "SELECT * FROM tbl_principal JOIN tbl_viaturas USING (viaturaId) WHERE data_manutencao BETWEEN ('$dataInicio' AND '$dataFim')";

Sendo que a tbl_principal é onde está todos os registros da manutenção do veículo e a tbl_viaturas é o local onde temos os dados dos veículo (viaturaId, descricao, etc...)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tirei o pareteses i ficou assim:

 

$sql = "SELECT * FROM tbl_principal JOIN tbl_viaturas USING (viaturaId) WHERE data_manutencao BETWEEN '$dataInicio' AND '$dataFim'";
if(!empty($viatura))
 $sql .= ' AND viaturaId = '.$viatura;

Veja o erro que .aparece após eu tirar o parênteses

 

Erro. Consulta enviada SELECT * FROM tbl_principal JOIN tbl_viaturas USING (viaturaId) WHERE data_manutencao BETWEEN '2000-01-01' AND '2010-03-09'
Erro do MySQL Unknown column 'viaturaId' in 'from clause'
:mellow:

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara, tenta fazer as modificações conforme o seu banco! basta ler e mudar o que tá diferente

 

if(!empty($viatura))
$sql .= ' AND viaturaId = '.$viatura;

 

 

if(!empty($viatura))
$sql .= ' AND codigo = '.$viatura;

 

 

será que você não conhece seu próprio banco?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda apresenta o mesmo erro:

Erro. Consulta enviada SELECT * FROM tbl_principal JOIN tbl_viaturas USING (viaturaId) WHERE data_manutencao BETWEEN '2000-01-01' AND '2010-03-09'
Erro do MySQL Unknown column 'viaturaId' in 'from clause'

Veja a tabela de viaturas (apenas de viaturas onde busca para fazer JOIN)

`vtr_descricao` varchar(50) DEFAULT NULL,
  `viaturaId` tinyint(10) unsigned NOT NULL AUTO_INCREMENT,
  `marca` varchar(50) DEFAULT NULL,
  `localizacao` varchar(50) DEFAULT NULL,
  `situacao` varchar(50) DEFAULT NULL,
  `prefixo` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`viaturaId`)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Douglas...

 

JOIN tbl_viaturas USING (viaturaId)
Quando fazemos isto, estamos dizendo para o SQL

JUNTE a tabela tbl_viaturas à tabela anterior USANDO O CAMPO (viaturaId)

Então, para que funcione desta forma, o campo deve ter o mesmo nome nas 2 tabelas. Compreendeu?

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim compreendi... coloquei o nome de "vtr" em ambas campos das tabelas, onde tem a descrição do veículo e não "ID" dele. Não tem problema porque o usuário não poderá alterar o nome do veículo por isso coloquei a JOIN para o nome mesmo "vtr";

Bom! está fazendo o select por data tudo certinho, porem quando eu escolho um veículo ele retorna todos ... parece que não está filtrando por veículo...

 

Vejam o código

$sql = "SELECT * FROM tbl_principal JOIN tbl_viaturas USING (vtr) WHERE data_manutencao BETWEEN '$dataInicio' AND '$dataFim'";
if(!empty($viatura))
        $sql .= ' AND vtr = '.$viatura;

Vejam a tabela_viaturas:

  `vtr` varchar(50) DEFAULT NULL,
  `viaturaId` tinyint(10) unsigned NOT NULL AUTO_INCREMENT,
  `marca` varchar(50) DEFAULT NULL,
  `localizacao` varchar(50) DEFAULT NULL,
  `situacao` varchar(50) DEFAULT NULL,
  `prefixo` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`viaturaId`)

Agora a tabela principal:

  `codigo` tinyint(30) unsigned NOT NULL AUTO_INCREMENT,
  `vtr` varchar(50) DEFAULT NULL,
  `placa` varchar(10) DEFAULT NULL,
  `marca` varchar(20) DEFAULT NULL,
  `tipo_manutencao` varchar(20) DEFAULT NULL,
  `servico_realizado` varchar(100) DEFAULT NULL,
  `pecas_utilizadas` varchar(300) DEFAULT NULL,
  `qtd_de_pecas` varchar(10) DEFAULT NULL,
  `vr_unitario_servico` varchar(10) DEFAULT NULL,
  `vr_unitario_pecas` varchar(10) DEFAULT NULL,
  `vr_total_pecas` varchar(10) DEFAULT NULL,
  `vr_total_manutencao` varchar(10) DEFAULT NULL,
  `data_manutencao` date DEFAULT NULL,
  `qtd_abastecimento_litros` tinyint(5) unsigned DEFAULT NULL,
  `viaturaId` tinyint(50) unsigned DEFAULT NULL,
  `usuario` varchar(50) DEFAULT NULL,
  `data_cadastro` date DEFAULT NULL,
  `observacao` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`codigo`)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se por acaso eu quiser buscar pelo "viaturaId" é só eu mudar o nome da coluna da "tbl_principal" de "vtr" (onde fica armazenado o nome dos veículos) renomear para "viaturaId" é isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se por acaso eu quiser buscar pelo "viaturaId" é só eu mudar o nome da coluna da "tbl_principal" de "vtr" (onde fica armazenado o nome dos veículos) renomear para "viaturaId" é isso?

Não. Você tem que mudar os dados também.

 

Bom! está fazendo o select por data tudo certinho, porem quando eu escolho um veículo ele retorna todos ... parece que não está filtrando por veículo...

De onde vem a $viatura? Outra coisa, antes de executar o mysql_query, apenas para debug, dá um echo na $sql. Posta aqui, por favor.

 

Carlos Eduardo

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.