PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Name und Bild zusammen ausgeben


notafake
20.08.2009, 14:51:29
Hallo allerseits
1st. Denke das kommt ins Grundlagen-Forum, trotzdem falls es nicht passt bitte verschieben.

So ich möchte Namen aus einer Datenbank auslesen, Bildnamen aus Bildern auslesen und mit den Namen vergleichen sodass ich beides zusammen ausgeben kann.
Was ich bereits habe:


<?php
$dbort = "localhost";
$dbuser = "root";
$dbpw = "salamander";
$dbdb = "mitarbeiter";

$db = mysql_connect ($dbort,$dbuser,$dbpw)
or die ("keine Verbindung möglich: " .mysql_error());
echo "Verbindung erfolgreich";

mysql_select_db($dbdb);

$query=mysql_query("SELECT name, vorname FROM mitarbeiter")or die(mysql_error()); //Auswahl ausführen und Ergebnis in Variable z speichern
while($array=mysql_fetch_array($query))
{
echo "<br />";
echo "$array[name] - $array[vorname]"; /
}


mysql_close(); //Verbindung zum Server schließen


?>


Nochmal damit ihr genau wisst wobei ihr mir vielleicht ein bisschen helfen könnt:
Auslesen und ausgeben der Namen aus der DB geht ja schon. Jetzt möchte ich aus einer Reihe von Bildern, welche alle die Namen aus der DB tragen, genau die passenden zu den jeweiligen Namen ordnen, und natürlich auch anzeigen.

Hab an sowas ähnliches gedacht komme aber nicht weiter


if ($bildname == $array[name]){
echo $bild;
}

Danke für eure Hilfe

Grüsse
NotAFake

vt1816
20.08.2009, 14:57:34
Hallo und willkommen hier im Forum.

Wo kommen die Bildnamen her? Wo befinde sich die Bilder (Pfadangabe)?
Wie ist es zu verstehen: Name aus der DB: "Mustermann" = Bildname: "mustermann.jpg"?

notafake
20.08.2009, 15:20:53
Die Bilder sind auf einem Server abgelegt. Ich möchte einen Ordner durchsuchen bzw. die Bildnamen darin auslesen und zu den Namen passend ausgeben.
Als Beispiel: Aus der DB wird der Name "Hans Meyer" ausgelesen.
Somit wird im IMG Ordner nach "Hans" gesucht, und wenn ein Bild mit dem Namen existiert (muss ja nicht der vollständige Namen sein, geht ja mit "hans%"), wird dieses ausgegeben.
Danke für das willkommen heissen und die schnelle Antwort.

gruss

vt1816
20.08.2009, 15:37:05
Da sollte Dein Stichwort glob() (http://de.php.net/glob) sein, was die Bilder angeht. Den Rest schaffst Du dann selbstständig - oder?

notafake
20.08.2009, 16:23:08
Oh glob ist geil ^^ danke, so müsste ich es schaffen.

notafake
20.08.2009, 17:22:28
Und weiter gehts, bin wieder stecken geblieben:
Bin jetzt soweit gekommen (nicht weit):

$query=mysql_query("SELECT name, vorname FROM mitarbeiter")or die(mysql_error()); //Auswahl ausführen und Ergebnis in Variable z speichern
while($array=mysql_fetch_array($query)) //nun wird das Ergebnis welches in $z steht in ein Array $unter umgewandelt und so lange durchlaufen wie Zeilen die Abfrage ausgibt.
{
foreach (glob("img/*.jpg") as $filename) {
$file = "<img src=".$filename.">";
echo $file;
}
}


mysql_close(); //Verbindung zum Server schließen



if ($array[name] == $filename){
echo $array[name];
echo $file;
}

Leider weiss ich nicht wie ich die Bilder und die Namen zusammenbringe, das fetch_array läuft ja so oft durch und DANACH kommt eigentlich erst die Sache mit den Bildern...

vt1816
20.08.2009, 18:08:48
[...], so müsste ich es schaffen.

Das war dann aber ein bischen geflunkert - oder?


Und weiter gehts, bin wieder stecken geblieben:
Bin jetzt soweit gekommen (nicht weit):

$query=mysql_query("SELECT name, vorname FROM mitarbeiter")or die(mysql_error()); //Auswahl ausführen und Ergebnis in Variable z speichern
while($array=mysql_fetch_array($query)) //nun wird das Ergebnis welches in $z steht in ein Array $unter umgewandelt und so lange durchlaufen wie Zeilen die Abfrage ausgibt.
{
foreach (glob("img/*.jpg") as $filename) {
$file = "<img src=".$filename.">";
echo $file;
}
}

mysql_close(); //Verbindung zum Server schließen

if ($array[name] == $filename){
echo $array[name];
echo $file;
}

Leider weiss ich nicht wie ich die Bilder und die Namen zusammenbringe, das fetch_array läuft ja so oft durch und DANACH kommt eigentlich erst die Sache mit den Bildern...

Du bist nicht stecken geblieben - Du bist noch gar nicht gestartet!
Werde Dir doch erstmal klar, was Du wie machen möchtest. Willst Du die Namen zu den Bildern oder die Bilder zu den Namen. Weil so zeigst Du im Moment zu jedem Namen alle Bilder ... (den Rest dahinter schenken wir uns).
Schau also nach ob Du den Namen $array[name] (wobei der Variablenname unglücklich gewählt ist!) im Bilder-Array findest - ok?

notafake
21.08.2009, 15:09:42
Da wirst du richtig liegen habe mich da wohl etwas überschätzt.

Also habe mir jetzt folgendes überlegt:
Ich packe die Foreach Schleife in die While rein, somit wird bei jedem neuen Namenseintrag der Ordner mit Bildern durchgegangen und geprüft ob der momentane Name denn zu einem Bild passt bzw. mit einem Bildnamen übereinstimmt. Logischerweise bekomme ich jetzt nur das erste Bild da die Foreach bei jeder While Schleife wieder von vorne anfängt. Ich hoffe ihr versteht wie ich das meine.
Ich müsste jetzt also bei jedem weiterem durchlauf beim nächsten Eintrag im img Ordner beginnen. Gibts dafür schon ne Funktion?
Bitte sagt mir wenn ich völlig daneben liege dann fange ich nähmlich nochmal woanders an :)

gruss

vt1816
21.08.2009, 15:20:01
Benötigt wird nur eine Schleife und zwar die mit den Namen (aus der Datenbank). Der Rest wird mit dem Bilder-Array erledigt.

notafake
21.08.2009, 15:59:25
Der Rest wird mit dem Bilder-Array erledigt.
Wird damit erledigt, damit kann ich nix anfangen muss wohl nochmals über die Bücher bzw. Inet.

vt1816
21.08.2009, 16:04:59
Wird damit erledigt, damit kann ich nix anfangen muss wohl nochmals über die Bücher bzw. Inet.

Schau einfach auch mal in die Array-Funktionen (http://de.php.net/manual/de/function.array.php).

notafake
24.08.2009, 14:07:17
Hallo nochmal

Also könnt ihr mir vielleicht noch etwas weiterführende Tipps geben?
Will nicht das ein anderer für mich die Arbeit macht, sitze aber nun schon 2 Tage daran und stehe immer noch auf der Stelle.
Ich habe scho mit array_search() versucht aber da bekommt man nur zurück OB das ding vorhanden ist, und nicht das Bild selbst.
Mit in_array() existiert jetzt eine überprüfung welche eine Meldung ausgibt falls kein passendes Bild existiert, dies ist aber eher Nebensache.

Mein Problem ist also ich bekomme zwar beide Inhalte (Namen aus DB und Bilder aus Ordner) aufgelistet, jedoch habe ich nach stundenlangem studieren immer noch keien Idee wie ich die beiden Elemente zusammenbringe. Mit if-statements komme ich nur soweit, dass ich $mitarbeiter[vorname] mit dem ganzen $img array vergleichen kann, aber nicht mit den einzelnen Einträgen welche ich dann ausgeben möchte.
Sofern ihr denkt mir fehlt grundsätzliches Wissen, teilt mir dies bitte mit sodass nicht ein halber Roman verfasst werden muss.

Edit: Nochmal etwas genauer:
$img= array();
if($handle = @opendir('img'))
{
while($file = readdir($handle))
{
if($file != '.' AND $file != '..')
{
$img[] = $file;
sort($img);
}
}
sort($img);
}

echo "<pre>";
print_r($img);
echo "</pre>";
echo "<table>";
//Datenbankabfrage
$query=mysql_query("SELECT name, vorname FROM mitarbeiter ORDER BY name")or die(mysql_error());
while($mitarbeiter=mysql_fetch_array($query)) //nun wird das Ergebnis welches in $query steht in ein Array $mitarbeiter umgewandelt und so lange durchlaufen wie Zeilen die Abfrage ausgibt.
{
$namen = $mitarbeiter[name]."".$mitarbeiter[vorname].".jpg";

//Die Überprüfung ob überhaupt ein Bild für diesen Namen existiert.
if (in_array($namen, $img)){
echo "<tr><td>";
echo $mitarbeiter[name];
echo "</td><td>";
echo $mitarbeiter[vorname];
//hier müsste jetzt sowas wie "echo "<img src="$img" />" rein oder?
echo "</td></tr>";
}
else {
echo "<tr><td>";
echo "</td><td>";
echo $mitarbeiter[vorname];
echo "-Kein Bild vorhanden ";
echo "</td></tr>";
}
}

echo "</table>";

notafake
24.08.2009, 15:11:48
So hab nun eine einfachere Variante gefunden, natürlich 5 min. nach meine vorigen Post -.-
Für alle die es interessiert:

...
//Die Überprüfung ob überhaupt ein Bild für diesen Namen existiert.
if (in_array($namen, $img)){
echo "<tr><td>";
echo $mitarbeiter[name];
echo $mitarbeiter[vorname];
echo "<img src='img/".$namen." />";
echo "</td></tr>";
}
...

Da die Bilder den selben Namen tragen wie die Personen kann einfach $namen im img tag verwendet werden. Warum ist mir das nicht früher aufgefallen...

Danke für die Geduld
grüsse

vt1816
24.08.2009, 15:26:20
[...] Warum ist mir das nicht früher aufgefallen...

Danke für die Geduld
grüsse

Lieber später als nie - dann war der Wink mit dem Zaunpfahl ja doch nicht umsonst...

notafake
31.08.2009, 11:45:27
So nun hat sich ein anderes Problem bemerkbar gemacht:

Da ich die Benutzerdaten später aus dem Active Directory ziehen will habe ich dieses exportiert und in meine MySQL DB gemurkst (wirklich). Jedoch sieht das AD die Namen nicht als Vor- und Nachnamen getrennt, sondern als ein einziger Namen im Sinne von:

Name..................................... Vorname

Meyer, Hans
Hindler, Klaus
Delle, Simon


Für mein Prinzip müssten die Namen aber so aufgelistet sein


Name.....................................Vorname

Meyer.....................................Hans
Hindler................................... Klaus
Delle .....................................Simon


Möchte mir jemand erklären wie das ev. zu erreichen wäre? (Natürlich ausser selbst alles abzutippen)

vt1816
31.08.2009, 12:18:40
[...]Möchte mir jemand erklären wie das ev. zu erreichen wäre? (Natürlich ausser selbst alles abzutippen)

Das Prinzip dieses Forums (http://www.selfphp.de/forum/announcement.php?f=12) hat sich Dir noch immer nicht so richtig erschlossen - oder?

Hier mal wieder ein Stichwort: explode() (http://de.php.net/explode).

notafake
31.08.2009, 12:34:52
Danke, Sorry und tschüss.
Wollte ja auch keine Komplettlösung ;)

Edit: Dass die kleine Zeile
list($name, $vorname) = explode(",", $user[name]);

soviel bewirken kann. So kann man das AD "überlisten".

Danke für den Tipp.

vt1816
31.08.2009, 13:16:31
Edit: Dass die kleine Zeile
list($name, $vorname) = explode(",", $user[name]);

soviel bewirken kann. So kann man das AD "überlisten".

Danke für den Tipp.

Und das konntest Du nicht selber finden? ;-)