Ir para conteúdo

POWERED BY:

Arquivado

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

ORiOn16

Chave Aleatória

Recommended Posts

Ai caras,

 

Tou usando este script para gerar uma chave aleatória

<?php
function url_maker() {
	$chars = "abcdefghijklmnopqrstuvwxyz0123456789";
	srand((double)microtime()*1000000);
	$i = 0;
	$key = '';
	while ($i <= 6) {
		$num = rand() % 33;
		$tmp = substr($chars, $num, 1);
		$key = $key . $tmp;
		$i++;
	}

	return $pass;
}
$url = url_maker();
echo "Your random key is: $url";
?>

E depois tou a grava-lo numa tabela no mysql

 

O que eu queria saber era como fazer para que o script sempre que guarda uma nova chave no sql verificar se já existe essa chave, se sim faz outra e guarda, se não guarda essa...

 

Podem me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque a função dentro de um while

 

do
{
	$code = url_maker();
} while ($code existir no banco);

// aqui você insere as informações no banco de dados

Para saber se o código já existe, faça um SELECT usando COUNT:

 

SELECT COUNT(*) as total FROM tabela WHERE id = $code;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque a função dentro de um while

 

do
{
	$code = url_maker();
} while ($code existir no banco);

// aqui você insere as informações no banco de dados

Para saber se o código já existe, faça um SELECT usando COUNT:

 

SELECT COUNT(*) as total FROM tabela WHERE id = $code;

Não entendi muito bem cara, pode explicar melhor?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Será gerada uma chave até que ela não esteja presente no banco de dados.

 

O algorítmo:

faça
{
	gere um codigo aleatório
	verifique se o código gerado já existe (por exemplo, armazene TRUE ou FALSE na variável $existe) 
} enquanto (a variável $existe possuir valor TRUE);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Será gerada uma chave até que ela não esteja presente no banco de dados.

 

O algorítmo:

faça
{
	gere um codigo aleatório
	verifique se o código gerado já existe (por exemplo, armazene TRUE ou FALSE na variável $existe) 
} enquanto (a variável $existe possuir valor TRUE);

Cara, fiquei percebendo ainda pior :S

da ai um exemplo :S

Compartilhar este post


Link para o post
Compartilhar em outros sites

<form action="envia.php" method="post">
<textarea name="texto"></textarea><br>
<input name="envia" type="submit" value="Enviar">
</form>


<?php
include "_connect.php";
 conexao();

if (isset($_POST['envia'])) {
function url_maker() {
	$chars = "abcdefghijklmnopqrstuvwxyz0123456789";
	srand((double)microtime()*1000000);
	$i = 0;
	$key = '';
	while ($i <= 6) {
		$num = rand() % 33;
		$tmp = substr($chars, $num, 1);
		$key = $key . $tmp;
		$i++;
	}

	return $key;
}



$texto = $_POST["texto"];
$url = url_maker();
$ip = GetHostByName($REMOTE_ADDR);

$envia = mysql_query("
INSERT INTO `pastebin` (
`texto` ,
`url` ,
`ip`
)
VALUES (
'$texto', '$url', '$ip'
);
" ) or die("SQL error: ".mysql_error());
}
?>

Ta ai o código inteiro ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Será gerada uma chave até que ela não esteja presente no banco de dados.

 

O algorítmo:

faça
{
	gere um codigo aleatório
	verifique se o código gerado já existe (por exemplo, armazene TRUE ou FALSE na variável $existe) 
} enquanto (a variável $existe possuir valor TRUE);

Cara, fiquei percebendo ainda pior :S

da ai um exemplo :S

 

$arr = array(10, 12, 7, 25, 17, 42, 81, 77, 23, 51);

do
{
	$num = rand(0, 100);
	$existe = in_array($num, $arr);
} while ($existe == true);

echo "Número: " . $num

A diferença é que você verifica a existência no BD, não num array.

 

 

 

 

 

 

 

Um md5(time().microtime()); não seria sempre unico não?

Bem lembrado. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Para assegurar a unicidade, use uniqid()

http://www.php.net/uniqid

 

Para o ID, essa é a melhor saída.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Será gerada uma chave até que ela não esteja presente no banco de dados.

 

O algorítmo:

faça
{
	gere um codigo aleatório
	verifique se o código gerado já existe (por exemplo, armazene TRUE ou FALSE na variável $existe) 
} enquanto (a variável $existe possuir valor TRUE);

Cara, fiquei percebendo ainda pior :S

da ai um exemplo :S

 

$arr = array(10, 12, 7, 25, 17, 42, 81, 77, 23, 51);

do
{
	$num = rand(0, 100);
	$existe = in_array($num, $arr);
} while ($existe == true);

echo "Número: " . $num

A diferença é que você verifica a existência no BD, não num array.

 

 

 

 

 

 

 

Um md5(time().microtime()); não seria sempre unico não?

Bem lembrado. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Para assegurar a unicidade, use uniqid()

http://www.php.net/uniqid

 

Para o ID, essa é a melhor saída.

 

aff cara, continuo sem perceber, cara eu sou noob mesmo, explica ai direitinha sff

desculpa :/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja isto e perceba que o loop é executado até que o número "gerado" não consta no array:

 

$arr = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

$num = 0;

do
{
	++$num;
	$existe = in_array($num, $arr);
} while ($existe == true);

echo "Número: " . $num

Porém, em vez de incrementar o número corrente, o script deve gerar um número aleatório.

 

 

Mas, para esse caso, prefira a sugestão do ~TiuTalk~, adicionando a função uniqid(), como eu disse no post anterior

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja isto e perceba que o loop é executado até que o número "gerado" não consta no array:

 

$arr = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

$num = 0;

do
{
	++$num;
	$existe = in_array($num, $arr);
} while ($existe == true);

echo "Número: " . $num

Porém, em vez de incrementar o número corrente, o script deve gerar um número aleatório.

 

 

Mas, para esse caso, prefira a sugestão do ~TiuTalk~, adicionando a função uniqid(), como eu disse no post anterior

Da para meter a função uniqid() mais pequena?, só com 6 dígitos?

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.