2011-10-28 29 views
0

我今天早些時候發佈了一個類似的問題,但是我最近下載了xampp,現在可以獲取語法錯誤。我對這一切都很陌生。爲foreach()+提供的無效參數腳本的邏輯

請看這個例子,看看我的PHP文件的當前狀態:http://rich2233.comoj.com/file2.php

我能得到.txt文件提取並顯示.txt文件的內容,但任何試圖修改的。 txt文件不會發生。

當我跑這對XAMPP,我得到這個錯誤:跟蹤你的迭代器:提供的foreach()在file2.php線30

+2

嗯...可注射性漏洞。由於您使用的是純文本文件(不好),所以我不知道該怎麼稱呼它,但是您需要清理輸入。另外,你的函數現在有什麼錯誤?我們不介意讀者,你需要告訴我們到底發生了什麼問題。 – Cyclone

+2

使用數據庫。沒有鎖定的併發文件修改會咬你。 – Petr

+2

你真的想爲此使用一個數據庫 - 它會讓你的生活變得更容易。查看一個名爲SQLite(http://www.sqlite.org/)的平面文件數據庫。學習SQL等可能看起來有點花銷,但值得學習。 – hafichuk

回答

2

您最近的代碼更新後:答案在問題的標題錯誤信息是:

代碼缺少行$users = file("test.txt");

+0

擺脫了這個錯誤。我現在有其他錯誤,所以我要重新發布。謝謝你的幫助。 – Rich2233

2

這裏有一個快速提示參數無效。混亂?將每個行號視爲文件中的唯一偏移量。您需要迭代(foreach)並每次增加+1。當您稍後編輯一行時,您只需提交偏移號碼,再次迭代並檢查是否$i == $_POST['iterator']

// Iterator example 
$users = file('text.txt'); 
$hours_taken = array(); 

foreach ($users as $user) { 
    list($time, $name) = explode('|', $user); 
    array_push($hours_taken, $time); 
} 
// Assuming same order of rows in users.txt 
$hours = array('8:00 am', '9:00 am', '10:00 am'); // ...5:00 pm 
$i = 1; 
echo '<select name="time"><option selected>-- Select time --</option>'; 
foreach ($hours as $hour) { 
    if (in_array($hour, $hours_taken)) { 
    echo '<option disabled=disabled>'. $hour .'</option>'; 
    } 
    else { 
    echo '<option value='. $i .'>'. $hour .'</option>'; 
    } 
    $i++; 
} 
+0

輝煌!讓我試着將其寫入我的代碼中。謝謝! – Rich2233

1

編輯爲這最後的功能就不會工作

function editTxt(){ 
    $find_name = $_POST['name']; 
    $find_time = $_POST['time']; 
    $filename = getcwd() . "/test.txt"; 
    $lines = file($filename , FILE_IGNORE_NEW_LINES); 
    foreach($lines as $key => $line) 
    { 
     list($time, $name) = explode('|', $line); 
     if($time == $find_time && $name == "Available") 
     { 
      $lines[$key] = $time."|".$find_name; 
      file_put_contents($filename , $lines); 
      break; 
     } 
    } 
} 

如果你打算用這個不僅僅是我建議使用一個數據庫的運動以外的東西。

+0

這是一個練習。我把你的代碼,但現在不會加載頁面。我確實看到了你的邏輯,但是我想我在某個地方有一個錯誤。有任何想法嗎? – Rich2233

+0

將有助於知道你正在得到什麼錯誤 –

+0

我只是得到一個空白頁。我包括\t ini_set('display_errors','On'); \t error_reporting(E_ALL | E_STRICT);在我的腳本中,但我沒有收到任何語法錯誤。對不起,我不能給出更好的答案。所有這些都很新穎。 – Rich2233

1

嘗試:

$users = file($filename); 

我懷疑$用戶===因爲你沒有使用相同的「計算」文件名錯誤。

+0

它現在給我這個額外的錯誤:文件名不能在/Applications/XAMPP/xamppfiles/htdocs/file2.php在第21行 – Rich2233

+0

似乎是郵政提交代碼沒有執行,然後。你也可以嘗試$ users = file(getcwd()。'/test.txt'); –

+0

這就是訣竅。正如您所指出的那樣,現在的問題是提交代碼沒有執行。任何想法爲什麼? – Rich2233