0

我在一个文本文件中有一个名称列表,该列表使用PHPtexttyy.txt回显到 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
...

此 list( 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*/
}

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

4

3 回答 3

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。像这样的东西(在文件的明显 fopen 之后)......

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

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

于 2013-10-15T21:53:49.973 回答
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;
     }
});

于 2013-10-18T13:01:28.710 回答
0

也许是这样的?

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

而不是原来的echo

于 2013-10-15T21:46:08.053 回答