Ir para conteúdo

POWERED BY:

Arquivado

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

Patriciaff

Condição adicional para SELECT

Recommended Posts

Estou fazendo um formulario onde as opções do SELECT preenche o campo 'prioridade', mas gostaria que em cada opção fosse calculado um dia diferente.

 

Por exemplo.

Se escolher opção alta, então preenche o campo 'prioridade' com a opção alta e preenche o campo 'datalimite' com o valor(data) que esta no campo 'data' + 7 dias;

 

(Ex: Campo prioridade = Alta

Campo datalimite = campo data + 7 dias)

 

Se escolher opção media, então preenche o campo 'prioridade' com a opção média e preenche o campo 'datalimite' com o valor(data) que esta no campo 'data' + 15 dias

 

(Ex: Campo prioridade = Média

Campo datalimite = campo data + 15 dias)

 

e assim em diante para 3 itens no SELECT: Alta, Média e Baixa...

 

 

Alguém se habilita????

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se quiser fazer no PHP, verifique qual foi a opção escolhida e molde o sql com suas necessidades.

 

<?php

.....
$sql = 'SELECT * FROM tbl WHERE 1=1 ';

if($prioridade == 1) { // Alta
   $sql .= ' AND datalimit .....';
} elseif($prioridade == 2){ // Media
   $sql .= ' AND datalimit ......';
} .....

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Se quiser fazer no PHP, verifique qual foi a opção escolhida e molde o sql com suas necessidades.

 

<?php

.....
$sql = 'SELECT * FROM tbl WHERE 1=1 ';

if($prioridade == 1) { // Alta
   $sql .= ' AND datalimit .....';
} elseif($prioridade == 2){ // Media
   $sql .= ' AND datalimit ......';
} .....

 

 

data limite = campo data mais 30 dias (prioridade baixa)

data limite = campo data mais 15 dias (prioridade média)

.....

 

Ainda não consegui fazer!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se o campo prioridade interfere apenas na quantidade de dias da busca, você pode armazenar exatamente este valor em dias na prioridade

 

 

<select name="prioridade">
    <option>Prioridade</option>
    <option value="7">Alta</option>
    <option value="15">Média</option>
    <option value="30">Baixa</option>
</select>

 

Se o SGDB for MySQL dá pra usar http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html#function_date-add'>DATE_ADD

 

 

... WHERE datalimite <= (NOW() + INTERVAL {$_POST["prioridade"]} DAYS)

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Se o campo prioridade interfere apenas na quantidade de dias da busca, você pode armazenar exatamente este valor em dias na prioridade

 

 

<select name="prioridade">
    <option>Prioridade</option>
    <option value="7">Alta</option>
    <option value="15">Média</option>
    <option value="30">Baixa</option>
</select>

 

Se o SGDB for MySQL dá pra usar DATE_ADD

 

 

... WHERE datalimite <= (NOW() + INTERVAL {$_POST["prioridade"]} DAYS)

 

É porque preciso que o SELECT grave em 2 campos diferente:

 

1º campo: prioridade (colocar alta, media ou baixa)

2º campo: datalimite (colocar data de acordo com o que foi escolhido)

 

ex: se for escolhida opção alta, no campo prioridade entra ALTA, no campo datalimite entra (data atual + 7 dias)

 

se for escolhida opção media, no campo prioridade entra MEDIA e no campo datalimite entra (data atual + 15 dias)

Compartilhar este post


Link para o post
Compartilhar em outros sites

É porque preciso que o SELECT grave em 2 campos diferente:

 

se vc quer dizer gravar na tabela do banco de dados a instrução é INSERT;

veja algumas dicas boas:

http://www.linhadecodigo.com.br/artigo/2975/comandos-basicos-em-sql-insert-update-delete-e-select.aspx

Compartilhar este post


Link para o post
Compartilhar em outros sites

se vc quer dizer gravar na tabela do banco de dados a instrução é INSERT;

veja algumas dicas boas:

http://www.linhadecodigo.com.br/artigo/2975/comandos-basicos-em-sql-insert-update-delete-e-select.aspx

 

O select que ela falou era do <select> do form...

 

Patriciaff:

Tente seguir cada dica que foi passada, faça testes e mais testes, pesquise no google, quebre sua cabeça.

Quando tiver esgotado seus recursos, volte aqui e nos apresente seus testes e suas novas dúvidas para que possamos ajuda-la.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O select que ela falou era do <select> do form...

 

sim, eu sei.... mas observe o 1º post dela:

 

gostaria que em cada opção fosse calculado um dia diferente.

 

etc. veja que nesse 1º post em nenhum momento ela fala em banco de dados..

por isso minha dúvida.. mas ok, aguardemos..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

 

Não sei se os dados vem de um banco de dados mas fiz um código e criei uma função que ira ajuda-lo nessa situação.

 

 

<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8" />
	<title>Adicionando Data</title>
</head>
	<body>
<?php 
function addData($dias, $operacao = "+" , $apartir_data = NULL){
	date_default_timezone_set("America/Fortaleza");	
	if(!empty($dias)):
		if($apartir_data == NULL):
			return  ($operacao == "+") ? date('d/m/Y', strtotime("+".$dias." days")) : date('d/m/Y', strtotime("-".$dias." days")) ; 
		else:
			return  ($operacao == "+") ? date('d/m/Y', strtotime("+".$dias." days", strtotime($apartir_data) )) : date('d/m/Y', strtotime("-".$dias." days", strtotime($apartir_data))) ; 
		endif;
	endif;
}

$dias_para_adicionar = array('Alta' =>7,	'Média' =>15,	'Baixa' =>30);

?>		


<form action="" method="post" enctype="multipart/form-data">
	
<select name="dias">
	<?php
		foreach ($dias_para_adicionar as $prioridade => $dias_add ) {
			printf('<option value="%s">%s</option>' , $dias_add , $prioridade);
		}
	?>
</select>
<input type="submit" name="Cadastrar" value="Cadastrar" />
</form>

<?php 

if(isset($_POST['Cadastrar']) && $_POST['Cadastrar'] == "Cadastrar"){
	$dias_add_rec = $_POST['dias'];

	if(!empty($dias_add_rec)){
		echo addData($dias_add_rec,"+");
	}else{
		echo "Erro, falta informa a quantidade de dias para o calculo desejado. ";
	}
}

?>


	</body>
</html>

 

 

Ensinando a utilizar a função abaixo.

 

function addData($dias, $operacao = "+" , $apartir_data = NULL){
	date_default_timezone_set("America/Fortaleza");	
	if(!empty($dias)):
		if($apartir_data == NULL):
			return  ($operacao == "+") ? date('d/m/Y', strtotime("+".$dias." days")) : date('d/m/Y', strtotime("-".$dias." days")) ; 
		else:
			return  ($operacao == "+") ? date('d/m/Y', strtotime("+".$dias." days", strtotime($apartir_data) )) : date('d/m/Y', strtotime("-".$dias." days", strtotime($apartir_data))) ; 
		endif;
	endif;
}

 

 

echo addData(dias_aqui, Operacao_aqui, Uma_data_para_calculo);

 

 

podendo ser usado da seguinte forma.

 

 

 

 

echo addData( 7 );
echo addData(7, "+", "10-11-2013");


echo addData( 7 );
echo addData(7, "-" );
echo addData(7, "-", "10-11-2013");

 

 

 

 

no caso a operação já fiz tudo né.

:D

 

 

Bom resumidamente,

 

1 - E preciso colocar os dias desejado para o calculo

2 - O padrão da operação e + se queres diminuir modifica para "-" se fores apenas somar com a data atual

3 - Se queres mudar a data atual e colocar outra data e só colocar no 3 parametro da função no formado "DD-MM-YYYY";

 

 

 

Este post solucionou a sua dúvida, peço que coloque como resolvido e me der um ponto positivo de reputação para que eu possa continuar ajudando outros colegas como você.

Caso não solucione o seu problema, peço que coloque a sua dúvida abaixo.

 


Att: João Paulo Sousa Supriano

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quer consultar ou salvar?

 

Sobre salvar, a lógica também não é muito difícil:

 

 

<select name="prioridade">
    <option value="">Selecione</option>
    <option>Baixa</option>
    <option>Média</option>
    <option>Alta</option>
</select>

 

Para data de salvamento, a data pode ser calculada com o próprio PHP para depender menos do SGDB

 

 

$prioridade = strtolower($_POST['prioridade']);
if ($prioridade === "baixa") {
    $datalimite = 30;
}
if ($prioridade === "média") {
    $datalimite = 15;
}
if ($prioridade === "alta") {
    $datalimite = 7;
}
$datalimite = strtotime("+{$datalimite} days");
$datalimite = date("%Y-%m-%d %H:%i:%s", $datalimite);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

 

Não sei se os dados vem de um banco de dados mas fiz um código e criei uma função que ira ajuda-lo nessa situação.

 

 

<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8" />
	<title>Adicionando Data</title>
</head>
	<body>
<?php 
function addData($dias, $operacao = "+" , $apartir_data = NULL){
	date_default_timezone_set("America/Fortaleza");	
	if(!empty($dias)):
		if($apartir_data == NULL):
			return  ($operacao == "+") ? date('d/m/Y', strtotime("+".$dias." days")) : date('d/m/Y', strtotime("-".$dias." days")) ; 
		else:
			return  ($operacao == "+") ? date('d/m/Y', strtotime("+".$dias." days", strtotime($apartir_data) )) : date('d/m/Y', strtotime("-".$dias." days", strtotime($apartir_data))) ; 
		endif;
	endif;
}

$dias_para_adicionar = array('Alta' =>7,	'Média' =>15,	'Baixa' =>30);

?>		


<form action="" method="post" enctype="multipart/form-data">
	
<select name="dias">
	<?php
		foreach ($dias_para_adicionar as $prioridade => $dias_add ) {
			printf('<option value="%s">%s</option>' , $dias_add , $prioridade);
		}
	?>
</select>
<input type="submit" name="Cadastrar" value="Cadastrar" />
</form>

<?php 

if(isset($_POST['Cadastrar']) && $_POST['Cadastrar'] == "Cadastrar"){
	$dias_add_rec = $_POST['dias'];

	if(!empty($dias_add_rec)){
		echo addData($dias_add_rec,"+");
	}else{
		echo "Erro, falta informa a quantidade de dias para o calculo desejado. ";
	}
}

?>


	</body>
</html>

 

 

Ensinando a utilizar a função abaixo.

 

function addData($dias, $operacao = "+" , $apartir_data = NULL){
	date_default_timezone_set("America/Fortaleza");	
	if(!empty($dias)):
		if($apartir_data == NULL):
			return  ($operacao == "+") ? date('d/m/Y', strtotime("+".$dias." days")) : date('d/m/Y', strtotime("-".$dias." days")) ; 
		else:
			return  ($operacao == "+") ? date('d/m/Y', strtotime("+".$dias." days", strtotime($apartir_data) )) : date('d/m/Y', strtotime("-".$dias." days", strtotime($apartir_data))) ; 
		endif;
	endif;
}

 

 

echo addData(dias_aqui, Operacao_aqui, Uma_data_para_calculo);

 

 

podendo ser usado da seguinte forma.

 

 

 

 

echo addData( 7 );
echo addData(7, "+", "10-11-2013");


echo addData( 7 );
echo addData(7, "-" );
echo addData(7, "-", "10-11-2013");

 

 

 

 

no caso a operação já fiz tudo né.

:D

 

 

Bom resumidamente,

 

1 - E preciso colocar os dias desejado para o calculo

2 - O padrão da operação e + se queres diminuir modifica para "-" se fores apenas somar com a data atual

3 - Se queres mudar a data atual e colocar outra data e só colocar no 3 parametro da função no formado "DD-MM-YYYY";

 

 

 

Este post solucionou a sua dúvida, peço que coloque como resolvido e me der um ponto positivo de reputação para que eu possa continuar ajudando outros colegas como você.

Caso não solucione o seu problema, peço que coloque a sua dúvida abaixo.

 

 

Att: João Paulo Sousa Supriano

 

 

 

Sua função é ótima, mas mostra a data na página...

Eu quero que essa data limite seja enviada para um campo chamada datalimite dentro de um bd chamado bdteste, para que mais tarde o usuário possa consultar a essa data.

 

E ao mesmo tempo, que o nome baixa,media ou alta fosse para outro campo da tabela chamado prioridade.

 

 

(Ex: se eu escolher prioridade alta, no campo prioridade grava alta e no campo datalimite grava data atual + 7 dias)

 

isso no campo SELECT apenas com botão submit para todos os outros campos também chamado btSalva1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então meu amigo, adapte para recuperar a data passada sem parametro e por esse motivo criei o Uma_data_para_calculo que essa data poderá ser de um banco de dados adicionando +x dias referente a data informada, depois só salvar no banco de dados. e atualizar a data datalimite.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então meu amigo, adapte para recuperar a data passada sem parametro e por esse motivo criei o Uma_data_para_calculo que essa data poderá ser de um banco de dados adicionando +x dias referente a data informada, depois só salvar no banco de dados. e atualizar a data datalimite.

 

em Una_data_para_calculo quando coloco a variável que criei $data ele dá uma data de 1970...

 

e ainda não grava as palavras alta, media e baixa no campo prioridade

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Patriciaff,

 

Se você achar interessante posso sugerir esse simples exemplo..

 

 

<form name="form1" method="post" action="">
<label for="prioridade">Prioridade</label>
<select name="prioridade" id="prioridade">
<option value="30">Baixa</option>
<option value="15">Média</option>
<option value="7">Alta</option>
</select>
<input type="submit" name="gravar" id="gravar" value="Gravar">
</form>
<?php
if($_POST){
$prioridade = $_POST['prioridade'];
switch ($prioridade){
case 30:
@$datalimite = mktime(date("H"),date("i"),date("s"),date("m"),date("d")+30,date("Y"));
@$prioridade_texto = "Baixo";
break;
case 15:
@$datalimite = mktime(date("H"),date("i"),date("s"),date("m"),date("d")+15,date("Y"));
@$prioridade_texto = "Médio";
break;
case 7:
@$datalimite = mktime(date("H"),date("i"),date("s"),date("m"),date("d")+7,date("Y"));
@$prioridade_texto = "Alto";
break;
}
//print date('d-m-Y',$datalimite);
$sql = "INSERT INTO tbl_prioridade (datalimite,prioridade) VALUES('$datalimite',$prioridade_texto)";
$qy = mysqli_query($con,$sql);
}
?>
Onde utilizamos a instrução Case para determinar qual a data e texto deverá ser incluída no banco de dados, se bem entendi o seu problema isso deverá resolver. Lembre-se de ter a conexão ativa com o banco de dados para a realização da inclusão das informações.


Apenas uma correção para facilitar o trabalho com o DataBase adicione a formatação da data para os Cases ficando

 

switch ($prioridade){
case 30:
@$datalimite = date('Y-m-d',mktime(date("H"),date("i"),date("s"),date("m"),date("d")+30,date("Y")));
@$prioridade_texto = "Baixo";
break;
case 15:
@$datalimite = date('Y-m-d',mktime(date("H"),date("i"),date("s"),date("m"),date("d")+15,date("Y")));
@$prioridade_texto = "Médio";
break;
case 7:
@$datalimite = date('Y-m-d',mktime(date("H"),date("i"),date("s"),date("m"),date("d")+7,date("Y")));
@$prioridade_texto = "Alto";
break;
}

 

 

para fins de teste você pode substitui as linhas que contém a instrução

 

$sql = "INSERT INTO tbl_prioridade (datalimite,prioridade) VALUES('$datalimite',$prioridade_texto)";
$qy = mysqli_query($con,$sql);

 

 

print 'Data: ' . $datalimite . '<br>Prioridade: ' . $prioridade_texto;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Patriciaff,

 

Se você achar interessante posso sugerir esse simples exemplo..

 

 

<form name="form1" method="post" action="">
<label for="prioridade">Prioridade</label>
<select name="prioridade" id="prioridade">
<option value="30">Baixa</option>
<option value="15">Média</option>
<option value="7">Alta</option>
</select>
<input type="submit" name="gravar" id="gravar" value="Gravar">
</form>
<?php
if($_POST){
$prioridade = $_POST['prioridade'];
switch ($prioridade){
case 30:
@$datalimite = mktime(date("H"),date("i"),date("s"),date("m"),date("d")+30,date("Y"));
@$prioridade_texto = "Baixo";
break;
case 15:
@$datalimite = mktime(date("H"),date("i"),date("s"),date("m"),date("d")+15,date("Y"));
@$prioridade_texto = "Médio";
break;
case 7:
@$datalimite = mktime(date("H"),date("i"),date("s"),date("m"),date("d")+7,date("Y"));
@$prioridade_texto = "Alto";
break;
}
//print date('d-m-Y',$datalimite);
$sql = "INSERT INTO tbl_prioridade (datalimite,prioridade) VALUES('$datalimite',$prioridade_texto)";
$qy = mysqli_query($con,$sql);
}
?>
Onde utilizamos a instrução Case para determinar qual a data e texto deverá ser incluída no banco de dados, se bem entendi o seu problema isso deverá resolver. Lembre-se de ter a conexão ativa com o banco de dados para a realização da inclusão das informações.

Apenas uma correção para facilitar o trabalho com o DataBase adicione a formatação da data para os Cases ficando

 

switch ($prioridade){
case 30:
@$datalimite = date('Y-m-d',mktime(date("H"),date("i"),date("s"),date("m"),date("d")+30,date("Y")));
@$prioridade_texto = "Baixo";
break;
case 15:
@$datalimite = date('Y-m-d',mktime(date("H"),date("i"),date("s"),date("m"),date("d")+15,date("Y")));
@$prioridade_texto = "Médio";
break;
case 7:
@$datalimite = date('Y-m-d',mktime(date("H"),date("i"),date("s"),date("m"),date("d")+7,date("Y")));
@$prioridade_texto = "Alto";
break;
}

 

 

para fins de teste você pode substitui as linhas que contém a instrução

 

$sql = "INSERT INTO tbl_prioridade (datalimite,prioridade) VALUES('$datalimite',$prioridade_texto)";
$qy = mysqli_query($con,$sql);

 

 

print 'Data: ' . $datalimite . '<br>Prioridade: ' . $prioridade_texto;

 

 

Ele só grava o valor de value...

 

tenho uma pagina chamada funcao.php com os valores das variaveis.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe não entendi seu comentário, para ficar mais fácil posta o seu código para que possamos lhe ajudar

 

 

pag. index

 

<?php
include "../ess/conexao.php";
if($_GET['funcao'] == "editar"){
$id = $_GET['id'];
$sql_update = mysql_query("SELECT * FROM tbteste WHERE id = '$id'");
while($linha = mysql_fetch_array($sql_update)){
$nome = $linha['nome'];
...
<form id="form1" name="form1" method="post" onsubmit="return validar(this);" action="../ess/funcoes.php?funcao=editar&id=<?php echo $id ?>">
...
<td colspan="2"><label><strong>Prioridade</strong>:   
<select name="prioridade" id="prioridade">
<option value="Baixa">Baixa</option>
<option value="Média">Média</option>
<option value="Alta">Alta</option>
</select>
</label></td>
...
pag. funcoes.php
<?php
include ('conexao.php');
$id = $_POST['id'];
$grava_nome = $_POST['txtNome'];
...
if($_GET['funcao'] == "gravar"){
$sql_gravar = mysql_query("INSERT INTO tbteste ( nome, prioridade, datamodificacao, datalimite) values ('$grava_nome','gravar prioridade','gravar datalimite')");

 

 

Gostaria que o campo select completasse tanto o campo prioridade quanto o campo datalimite.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

pag. funcoes.php

 

 

<?php 
 
include ('conexao.php'); 
 
$id = $_POST['id']; 
$grava_nome = $_POST['txtNome']; 
...
 

if($_GET['funcao'] == "gravar"){ 
$sql_gravar = mysql_query("INSERT INTO tbteste ( nome, prioridade, datamodificacao, datalimite) values ('$grava_nome','[b]gravar prioridade[/b]','[b]gravar datalimite[/b]')");

 

 

 

Gostaria que o campo select completasse tanto o campo prioridade quanto o campo datalimite.

 

 

 

 

$prioridade = strtolower($_POST['prioridade']);
if ($prioridade === "baixa") {
    $datalimite = 30;
}
if ($prioridade === "média") {
    $datalimite = 15;
}
if ($prioridade === "alta") {
    $datalimite = 7;
}
$datalimite = strtotime("+{$datalimite} days");
$datalimite = date("%Y-%m-%d %H:%i:%s", $datalimite);

 

 

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.