You want to read a file containing data in a delineated format (commonly using CSV, comma-separated values).
Use fgetcsv(). It breaks the string into parts, using the marked delimiter, and returns an array.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="EN" lang="EN">
<head>
<title>Reading Files with CSV</title>
<meta Name="Author" Content="Hann So">
</head>
<body>
<p>
<?php
if (isset($_POST['submit'])) {
process_form();
}
else {
display_form();// display form for the first time
}
function display_form() {
echo <<<HTML
<h2>Login Form</h2>
<form action = "$_SERVER[SCRIPT_NAME]" method="post">\n
Username:
<input type="text" name="username" size="50" value="John" />
<br />
Password:
<input type="password" name="password" size="50" value="John123" />
<br />
<input type="submit" name="submit" value="Login" />
</form>
HTML;
}
function process_form() {
$loggedin = FALSE; // not currently logged in
$file = "data/users.txt"; // file that stores the names and passwords
// open the file for reading
if ($fh = fopen("$file", 'rb')) {
// loop through the file by reading 100 bytes or one line
// whichever comes first with each iteration.
// The data being read is broken into an array
// using the | to indicate the separate elements.
while ($line = fgetcsv($fh, 1000, "|")) {
// check the file data against the submitted data
echo "<p>Display the values to see:</p>";
foreach ($line as $key=>$value) {
echo "$key=>$value<br />";
}
if (($line[0] == $_POST[username]) AND ($line[1] == $_POST[password])) {
// Correct user name and password
$loggedin = TRUE;
// stop looking through the file
break;
}
}
// close the file
fclose($fh);
// print a message
if ($loggedin) {
echo "<p>You are now logged in.</p>";
}
else {
echo "<p>Incorrect username and/or password.</p>";
}
}
echo "<p><a href=\"$_SERVER[SCRIPT_NAME]\">Try again?</a></p>\n";
echo "<p><a href=\"example_l.php\">
Do you want to write to the file?</a></p>\n";
}
?>
</p>
</body>
</html>
|
Here is another way of processing the variable-length text fields.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="EN" lang="EN">
<head>
<title>Reading Files with CSV</title>
<meta Name="Author" Content="Hann So">
</head>
<body>
<p>
<?php
if (isset($_POST['submit'])) {
process_form();
}
else {
display_form();// display form for the first time
}
function display_form() {
echo <<<HTML
<h2>Login Form</h2>
<form action = "$_SERVER[SCRIPT_NAME]" method="post">\n
Username:
<input type="text" name="username" size="50" value="John" />
<br />
Password:
<input type="password" name="password" size="50" value="John123" />
<br />
<input type="submit" name="submit" value="Login" />
</form>
HTML;
}
function process_form() {
$loggedin = FALSE; // not currently logged in
$file = "data/users.txt"; // file that stores the names and passwords
$delim = "|";
// open the file for reading
$fh = fopen("$file", 'r') or die("can't open: $php_errormsg");
while (!feof($fh)) {
$s = rtrim(fgets($fh));
$line = explode($delim, $s);
echo "<p>Display the values to see:</p>";
foreach ($line as $key=>$value) {
echo "$key=>$value<br />";
}
if (($line[0] == $_POST[username]) AND ($line[1] == $_POST[password])) {
// Correct user name and password
$loggedin = TRUE;
// stop looking through the file
break;
}
}
// close the file
fclose($fh);
// print a message
if ($loggedin) {
echo "<p>You are now logged in.</p>";
}
else {
echo "<p>Incorrect username and/or password.</p>";
}
echo "<p><a href=\"$_SERVER[SCRIPT_NAME]\">Try again?</a></p>\n";
echo "<p><a href=\"example_l.php\">
Do you want to write to the file?</a></p>\n";
}
?>
</p>
</body>
</html>
|