Ir para conteúdo

POWERED BY:

Arquivado

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

Tiago.Bast

[Resolvido] Não envia na 2 vez

Recommended Posts

Ola pessoal, estou com um problema que nao estou conseguindo encontrar o erro!

Quando eu clico em enviar ele atualiza os inputs direitinho so que se eu clico de novo para enviar ele nao executa novamente a função alguem poderia me ajuda a resolver o problema.

 

Desde Ja Agradeço.

 

Index.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>Teste Post</title>
<?php 
include "scripts/config.php";
?>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">
$(function(){
$("#enviar").click(function(){
	$("#retorno").fadeOut("slow");
	beforesend:$("#carregando").fadeIn("slow");
	var valores = $("form").serialize();
	$.post("update.php",{valores: valores}, function(update){
		$("#carregando").fadeOut("slow");
		$("#retorno").fadeIn("slow").html(update);
		});
	});
});
</script>
<style>
#carregando {
width:300px;
padding:5px;
text-align:center;
background: #C6E2FF;
border:1px solid #069;
}
</style>
</head>
<body>
<div id="carregando"><img src="ajax-loader.gif" /></div>
<div id="retorno">
<form>


 <ul>
   <?php 
$sql_select = 'SELECT * FROM menu';

try{
$query_select = $conecta->prepare($sql_select);
   $query_select->execute();
$resultado_query = $query_select->fetchAll(PDO::FETCH_ASSOC);
$count = $query_select->rowCount(PDO::FETCH_ASSOC);	
}catch (PDOexception $error_select){
  echo 'Erro ao selecionar '.$error_select->getMessage();
}
$i = 0;
foreach($resultado_query as $res){
	$IdMenu = $res['Id_Menu'];
	$OrderMenu = $res['Order_Menu'];
	$TitleMenu = $res['Title_Menu'];
?>
   <li>
     <input type="text" name="I" id="Ident_Menu-<?php echo $i=$i + 1;?>" value="<?php echo $IdMenu;?>" style="display:none" />
     <input type="text" name="O" id="Order_Menu" value="<?php echo $OrderMenu;?>" />
   </li>
   <?php
	}	
?>
 </ul>
</form>

<input type="submit" name="enviar" id="enviar" value="Enviar" />
</body>
</html>

 

 

Update.php

<?php 
include 'scripts/config.php';
$va = $_POST["valores"];
$va1 = str_replace("=","",$va);
$va2 = str_replace("I","",$va1);
$va3 = str_replace("O","",$va2);
$va4 = str_replace("T","",$va3);
$va6 = preg_split('[&]', $va4);

$cont_va = (count($va6)/2)-1;
$I_Zero = 0;
$O_Zero = 1;
for ($i = 0; $i <= $cont_va; $i++) {

$id = $va6[$I_Zero];
$Ordem = $va6[$O_Zero];

$sql_atualiza = "UPDATE menu SET Order_Menu = :Ordem WHERE Id_Menu = :id";

try{
$query_update = $conecta->prepare($sql_atualiza);
$query_update->bindValue(':Ordem',$Ordem,PDO::PARAM_STR);
$query_update->bindValue(':id',$id,PDO::PARAM_STR);
$query_update->execute();

}catch (PDOexception $error_update){
   echo 'Erro ao atualizar '.$error_update->getMessage();
}

$I_Zero = $I_Zero+2;
$O_Zero = $O_Zero+2;
}

?>
<form>


 <ul>
   <?php 
$sql_select = 'SELECT * FROM menu';

try{
$query_select = $conecta->prepare($sql_select);
   $query_select->execute();
$resultado_query = $query_select->fetchAll(PDO::FETCH_ASSOC);
$count = $query_select->rowCount(PDO::FETCH_ASSOC);	
}catch (PDOexception $error_select){
  echo 'Erro ao selecionar '.$error_select->getMessage();
}
$i = 0;
foreach($resultado_query as $res){
	$IdMenu = $res['Id_Menu'];
	$OrderMenu = $res['Order_Menu'];
	$TitleMenu = $res['Title_Menu'];
?>
   <li>
     <input type="text" name="I" id="Ident_Menu-<?php echo $i=$i + 1;?>" value="<?php echo $IdMenu;?>" style="display:none" />
     <input type="text" name="O" id="Order_Menu" value="<?php echo $OrderMenu;?>" />
   </li>
   <?php
	}	
?>
 </ul>
</form>

<input type="submit" name="enviar" id="enviar" value="Enviar" />

Compartilhar este post


Link para o post
Compartilhar em outros sites

o input type="submit" deveria estar dentro da tag <form>

se você vai enviar o formulário com ajax, então deveria impedir que fosse enviado 'via html', com um return false;

 

o Update.php, não deveria conter o formulário novamente. Mas apenas as operações com o banco, e uma resposta se deu certo ou não.

dessa forma ai, você não está usando ajax.(lembre-se do return que disse ali em cima)

Compartilhar este post


Link para o post
Compartilhar em outros sites

e como eu poderia fazer para tipo eu envio os dados para o update.php e depois q ele faz a alteração no banco ele recarregar a div retorno com a tabela atualizada?

Compartilhar este post


Link para o post
Compartilhar em outros sites
use o Responder Azul respondery.png

ou a 'Resposta Rápida'.

 

 

depois das operações no arquivo update.php

 

você cospe a tabela atualizada (echo)

 

então, você captura esse retorno no sucess da requisição.

 

http://api.jquery.com/jQuery.post/

 

 

ai usa um .append() ou .html() para mostrar ela na tela.

não se esquecendo do return false; no form para q o comportamento html não seja seguido

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa desculpa pelo quote!

Amigao eu modifiquei o meu script e ficou assim!

<script type="text/javascript">
$(function(){
$("#carregando").hide();
$("#enviar").click(function(){
	$("form").submit(function () { return false; });
	$("#retorno").fadeOut("slow");
	beforesend:$("#carregando").fadeIn("slow");
	var valores = $("form").serialize();
	$.post("update.php",{valores: valores}, function(update){
		$("#carregando").fadeOut("slow");
		$("#retorno").fadeIn("slow");

		});
	});
});
</script>

e no update removi a parte que fazia novamente o select!

Agora esta funcionando a atualização no banco de dados e ta retornando a div so que o detalhe agora e que eu coloquei para ordenar em crescente e nao esta ordenando. tens alguma ideia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

não entendi a parte do ordenar.

 

        $("#enviar").click(function(){
               $("form").submit(function () { return false; });

poderia deixar apenas:

$("form").submit(function(){ 
// normal..

   return false; //ai o return aqui
});

mostre como você fez para ordernar.

 

ai no caso, o problema agora é com o PDO ne?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tipo assim o SQL esta certo, por que quando atualiza a pagina ja ordena.

 

Vou dar um exemplo nos inputs estao 1 2 3 4 e eu altero para 2 5 4 1 quando eu mando enviar ele altera corretamente no DB em seus respectivos IDs e retorna na mesma ordem 2 5 4 1. e quando eu pressiono F5 ele atualiza a pagina com a ordem correta de 1 2 4 5. Tens ideia de como posso resolver isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

possivelmente então teu problema é cache.

 

procure headers do php que evitem cache.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Brother consegui colocando load.

 

Não querendo encomodar implementei essa minha ordenação eu coloquei paginador so estou com o seguinte problema quando coloco na segunda pagina da erro pois nao estou conseguindo passar a pagina para o update.php vou colocar abaixo como esta o meu script agora.

 

<!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>Teste Post</title>
<?php 
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
include "scripts/config.php";
?>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">
$(function(){
$("#carregando").hide();
$("#retorno").load('select.php?page=1').show();
$("#pagination li").click(function(){
	var pageNum = this.id;
	$("#retorno").load("select.php?page=" + pageNum);
	});
$("#enviar").click(function(){
	$("form").submit(function () { return false; });
	$("#retorno").fadeOut("slow");
	beforesend:$("#carregando").fadeIn("slow");
	var valores = $("form").serialize();
	var pg = $("#pagination li").id;
	$.post("update.php",{valores: valores,pg: pg}, function(update){
		$("#carregando").fadeOut("slow");
		var pageNum = $("#pagination li").id;
		$("#retorno").load("select.php?page=" + pageNum).fadeIn("slow");

		});
	});
});
</script>
<style>
#carregando {
width:300px;
padding:5px;
text-align:center;
background: #C6E2FF;
border:1px solid #069;
}
</style>
</head>
<body>
<?php
$per_page = 2;
$verificaSQL = 'SELECT * FROM menu';

try{
$query_verificaSQL = $conecta->prepare($verificaSQL);
   $query_verificaSQL->execute();
$resultado_verificaSQL = $query_verificaSQL->fetchAll(PDO::FETCH_ASSOC);
$conta = $query_verificaSQL->rowCount(PDO::FETCH_ASSOC);	
}catch (PDOexception $error_select){
  echo 'Erro ao selecionar '.$error_select->getMessage();
}
$pages = ceil($conta/$per_page)
?>
<div id="carregando"><img src="ajax-loader.gif" /></div>
<div id="retorno">

</div>
<ul id="pagination">
<?php
//Pagination Numbers
for($pg=1; $pg<=$pages; $pg++)
{
?>

<li id="<?php echo $pg; ?>"><?php echo $pg; ?></li>
<?php
}
?>
</ul>
<input type="submit" name="enviar" id="enviar" value="Enviar" />
</body>
</html>

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.