<?php
$files = glob( 'docs/*.xml' );
if ( isset( $_GET['doctype'] ) == "all" ) {
foreach ( $files as $file ) {
$xml = new SimpleXMLElement( $file, 0, true );
echo'
<tr>
<td id="'. $xml->doctype .'" name="'. $xml->doctype .'" class="mainTable">' . $xml->doctype . '</td>
<td><a href="viewdoc.php?docname=' . basename( $file, '.xml' ) . '&username='. $xml->startedby .'&myname='. $_SESSION['username'] .'">' . basename( $file, '.xml' ) . '</a></td>
<td><a href="viewprofile.php?name='. $xml->startedby .'">'. $xml->startedby .'</a></td>
<td>'. $xml->date .'</td>
<td>* * * * *</td>
<td>'. filesize( $file ) .'kb</td>
</tr>
';
}
}
else if ( isset( $_GET['doctype'] ) == "doc" ) {
foreach ( $files as $file ) {
$xml = new SimpleXMLElement( $file, 0, true );
// code filter the $xml->doctype by equal it to currect value - which i'm not sure how to do.
echo'
<tr>
<td id="'. $xml->doctype .'" name="'. $xml->doctype .'" class="mainTable">' . $xml->doctype . '</td>
<td><a href="viewdoc.php?docname=' . basename( $file, '.xml' ) . '&username='. $xml->startedby .'&myname='. $_SESSION['username'] .'">' . basename( $file, '.xml' ) . '</a></td>
<td><a href="viewprofile.php?name='. $xml->startedby .'">'. $xml->startedby .'</a></td>
<td>'. $xml->date .'</td>
<td>* * * * *</td>
<td>'. filesize( $file ) .'kb</td>
</tr>
';
}
}
?>
我有几个<a>
标签(同一个链接,home.php),每个都有不同的$ _GET链接( home.php?doctype = doc,home.php?doctype = all等。 )。
现在我希望使用if语句过滤每个doctype,如果他等于我的值,则检查$_GET['doctype']
(假设值是word,excel,powerpoint等)。
我的问题是:如果我将$ xml-&gt; doctype等同于我的某个值,我该如何过滤doctype?
答案 0 :(得分:3)
我会使用位掩码: http://php.net/manual/en/language.operators.bitwise.php
<?php
// define your types and groups:
$listedTypes["TYPE_MSWORD"] = 1;
$listedTypes["TYPE_MSEXCEL"] = 2;
$listedTypes["TYPE_MSPOWERPOINT"] = 4;
$listedTypes["TYPE_OFFICE"] = $listedTypes["TYPE_MSWORD"] + $listedTypes["TYPE_MSEXCEL"] + $listedTypes["TYPE_MSPOWERPOINT"];
$listedTypes["TYPE_HTML"] = 8;
$listedTypes["TYPE_SVG"] = 16;
$listedTypes["TYPE_W3C"] = $listedTypes["TYPE_HTML"] + $listedTypes["TYPE_SVG"];
$listedTypes["TYPE_ALL"] = $listedTypes["TYPE_OFFICE"] + $listedTypes["TYPE_W3C"];
// try to open the page.php?doctype=TYPE_MSWORD
// or page.php?doctype=TYPE_ALL
if(!isset($_GET['doctype'])) $_GET['doctype'] = "TYPE_ALL";
if(!isset($listedTypes[$_GET['doctype']])) $_GET['doctype'] = "TYPE_ALL";
$requestedType = $listedTypes[$_GET['doctype']];
foreach ( $files as $file )
{
$xml = new SimpleXMLElement( $file, 0, true );
if($xml->doctype == "......") $fileType = $listedTypes["TYPE_MSWORD"];
elseif($xml->doctype == ".........") $fileType = $listedTypes["TYPE_MSEXCEL"];
elseif($xml->doctype == ".........") $fileType = $listedTypes["TYPE_MSPOWERPOINT"];
//... continue
// then check if the $type matches the $selection of $_GET['doctype']
// if the filetype is in the requested file type group, it will be shown
if($fileType & $requestedType)
{
echo'
<tr>
<td id="'. $xml->doctype .'" name="'. $xml->doctype .'" class="mainTable">' . $xml->doctype . '</td>
<td><a href="viewdoc.php?docname=' . basename( $file, '.xml' ) . '&username='. $xml->startedby .'&myname='. $_SESSION['username'] .'">' . basename( $file, '.xml' ) . '</a></td>
<td><a href="viewprofile.php?name='. $xml->startedby .'">'. $xml->startedby .'</a></td>
<td>'. $xml->date .'</td>
<td>* * * * *</td>
<td>'. filesize( $file ) .'kb</td>
</tr>
';
}
}
答案 1 :(得分:2)
你的问题在于IF:
if ( isset( $_GET['doctype'] ) == "all" )
此语句将使用isset()'s
评估true
布尔结果false
或string "all"
,您可能并不意味着
要解决此问题并消除冗余,请使用以下代码:
$acceptedDocTypes = ['all', 'doc', 'excel'];
if ((isset($_GET['doctype'])) && (in_array($_GET['doctype'], $acceptedDocTypes))) {
foreach ( $files as $file ) {
$xml = new SimpleXMLElement( $file, 0, true );
echo'
<tr>
<td id="'. $xml->doctype .'" name="'. $xml->doctype .'" class="mainTable">' . $xml->doctype . '</td>
<td><a href="viewdoc.php?docname=' . basename( $file, '.xml' ) . '&username='. $xml->startedby .'&myname='. $_SESSION['username'] .'">' . basename( $file, '.xml' ) . '</a></td>
<td><a href="viewprofile.php?name='. $xml->startedby .'">'. $xml->startedby .'</a></td>
<td>'. $xml->date .'</td>
<td>* * * * *</td>
<td>'. filesize( $file ) .'kb</td>
</tr>
';
}
}
只要设置'doctype'
并且属于允许的类型,此代码就会过滤。