Bir süre-döngü ile php fonksiyonu

6 Cevap php

Hi I have a function that generates a random combination.

benim işlevi bu gibi görünüyor:

  function random_gen($length) {
  $random= "";
  srand((double)microtime()*1000000);
  $char_list = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  $char_list .= "abcdefghijklmnopqrstuvwxyz";
  $char_list .= "1234567890";
  // Add the special characters to $char_list if needed

  for($i = 0; $i < $length; $i++)
  {
    $random .= substr($char_list,(rand()%(strlen($char_list))), 1);
  }
  return $random;
}

$new_url = random_gen(6);

Şimdi ben $ yeni_url zaten benim veritabanında mevcut olmadığını denetleyen bir süre-döngü var istiyorum ...

Ve sonra böyle bir sonuç eklemek:

mysql_query("INSERT INTO lank (url, code) VALUES ('$url', '$new_url')"); 

Ben ise döngü dışında çalışmak için her şeyi var. ve ben sadece bunu nasıl çözemiyorum ...

6 Cevap

  • veritabanındaki UNIQUE gibi kod alanını tanımlamak
  • Bir kodu oluşturmak ve ıNSERT'ı çalıştırmak
  • mysql_affected_rows() ile kontrol INSERT gerçekte ne olup olmadığını (yani kod zaten mevcut)

Size bir SELECT sorgusu kaydeder

while ( true ) {
    $new_url = random_gen(6);
    mysql_query("INSERT INTO lank (url, code) VALUES ('$url', '$new_url')");
    if ( mysql_affected_rows() )
        break;
}

Bu random_generator kullanın

function random_gen($length) {
  $characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';

  $string = '';
  for ($i = 0; $i < $length; $i++) {
    $string .= $characters[rand(0, strlen($characters) - 1];
  }
  return $string;
}

Bir süre döngü gerekmez, sadece bir sorgu gerçekleştirmek

mysql_query("SELECT COUNT(*) FROM lank WHERE code = {$new_url}");

Bu oldukça yalındır bulunuyor:

$sql = "SELECT COUNT(*) as num FROM lank WHERE code='{$new_url}'";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);

while($row['num'] > 0) {
    $new_url = random_gen(6);

    $sql = "SELECT COUNT(*) as num FROM lank WHERE code='{$new_url}'";
    $result = mysql_query($sql);
    $row = mysql_fetch_assoc($result);
}

Bu kod tekrarı olmadan, çalışması gerekir:

while(true) {
    $new_url = random_gen(6);

    $sql = "SELECT COUNT(*) FROM lank WHERE code='{$new_url}'";
    $result = mysql_query($sql);
    $row = mysql_fetch_row($result);
    if (!$row[0])
        break;
}

Yerine uniqid() işlevini kullanın. Her zaman rastgele bir sonuç üretecektir.

Daha fazla güvenlik ihtiyacınız varsa (örneğin: Eğer komşu değerleri istemiyorsanız), sadece çıkış karma: sha1(uniqid()).