Modul: Google Maps mit Datenbank-Anbindung und Geocoding

Gesperrt
gummibaerle
Beiträge: 52
Registriert: Do 23. Feb 2006, 00:16
Wohnort: Kleinaitingen
Kontaktdaten:

Modul: Google Maps mit Datenbank-Anbindung und Geocoding

Beitrag von gummibaerle » Mi 6. Dez 2006, 09:30

Ich möchte auch mal ein Modul vorweisen können. Mir ist zwar "tommo" zuvor gekommen, aber ich poste mein Google Maps Modul dennoch, da es etwas andere Möglichkeiten aufzeigt. Zumindest spar ich mir dann die Grundinstallation von Google Maps, da er sie sehr gut erklärt.

Zu sehen ist das Ergebnis unter www.kleinaitingen.com und einem Klick auf einen Firmenamen. Die Kontaktdaten werden dann in der Google Maps dargestellt. Vielleicht hat der ein oder andere noch tolle Ideen das ganze zu erweitern, wäre toll!

Im Input-Modul nutzen wir die CMS_VALUE[99], um auf einfache Art und Weise den Ort mit einem Namen z.B. "Kleinaitingen" vorzubelegen.

INPUT-MODUL

Code: Alles auswählen

?><?php
/*****************************************************
* CONTENIDO MODUL INPUT - FIRMENLISTE MIT GOOGLE MAPS
*
* Modulname  :  Firmenliste inkl. Google Maps
* Author(s)  :  Wolfgang Kundler <kundler@wallaby.de>
* Copyright  :  www.onlineshop-handbuch.de
* Created    :  2006-12-03
*****************************************************/ 
?>
   <table border="0">
      <tr>
         <td><?php echo mi18n("Gemeinde");?></td>
         <td><input type="text" name="<?php echo "CMS_VAR[99]";?>" value="<?php echo "CMS_VALUE[99]"; ?>"></td>
      </tr>
   </table>
<?php
In unserer Datenbank haben wir zum Teil LAT und LON hinterlegt, um das Ziel genau zu treffen, ansonsten werden mit get_lat_long die Geocoding-Daten interpoliert. Daher kann es sein, dass man das ein oder andere Haus nicht wirklich genau trifft.

Die Zahl "17" bei "map.setCenter(new GLatLng(<? echo "$lat, $lon"; ?>), 17, G_SATELLITE_MAP);" stellt den Zoomfaktor dar. Ist in der Kartendarstellung nichts sichtbar, den Wert verkleinern.

$row[0] = firmenid
$row[1] = firma
$row[2] = name
$row[3] = anschrift
$row[4] = plz
$row[5] = ort
$row[6] = lat
$row[7] = lon
$row[8] = fon
$row[9] = fax
$row[10] = mobil
$row[11] = email
$row[12] = homepage
$row[13] = branche
$row[14] = memo

OUTPUT-MODUL

Code: Alles auswählen

<?php
/*****************************************************
* CONTENIDO MODUL OUTPUT - FIRMENLISTE MIT GOOGLE MAPS
*
* Modulname  :  Firmenliste inkl. Google Maps
* Author(s)  :  Wolfgang Kundler <kundler@wallaby.de>
* Copyright  :  www.onlineshop-handbuch.de
* Created    :  2006-12-03
*****************************************************/ 

      $host=localhost;
      $dbname='hierdatenbanknameeintragen';
      $user='hierdatenbankusereintragen';
      $pwd='hierdatenbankpassworteintragen';
      
      $gemeinde = $_GET['Gemeinde'];
      $idart = $_GET['idart'];
      $idcat = $_GET['idcat'];
      $firmenid = $_GET['firmenid'];
      $lat = $_GET['lat'];
      $lon = $_GET['lon'];





if(isset($firmenid))
   {
      if($lon==0)
         {
            echo"Für dieses Unternehmen sind leider keine genauen Geocoding-Daten hinterlegt! ";
            echo"Wir hinterlegen für Sie auch kostenlos einen längeren HTML-Text zu Ihrem Unternehmen. ";
            echo"Falls Sie wünschen, können Sie uns diese Information (und auch Geocoding-Koordinaten) gerne mitteilen.<br /><br />";
            echo"Öffnen Sie dazu einfach per Mausklick unser <a href='http://www.kleinaitingen.com/front_content.php?idart=147&idcat=81'>Anmeldeformular</a>.";
         }
      Googlemaps($firmenid, $lat, $lon);
   }
else 
   {
    $gemeinde=CMS_VALUE[99];
    if($sortierung=="") {$sortierung="branche";};
    Firmenliste($gemeinde,$sortierung);
   }




   // Datenbank-Verbindung herstellen
   function verbinden()
   {
      global $host;
      global $dbname;
      global $user;
      global $pwd;

      $db=mysql_connect($host, $user, $pwd) or die ("Keine Verbindung!");

      $select=mysql_select_db($dbname,$db);
      return $db;
   }




   // Geocoding-Daten einholen anhand der Adresse (= Strasse PLZ Ort)
   function get_lat_long($q) 
   {
      global $lat;
      global $lon;
      
      $q = urlencode($q);
      $gm = fopen('http://maps.google.com/maps?q=' . str_replace('','+',$q) . '&output=js','r');
      $tmp = @fread($gm,30000);
      fclose($gm);
      $pos=strpos($tmp,"center");
      $wert=substr($tmp,$pos,40);
      $lat=substr($wert,14,9);
      $lon=substr($wert,29,9);
   }




   // Darstellung der Google Map inkl. aller Kontaktdaten aus der Datenbank
   function Googlemaps($firmenid, $lat, $lon)
   {
     global $lat;
     global $lon;

     $db=verbinden();
     $sql="SELECT * FROM con_firmenverzeichnis WHERE firmenid='$firmenid'";
     $rs1=mysql_query($sql,$db);
     $row=mysql_fetch_row($rs1);
     
     if($row[6]>0.1) 
        {
           // Die genauen Geodaten liegen in unserer Datenbank!
           $lat=$row[6];
           $lon=$row[7];
        }
     else
        {
           // Die Geodaten werden interpoliert dargestellt!
           $tmp = get_lat_long("$row[3], $row[4] $row[5]");
        }

      ?>
         <h1><? echo "$row[1]"; ?></h1>
         <h2><? echo "Branche: $row[13]"; ?></h2> 
         <p><? echo "$row[14]"; ?></p>
         <div id="map" style="width:585px; height:425px"></div>
         <script type="text/javascript">
           //<![CDATA[
             function load()
               {
                 if (GBrowserIsCompatible()) 
                    {
                       var map = new GMap2(document.getElementById("map"));
                       map.addControl(new GSmallMapControl());


                       map.addControl(new GMapTypeControl());
                       map.setCenter(new GLatLng(<? echo "$lat, $lon"; ?>), 17, G_SATELLITE_MAP);
                       // Our info window content
                       var infoTabs = [
                          new GInfoWindowTab("Anschrift", "<? echo "<b>Firma:</b> $row[1] <br /><b>Name:</b> $row[2] <br /><b>Anschrift:</b> $row[3] <br /><b>PLZ/Ort:</b> $row[4] $row[5]"; ?>"),
                          new GInfoWindowTab("Kontakt", "<? echo "<b>Fon:</b> $row[8]<br /><b>Fax:</b> $row[9]<br /><b>Mobil:</b> $row[10]<br /><b>eMail:</b> "; if($row[11]=="k.A.") {echo "k.A.";}  else {echo "<a href='mailto:$row[11]?subject=Kontakt%20%FCber%20www.kleinaitingen.com' target='_blank'>$row[11]</a>";} echo"<br /><b>Homepage:</b> "; if($row[12]=="k.A.") {echo "k.A.";} else {echo "<a href='$row[12]' target='_blank'>$row[12]</a>";} ?>"),
                          new GInfoWindowTab("Geocoding", "<? echo "<b>LAT:</b> $lat <br /><b>LON:</b> $lon"; ?>")
                       ];
                       // Place a marker in the center of the map and open the info window automatically
                       var marker = new GMarker(map.getCenter());
                       GEvent.addListener(marker, "click", function() {
                          marker.openInfoWindowTabsHtml(infoTabs);
                          });
                       map.addOverlay(marker);
                       marker.openInfoWindowTabsHtml(infoTabs);
                    }

               }
           //]]>
         </script>
      <?
   }







   // Ausgabe einer nach Branchen sortierten Firmenliste
   function Firmenliste($gemeinde, $sortierung)
   {
      global $gemeinde;
      global $lat;
      global $lon;
      
      if($gemeinde=="Oberottmarshausen") { $idart='165'; }
      elseif($gemeinde=="Großaitingen") { $idart='169'; }
      elseif($gemeinde=="Graben") {$idart='168';}
      else { $idart='166'; };
      
      ?> 
         <div>
            <table summary="Ausgabe eines Firmenverzeichnisses einer einzelnen Gemeinde" class="mytable" border="0" width="585">
               <thead>
                  <tr>
                     <th id="branche" abbr="Branche">&nbsp;<a href="/firmenverzeichnis/<? echo"$gemeinde"; ?>?sortierung=branche">Branche</a><img src="images/sort.gif" alt="V" hspace="10" />&nbsp;</th>
                     <th id="firma" abbr="Firma">&nbsp;<a href="/firmenverzeichnis/<? echo"$gemeinde"; ?>?sortierung=firma">Firma</a><img src="images/sort.gif" alt="V" hspace="10" />&nbsp;</th>
                     <th id="anschrift" abbr="Anschrift">&nbsp;<a href="/firmenverzeichnis/<? echo"$gemeinde"; ?>?sortierung=anschrift">Anschrift</a><img src="images/sort.gif" alt="V" hspace="10" />&nbsp;</th>
                  </tr>
               </thead>
               <tfoot><tr><td></td><td></td><tr></tfoot>
               <tbody>

               <?
                  $db=verbinden();
                  $sql="SELECT * FROM con_firmenverzeichnis WHERE ort='$gemeinde' ORDER by $sortierung";
                  $rs=mysql_query($sql,$db);
                  while($row=mysql_fetch_row($rs))
                     {
                       echo"<tr><td headers='branche'>&nbsp;$row[13]</td>";
                       if($row[3]=="k.A.") { echo"<td headers='firma'>&nbsp;<a href='http://www.kleinaitingen.com/front_content.php?idart=147&idcat=81'>$row[1]</a></td>"; }
                       else { echo"<td headers='firma'>&nbsp;<a href='front_content.php?idart=$idart&firmenid=$row[0]&lat=$row[6]&lon=$row[7]'>$row[1]</a></td>"; }
                       echo"<td headers='anschrift'>&nbsp;$row[3]</td>";
                       echo"</tr>";
                     }
                  echo"</tbody></table>";
                  echo"<em><strong>Tabelle:</strong> Unternehmen in $gemeinde</em>";
               ?>

         </div>
      <?
   }
?>
Ist sicher nicht hunderprozentig optimal programmiert, aber zumindest lauffähig.

Gruss aus Bayern
Zuletzt geändert von gummibaerle am Mi 6. Dez 2006, 15:45, insgesamt 1-mal geändert.
"Im Wald zwei Wege boten sich mir dar, und ich nahm den der weniger betreten war. Und das veränderte mein Leben."

xmurrix
Beiträge: 3151
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Beitrag von xmurrix » Mi 6. Dez 2006, 10:36

Hallo gummibaerle,

ist auf jeden Fall eine Alternative zum Modul von tomo. Man hat dann wenigstens eine Auswahl, wenn es um den Google Maps Einsatz in einem Contenido-Projekt geht.

Du hast ja angedeutet, dass es nicht optimal Programmiert ist. Hier möchte ich auf 3 Punkte eingehen, die mit aufgefallen sind. Nicht als Kritik sehen, sondern als Vorschlag. Beim Codieren kann man immer irgendwas besser machen, das hat kein Ende...

1. Die Modulausgabe sollte mit dem öffnenden Code-Tag für PHP beginnen.
2. Warum verwendest du nicht die DB-Instanz von Contenido selber? Es existiert schon eine globale Variable $db über die man auf die DB zugreifen kann. Schau dir mal die Beispielmodule der Contenido Installation an.
3. Ich finde es übersichtlicher und auch sauberer, wenn im Moduloutput kein HTML-Code direkt ausgegeben wird, sondern über das Template-Objekt. Da hat aber jeder eine eigene Meinung.

So, hoffentlich habe ich dich jetzt nicht mit meinem Feedback erschlagen.

Gruß
xmurrix

gummibaerle
Beiträge: 52
Registriert: Do 23. Feb 2006, 00:16
Wohnort: Kleinaitingen
Kontaktdaten:

Beitrag von gummibaerle » Mi 6. Dez 2006, 15:45

Hallo xmurrix,

oh so einfach ist das. Na ja ich habe nicht wirklich danach gesucht, stattdessen habe ich eine andere Lösung hierfür umgearbeitet. Auf jedenfall Danke, so kann ich das bei Gelegenheit dementsprechend anpassen.

zu 1) Kleiner Flüchtigkeitsfehler meinerseits
zu 2) Das wusste ich leider nicht
zu 3) HTML-Code also besser als Modul-Template auslagern

Sicher alles sinnvolle Erweiterungen. DANKE!

Gruss aus Bayern
"Im Wald zwei Wege boten sich mir dar, und ich nahm den der weniger betreten war. Und das veränderte mein Leben."

rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Beitrag von rethus » Sa 16. Dez 2006, 15:12

Die Lösung mit der orsbasierten Anzeige finde ich toll, aber irgendwie scheint der gesamte Part der Adressdaten-Eingabe und -Bearbeitung zu fehlen.

Laut deinem INPUT-Modul kann man zwar einen Ort wählen, aber nirgends finde ich die Möglichkeit, Firmendaten einzugeben.

Baut das Modul vielleicht auf ein anderes (Adressverwaltungsmodul) auf?

Kannst du das vielleicht noch posten? Vielleicht sogar mit Datenbank-Create-Statement?

gummibaerle
Beiträge: 52
Registriert: Do 23. Feb 2006, 00:16
Wohnort: Kleinaitingen
Kontaktdaten:

CREATE TABLE für Firmenverzeichnis

Beitrag von gummibaerle » Sa 16. Dez 2006, 17:17

Ich verwende momentan folgende Tabelle, die sicherlich nicht optimal redundant ist. In diese Tabelle importiere ich dann irgendwann meinen Adressdatenbestand. Das könnte bspw. auch eine Freundeliste sein, falls keiner was dagegen hat. Die Liste dazu kann man sich ja einfach per Excel zusammenbasteln und per INSERT einlesen.

Code: Alles auswählen

CREATE TABLE IF NOT EXISTS `con_firmenverzeichnis` (
  `firmenid` int(6) NOT NULL auto_increment,
  `firma` text,
  `name` text,
  `anschrift` text,
  `plz` int(5) default NULL,
  `ort` text,
  `lat` decimal(8,6) default NULL,
  `lon` decimal(8,6) default NULL,
  `fon` text,
  `fax` text,
  `mobil` text,
  `email` text,
  `homepage` text,
  `branche` text,
  `memo` text,
  PRIMARY KEY  (`firmenid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=100001 ;

-- 
-- Daten für Tabelle `con_firmenverzeichnis`
-- 

INSERT INTO `con_firmenverzeichnis` (`firmenid`, `firma`, `name`, `anschrift`, `plz`, `ort`, `lat`, `lon`, `fon`, `fax`, `mobil`, `email`, `homepage`, `branche`, `memo`) VALUES (101002, 'Angeli Susanne', 'Angeli Susanne', 'Germanenstraße 6', 86507, 'Kleinaitingen', 48.218100, 10.844200, '(08203) 1234567', '(08203) 1234567', '(0178) 1234567', 'info@onlineshop-handbuch.de', 'http://www.onlineshop-handbuch.de', 'Internetdienstleistung', '<h2>Homepage, DSL, eCommerce und eLearning</h2><p>Wir beraten Sie ... </p>');
Gruss aus Bayern
"Im Wald zwei Wege boten sich mir dar, und ich nahm den der weniger betreten war. Und das veränderte mein Leben."

rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Beitrag von rethus » Mo 18. Dez 2006, 11:31

Ach so, dann ist das eine statische Lösuing ohne die Möglichkeit, die Adressdaten per Adminoberfläche einzupflegen und zu verwalten.

Schade, wäre natürlich optimal, wenn das schon gehabt hättest.

Ich habe noch ein umfangreiches Adressmodul von meinem eigenen CMS-System, ich denke das werde ich dann mal für Contenido umbauen.

Trotzdem schonmal danke für das Tolle maps-Tool.

rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Beitrag von rethus » Mo 9. Jul 2007, 11:23

Kannst du mal ein Screenshot vom Backend schicken?

gummibaerle
Beiträge: 52
Registriert: Do 23. Feb 2006, 00:16
Wohnort: Kleinaitingen
Kontaktdaten:

Lehrstellenboerse.org mit Google Maps Anbindung

Beitrag von gummibaerle » Mo 9. Jul 2007, 12:44

Hallo rethus,

wahrscheinlich werden wir an dieser Geschichte in den nächsten Monaten noch einiges weiter arbeiten. Vielleicht hast du oder jemand anderer Lust uns technisch zu unterstützen. Ansonsten müsste ich genauer wissen, welche Screenshots vom Backend dich interessieren (Austausch direkt per eMail).

Wir gründen nämlich im Juli 2007 einen gemeinnützigen Verein, der sich für die regionale Vermittlung von Praktikums- und Lehrstellenplätzen im schwäbischen Lechfeld engagiert (Landsberg, Schwabmünchen, Großaitingen, Untermeitingen, Bobingen und Königsbrunn).

Auf der neuen Domain www.lehrstellenboerse.org präsentieren wir die Google Maps Kombination für die Unternehmensadressen, so dass Schüler schauen können, wo sich ein bestimmter Arbeitgeber befindet. Nachdem wir bereits rund 600 Kontaktadressen von ausbildungsberechtigten Firmen im Adresspool haben, ist der manuelle Datenabgleich wenig sinnvoll. Wir werden für diesen Zweck also einige Eingabemasken erstellen, um uns die Datenpflege zu erleichtern.

Gruss aus Bayern
"Im Wald zwei Wege boten sich mir dar, und ich nahm den der weniger betreten war. Und das veränderte mein Leben."

rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Beitrag von rethus » Di 10. Jul 2007, 16:02

Hi gummibarle,


ich bastel gerade an einem Branchenbuch, das unter anderem die Google-Maps beinhaltet. Es ist so aufgebaut, dass sich die Firmen selbst eintragen können, du schaltest die dann als Admin "Frei".
Beim Eintragen der Firmendaten erhält der Eintragende und der Admin ne Mail.
Nach dem Freischalten erhält der Eintragende noch ne Mail.

Das Modul lehnt sich an die Linkliste von MC an, ist aber um einiges Umfangreicher (und der Coder wurde extrem gesäubert... stichwort lesbarkeit & Einrückung)

Das Modul findest du hier in meinem letzten Posting: http://www.contenido.org/forum/viewtopi ... 2&start=30

Also wenn Ihr noch nicht so weit seit, dann könnt Ihr gerne daran mitentwickeln und entsprechende Erweiterungsvorschläge einreichen.

PS: Die sollten dann aber sauber nach Contenido-Standard-Schema Programmiert sein (siehe http://www.contenido.org/forum/viewtopi ... highlight=)

BTW: Ich hab irgendwie Probleme den Marker anzeigen zu lassen, habt Ihr da einen Tipp für mich, woran das liegen kann? (http://www.unser-horrem.de/marktplatz/b ... .html?id=1)

rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Beitrag von rethus » Di 10. Jul 2007, 16:44

Das Problem mit Google-Maps und dem Marker ist behoben, allerdings ist irgendwie ein Bug in Google-Maps,d er unten die Nutzungsbedingungen einblendet (was ja nicht schlimm ist), aber dies macht er über den Rand der Karte hinaus.

Schauts euch mal an und gebt mir einen Tipp.

http://www.unser-horrem.de/marktplatz/b ... .html?id=1

rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Beitrag von rethus » Do 12. Jul 2007, 12:30

Hab das Problem behoben, indem ich dem aktuellen DIV-Layer einfach overflow:hidden; übergeben habe.

Wenn Ihr wollt, seht Ihr hier das Branchebuch in Aktion :-)
http://www.unser-horrem.de/marktplatz/branchenbuch/

gummibaerle
Beiträge: 52
Registriert: Do 23. Feb 2006, 00:16
Wohnort: Kleinaitingen
Kontaktdaten:

Beitrag von gummibaerle » Mo 13. Aug 2007, 23:14

rethus hat geschrieben:Ach so, dann ist das eine statische Lösung ohne die Möglichkeit, die Adressdaten per Adminoberfläche einzupflegen und zu verwalten.
Wir arbeiten jetzt gerade wieder intensiv daran eine Oberfläche zu basteln mit der unsere verstreut sitzenden "Gebietsleiter" die Firmendaten der ausbildungsberechtigten Betriebe aus der Region Lechfeld per Internet ändern können. Für diese Zwecke nutzen wir folgendes Modul (Auszug).

Natürlich ist das ganze nur zum Teil im Web zu sehen unter www.lehrstellenboerse.org. Dort ohne Änderungsmöglichkeit. Screenshots der Adminoberfläche kann ich gerne zusenden.

Gruss aus Bayern

Code: Alles auswählen

<?php

$aktiveseite="http://www.domain.de/irgendwiewomodulliegt";


// zeigt alle firmendaten inkl. Buttons an
// je nachdem was man auswählt ändert sich die bearbeitung

function zeige_alle_informationen($firmen_id)
  {
  global $aktiveseite;

  echo "<form action='".$aktiveseite."".$firmen_id."' method='post'>";

  zeige_alle_firmendaten($firmen_id);                   // zeigt alle firmendaten von der firmen_id
  echo "<input type='submit' class='button' name='insert_firm' value='Firma einfügen ...' >&nbsp;&nbsp;";
  echo "<input type='submit' class='button' name='change_firm' value='Firma ändern ...' />&nbsp;&nbsp;";
  echo "<input type='submit' class='button' name='delete_firm' value='Firma löschen ...' /><br /><br />";
    
  zeige_alle_lehrstellen($firmen_id);                   // zeigt alle in dieser firma ausgebildeten lehrstellen an
  echo "<input type='submit' class='button' name='insert_jobs' value='Lehrstelle einfügen ...' />&nbsp;&nbsp;";
  echo "<input type='submit' class='button' name='change_jobs' value='Lehrstelle ändern ...' />&nbsp;&nbsp;";
  echo "<input type='submit' class='button' name='delete_jobs' value='Lehrstelle löschen ...' /><br /><br />";
        
  zeige_alle_ansprechpartner($firmen_id);               // zeigt alle ansprechpartner in dieser firma an
  echo "<input type='submit' class='button' name='insert_person' value='Ansprechpartner einfügen ...' />&nbsp;&nbsp;";
  echo "<input type='submit' class='button' name='change_person' value='Ansprechpartner ändern ...' />&nbsp;&nbsp;";
  echo "<input type='submit' class='button' name='delete_person' value='Ansprechpartner löschen ...' /><br /><br />";
      
  echo "</form>";
  }


// zeige alle daten eines ausbildungsbetriebs an
//

function zeige_alle_firmendaten($firmen_id)
  {
  // abc_ausbildungsbetriebe (...)
  $mydb=new DB_Contenido;
  $sql="SELECT * FROM abc_ausbildungsbetriebe WHERE firmen_id='".$firmen_id."'";
  $mydb->query($sql);
  $mydb->next_record();
  
  echo "<table class='mytable'><thead valign='top'><th>Angaben</th><th>Werte</th></thead>";
  echo "<tbody>";
  echo "<tr><td>Firmen_ID-Typ_ID:</td><td>               ".$mydb->f('firmen_id')."-".$mydb->f('typ_id')."</td></tr>";
  echo "<tr><td>Firmenname:<br />Anschrift:<br />PLZ/Ort:</td><td>".$mydb->f('firma')."<br />".$mydb->f('anschrift')."<br />".$mydb->f('plz')." ".$mydb->f('ort')."</td></tr>";
  echo "<tr><td>Telefon:<br />Telefax:</td><td>".$mydb->f('fon')."<br />".$mydb->f('fax')."</td></tr>";
  echo "<tr><td>Homepage (inkl. http://):</td><td>".$mydb->f('homepage')."</td></tr>";
  echo "<tr><td>Branche:</td><td>                 ".$mydb->f('branche')."</td></tr>";
  echo "</tbody></table>";
  }


// zeige alle lehrstellen an die eine firma anbietet
// die berufsbezeichnungen werden mit einer berufsbild_id ermittelt
// siehe online nach bei berufenet

function zeige_alle_lehrstellen($firmen_id)
  {
  $mydb=new DB_Contenido;         // Tabelle: abc_bildetaus abc_bildetaus (berufsbild_id, firmen_id, bu, praktikum, voraussetzungen)
  $sql="SELECT * FROM abc_bildetaus WHERE firmen_id='".$firmen_id."';";
  $mydb->query($sql);

  // Tabelle: abc_berufsbilder (berufsbild_id, bkz, gruppe, berufsbezeichnung, ausbildungsdauer)
  $mydb2=new DB_Contenido;

  echo "<table class='mytable'><thead valign='top'><th>PR-BU</th><th>Berufsbezeichnung</th><th>Voraussetzungen</th></thead>";
  echo "<tbody>";
  while($mydb->next_record())
    {
    // Ermittle mit berufsbild_id die berufsbezeichnung und ausbildungsdauer aus abc_berufsbilder
    $sql2="SELECT berufsbezeichnung FROM abc_berufsbilder WHERE berufsbild_id='".$mydb->f('berufsbild_id')."';";
    $mydb2->query($sql2);
    $mydb2->next_record();

    echo "<tr><td>".$mydb->f('praktikum')."-".$mydb->f('bu')."</td><td>".$mydb2->f('berufsbezeichnung')."</td><td>".$mydb->f('voraussetzungen')."</td></tr>";
    }
  echo "</tbody></table>";
  }


// zeige alle ansprechpartner einer firma an
// 
  
function zeige_alle_ansprechpartner($firmen_id)
  {
  // Tabelle: abc_ansprechpartner ()
  $mydb3=new DB_Contenido;
  $sql3="SELECT * FROM abc_ansprechpartner WHERE firmen_id='".$firmen_id."';";
  $mydb3->query($sql3);
  echo "<table class='mytable'><thead><th>Ansprechpartner</th><th>Kommunikation</th><th>Memo</th></thead>";
  echo "<tbody>";
  while($mydb3->next_record())
    {
    echo "<tr><td valign='top'><a href='mailto:".$mydb3->f('email')."' target='_blank'>".$mydb3->f('nachname')." ".$mydb3->f('vorname')."</a><br /><i>".$mydb3->f('position')."</i></td><td>Fon: ".$mydb3->f('fon')."<br />Fax: ".$mydb3->f('fax')."<br />Mobil: ".$mydb3->f('mobil')."</td><td valign='top'>".$mydb3->f('memo')."</td></tr>";
    }
  echo "</tbody></table>";
  }


// macht alle db-Eintraege einer firma aenderbar 
//

function bearbeite_firmendaten($firmen_id)
  {
  global $aktiveseite;
  
      $mydb=new DB_Contenido;  // abc_ausbildungsbetriebe (...)
      $sql="SELECT * FROM abc_ausbildungsbetriebe WHERE firmen_id='".$firmen_id."'";
      $mydb->query($sql);
      $mydb->next_record();

      // suche anhand der firmen_id alle daten aus der Datenbank
      // und setze sie in das formular ein um die daten zu ändern
      ?>
      <form action="<? echo $aktiveseite."".$firmen_id; ?>" method="post">
        <table class="mytable">
          <thead>
            <tr><th>Angaben</th><th>Werte</th></tr>
          </thead>
          <tfoot>
            <tr><td colspan="2">Firmendaten des Ausbildungsbetriebs mit der Firmen_ID <?php echo $firmen_id; ?></td></tr>
          </foot>          
          <tbody>  
            <tr>
              <td>Firmen_ID:<br />Firmenname:<br />Anschrift:<br />PLZ:<br />Ort:<br />Typ_ID:<br />Telefon:<br />Telefax:<br />Homepage (inkl. http://):<br />Branche:</td>
              <td><strong><?php echo $firmen_id; ?></strong><br />
                  <input type="text" class='textfeld' name="p_firma" value="<?php echo $mydb->f('firma'); ?>"/><br />
                  <input type="text" class='textfeld' name="p_anschrift" value="<?php echo $mydb->f('anschrift'); ?>"/><br />
                  <input type="text" class='textfeld' name="p_plz" value="<?php echo $mydb->f('plz'); ?>"/><br />
                  <input type="text" class='textfeld' name="p_ort" value="<?php echo $mydb->f('ort'); ?>"/><br />
                  <input type="text" class='textfeld' name="p_typid" value="<?php echo $mydb->f('typ_id'); ?>"/><br />
                  <input type="text" class='textfeld' name="p_fon" value="<?php echo $mydb->f('fon'); ?>"/><br />
                  <input type="text" class='textfeld' name="p_fax" value="<?php echo $mydb->f('fax'); ?>"/><br />
                  <input type="text" class='textfeld' name="p_homepage" value="<?php echo $mydb->f('homepage'); ?>"/><br />
                  <input type="text" class='textfeld' name="p_branche" value="<?php echo $mydb->f('branche'); ?>"/></td>
            </tr>
            <tr>
              <td><input type="hidden" name="p_firmenid" value="<?php echo $mydb->f('firmen_id'); ?>"
                  <a href='<? echo $aktiveseite; ?>' class='button'>Neue Suche ...</a></td>
              <td><input type="submit" class="button" name="p_submit" value="Adressdaten speichern ..." /></td>
            </tr>
          </tbody>
        </table>
      </form>
      <?
      
      // wird der submit button gedrueckt 
      // dann verändere die Daten in der DB

      if($_POST['p_submit'])
        {
        $update = "UPDATE abc_ausbildungsbetriebe SET 
                    firma     = '".$_POST['p_firma']."',
                    anschrift = '".$_POST['p_anschrift']."',
                    plz       = '".$_POST['p_plz']."',
                    ort       = '".$_POST['p_ort']."',
                    typ_id    = '".$_POST['p_typid']."',
                    fon       = '".$_POST['p_fon']."',
                    fax       = '".$_POST['p_fax']."',
                    homepage  = '".$_POST['p_homepage']."',
                    branche   = '".$_POST['p_branche']."'
                  WHERE firmen_id = '".$firmen_id."';";
        if ($mydb->query($update)) 
          { 
          echo "<p color=green>Update war erfolgreich!</p>";
          echo "<meta http-equiv='refresh' content='1; URL=$PHP_SELF'>";
          }
        else { echo "<p style='font-size:20px; color:red;'>ACHTUNG: UPDATE WAR NICHT ERFOLGREICH !!!</p>"; }
        }
  }




    
// Ist eine firmen_id vergeben, dann sollen Daten 
// einer vorhandenen Firma angepasst werden
if($firmen_id>10) 
  { 
  if($_POST['change_firm'] || $_POST['p_submit']) bearbeite_firmendaten($firmen_id);
  }
elseif(!$_POST['send'])
    {
    // ist keine firmen_id vorhanden, dann suche
    // Firma in Datenbank mithilfe des Formulars
    ?>
    <form action="<?php $PHP_SELF ?>" method="post" name='suche'>
      <table class="mytable">
        <tbody>
          <tr>
            <td>Firmenname: </td>
            <td><input type='text' class='textfeld' name='firmenname'></td>
          </tr>
          <tr>
            <td>Ort: </td><td><input type='text' class='textfeld' name='ort'></td>
          </tr>
          <tr>
            <td></td>
            <td><input type="submit" class="button" name="send" value="Suche absenden ..." />&nbsp;&nbsp;<a href='<? echo $aktiveseite."1"; ?>' class='button'>Neue Firma ...</a></td>
          </tr>
        </tbody>
      </table>
    </form>
    <?
    }
    else 
      {
      // Der send-Button wurde gedrückt jedoch sind  
      // keine Informationen in den Feldern enthalten
      if(!empty($_POST['firmenname']) OR !empty($_POST['ort'])) { suchergebnis($_POST['firmenname'],$_POST['ort']); }
      else { echo "Ohne Eingabe kann keine Suche starten!"; echo "<meta http-equiv='refresh' content='3; URL=$aktiveseite'>"; }
      }
?>
PS: Den HTML-Quellcode sollte man, wie schon oben erwähnt auslagern.
"Im Wald zwei Wege boten sich mir dar, und ich nahm den der weniger betreten war. Und das veränderte mein Leben."

Gesperrt