Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Minha dúvida é a seguinte...
Criei um sistema simples de encurtar URL,
é exatamente como um sistema de cadastro mais tem um pequeno problema...
Eu gostaria que quando o usuário encurtasse uma url ela gerasse um nome aleatório ;
Ex: http://localhost/AdOSf5f1 entenderam?
no meu caso ela simplesmente faz um cadastro no banco de dados, gera um id e url original;
e na página de redirecionar eu uso assim: link.php?url=http://localhost/
Caso vocês não tenham entendido fala ai no post;
Cara ficou perfeito o seu código de gerar um nomes aleatórios,
coloquei ele em uma hiddenField fiel no seguinte modo:
<input type="hidden" name="hiddenField" id="hiddenField" value="http://localhost/<?php
$tamanho = mt_rand(5,9);
$all_str = "abcdefghijlkmnopqrstuvxyzwABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
$nome = "";
for ($i = 0;$i <= $tamanho;$i++){
$nome .= $all_str[mt_rand(0,61)];
}
echo $nome
?>" />
Tenho mais uma dúvida, após isso ele esta gerando normalmente no MySql o url encurtado,
na seguinte forma: http://localhost/URL como você me mandou o script
agora eu gostaria de saber como eu faço para quando o usuário clicar em Encurtar na próxima tela ele exibir o url encurtado, ou seja ele vai puchar o url do seu script e emprimir na proxima página.
Caso precise do código da minha página segue em Spoiler:
<?php require_once('Connections/conexao.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}
$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$insertSQL = sprintf("INSERT INTO url (url_original, url_encurtada) VALUES (%s, %s)",
GetSQLValueString($_POST['url_original'], "text"),
GetSQLValueString($_POST['hiddenField'], "text"));
mysql_select_db($database_conexao, $conexao);
$Result1 = mysql_query($insertSQL, $conexao) or die(mysql_error());
$insertGoTo = "index.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}
$colname_Recordset1 = "-1";
if (isset($_SESSION['MM_insert'])) {
$colname_Recordset1 = $_SESSION['MM_insert'];
}
mysql_select_db($database_conexao, $conexao);
$query_Recordset1 = sprintf("SELECT * FROM url WHERE url_original = %s", GetSQLValueString($colname_Recordset1, "text"));
$Recordset1 = mysql_query($query_Recordset1, $conexao) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
?>
<!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">](http://www.w3.org/1999/xhtml)
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Encurtador de url</title>
</head>
<body>
<form action="<?php echo $editFormAction; ?>" method="post" name="form1" id="form1">
<table align="center">
<tr valign="baseline">
<td nowrap="nowrap" align="right">Url Original</td>
<td><input type="text" name="url_original" value="" size="32" /></td>
</tr>
<tr valign="baseline">
<td nowrap="nowrap" align="right"> </td>
<td><input type="submit" value="Encurtar" /></td>
</tr>
<tr valign="baseline">
<td nowrap="nowrap" align="right"> </td>
<td><input type="hidden" name="hiddenField" id="hiddenField" value="[http://localhost/
Se precisar de mais algo fala ai ;D
Para você fazer algo do tipo
http://localhost/JasdojAJds, você vai ter de pesquisar sobre urls Amigáveis...
tem um artigo bem interessante!
>
Para você fazer algo do tipo
http://localhost/JasdojAJds, você vai ter de pesquisar sobre urls Amigáveis...
tem um artigo bem interessante!
Amigo, dei uma olhada no artigo, é até interessante mas eu vou ter que ficar fazendo isso manualmente, o encurtador é instantâneo, você já deve ter visto alguns encurtadores né?
Sim, mais de qualquer forma se usa "url amigaveis" para que dominio.com.br/kdsadaskda seja redirecionado para o link contido no SQL
você faaria algo assim
pagina link.php
<?php
$url = $_GET['url'];
if(!empty($url))
{
$sql = mysql_fetch_array(mysql_query("SELECT..."));
if(isset($sql['url']) && !empty($sql['url'])) {
header('Location: '. $sql['url']);
}else{
header('Location: index.php');
}
else
{
header('Location: index.php');
}
?>
no arquivo .htaccess coloque
RewriteEngine on
RewriteRule ^([a-zA-Z0-9_]+)$ link.php?url=$1 [L]
>
Sim, mais de qualquer forma se usa "url amigaveis" para que dominio.com.br/kdsadaskda seja redirecionado para o link contido no SQL
você faaria algo assim
pagina link.php
<?php
$url = $_GET['url'];
if(!empty($url))
{
$sql = mysql_fetch_array(mysql_query("SELECT..."));
if(isset($sql['url']) && !empty($sql['url'])) {
header('Location: '. $sql['url']);
}else{
header('Location: index.php');
}
else
{
header('Location: index.php');
}
?>
no arquivo .htaccess coloque
RewriteEngine on
RewriteRule ^([a-zA-Z0-9_]+)$ link.php?url=$1 [L]
Poderia explicar melhor o código ? não entendi muito bem..
caso precise da tabela do mysql segue abaixo:
-- Estrutura da tabela url
--
CREATE TABLE IF NOT EXISTS `url` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`url_original` varchar(500) NOT NULL,
`url_encurtada` varchar(250) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=14 ;cara eu vou te dar uma ajudinha ai..
Começando :
1. Va edite seu arquivo .htaccess
e bote ::
#redicionamento by: mk
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^([a-zA-Z0-9_]+)$ link.php?url=$1 [L]
</IfModule>
2. Agora crie a pagina link.php
com o codigo
<?php
$url = $_GET['url'];
include_once "config.php";
if($url)
{
$sql =mysql_query("SELECT * FROM url WHERE url_encurtada = '$url' ");
if(mysql_num_rows($sql) == 1){
while($l = mysql_fetch_array($sql)){
$vai = $l['url_original'];
}
echo '<script>location.href="'.$vai.'";</script>';
}
else{
echo "Nao Achada !";
}
}
else
{
//ele nao tem uma url ex localhost/link.php
echo '<script>location.href="index.php";</script>';
}
?>
Bom assim ele ja ira redicionar se ex: na bd tiver url_original abc
e você for localhost/abc ele ira se redicionar para url_encurtada
Simples agora você so faz a pagina para registrar na bd essas URL's
Tomara que te ajude isso dai
"caso tenha algum erro me fale ai"
Tentei usar o código, mesmo assim não pego, quando eu coloco o URL Encurtado ex: http://localhost/WE7H8KpL ele simplesmente da erro 404, imaginei que você tinha trocado o url_encurtado pelo url_original, colocando depois do / o url_original e redirecionando para o url_encurtado, mesmo assim da erro 404.
Quando eu coloco http://localhost/link.php?url=r5xZlEHgO ele redireciona normalmente para o url_original (http://www.google.com), mais quando eu coloco
http://localhost/r5xZlEHgO não pega.
kkkkkkkkkkkk.
eu tentei agora a pouco e eu vi isso.
e agora eu ja corigi ali o erro grave .
Sory
ah cara ai eh outra historia.
pq ai o você n pode usa o mod_rewrite
tenta a dica ai do cara de baixo
http://forum.imasters.com.br/topic/465559-solucao-para-urls-amigaveis-que-nao-funcionam/
verifica no httpd.conf se o mod_rewrite está ativo!
tente algo como
e no htacces tenta algo que vi em outr post
retira o if e deixa somente
Options FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteRule ^([a-zA-Z0-9_]+)$ link.php?url=$1
Até agora o script de criar nomes aleatório, o de redirecionar estão pegando
unica coisa que não ta dando é a de usar a URL Amigável, já tentei de tudo mais não ta dando :s
Bom...
Oque eu queria neste tópico eu já consegui fazer, que era criar nomes aleatórios, então eu abri um novo tópico sobre URL amigáveis,
http://forum.imasters.com.br/topic/482124-url-amigavel/
Moderadores podem fechar este tópico
Por favor respondam no outro;
$nomeAleatorio = md5(time());
sei que já pediram pra fechar, mais não seria melhor usar isso?
Ele quer gerar nome aleatorio para encurtar url, com md5 ele vai gerar um hash de 32 caracteres, que seria enorme para um link...
A solução do post #2 não é adequada para esse caso.
A aleatoriedade é feita, no entanto não há garantia de strings únicas.
Esse tópico pode ser útil:
http://forum.imasters.com.br/topic/427112-criptografar-o-get-no-php/page__p__1686364#entry1686364
Outro tópico relacionado:
http://forum.imasters.com.br/topic/469639-qual-o-algoritmo-para-encurtar-url/
>
Até agora o script de criar nomes aleatório, o de redirecionar estão pegando
unica coisa que não ta dando é a de usar a URL Amigável, já tentei de tudo mais não ta dando :s
Bom...
Oque eu queria neste tópico eu já consegui fazer, que era criar nomes aleatórios, então eu abri um novo tópico sobre URL amigáveis,
http://forum.imasters.com.br/topic/482124-url-amigavel/
Moderadores podem colocar RESOLVIDO neste tópico
Por favor respondam no outro;
>
A solução do post #2 não é adequada para esse caso.
A aleatoriedade é feita, no entanto não há garantia de strings únicas.
Esse tópico pode ser útil:
http://forum.imasters.com.br/topic/427112-criptografar-o-get-no-php/page__p__1686364#entry1686364
Outro tópico relacionado:
http://forum.imasters.com.br/topic/469639-qual-o-algoritmo-para-encurtar-url/
ele gera tipo
$gerada = $nome // fica tipo xF4aD4t...
ai ele pega essa variavel e registra no sql
to pensando que voce nao pensa
#17 juro que tentei compreender o que postou. :unsure:
Usei UNIQUE no campo url_encurtada então quando alguma duplica o sistema simplesmente imprime uma mensagem de erro!
Mas aí é que esta a graça de da "técnica" de AlphaID: Você não precisa do fominha do UNIQUE pois a função vai transformar um inteiro em uma string e esse inteiro na grande maioria das vezes é o ID da chave-primária que é sequencial e impossível, tanto quanto eu sei, de ser duplicado.
nunca crie nomes aleatórios engraçado kkkkkkkkkk,
Será que isso rola?