MySQL auslesen und Browserdarstellung

tmixer

Grünschnabel
Moin,

ich habe lange gesucht und es dauert bis ich um Hilfe frage.
Ich habe folgendes vor.
Eine Tabelle mit 11 Spalten auszulesen und in einem Rutsch darzustellen
In der Regel würden mir für zwei Zeitangaben auch zwei Datumsfelder reichen.
Dem ist leider nicht so, dann einige wenige Personen die sich über ein anderen Formular dort eintragen nur Angaben über das Jahr oder Monat und Jahr haben.
Es geht darum die Dienstzeiten an Bord von Booten zu erfassen.
Die Auflistung wird nach WHERE pid = 'p6092' GROUP BY jj - mm1 - tt1 - jj2 - mm2 - tt2 erfolgen sofern mehr als nur das Start- und das
End-Jahr angegeben sind.
Im Muster eine Tabelle innerhalb von der Datenbank, ich lasse mal Datum offen wie den Rest auch.

---------------------------------
Logische Sicht der Tabelle als JPG.Datei, bitte hier drauf klicken
---------------------------------

Mit Wamp/PHPMYADMIN auch nicht das Problem, läuft, es werden nach Datum sortiert die Sätze 1 und 6 ausgegeben.
Insgesamt spreche ich auch nur eine Tabelle innerhalb der Datenbank an.

Was habe ich ich vor?
Bald werde ich die 1.000 Datensätze überschreiten, die Anzeige soll nur nach aus "pid" erfolgen und sortiert nach Datum.
Variieren kann die Anzeige im Browser von 1 - 70 Datensätze.

Ich habe bei der tabellarischen Ausgabe (also Tabelle mit Auge sichtbar) noch meine Problem, da diese unterschiedlich/dynamisch lang sein
können.
Wer hat eine Lösung dieses alles in einen String einzulesen, dann mittels Schleife oder anderes in eine für den Betrachter über den Browser
lesbare Tabelle für die Zeilen/Feldwerte zu übergeben.
Gerne würde ich auch über PHP eine Tabenspaltenüberschrift erstellen, die nicht den Feldnamen entspricht.
Vielen Dank im voraus.

Gruss aus Hamburg

Klaus
 
1. Kann es sein, dass bei 1000 Einträgen mehrfach dieselbe Person in name und vname auftauchen wird bzw. auftauchen könnte? Wenn das so ist, wäre die Struktur im Sinne der Normalisierung fatal. Mag aber auch sein, dass ich mögliche Abhängigkeiten in Deiner Tabelle falsch interpretiere.

2. Für die Spaltenüberschriften kannst Du doch mit PHP einfach einen entsprechenden Titel in die oberste Zeile schreiben? Alternativ könntest du auch Aliasfelder (SELECT name AS Nachname, vname AS Vorname, ... oder SELECT CONCAT(vname,' ',name) AS Name, ...) im Query benennen, die einen "menschenlesbaren" Text enthalten und diesen mit PHP Abfragen ([phpf]mysql_field_name[/phpf]).

3. Du kannst die einzelnen Felder bei der Ausgabe z.B. mit [phpf]substr[/phpf] beschneiden, damit die Tabelle nicht so breit wird oder Du kannst eine Blätterfunktion (gibt hier auf der Seite ein Tutorial oder auch die Suche) verwenden, um nicht so viele Zeilen auf einmal auszugeben. Ich bin mir nicht ganz sicher, ob Du meintest, dass die Tabelle zu breit ist oder ob sie zu lang wird.

Gruß hpvw
 
Hallo hpvw,

vielen Dank für Deine Antwort.
Überschrift klingt logisch.
Name und Vorname werde doppelt vorkommen oder sind es bereits.
Suchkriterum wird das Feld "pid" werden, dann sortiert nach Datum1 und Datum2(JAHR/MONAT/TAG gefolgt von JAHR2/MONAT2/TAG2)
Die anzuzeigende Tabelle wird eine Seitenbreite haben.
Die Mailadresse wird mit dem Nachmanen "name" verlinkt, spart eine Spalte und die Mailanschrift ist nicht lesbar.
Auszugebene Zeilen sind von 1 - momentan 70.

Gruss Klaus
 
Was ist denn pid? Und warum kommen in einer ID Buchstaben vor?

Hinweis:
Von einem DATE-Feld kannst Du mit den Funktionen YEAR und MONTH im Select die entsprechenden Teile des Datums extrahieren und somit auch den für ein Datum vorgesehenen Feldtyp verwenden. Mit den MySQL-Datums- und Zeitfunktionen kann man nämlich eine Menge machen, auch, wenn Du es jetzt evtl. noch nicht brauchst.

tmixer hat gesagt.:
Die anzuzeigende Tabelle wird eine Seitenbreite haben.
Die Mailadresse wird mit dem Nachmanen "name" verlinkt, spart eine Spalte und die Mailanschrift ist nicht lesbar.
Auszugebene Zeilen sind von 1 - momentan 70.
Wenn du mit Seitenbreite die Breite einer Druckseite meinst, wäre es ungeschickt, die E-Mail-Adresse ausschließlich als Link des Namens zu machen.

Eine Idee, um bei der Tabellenbreite zu sparen wäre auch, in einer Zelle mehrere Zeilen (z.B. mit <br /> oder Absätzen) zu machen, z.B. "Von-Bis"-Daten untereinander zu setzen oder die E-Mail-Adresse unter den Namen schreiben. Die Formatierung mit fett für das Wichtige (z.B. den Namen) und normal für das weniger Wichtige (z.B. für die E-Mail-Adresse) würde die Einträge schon voneinander abheben. Wechselnde Hintergrundfarben oder Zellen-Rahmen wären zumindest im Browser noch deutlicher.

Gruß hpvw
 
Hallo hpvw,

vielen Dank für den ersten "mysql_field_name())"Hinweis.
Ich habe mit dem ersten bunten Teil angefangen, Logik kommt, die Zusammenhänge auch.
Dann den zweiten bunten Absatzt angepasst (weitern unten auf der Hinweisseite)
Ein paar Sachen wollten nicht, da habe ich erstmal Festwerte eingesetzt, es funktioniert.
Das alles als Du eben Dein Posting geschrieben hattest.
Die Mailanschrift wird sich wie auf meiner jetzigen Seite auch mit einer mailto-Funktion hinder den Namen verbergen, also Klick auf den Namen, dann poppt Mail-Klient auf.
Spart eine Spalte.
Das mit Zeit ist ein guter Hinweis, bringt mich sogar weiter, weil ich mir vorher Gedanken über knappe Einträge mit tt.mm.jjjj machen musse wobei tt oder tt.mm fehlten und dieses dan umwandeln muss auf jjjj.mm oder jjjj.mm oder gar nur jjjj.
Ausfüllen mit Nullen und Datumswert mit dem Jahr zuerst auch kein Thema mehr.
Veilen Dank, morgen gehts weiter, wer lesen kann ist im Vorteil.
(Beim Erstellen von Seiten und der auftretende Fehlercode)

Gruss aus Hamburg

Klaus

P.S.
P-Nummer = pid, wird aber noch aus anderem Grund geändert werden müssen, pid bekommt später in realer DB anderen Namen

Muster meiner ersten Ausgabe, PID/Email werden als Spalte noch verschwinden
Feinschliff/Optik folgt wenn ich den Grundstock haben
Erster erfolgreicher Test
 
Erstes Ergebis

Mon Moin,

bis vor 3 Wochen wusste ich gerade wie PHP und MySQL geschrieben.
Mein erstes Gerüst steht.
Was ich nicht gefunden haben ist hinter dem Namen einen Link zu setzen in Verbindung mit der Mailanschrift, ähnlich wie bei http <a href mailto: ......>
Notfalls auch mit GIF/JPG <email> und danhinter per Mausklick den Mailklienten öffnen lassen.
Ich möchte das Mailformular vermeiden um dritte Personen von dritte Personen anschrieben zu lassen.
CSS muss ich auch lernden, vereinfacht den Quellcode und spekt die PHP-Datei ab.
Wer mir noch einen tipp zu Link mit Grafik für <email> und <homepage> geben kann, ich würde mich sehr darüber freuen.
Unten erstmal der Quellcode der noch mit css verkürzt wird.
Mein erster Erfolg
Gleiches für Kontakt db und Tabelle mit einer externen Dabei

Gruss aus Hamburg

Klaus
----------------------------
PHP:
<?
$servername="localhost";
$benutzer="xxxxxxxxxxxxxxxxx";
$passwort="********";
$datenbank="..............";

$verbindung=mysql_connect($servername, $benutzer, $passwort)
.
.
.

$anfrage = "SELECT * FROM `crewbmtest`  where pid = 'p6094' group by jj1, mm1, tt1, jj2, mm2, tt2";


$anzahl_zeilen=mysql_num_rows($ergebnis);
echo "Es wurden <b>$anzahl_zeilen</b> Einträge für den Dachs gefunden.<p>";

echo "<table border=\"0\", WIDTH=\"100%\" >";
echo "<tr>";
echo "<td bgcolor=\"#BBBBBB\"><b><font face=Arial,Helvetica>Name</font></b></td>";
echo "<td bgcolor=\"#BBBBBB\"><b><font face=Arial,Helvetica>Vorname</font></b></td>";
echo "<td bgcolor=\"#BBBBBB\"><b><font face=Arial,Helvetica>Dienstzeit</font></b></td>";
echo "<td bgcolor=\"#BBBBBB\"><b><font face=Arial,Helvetica>Verwendung</font></b></td>";
echo "<td bgcolor=\"#BBBBBB\"><b><font face=Arial,Helvetica>Bemerkung</font></b></td>";
echo "</tr>";

while ($zeile=mysql_fetch_object($ergebnis))
{
echo "<tr>";
echo "<td align=\"left\"><font face=Arial,Helvetica>$zeile->name</font></td>";
echo "<td align=\"left\"><font face=Arial,Helvetica>$zeile->vname</font></td>";
echo "<td align=\"left\"><font face=Arial,Helvetica>$zeile->tt1.$zeile->mm1.$zeile->jj1 - $zeile->tt2.$zeile->mm2.$zeile->jj2</font></td>";
echo "<td align=\"left\"><font face=Arial,Helvetica>$zeile->verwendung</font></td>";
echo "<td align=\"left\"><font face=Arial,Helvetica>$zeile->bemerkung</font></td>";
echo "</tr>";
}

echo "</table>";

mysql_close($verbindung);

?>
 
Zuletzt bearbeitet:
tmixer hat gesagt.:
Was ich nicht gefunden haben ist hinter dem Namen einen Link zu setzen in Verbindung mit der Mailanschrift, ähnlich wie bei http <a href mailto: ......>
Notfalls auch mit GIF/JPG <email> und danhinter per Mausklick den Mailklienten öffnen lassen.
Ich möchte das Mailformular vermeiden um dritte Personen von dritte Personen anschrieben zu lassen.
Bitte nochmal genauer erklären!
Evtl. hilft die Funktion [phpf]mail[/phpf].
Wenn Du auf einer weiteren Seite die E-Mail-Adresse benötigst, ohne dass der User sie im Quelltext oder in der URL sieht, kannst Du auch den Primärschlüssel übergeben und die Mail-Adresse erneut aus der DB ziehen.
Habe ich richtig interpretiert?

Was eine P-Nummer ist, weiss ich auch nicht, was sagt sie inhaltlich aus?

Gruß hpvw

PS: Es gibt hier im Forum sog. Code-Tags. schreibst Du PHP-Code in [ php ] Code [ /php ], HTML-Code in [ html ] code [ /html ] und sonstigen Code in [ code ] code [/ code ], natürlich ohne die Leerzeichen, dann wird er entsprechend der Syntax hervorgehoben und in Courier geschrieben. Dadurch ist der Code besser lesbar. Für kurze Code-Teile, wie zum Beispiel einzelne Variablen im Fließtext kannst Du [ mono ] code [ /mono ] verwenden.
Vielleicht editierst Du Deinen Beitrag dahingehend nochmal.
 
Moin hpvw,

vielen Dank für die überraschenden Antwort.
Mail:
Ich habe vor hinter den (Nach)Namen eine Verlinkung zu legen.
Klickt ein Beuscher meier Seiter auf den gewählten Namen, geht seit Mailclient auf.
Dieses geht bei HTML ohne viel Tippen ab.
Auszug von der Seite
Dieses möchte ich in PHP gerne bei behalten ohne Mailformular oder einde weitere Dateil wie mail.php.
Hier soll z.B.
echo "<td align=\"left\"><font face=Arial,Helvetica>$zeile->name </font></td>";
per Mausklick über den lokalen Mailclienten am PC an den angeklicken Empfänger gehen.
Es soll Anwenderfreundlich sein, Mein Jahrgang und die darunter könnten mit den ínteraktiven Mediem umgehen und mehr.
Es gibt aber auch ältere Generationen, denen ich zum Beispiel das Tippen Ihrer eigenen Mailanschrift ersparen möchte.
-------------
P-Nummer
Die P-Nummer selber ist wie ein an Land ein Autokenzeichen zu sehen.
Tender der Marine haben A-6x u.a.
Heute A-51x
Daher auch "pid", dieses Feld wird aber noch umbenannt, da viele Personen auch an Land ihre Arbeit verrichteten wie Stab, Sanibereich ...., Geschwader wie auch Flottille.
Nach diesem Wert wird in der Regel gesucht, daher auch:
where pid = 'Wert'
Dieses werde ich jedoch später mit einem Eingabe/Abfrageformular lösen, den Suchwert dann übergeben in der anzuzeigenden Datei.
Sortiert wirde die Ausgabe dann nach der Zeit "von bis"


Gruss Klaus
 
Zuletzt bearbeitet:
Du willst also vom lokalen Mailclient (z.B. vom Outlook auf dem Rechner des Users) eine E-Mail verschicken, ohne dass der User mehr macht, als auf den Link zu klicken?
Das geht hoffentlich nicht, überleg mal, was das bedeutet: Du klickst ohne großes Nachdenken auf einer Seite Links an und schon verschickst Du von Deiner E-Mail-Adresse deren Spam.
Oder meinst Du nur die HTML-Code-Ausgabe?
Dann vielleicht:
PHP:
echo "<td align=\"left\"><a href=\"mailto:"
    .$zeile->mail
    ."?subject=Nachrichtbetreff\"><font face=Arial,Helvetica>"
    .$zeile->name
    ."</font></a></td>";
Weitere Details zu mailto sind bei SelfHTML gut erklärt, aber auch der Hinweis:
Es ist sinnvoll, im Verweistext die E-Mail-Adresse noch einmal explizit zu nennen, so wie im obigen Beispiel, damit Anwender, bei denen der E-Mail-Verweis nicht ausführbar ist, auf Wunsch separat eine E-Mail senden können.
...
Es besteht jedoch keinerlei Garantie, dass alle Möglichkeiten in allen Browsern und allen Kombinationen mit E-Mail-Programmen funktionieren.
Vielleicht habe ich das noch nicht richtig verstanden?

Das mit der pid ist ja endlich geklärt. Wie hätte ich, als Zivi a.D., das ahnen können?

Gruß hpvw
 
Hallo hpvw,

vielen Dank für den Hinweis, aber aber auf dieses Schreibweise wäre ich patrout nicht gekommen.
Es funktioniert einwandfrei.
Dann habe ich gleich was anderes getesetet, Erweiterung der Betreffzeile/subject.
Klappte gleich beim ersten Seitenladen und Mausklick.
PHP:
echo "<td align=\"left\"><a href=\"mailto:"
    .$zeile->semail
    ."?subject=schnellboot.net Mannschaftsuche - Nachricht für $zeile->vname $zeile->name\"><font face=Arial,Helvetica>"
    .$zeile->name
    ."</font></a></td>";
Was kommt nun dabei raus?
Ich bin überwältingt und sehr begeistert.
----------------
Zivi oder WD, ich brauchte damals zu keinem von beiden, gleich anno 83 durchgerasselt.
Bedingt durch meinen Arbeitgeber habe ich in den letzten Jahren die Arbeit der Zivis schätzen gelernt.
Mit den der Eintragenden habe ich festgestellt, dass es ein respektabler Haufen ist.
Auf engsten Raum mit rund 40 Mann zu leben ist kein Zuckerschlecken, alles andere als Traumschiffreisen, das prägt eher das zoziale Verhalten und der Umgang miteinander.

Gruss aus Hamburg

Klaus
 
Zuletzt bearbeitet:
Zurück