2017-09-01 95 views
0

我有一個.text文件中至極我店像這樣的數據:PHP:如何檢查表單數據是否與文本文件中的相同?

<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文件來做到這一點。

+0

爲什麼要存儲_data_與HTML代碼混合...? – CBroe

回答

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; 
} 

然後,當你把它捆在一起爲你的用例,你會有東西l邁克:

<?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呼叫更改爲執行適當的 檢查的功能。但是,由於數據格式化爲數組,因此檢查將包括 ,只需對現有數據進行迭代,然後將您想要的任何字段與新字段進行比較。

0

首先,你必須通過閱讀和字符串搜索,如果沒有找到該字符串,然後執行操作來檢查文件。請參考下面的例子。

<?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'; 
} 

?> 
+0

這是完美的我的需要:)謝謝 – KrisGeor

+0

@KrisGeor:很高興知道它解決了我們的問題。接受答案和upvote當你會在門戶網站找到有用的答案.. – Sucharitha

相關問題