过滤掉TXT中的行并插入数据库
Filtering out lines in TXT and inserting into database
我正在尝试在 txt 文件的一行中搜索字符串,必须将包含我正在搜索的字符串的行插入到我的数据库中。
php while 循环遍历所有行,就像我说的那样,我正在尝试将它找到的行插入到我的数据库中。
现在的问题是,如果我 运行 这段代码,它会将所有 txt 文件插入到我的数据库中,我不知道为什么。
$search = $_GET["search"];
$logfile = $_GET['logfile'];
// Read from file
$file = fopen($logfile, "r");
?>
<head> <title>Searching: <?php echo $search ?></title> </head>
<?php
while( ($line = fgets($file) )!= false)
{
if(stristr($line,$search))
$servername = "localhost";
$username = "root";
$password = "pass";
$dbname = "db";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
if(stristr($line,$search))
$sql = "INSERT INTO `ingamebanlist` (Ban, Timestamp) VALUES ('$line', '$timestamp')";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
// case insensitive
echo "<font face='Arial'> $line </font><hr>";
}
fclose($file);
有不明白的地方欢迎提问
$array = file($filename)
读取数组中 $filename
中给出的文件(每行一个),然后您可以使用 foreach()
迭代数组并在每一行中搜索。如果您的搜索字符串匹配该行,则插入数据库...
$lines = file($logfile);
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
foreach($lines as $line) {
if(stristr($line,$search))
$sql = "INSERT INTO `ingamebanlist` (Ban, Timestamp) VALUES ('$line', '$timestamp')";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
// ...
}
}
这很可能是因为您没有构建代码。罪魁祸首是这样的支票:
if(stristr($line,$search))
$servername = "localhost";
if
只是屏蔽了下面一行。您应该将代码块包含在 {
和 }
中,以便有条件地 运行 它们仅在匹配时出现。您在构造 $sql=
查询时有点像做同样的事情。尽管这应该只是插入前几行的两倍。
而且您真的应该将 mysqli 连接代码移出循环。事先做一次。
顺便说一句,一种更紧凑的读取和过滤输入的方法是:
$f = new SplFileObject("logfile.txt", "r");
$f = new RegexIterator($f, "/" . preg_quote($search, "/") . "/i");
foreach ($f as $line) {
db::insert(...);
}
尝试用这个替换你的循环:
while( ($line = fgets($file) )!= false)
{
if(stristr($line,$search)) {
$servername = "localhost";
$username = "root";
$password = "pass";
$dbname = "db";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO `ingamebanlist` (Ban, Timestamp) VALUES ('$line', '$timestamp')";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else { echo "Error: " . $sql . "<br>" . $conn->error; } $conn->close();
echo "<font face='Arial'> $line </font><hr>";
}
}
}
fclose($file);
我正在尝试在 txt 文件的一行中搜索字符串,必须将包含我正在搜索的字符串的行插入到我的数据库中。
php while 循环遍历所有行,就像我说的那样,我正在尝试将它找到的行插入到我的数据库中。
现在的问题是,如果我 运行 这段代码,它会将所有 txt 文件插入到我的数据库中,我不知道为什么。
$search = $_GET["search"];
$logfile = $_GET['logfile'];
// Read from file
$file = fopen($logfile, "r");
?>
<head> <title>Searching: <?php echo $search ?></title> </head>
<?php
while( ($line = fgets($file) )!= false)
{
if(stristr($line,$search))
$servername = "localhost";
$username = "root";
$password = "pass";
$dbname = "db";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
if(stristr($line,$search))
$sql = "INSERT INTO `ingamebanlist` (Ban, Timestamp) VALUES ('$line', '$timestamp')";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
// case insensitive
echo "<font face='Arial'> $line </font><hr>";
}
fclose($file);
有不明白的地方欢迎提问
$array = file($filename)
读取数组中 $filename
中给出的文件(每行一个),然后您可以使用 foreach()
迭代数组并在每一行中搜索。如果您的搜索字符串匹配该行,则插入数据库...
$lines = file($logfile);
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
foreach($lines as $line) {
if(stristr($line,$search))
$sql = "INSERT INTO `ingamebanlist` (Ban, Timestamp) VALUES ('$line', '$timestamp')";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
// ...
}
}
这很可能是因为您没有构建代码。罪魁祸首是这样的支票:
if(stristr($line,$search))
$servername = "localhost";
if
只是屏蔽了下面一行。您应该将代码块包含在 {
和 }
中,以便有条件地 运行 它们仅在匹配时出现。您在构造 $sql=
查询时有点像做同样的事情。尽管这应该只是插入前几行的两倍。
而且您真的应该将 mysqli 连接代码移出循环。事先做一次。
顺便说一句,一种更紧凑的读取和过滤输入的方法是:
$f = new SplFileObject("logfile.txt", "r");
$f = new RegexIterator($f, "/" . preg_quote($search, "/") . "/i");
foreach ($f as $line) {
db::insert(...);
}
尝试用这个替换你的循环:
while( ($line = fgets($file) )!= false)
{
if(stristr($line,$search)) {
$servername = "localhost";
$username = "root";
$password = "pass";
$dbname = "db";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO `ingamebanlist` (Ban, Timestamp) VALUES ('$line', '$timestamp')";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else { echo "Error: " . $sql . "<br>" . $conn->error; } $conn->close();
echo "<font face='Arial'> $line </font><hr>";
}
}
}
fclose($file);