如果数据库中已存在该值,如何在文本框中自动生成新的随机值?
这是我的代码示例。
<?php
$length = 1;
$randomString = substr(str_shuffle("123456789"), 0, $length);
$mysqli1 = new mysqli("localhost", "root", "", "k");
$sql = $mysqli1->query("SELECT catid FROM subcat WHERE catid = '$randomString'");
if(($sql->num_rows) > 0){
echo "User id exists already.";
}
echo '<input name="id" value="'.$randomString.'">';
?>
感谢先进!
答案 0 :(得分:0)
使用此strtotime('now')
来自W3schools :strtotime将英语文本日期时间解析为 Unix时间戳(自1970年1月1日00:00:00以来的秒数) GMT)。
这将永远是唯一的。所以不需要任何检查。
以防两个用户同时同时进行,
附加一个随机字符串......例如:
$unique_id=strtotime('now')."".substr(str_shuffle("abcdefghijklmnopqrstuvwxyz"), 0, 5);
答案 1 :(得分:0)
显然,您需要一个独特的价值
uniqid()
函数根据microtime(当前时间,以微秒为单位)生成唯一ID。
echo uniqid();
编辑:OP只需要6个字符。所以尝试像
这样的东西$id = uniqid();
$id = substr($id,rand(0,strlen($id) - 6),6);
答案 2 :(得分:0)
这会更好,你可以试试这个
$randomString = md5(uniqid(rand(), true));
答案 3 :(得分:0)
可以用这个(Linux示例)生成一个稍微有点随机的字符串:
substr(sha1(openssl_random_pseudo_bytes(3)), 0, 6);
尽管如此,由于域值有限,可能会出现重复;以下算法通常有效:
"INSERT IGNORE"
。答案 4 :(得分:0)
再次生成它。
<?php
$length = 1;
$randomString = substr(str_shuffle("123456789"), 0, $length);
$mysqli1 = new mysqli("localhost", "root", "", "k");
$sql = $mysqli1->query("SELECT catid FROM subcat WHERE catid = '$randomString'");
if(($sql->num_rows) > 0){
$randomString = substr(str_shuffle("123456789"), 0, $length);
}
echo '<input name="id" value="'.$randomString.'">';
?>
或者在生成的字符串末尾添加一个时间,使其更随机。
这样的东西,你应该有更大的长度值。因为长度为1,你不能有更多的随机数。
substr(str_shuffle("123456789"), 0, $length).time();
但是除非你使用md5或其他东西做出更好的算法,否则仍然有可能重复。