Ir para conteúdo

POWERED BY:

Arquivado

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

Luciano Junior_164434

Reenvio de formulário ao atualizar a página

Recommended Posts

E aí pessoal, tudo certo?



Estou tendo um problema aqui com o PHP.


Eu estou desenvolvendo um sistema de encurtador de links, que até agora está na reta final.


Já está até no ar, caso queiram verificar: www.gfans.cc.



Porém, estou tendo um problema com reenvio de dados.


O problema é simples: se eu encurto um link e atualizo na hora de pegar o link, ele encurta o mesmo novamente.


Esse é um problema e tanto, pois podemos dizer que é meio que um spam, não?



Fiquem a vontade para acessar o site e testar esse problema.



Já procurei diversos tutoriais na internet, alguns falando de session_start(); com session_destroy(); ou alguns falando sobre unset($_POST); e outros exemplos. No entretanto, nenhum supriu minha necessidade, ou então eu não soube utilizar da maneira correta.



Alguém de vocês podem me ajudar a solucionar esse problema?



<?
include("config.php");
if (strstr($_SERVER['HTTP_REFERER'], $root));
else { header ("Location: $rooturl"); }

$ip = $_SERVER['REMOTE_ADDR'];
$url = mysql_real_escape_string($_POST['url']);

if(preg_match('|^http(s)?://[a-z0-9-]+(\.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url)) {
if (empty($_POST['tag'])) {
$query = mysql_query("INSERT INTO $table (ip,url) VALUES ('$ip','$url')") or die('MySQL error: '.mysql_error());
$qs = mysql_insert_id();
} else {
if (ereg('^[a-zA-Z0-9]+[a-zA-Z0-9]+$', $_POST['tag'])) {
$tag = mysql_real_escape_string($_POST['tag']);
$query = mysql_query("select * from $table where `tag` = '$tag';") or die('MySQL error: '.mysql_error());
if (mysql_num_rows($query) != 0)
die("<script>alert('Seu valor pr\u00e9-definido j\u00e1 est\u00e1 em uso. Por favor, tente outro ou deixe em branco para que o sistema gere um automaticamente.');history.go(-1) </script>");
else {
$query = mysql_query("insert $table (ip,url,tag) VALUES ('$ip','$url','$tag')") or die('MySQL error: '.mysql_error());
$qs = $tag;
}
} else
die("<script>alert('Seu valor pr\u00e9-definido contem caracteres inv\u00e1lidos. Apenas n\u00fameros e letras do alfabeto s\u00e3o permitidos. Por favor, reveja os dados e tente novamente.');history.go(-1) </script>");
}
$link = $destination . $qs;
require 'create_template.php';
} else {
echo "<script>alert('Por favor, digite uma URL v\u00e1lida. Reveja os dados e tente novamente.');history.go(-1) </script>"; }
mysql_close();
?>

Fico tremendamente agradecido.


Forte abraço!


;)


Compartilhar este post


Link para o post
Compartilhar em outros sites

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa Bruno, boa noite.

 

Eu passei pelo seu tutorial uma vez.

Ele realmente funciona.

 

Ao enviar o formulário fica post, e ao atualizar ele fica refresh.

Porém, não consegui adequar ao meu sistema de upload.

 

A única coisa que eu quero é que, se for atualizado a página, que ocorra um header('Location: /'); sem enviar mais nada para o banco de dados.

 

Caso ele queira encurtar o mesmo link, ele poderá, mas acessando pela página inicial.

 

Você poderia me ajudar, ou dizer o que devo fazer?

 

Forte abraço!

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem um jeito facil de fazer isso, você cria uma página php aparte onde só efetuará o processo de upload e essa página não irá ter conteudo nenhum, e coloca no final do código um header('Location: URL');

Aqui vai um exemplo:

create.php

<?php
//CODIGO
// AQUI...

header('Location: /view/' . $code);
?>

e depois você cria a regra no .htaccess para facilitar esse url, o arquivo na verdade vai funcionar "view.php?code=$code" mas com o metodo dos url amigaveis você pode facilitar o url (o que dá para prevenir contra ataques sql injection), mas esse processo é opcional, depois no view.php ficará aquela pág. q exibirá o URL encurtado, ex:

view.php

<?php
$code = $_GET['code'];

echo 'http://gfans.cc/'.$code;
?>

Mais alguma dúvida?

Espero ter ajudado :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi.

Porém, o create.php ele já é apenas o código (pode ver que não tem CSS nem nada).

Todo o estilo, inclusive o campo para mostrar a URL, está no create_template.php, mas rodando no create.php

 

Você propõe então que, em vez de require create_template, que eu faça um header?

E ele por acaso vai puxar mesmo o campo?

 

As dúvidas são muitas amigo.

Valeu o/

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Luciano Junior_164434,

 

Para usar a minha dica dali de cima, vc precisa se basear nas informações informadas pelo usuário.

Quais são as informações que o usuário preenche?

 

tag e url ?

Mostre a sua tentativa e o problema q vc teve.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, eu vou dar mais umas explicações.

 

O usuário tem que inserir a URL completa e, caso desejar, a TAG.

Caso ele não deseje a tag, o sistema mesmo vai no banco de dados e cria uma tag numérica para tal.

No sistema, a $tag é o ($_POST['tag']) e a $url é o ($_POST['url']);

 

Aí, quando esse dado é cadastrado, retorna para a página create (agora a chamo de view, pois segui a dica do amigo e mexi um pouco com URL amigáveis) e é exibido com echo http://www.gfans.cc/"."$qs" que no caso o $qs é tanto a TAG que ele selecionou como o número gerado pelo banco. Ou seja, $qs = $tag.

 

É aí que chega o problema. Não consegui adaptar o seu código ao meu.

O $_POST['url'] é a URL completa e a $_POST['tag'] é a TAG que ele colocou.

 

Por fim, existe um $link = $destination . $qs;

:sick:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo o que eu busquei, o mais viável seria redirecionar para outra página.

Todavia, ao redirecionar, ele não puxa o dado que foi cadastrado no outro arquivo.

O que eu devo fazer?

 

Obs: quando eu uso novamente outro header, ele dá erro.

 

Grato até o momento.

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.