我正在抓取以下html表:
<table>
<tr>
<td class="Name">A</td>
<td class="S1">5</td>
<td class="S2">6</td>
</tr>
</table>
我的目标是使用Html_simple_dom来解析数据并将值输入MySQL数据库。这是我到目前为止所做的:
<?php
include('../simple_html_dom.php');
include('dbconnect.php');
$html = file_get_html('url');
$table = $html->find('table');
foreach ($table->find('tr') as $row) {
foreach ($row->find('td[class=Name]') as $cell) {
$name = $cell->plaintext;
}
}
我遇到的问题是我的$ name变量实际上是一个数组。如果我这样做,我就会遇到重复的问题:
foreach ($table->find('tr') as $row) {
foreach ($row->find('td[class=Name]') as $cell) {
}
$name = $cell->plaintext;
}
我的最终目标是MySQL查询,例如:
$sql = Insert into ScoreTable (Score1, Score2)
Values ($S1, $S2)
Where PName = $Name
但是当我“找到”时,我无法分离我得到的数组值,我甚至无法将html元素分离为变量。我哪里错了?
编辑:修正了我的目标。
答案 0 :(得分:1)
如果只需要一个值,则不需要使用cicly。您可以获取返回数组的第一个元素或使用find()
的第二个参数请参阅此处http://simplehtmldom.sourceforge.net/manual.htm
//查找第(N)个锚点,返回元素对象,如果未找到则返回null(基于零)
$ ret = $ html-&gt; find('a',0);
您的MYSQL插入格式错误,请参阅https://dev.mysql.com/doc/refman/5.7/en/insert.html正确
INSERT INTO ScoreTable(Score1,Score2,Pname)VALUES('$ S1','$ S2','$ name')
我不知道你在“dbconnect.php”中。但如果有类似“$ mysqli = mysqli_connect”的内容,那么您的代码就是
foreach ($table->find('tr') as $row) {
$name =$row->find('td.Name',0)->plaintext;
$S1 =$row->find('td.S1',0)->plaintext;
$S2 =$row->find('td.S2',0)->plaintext;
if (!is_null($name)) { // if found name
$name=$mysqli->real_escape_string($name); // Escapes special characters
$S1=$mysqli->real_escape_string($S1);
$S2=$mysqli->real_escape_string($S2);
if ($mysqli->query("INSERT INTO ScoreTable (Score1, Score2, Pname) VALUES ('$S1', '$S2','$name')") === TRUE) {//Make SQL query and check is it success
echo "Sccess\n";
}
}
}
检查你的dbconnect.php和过去所需的链接到连接变量,而不是$ mysqli
另外,我们建议使用real_escape_string()来转义特殊字符。特别是如果您使用外部数据。
答案 1 :(得分:0)
我不知道这是否是最好的答案,但它有效:
从网站上删除的HTML表格:
<table>
<tr>
<td class="Name">A</td>
<td class="S1">5</td>
<td class="S2">6</td>
</td>
</table>
我最终为我正在抓取的每个类创建一个数组,将它们组合成一个数组,然后从合并数组中更新数据库:
<?php
include("connect.php");
include("simple_html_dom.php");
$html = file_get_html('url', TRUE);
$table = $html->find('table',0);
foreach($table->find('tr') as $row){
$g_name = array()
foreach($row->find('td[class=Name]') as $cell{
$g_name['Name'] = $cell->plaintext;
}
$g_s1 = array()
foreach($row->find('td[class=S1]') as $cell{
$g_s1['S1'] = $cell->plaintext;
}
$g_s2 = array()
foreach($row->find('td[class=S2]') as $cell{
$g_s2['S2'] = $cell->plaintext;
}
$data = array_merge($g_name,$g_s1,$g_s2);
$sql = "Update table SET
Rd1='".$data['S1']."',
Rd2='".$data['S2']."',
WHERE Player = '".$data['Name']."';
}
?>
然后关闭我的MySQL连接或显示错误等... 我不确定这是否是最好的方法,但它正在发挥作用。
感谢大家的帮助。