LDAP-Abfrage 2-spaltig ohne Leereinträge

TheUnholyOne

Grünschnabel
Hallo zusammen!

Ich fummel grade an einem Telefonverzeichnis, welches Daten aus dem Active Directory holen soll. Bisher bin ich mit vielen Beispielen aus dem Internet soweit gekommen, dass das 'normale' Verzeichnis 2-spaltig erscheint.

Das Problem: mit den selben Daten möchte ich auf der Seite eine 2. Tabelle erzeugen, die so aufgeteilt ist:
HTML:
<th>Name</th><th>Handy</th><th>Name</th><th>Handy</th>

Insgesamt gibt es 28 Einträge mit Handy-Nummer bei gesamt 50 Datensätzen.

Ich habe in mehreren Ansätzen versucht, die Daten so aufzuteilen, dass
a) 2 Haupt-Spalten entstehen (mit jeweils 'Name','Handy')
und
b) nur die angezeigt werden, die auch wirklich eine Handy-Nummer eingetragen haben.

Folgende Zeilen sind mein aktueller Stand:

PHP:
for ($i=0; $i<$count_ja; $i++)
  {

    if (!empty($result_ja[$i]["mobile"]))
      {
      echo "<tr><td class=\"name\">" . $result_ja[$i]["displayname"] . "</td>";
      echo "<td class=\"mobile\" id=\"rechts\">" . $result_ja[$i]["mobile"] . "</td>";

      echo "<td class=\"name\">" . $result_ja[$i+13]["displayname"] . "</td>";
      echo "<td class=\"mobile\">" . $result_ja[$i+13]["mobile"] . "</td></tr>";
      }
  }

Bei der Gesamt-Telefonliste funktioniert das mit dem $i+x gut, weil ja auch alle angezeigt werden sollen. Bei den handy-Nummern leider nicht :(

Mein letzter Versuch war, die "tableFromArray"-Funktion (von http://www.tutorials.de/forum/1371560-post6.html.

Damit komme ich leider auch nicht weiter.

Ich wäre froh, wenn mir jemand auf die Sprünge helfen kann.

Thnx und Gruß

TuO
 
Hallo,

zunächst einmal würde ich lieber den Begriff "entwickeln" an Stelle von "fummeln" benutzen, aber das nur nebenbei ;)

Wenn ich dein Problem richtig verstehe, sollten folgendes deinem Problem abhilfe leisten:

PHP:
for ($i=0; $i<$count_ja; $i++)
  {
    $contact = array();
    $n = 0;
    if (!empty($result_ja[$i]["mobile"]))
      {
         $contact[$n] = $result_ja[$i];
         $n++;
      }
  }

So, wenn du das hast, hast du in dem Array $contact alle Einträge mit Mobilnummer. Über dieses Array jetzt nochmal ne Forschleife, die Ausgabe und fertig ;)
Wenn wir deinen Code nicht ganz aufgeben wollen könnte man deinen Teil jetzt wie folgt editieren:

PHP:
$contact_count = count($contact);
for ($i=0; $i<$contact_count; $i++)
  {
      $rightrows = $i + ($contact_count / 2);
      echo "<tr><td class=\"name\">" . $contact[$i]["displayname"] . "</td>";
      echo "<td class=\"mobile\" id=\"rechts\">" . $contact[$i]["mobile"] . "</td>";

      echo "<td class=\"name\">" . $contact[$rightrows]["displayname"] . "</td>";
      echo "<td class=\"mobile\">" . $contact[$rightrows]["mobile"] . "</td></tr>";
      }
  }

Das sollte alles sein ;)

Gruß,
BigManu
 
Zuletzt bearbeitet:
Vielen Dank für die Antwort, BigManu.

Bei mir hakt es noch, obwohl ich Deine Erklärungen nachvollziehen kann:

In der For-Schleife wird $contact als Array deklariert. Anschliessend wird jeder nicht-leere "Mobil-Wert" in das Array geschrieben.

So zumindest hatte ich das verstanden.
Wenn das so richtig ist, müsste ich doch mit
PHP:
echo ($contact_count);
nach Durchlaufen der for-Schleife die Anzahl aller Datensätze im Array bekommen.

Ich erhalte allerdings nur den Wert 1. Auch die anschliessende Ausgabe gibt mir lediglich einen Wert aus.

Vielleicht kannst Du (oder auch jemand anderes) mich da aufklären.

Danke und Gruß
TuO

PS: "fummeln" habe ich geschrieben, weil ich Code einigermaßen deuten und zusammenbasteln kann (mit viel Versuchen und lesen und zusammensuchen), aber nicht in der Lage bin, eigenes zu "entwickeln" (Ideen umzusetzen). Solange dies so ist, fände ich es vermessen, von entwickeln zu reden :-) Aber ich denke, das wird schon noch.
 
Hi,

mit
PHP:
echo $contact_count;
erhälst du die Anzahl aller Kontakte, die eine Mobilfunknummer eingetragen haben. Das ist schon richtig. Diesen Wert erhälst du, nach dem die Zuweisung
PHP:
$contact_count = count($contact);
stattgefunden hat.

Wenn der Wert von $contact_count nur 1 beträgt, dann gibt es wohl nur einen Teilnehmer, der eine Mobilfunknummer eingetragen hat. Wenn du dir sicher bist, dass dieser Wert falsch ist, würde ich mal die Abfrage überprüfen, die mir das Array $result_ja liefert. Meiner Meinung nach, könnte dort dann schon etwas falsch laufen.

Was man auch noch überprüfen könnte ist, ob in $result_ja[$i]['mobile'] nicht Leerzeichen eingetragen sind, was eine Abfrage auf "empty" nicht erkennen würde. Entweder schaust du das nach, überprüfst auf
PHP:
$result_ja[$i]['mobile'] != " "
oder du nutzt folgende, schöne Funktion:
PHP:
if(!empty(trim($result_ja[$i]['mobile']))) {

Wenn du das ausprobiert hast, kannst du dich dann wieder hier melden. Ich glaube aber, dass der Fehler daher rühren sollte, ohne meinen Code getestet zu haben...

Gruß,
BigManu
 
Hallo BigManu,

ich hab's jetzt noch mal getestet, eventuell habe ich ja gestern was falsch gemacht. Bekomme aber die selben Ergebnisse:

PHP:
for ($i=0; $i < $count_ja; $i++)
{
        $contact = array();  // FOR Z1
        $n = 0;  // FOR Z2
        if (!empty($result_ja[$i]["mobile"]))  //FOR Z3
        {
                $contact[$n] = $result_ja[$i];   // IF Z1
                echo $contact[$n]["mobile"]."<br>";  // IF Z2
                echo count($contact[$n]);  // IF Z3
                echo count($contact[$n]["mobile"]);  // IF Z4
                echo count($contact);  // IF Z5
                $n++;  // IF Z6
        }
}

$contact_count = count($contact);  
echo "<br>".$contact_count;

IF Z2 gibt alle Handy-Nummern aus.
IF Z3 gibt 9 aus.
IF Z4 gibt 1 aus.
IF Z5 gibt 1 aus.

Eventuell noch Interessant: die echo-Zeilen erscheinen in der Anzahl der tatsächlich auszugebenen Handy-Nummern.

Das echo nach der For-Schleife gibt 1 aus. Als würden die Werte aus den Schleifen nicht nach außen weiter gegeben werden. Muss da irgendwas "returned" werden oder Variablen global deklariert werden? (Nur so Ideen)


Danke für die Hilfe !!

Greetinx
TuO
 
Zuletzt bearbeitet:
PHP:
for ($i=0; $i < $count_ja; $i++)
{
        $contact = array();  // FOR Z1
        $n = 0;  // FOR Z2
        if (!empty($result_ja[$i]["mobile"]))  //FOR Z3
        {
                $contact[$n] = $result_ja[$i];   // IF Z1
                echo $contact[$n]["mobile"]."<br>";  // IF Z2
                echo count($contact[$n]);  // IF Z3
                echo count($contact[$n]["mobile"]);  // IF Z4
                echo count($contact);  // IF Z5
                $n++;  // IF Z6
        }
}

$contact_count = count($contact);  
echo "<br>".$contact_count;

IF Z2 gibt alle Handy-Nummern aus.
IF Z3 gibt 9 aus.
IF Z4 gibt 1 aus.
IF Z5 gibt 1 aus.

Hallo TuO,

ich möchte zunächst einmal Stellung zu deinen Tests nehmen:

ZU IF Z2: Ist ja auch soweit in Ordnung denke ich!
ZU IF Z3: Heißt also es gibt 9 Attribute... soweit so gut ;)
ZU IF Z4: Ist ja auch vollkommen richtig, denn hinter contact[$n]["mobile"] verbirgt sich ja kein weiteres Array mehr...
ZU IF Z5: Das zeigt mir direkt, wo der Fehler ist ;) :D

Fehlerbehebung:
Nimm die Befehle $contact = array(); in FOR Z1 und $n = 0; in FOR Z2 weg und schreibe sie bitte vor die "for-Schleife". Wir deklieren sonst jedes mal $contact neu als Array und $n als 0... ;) Der Code sollte dann also so aussehen:

PHP:
$contact = array();  // FOR Z1
$n = 0;  // FOR Z2
for ($i=0; $i < $count_ja; $i++)
{
        if (!empty($result_ja[$i]["mobile"]))  //FOR Z3
        {
                $contact[$n] = $result_ja[$i];   // IF Z1
                echo $contact[$n]["mobile"]."<br>";  // IF Z2
                echo count($contact[$n]);  // IF Z3
                echo count($contact[$n]["mobile"]);  // IF Z4
                echo count($contact);  // IF Z5
                $n++;  // IF Z6
        }
}

$contact_count = count($contact);  
echo "<br>".$contact_count;

Damit sollte der Fall gelöst sein ;) Sorry, war mein Fehler. War ungetestet und ein wenig unaufmerksam von mir!

Viele Grüße,
BigManu
 
Hi BigManu

Danke für die Korrektur. Funktioniert nun alles, wie gewünscht.
Lediglich eine kleine Änderung habe ich noch vornehmen müssen:
PHP:
for ($i=0; $i < $count_ja; $i++)
habe ich ersetzt durch
PHP:
for ($i=0; $i<($contact_count /2); $i++)

Vorher wurden in der ersten Spalte alle Ergebnisse angezeigt und zusätzlich die 2. Spalte.


Durch Deine Stellungnahme zu meinen Tests ist mir auch das Thema Arrays etwas klarer geworden.

Außerdem lag ich mit meiner Vermutung (Gültigkeitsbereich des contact-Arrays) ja nicht sooo falsch ^^ Freut mich auch ein wenig.


Also herzlichen Dank!!

Greetinx
TuO
 
Zurück