防止表单重复结果

时间:2013-10-15 21:42:57

标签: php jquery html forms

我在文本文件texttyy.txt中有一个名称列表,它通过 PHP 回显到html:

<?php
$myFile = "texttyy.txt";
$fh = fopen($myFile, 'r');
$theData = fread($fh, filesize($myFile));
fclose($fh);
echo $theData;
?>

texttyy.txt

<li>Artist 1
<li>Artist 2
<li>Artist 3
<li>Artist 4
...

此列表(texttyy.txt)通过以下表单更新:

<form action="insert.php" method="post">
Artist: <input type="text" name="Artist">

<input type="submit">
</form>

我正在寻找一种方法来防止表格中的重复。使用Jquery和php。

PHP:

<?php
$search =  $_POST["Artist"];
?>

* JQuery - (尝试):*

if( $('li:contains("<?php echo $search; ?>")')){
return false; /* Don't submit the form*/
alert("Already artist");

}else{
return /*submit the form*/
}

我不明白为什么这不起作用!!

3 个答案:

答案 0 :(得分:1)

如果必须将列表存储在平面文件中,请不要在附加标记的情况下存储它。输出文件时,将其循环并使用您需要的标记输出。一个例子如下:

而不是你的:

$theData = fread($fh, filesize($myFile));
fclose($fh);
echo $theData;

执行:

while ($theData = fgets($fh)) {
    echo "<li data-val='{$theData}'>{$theData}</li>";
}

fclose($fh);

这对于内存使用也更好。

现在你有一个可以在jQuery中使用的列表:

$('form').submit(function() {
   name_val = $(this).find('input[name=Artist]');

   if ($('li[data-val="'+name_val+'"]').length) {
      return false;
      alert('Oh noes');
   }
});

一旦jQuery通过,你就可以重新检查PHP了。这样的事情(在明显的文件开头之后)......

while ($theData = fgets($fh)) {
    if ($theData == $_POST["Artist"]) {
        die('Oh noes');
    }
}

所有未经测试的语法等。但希望你明白了。

答案 1 :(得分:0)

也许是这样的?

echo implode("\n",array_unique(explode("\n",$theData)));

而不是原来的echo

答案 2 :(得分:0)

试试这个:

<ul id="list">
<li>Artist 1</li>
<li>Artist 2</li>
<li>Artist 3</li>
<li>Artist 4</li>
</ul>

  <?php
       $search = "Artist 1";
  ?>

 <script>
$('form').submit(functon(){
    if($('#list li:contains("<?php echo $search; ?>")')){
      alert('Already Artist');
    return false;
     }
});