ORiOn16 0 Denunciar post Postado Outubro 19, 2008 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
Beraldo 864 Denunciar post Postado Outubro 19, 2008 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
ORiOn16 0 Denunciar post Postado Outubro 19, 2008 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
Beraldo 864 Denunciar post Postado Outubro 20, 2008 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
~TiuTalk~ 7 Denunciar post Postado Outubro 20, 2008 Um md5(time().microtime()); não seria sempre unico não? Compartilhar este post Link para o post Compartilhar em outros sites
ORiOn16 0 Denunciar post Postado Outubro 20, 2008 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
ORiOn16 0 Denunciar post Postado Outubro 20, 2008 <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
Beraldo 864 Denunciar post Postado Outubro 20, 2008 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
ORiOn16 0 Denunciar post Postado Outubro 20, 2008 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
Beraldo 864 Denunciar post Postado Outubro 20, 2008 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
ORiOn16 0 Denunciar post Postado Outubro 20, 2008 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
Beraldo 864 Denunciar post Postado Outubro 20, 2008 Não. Isso impossibilitaria a geração de códigos diferentes entre si Compartilhar este post Link para o post Compartilhar em outros sites
ORiOn16 0 Denunciar post Postado Outubro 20, 2008 Não. Isso impossibilitaria a geração de códigos diferentes entre si Ok, era o que eu pensava, obrigado cara Compartilhar este post Link para o post Compartilhar em outros sites