PHP LDAP Address/Phonebook
OK. I have put together something that works. It is a work in progress, but it is close to doing what I want. It is a mish-mash of other PHP scripts found on the Internet.
The only issue I am having with it is that I cannot search by Site(Company) attribute. All else works.
This is programmed under PHP 5 and Apache Server.
pbform.html:
<html>
<head>
<title>Search</title>
</head>
<body>
<form action="search.php" method="POST">
First name
<br>
<input type="text" name="gn" length="30" value="*"><br>
Last name
<br>
<input type="text" name="sn" length="30" value="*"><br>
Email address
<br>
<input type="text" name="email" length="30" value="*"><br>
Site
<br>
<input type="text" name="comp" length="30" value="*"><br>
<br>
<input type="submit" name="submit" value="Search">
</form>
</body>
</html>
search.php:
<html>
<head>
</head>
<body>
<table width="500" cellpadding="5" cellspacing="5" border="1">
<?php
// specify the LDAP server to connect to
$conn = ldap_connect("yourzimbraserver.domain.com") or die("Could not connect to server");
ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3);
// bind to the LDAP server specified above
$r = ldap_bind($conn) or die("Could not bind to server");
// create the search string
$query = "(&(givenname=" . $_POST['gn'] . ")(sn=" . $_POST['sn'] . ")(mail=" . $_POST['email'] . ")(company=" . $_POST['comp'] . "))";
echo $query;
// start searching
// specify both the start location and the search criteria
// in this case, start at the top and return all entries
$result = ldap_search($conn,"dc=domain,dc=com", $query) or die("Error in search query");
// get entry data as array
$info = ldap_get_entries($conn, $result);
?>
<tr>
<td>Last Name</td>
<td>First Name</td>
<td>E-Mail Address</td>
<td>Site</td>
<td>Room</td>
<td>Phone</td>
<tf colspan=6> </td>
</tr>
<?php
// Sort Data by Company, Last Name and First Name
$attribs = array('company','sn','givenname');
for ($i=0; $i<$info["count"]; $i++)
{
$index = $info[$i];
$j=$i;
do {
//create comparison variables from attributes:
$a = $b = null;
foreach($attribs as $attrib){
$a .= $info[$j-1][$attrib][0];
$b .= $index[$attrib][0];
}
// do the comparison
if ($a > $b){
$is_greater = true;
$info[$j] = $info[$j-1];
$j = $j-1;
}else{
$is_greater = false;
}
} while ($j>0 && $is_greater);
$info[$j] = $index;
}
// iterate over array and print data for each entry
echo "<ul>";
for ($i=0; $i<$info["count"]; $i++)
{
echo "<tr>";
echo "<td>".$info[$i]["sn"][0]."</td>";
echo "<td>".$info[$i]["givenname"][0]."</td>";
echo "<td>".$info[$i]["mail"][0]."</td>";
echo "<td>".$info[$i]["company"][0]."</td>";
echo "<td>".$info[$i]["physicaldeliveryofficename"][0]."</td>";
echo "<td>".$info[$i]["telephonenumber"][0]."</td>";
echo "</tr>";
}
// print number of entries found
echo "Number of entries found: " . ldap_count_entries($conn, $result) . "<p>";
// all done? clean up
ldap_close($conn);
?>
</table>
</body>
</html>
|