Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

N3lson

Opinião: form post

Recommended Posts

N3lson

Boa noite criei este post para saber quais as vossas técnicas para "limpar" o $_POST de um form para evitar dupla inserção, após um refresh.

Edited by N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Share this post


Link to post
Share on other sites
HappyHippyHippo

será melhor dares um exemplo da situação de que referes


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
N3lson

será melhor dares um exemplo da situação de que referes

Imaginem um form

$_POST['XXX'] = 4;

INSERT INTO ZZZ(b) values($_POST['XXX']);

no final da inserção na base de dados (usando mesma página), se o user fazer o refresh da página, volta a inserir o valor 4 (dupla inserção).

Edited by N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Share this post


Link to post
Share on other sites
N3lson
	public function inserir_equipamento(){
	echo '<form action="" method="post">

						<div class="block">
							<label><i class="fa fa-calendar fa-fw"></i>Nome do equipamento</label>
							<input type="text" name="maquina" placeholder="Nome interno do equipamento">
						</div>
				<div class="block">
					  <button type="submit" class="btn azul round f-dir"><i class="fa fa-sign-out fa-fw"></i> Registar</button>
					  <div class="clear"></div>
				</div>
		 </form>';
	if(isset($_POST['maquina']) && !empty($_POST['maquina']))
	{
			 sql::inserir_sql($_POST,'maquina');
	}

/**** SQL CLASS ****/

public function inserir_sql($form=array(),$tabela=null,$preg = null)
{
	$virgula = ',';

		$sql = "INSERT INTO {$tabela}(";

			#campos da tabela
			foreach($form as $post=>$value)
			{
				$sql .= $post.$virgula;
			}

			$sql .= ') VALUES(';


			#valores para tabela
			foreach($form as $post=>$valor)
			{
				if ($valor == 'Executar')
				{
					continue;
				}
				if($post == 'nota')
				{
					$valor = nl2br($valor);
				}

				$sql .= "'".$valor ."'". $virgula;
			}
			$sql .=')';

			$query = str_replace(",)",")",$sql);


	if($tabela == 'maquina')
	{
		$a = $this->con->query("SELECT * FROM maquina WHERE maquina LIKE '{$form['maquina']}'");
		$existe = $a->fetch_object();

	}

	# controle de dados repetidos
	if(@$existe)
	{
		html::aviso('O equipamento que está a inserir já se encontra registado na base de dados!', html::indexof().'?inserir='.session_id());
		//html::alerta('O equipamento que está a inserir já se encontra registado na base de dados!\n', html::indexof());
	}
	else
	{
		 $do = $this->con->query($query);

		 $resultado = $this->con->affected_rows;

		 if($resultado > 0)
		 {
			 html::aviso('<span class="verde">Acção concluída com sucesso</span>. Dados Inseridos [ '.$resultado.' ]',html::indexof());
			 //html::alerta('Acção concluída com sucesso \nDados Inseridos [ '.$resultado.' ]',html::indexof());
		 }
		 else
		 {
			 html::aviso('<span class="vermelho">ERRO:</SPAN> Ocorreu um erro ao executar a acção pretendida. Se o problema persistir, contacte administrador do sistema.', html::indexof());
			 //html::alerta('Ocorreu um erro ao executar a acção pretendida.\nSe o problema persistir, contacte Administrador do sistema\n+ '.$con->error.' +', html::indexof());
		 }
	}

Edited by N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Share this post


Link to post
Share on other sites
HappyHippyHippo

antes de mais, sendo um pedido por POST, efectuar um refresh da página (Ctrl-R) não efectua a inserção na base de dados


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
HappyHippyHippo

pois ... esqueci-me que voçes teem o péssimo hábito de fazer post para a mesma página, alem de não fazer redirect no fim do processamento


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
N3lson

pois ... esqueci-me que voçes teem o péssimo hábito de fazer post para a mesma página, alem de não fazer redirect no fim do processamento

Está a fazer redirect

html::aviso('<span class="verde">Acção concluída com sucesso</span>. Dados Inseridos [ '.$resultado.' ]',html::indexof());

	public function indexof($place=null)
{
	if(!$place)
	{
		$r = $_SERVER['PHP_SELF'];
	}
	else{
		$r = $place.'.php';
	}
	return $r;
}

O que pretendia saber era a técnica que vocês usam para limpar o $_post depois de submetido.

Edited by N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Share this post


Link to post
Share on other sites
HappyHippyHippo

como disse, simplesmente não se limpa nada porque não existe necessidade de o fazer:

   client           |       server
---------------------+--------------------

  ----- request form -------->+
                            form.php
  <----- reply form page -----+
  |
  +----- send form data ---------->+
                                submit.php
       <- redirect to result page -+
       |
       +- request result page -------->+
                                  result_page.php
  <------ present result page ---------+
(refresh)
  +---- request result page ---------->+
                                  result_page.php
  <------ present result page ---------+

nota : ainda melhor do que isto é o envio por ajax

  • Vote 1

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.