从DB中挑选一个随机名称而不重复,直到使用所有名称

时间:2018-05-09 10:16:43

标签: php

嘿那里有StackOverflow社区 正如标题所说,我的数据库中有一个表,其中包含2列ID和名称。 有一个带有按钮的html表单,通过单击我想要它来选择一个名称的按钮。 通过再次单击,它会选择一个名称而不重复,直到使用所有名称。

这是我到目前为止所做的事情:

<?php 
include ("config.php");
$result = '';

if (isset($_POST['rand'])) {
    $name_query = mysqli_query($conn,"SELECT * FROM names ORDER BY RAND() LIMIT 1");
    $name_f = mysqli_fetch_assoc($name_query);
    $result = $name_f['name'];
}
 ?>

 <form action="" method="post" accept-charset="utf-8">
    <input type="submit" name="rand">
 </form>

<div><?php echo $result;?></div>

提前感谢。

1 个答案:

答案 0 :(得分:0)

我认为正确的方法是创建一个文本文件,并在数据库中获取后者时保存其中的名称。然后,为了后续提取,检查文件内容中是否存在该名称。

$result = '';

function getName(){
   $file_path = "file.txt";
   $where = "";
   if(file_exists($file_path)){
       $lines = file($file_path);
       if(count($lines) > 0){
          $where = " WHERE `name` NOT IN(".implode(',', $lines).") ";
       }
   }
   $name_query = mysqli_query($conn,"SELECT * FROM `names` $where ORDER BY RAND() LIMIT 1");
   if(mysqli_num_rows($name_query) > 0){
       $name_f = mysqli_fetch_assoc($name_query);
       $result = $name_f['name'];
       file_put_contents($file_path, $result.PHP_EOL , FILE_APPEND | LOCK_EX);
       return $result;
   }else{
      file_put_contents($file_path, "");
      return getName();
   }
}

if(isset($_POST['rand'])) {
   $result = getName();
}


<form action="" method="post" accept-charset="utf-8">
    <input type="submit" name="rand">
 </form>

<div><?php echo $result;?></div>