PHP:如何检查表单数据是否与文本文件中的相同?

时间:2017-09-01 08:39:46

标签: javascript php html

我有一个<tr><td>Val 1</td><td>Val 2</td><td>Val 3</td></tr> <tr><td>Val 1</td><td>Val 2</td><td>Val 3</td></tr> <tr><td>Val 1</td><td>Val 2</td><td>Val 3</td></tr> 文件,我存储数据如下:

val1

每隔一分钟左右就会添加一个新字符串。

我有一个包含三个输入的表单val2val3[HTML element] Val 1 [2 HTML elements] val2 [2 HTML elements] val3 [2 HTML elements] 。提交表单时,它会将值保存到文本文件中,如下所示:

.text

我的问题是:如果字符串存在,如何在文件中搜索,如果存在,则执行一段代码,如果没有,则继续并将数据保存到文件中?

我知道我可以使用数据库,但我必须使用template <class T> class A { template <class U> void foo(T&& t, U&& u); }; 文件。

2 个答案:

答案 0 :(得分:1)

首先,您必须通过读取和字符串搜索来检查文件,如果找不到该字符串,则执行操作。请参考以下示例。

<?php

$productFile = file_get_contents('products.txt');
$products = str_word_count($productFile, 1);

$status = 'i love watching tv on my brand new apple mac';

$found = false;
foreach ($products as $product)
{
    if (strpos($status,$product) !== false) {
        $found = true;
        break;
    }
}

if ($found) {
    echo 'the status contains a product';
}
else {
    echo 'The status doesnt contain a product';
}

?>

答案 1 :(得分:1)

我认为现有的答案可以满足这个问题,但只是评论一下 问题本身:

可以简化操作的东西是使用不同的格式 文本文件。我假设您正在使用文件内部的标记,以便您 可以轻松地将其显示为html,但你不应该让你的数据方式 显示指示数据的存储方式。如果您将数据存储在CSV中 然后,您就可以轻松地将数据表表示为数组,这样就可以了 因为您具有结构化和分层结构,所以更容易访问这些值 在内存中表示而不是单个长字符串。

这不仅可以简化数据处理,而且还可以帮助您 轻松改变数据显示方式而无需更改 数据结构。目前,如果您想使用显示数据 div而不是表格,那么你不仅要改变所有的数据 在文本文件本身,但也在您的代码中的所有位置 期待解析它。通过分离存储表示和视觉 表示您能够在单个位置进行这些更改。用一个 CSV还可以在其他系统中实现更好的数据互操作性。

您可以存储您的数据:

Val 1a, Val 2a, Val 3a
Val 1b, Val 2b, Val 3b
Val 1c, Val 2c, Val 3c

然后访问现有数据并保存新数据可能是:

<?php

define("DATA_FILE", "data.csv");

/**
 * Retrieves the data from the csv file and returns it in the format:
 * [
 *   [
 *     Val1 => ...,
 *     Val2 => ...,
 *     Val2 => ...,
 *   ],
 *   [
 *     Val1 => ...,
 *     Val2 => ...,
 *     Val2 => ...,
 *   ]
 * ],
 */
function getData() {
  // these will be the key names for the fields in the array
  $fieldNames = ["Val1", "Val2", "Val3"];
  $data = [];
  foreach (file(DATA_FILE) as $row) {
    $csvRow = str_getcsv($row);
    $data[] = array_combine($fieldNames, $csvRow);
  }
  return $data;
}

/**
 * Saves new data to the file. Takes data in the form:
 * [
 *   Val1 => ...,
 *   Val2 => ...,
 *   Val2 => ...,
 * ],
 */
function saveNewData($values) {
  $fp = fopen(DATA_FILE, "a");
  fputcsv($fp, [$values["Val1"], $values["Val2"], $values["Val3"]]);
  fclose($fp);
}

然后将数据数组打印到表中:

<?php
/**
 * Returns HTML markup for displaying the data in a table. Returns something
 * like:
 *
 * <tr><td>Val1</td><td>Val2</td><td>Val3</td></tr>
 * <tr><td>Val1</td><td>Val2</td><td>Val3</td></tr>
 */
function getTableMarkup($data) {
  $markup = "";
  foreach ($data as $item) {
    $markup .= "<tr>";
    foreach ($item as $field) {
      $markup .= "<td>{$field}</td>";
    }
    $markup .= "</tr>";
  }

  return $markup;
}

然后当你将它们全部绑在一起用于你的用例时,你会有类似的东西:

<?php

// get the submitted form values
$newValues = [
  "Val1" => $_REQUEST["Val1"],
  "Val2" => $_REQUEST["Val2"],
  "Val3" => $_REQUEST["Val3"],
];

// fetch the existing data from the file in a structured array
$data = getData();

// check if the newly submitted values already exist in the data
if (in_array($newValues, $data)) {
  echo "Data already exists...";
} else {
  echo "Data doesn't exist, saving it...";
  saveNewData($newValues);
  $data = getData();
}

// display the table of data
echo "<table>" . getTableMarkup($data) . "</table>";

我意识到这可能不是你现在能够做出的改变,但是我 认为它还值得一提。还要注意,我在这里假设你 检查三个新值是否已经存在一行数据 与该行中的三个现有值相同。如果你想检查一下 提交的Val1与之前提交的Val2完全相同 需要将in_array调用更改为执行相应操作的函数 检查。但由于数据是以数组格式化的,因此检查将包括在内 只需迭代现有数据并比较您的任何字段 想要新的领域。