Ik ben bezig met een ldap script in php:


<html>
<head>
</head>
<body>

<?php

// specify the LDAP server to connect to
$conn = ldap_connect("localhost") or die("Could not connect to server. Error
is " . ldap_error($conn));  

// bind to the LDAP server 
$r = ldap_bind($conn) or die("Could not bind to server. Error is " .
ldap_error($conn));

// prepare data
$info["cn"] = $_POST['cn'];
$info["sn"] = $_POST['sn'];
$info["mail"] = $_POST['mail'];
$info["objectClass"] = "inetOrgPerson";

// prepare DN for new entry
$dn = "mail=" . $_POST['mail'] . ", dc=my-domain, dc=com";

// add data to directory
$result = ldap_add($conn, $dn, $info);

// if successful, display success message
if($result) 
{
   echo "New entry with DN " . $dn . " added to LDAP directory."; } // else
display error 
else 
{
   echo "An error occurred. Error number " . ldap_errno($conn) . ": " .
ldap_err2str(ldap_errno($conn)); }

// all done? clean up
ldap_close($conn);

?>

</body>
</html>


Het probleem is, dat als er een veld in het formulier leeg gelaten word ldap_add() dat niet echt leuk vind en een syntax error teruggeeft. Nu heb ik dit gevonden in het php manual om het op te lossen:


Another fun thing: ldap_add() doesn't like arrays with empty members: so
array (
[cn] = "name"
[key] = ""
[anotherkey] = "value"
)
will yield a syntax error!

solve this with a simple peice of code:

foreach ($originalobject as $key => $value){
if ($value != ""){
$object[$key] = $value;
}
}

where $originalobject is the uncecked array and $object is the one without empty members.


Alleen weet ik niet echt hoe ik dit moet implementeren. Kan iemand me hierbij helpen? Of is er nog een andere oplossing? Als je alle velden gewoon incult werkt het script gewoon, maar zodra je dus een veld leeg laat, gaat 'ie over de zeik.
Simpele fout controle toevoegen?


<?php
// specify the LDAP server to connect to
$conn = ldap_connect("localhost") or die("Could not connect to server. Error is " . ldap_error($conn));  
// bind to the LDAP server 
$r = ldap_bind($conn) or die("Could not bind to server. Error is " . ldap_error($conn));

if ($_SERVER['REQUEST_METHOD'] == "POST") {
	foreach ($_POST as $key => $val) {
		if (!empty($val)) {
			$info[$key] = $val;
		}
	}
	$info["objectClass"] = "inetOrgPerson";
			
	if (isset($info['mail'])) {
		// prepare DN for new entry
		$dn = "mail=" . $_POST['mail'] . ", dc=my-domain, dc=com";
	} else {
		die('Mail is vereist om een conectie te maken');
	}
	
// add data to directory
	$result = ldap_add($conn, $dn, $info);
	
	// if successful, display success message
	if($result) {
	   echo "New entry with DN " . $dn . " added to LDAP directory."; 
	} else {
	   echo "An error occurred. Error number " . ldap_errno($conn) . ": " .	ldap_err2str(ldap_errno($conn)); 
	}	
	
	// all done? clean up
	ldap_close($conn);
} 


Simpel gezegt is het een koopje over de POST array heen. Als de key EN de waarde bestaat. zet die hem in de info array.
Zo krijg je geen lege waarde in je info array waardoor die niet 'over de zeik' zou moeten gaan.

Verder controleert die specifiek op info['mail']. omdat het mij lijkt dat je script niet werkt als deze niet is gezet.

succes (fouten voorbehouden 0o, en ik zien net nog wat debug code staan daarom de edit 0o)

Het is wel de bedoeling dat een veld leeg kan zijn. Het gaat namelijk om een notitie veld, wat niet altijd informatie bevat. Al is het voorbeeld wat je geeft wel zeer handig om ervoor te zorgen dat velden die WEL vereist zijn, zijn ingevuld. Misschien ben ik niet helemaal duidelijk geweest, escuses.
Ik heb zelf geen ervaring met Ldap. ik heb alleen het voorbeeld dat je hebt gegeven ingebouwd in je code.

Ik weet dus niet of ldap dit accepteerd:


if ($_SERVER['REQUEST_METHOD'] == "POST") {
    foreach ($_POST as $key => $val) {
        if (!empty($val)) {
            $info[$key] = $val;
        } else {
            $info[$key] = null;
    }

(verkorte versie)

of je wijzigt null naar 'leeg' oid, en dat filter je dan weer bij het uitlezen (again, Ik ken ldap niet).

Daarnaast, vraag ik mij af, wat doet ldap als jij een variable niet meegeeft in de array, als die die waarde gewoon op null laat staan (wat volgens mij de bedoeling is als het veld niet ingevuld is) zie ik het probleem ook niet.

ps.


        $dn = "mail=" . $_POST['mail'] . ", dc=my-domain, dc=com";


moet natuurlijk:

        $dn = "mail=" . $info['mail'] . ", dc=my-domain, dc=com";


zijn.
Het werk helaas niet, blijf de error houden dat de DN syntax verkeerd is. Als ik elk veld gewoon invul, wekt het gewoon, maar zoals eerder gemeld moet een bepaald veld ook leeg kunnen zijn. Iemand nog andere ideeën?

Reageren