WinFuture-Forum.de: Feste Feldbreite Oder Zeichenbegrenzung - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Feste Feldbreite Oder Zeichenbegrenzung Daten verkürzt Auslesen oder Anzeige beschränken


#1 Mitglied ist offline   MiniComp 

  • Gruppe: aktive Mitglieder
  • Beiträge: 460
  • Beigetreten: 07. April 04
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:NRW

geschrieben 10. Februar 2007 - 23:36

Ich angefangen mich mit PHP und HTML zu beschäftigen, da ich nichts pasenden für meine Zwecke gefunden habe.

Ich habe es nun soweit geschafft für eine MySQL Datenbank Daten einzugeben, auslesen und zu ändern.
Nun lasse ich die Daten Felder in einer Tabelle anzeigen und ausgewählte Felder in einer kleinen Übersichtstabelle welche aus zwei einzelnen Tabellen besteht.
Mein Problem liegt nun in der Übersichtstabelle (diese soll mal in einem Seitenframe angezeigt werden).
Für die einzelnen Felder der Tabelle ist eine Mindestbreite vorgegeben (mit with=). Ist aber nun der anzuzeigende Text länger als das Feld, so werden die anderen Felder soweit verkürzt wie es geht (soll aber auch nicht) und sollte dies noch nicht ausreichen wird die ganze Tabelle verbreitert.
Nun soll eigendlich die Breite der Tabelle und der Felder nicht verändert werden.
Nach Möglichkeit soll der Text einfach abgeschnitten (ohne diese Laufbalken), oder halt nur eine bestimmte Anzahl von Zeichen aus der Datenbank für das Feld ausgelesen bzw augegeben werden.

Falls es hilft der Code bisher (hoffe hab nicht vergessen)
<html>
<head>
<?php
  $Max = 1;
  function Tabellenerstellung ($ub1, $ub2)
  {
  global $Max;
	$db = mysql_connect();
	$res = mysql_db_query("Base", "select * from Base1 order by Date $ub1" );
	$row = mysql_num_rows($res);
		
	  for ($i=0; $i<$row; $i++)
	  {
		$Dr1 = mysql_result($res, $i, "Feld1");
		$Dr2 = mysql_result($res, $i, "Feld2");
		$Lnk = mysql_result($res, $i, "Feld3");
		$Re1 = mysql_result($res, $i, "Feld4");
		$Re2 = mysql_result($res, $i, "Feld5");
		$lf = $i + 1;
		if ($i >= $row) break;

		if ((($Re1 + $Re2) >= 2) && (($Re1 + $Re2) <= 3))  
		{
		  $Txt = "$Re1 : $Re2";
		  $Pos = "Last";
		  $Abs = 7;
		}
		else
		{
		  $Txt = "no";
		  $Pos = "Next";
		  $Abs = 6;
		};
		if ($Re1 > $Re2) $Col = "#00B000";
		elseif ($Re2 > $Re1) $Col = "#FA0000";
		else $Col = "#000000";  
		if (($Pos == $ub2) && ($Max <= $Abs))
		{
		  echo "<tr> <td align=\"center\" width=\"45\"><font size=\"-1\"><b>$Dr1</font></td>";
		  echo "<td align=\"center\" width=\"75\"><font size=\"-1\"><b>$Dr2</font></td>";
		  echo "<td align=\"center\" width=\"25\"><font size=\"-1\"><b><a href=$Lnk target=\"top\"><font color=\"$Col\">$Txt</a></font></td></tr>";
		  $Max = ($Max + 1);
		};	  
	  }	
	mysql_close($db);
  }
?>
</head>

<body text="#181818" bgcolor="#181818" link="#3C7000" alink="#3C7000" vlink="#3C7000">

<div align="center">
<div align="center"><font color="#004000"><font size="+1"><b><u>Next</u></b></font></div>
<table border=3 border color="#181818">
<?php Tabellenerstellung ("asc", "Next") ?> 
</table>

<tr>
<div align="center"><font color="#004000"><font size="+1"><b><u>Last</u></b></font></div>
<table border=3 border color="#181818">
<tr>
<?php Tabellenerstellung ("desc", "Last") ?> 

</table>
</div>

</body></html>

Das ganze läuft bisher nur Lokal auf dem Rechner per WOS. Daher kann ich leider nicht als Link angeben.

Bin für jede Hilfe dankbar, lerne halt noch :D
---- Wer Hilfe erwartet sollte auch in der Lage sein, die Probleme ausführlich zu ----
---- Beschreiben und alles an verwendbaren Informationen zusammenzutragen. ----
0

Anzeige



#2 Mitglied ist offline   MiniComp 

  • Gruppe: aktive Mitglieder
  • Beiträge: 460
  • Beigetreten: 07. April 04
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:NRW

geschrieben 15. Februar 2007 - 22:28

Mal ein *push* :)
---- Wer Hilfe erwartet sollte auch in der Lage sein, die Probleme ausführlich zu ----
---- Beschreiben und alles an verwendbaren Informationen zusammenzutragen. ----
0

#3 Mitglied ist offline   MiniComp 

  • Gruppe: aktive Mitglieder
  • Beiträge: 460
  • Beigetreten: 07. April 04
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:NRW

geschrieben 26. Februar 2007 - 18:58

*Push Push*

Will keiner oder kann keiner ;)
---- Wer Hilfe erwartet sollte auch in der Lage sein, die Probleme ausführlich zu ----
---- Beschreiben und alles an verwendbaren Informationen zusammenzutragen. ----
0

#4 Mitglied ist offline   Diewie 

  • Gruppe: aktive Mitglieder
  • Beiträge: 409
  • Beigetreten: 18. Juni 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Geisenhausen / München

geschrieben 26. Februar 2007 - 19:17

Es gibt viele Möglichkeiten. Hier kannst du zum Beispiel die Rückgabe auf eine Anzahl von 8 begrenzen:

$Dr1 = substr(mysql_result($res, $i, "Feld1"), 0, 8);


MfG Stefan
0

#5 Mitglied ist offline   svenner90 

  • Gruppe: aktive Mitglieder
  • Beiträge: 146
  • Beigetreten: 30. Dezember 06
  • Reputation: 0

geschrieben 26. Februar 2007 - 20:46

Wenn die einzelnen Felder in der Datenbank vom Typ Varchar sind, dann musst du ja eh die Länge eingeben.

Daher würd ich dir empfehlen nicht Typen wie Text o. ä. zu nehmen....
0

#6 Mitglied ist offline   MiniComp 

  • Gruppe: aktive Mitglieder
  • Beiträge: 460
  • Beigetreten: 07. April 04
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:NRW

geschrieben 27. Februar 2007 - 23:22

@svenner90: Der Typ ist Varchar. Diese Tabelle soll nur eine Kurzübersicht für ein Seitenframe werden und dort ist der Platz den ich Nutzen kann begrenzt. Es wird aber eine zweite Tabelle geben die Alle Daten anzeigt und dort auch die volle Feldlänge vom Platz her anzeigen kann (hätte ich vieleicht erwähnen sollen)

@Diewie: Wenn das heist das in diesem Fall nur die ersten 8 Zeichen aus dem Feld ausgelesen werden, ist es genau das was ich gesucht habe.

Werde es sobald wie möglich Testen und Berichten.

Hat mir nun doch keine Ruhe gelassen ist genau wie ich es mir dachte und was ich brauchte.

Danke an euch. :)

Dieser Beitrag wurde von MiniComp bearbeitet: 27. Februar 2007 - 23:44

---- Wer Hilfe erwartet sollte auch in der Lage sein, die Probleme ausführlich zu ----
---- Beschreiben und alles an verwendbaren Informationen zusammenzutragen. ----
0

#7 Mitglied ist offline   asko 

  • Gruppe: aktive Mitglieder
  • Beiträge: 144
  • Beigetreten: 17. November 02
  • Reputation: 0

geschrieben 01. März 2007 - 00:18

Der Tipp von Diewie ist prinzipiell ok, aber es kommt auch sehr stark darauf an wie viele Datensätzen aus der DB geladen werden und wie viele Daten pro Datensatz ausgelesen werden.
Bei sehr vielen, großen Datensätzen auf einer frenquentierten Seite kann das zu massiven Performance-Einbrüchen führen oder im schlimmsten Fall mit einer unereichbaren Seite, weil das RAM Limit erreicht wird. (i.d.R. auf Miet-Webspace) In dem Fall wäre es besser die Daten direkt beim auslesen aus der DB mit MySQL zu kürzen, statt alle Daten zu holen und dann mit PHP zu stutzen.

Dieser Beitrag wurde von asko bearbeitet: 01. März 2007 - 00:19

0

#8 Mitglied ist offline   MiniComp 

  • Gruppe: aktive Mitglieder
  • Beiträge: 460
  • Beigetreten: 07. April 04
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:NRW

geschrieben 01. März 2007 - 11:38

@asko: Und wie würde das dann aussehen?
---- Wer Hilfe erwartet sollte auch in der Lage sein, die Probleme ausführlich zu ----
---- Beschreiben und alles an verwendbaren Informationen zusammenzutragen. ----
0

#9 Mitglied ist offline   Diewie 

  • Gruppe: aktive Mitglieder
  • Beiträge: 409
  • Beigetreten: 18. Juni 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Geisenhausen / München

geschrieben 01. März 2007 - 15:11

Beitrag anzeigenZitat (MiniComp: 01.03.2007, 11:38)

@asko: Und wie würde das dann aussehen?


Wenn man wirklich auf die Performance achten will, dann sollte man das wirklich schon im SQL-Statement beachten.
Im Query sollten dabei die Feldnamen einzeln aufgeführt werden, so dass wirklich nur diese zurückgegeben werden.
Also z.B. bei dir: SELECT Feld1, Feld5 FROM Base1 ORDER BY Date $ub1" ); wenn man nur mit diesen beiden Feldern arbeiten will.

Will man jetzt nur die ersten 8 Zeichen von Feld5 dann kann man das z.B. mit LEFT folgendermaßen machen:

$res = mysql_db_query("Base", "SELECT Feld1, LEFT(Feld5, 8) FROM Base1 ORDER BY Date $ub1" );


Hier findest du einen Überblick der String-Funktionen, die in MySQL "eingebaut" sind: http://dev.mysql.com...-functions.html

Allgemeine Anmerkungen zum Stil. Die Feldnamen in der Tabelle sollten einen aussagekräftigeren Name wie Feld1... bekommen, denn wenn du später mal was ändern willst, ist das sehr von Vorteil. Ebenso die Variablen im Script. Desweiteren gibt es einige elegantere Möglichkeiten die Ergebnisse der Anfrage zu schneller und effizienter zu verarbeiten. Siehe dazu z.B. http://de.php.net/ma...fetch-array.php.
Dies soll nur konstruktive Kritik sein und dich nicht schlecht machen. Ich finde es sehr gut, dass du dich damit beschäftigst und dir auch bereits jetzt Gedanken zur Performance machst. Da kann sich so mancher "erfahrener Programmierer" ein Beispiel nehmen.

MfG Stefan

Dieser Beitrag wurde von Diewie bearbeitet: 01. März 2007 - 15:13

0

#10 Mitglied ist offline   MiniComp 

  • Gruppe: aktive Mitglieder
  • Beiträge: 460
  • Beigetreten: 07. April 04
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:NRW

geschrieben 01. März 2007 - 22:28

Kritik, vor allem Konstruktive ist immer gut, wenn man entsprechende Lösungsansätze bekommt .
Bin schließlich erst seit knapp 3Wochen dran und somit blutiger Anfänger. Man will ja was lernen :wink: .
Hab das ganze eigendlich aus Langeweile in der Mittagspause angefangen und weil ich Verstehen wollte wie die Ganzen PHP Teile auf der Hp überhaupt Arbeiten (Shoutbox TSviewer und co).
Da bin ich auf das kostenlos downloadbare Buch PHP4 gestoßen und habe einfach angefangen (Übrigens ist Arrays das nächste Kapitel das ich angehen werde :D )
Da ich nicht immer Onlinezugang habe und mein Englisch mehr als Bescheiden ist, ist es nicht immer einfach sich mit passender Lektüre zu versorgen (ohne Geld auszugeben zu müssen).
So bin ich Momentan neben dem Buch bei den Offline-Versionen von Self HTML und Self PHP hängen geblieben. Um MySQL habe ich bisher mir nur im Rahmen des Buches gedanken gemacht :smokin: .

Die Variablen und Felder sind bereits geändert ;) war mir nämlich schon aufgefallen, da sich das Projekt zur Zeit über 5 Dateien zieht (2 verschiedene Tabellen, Eingabe der Daten, Ändern und Eintragen der Änderungen). Da gibt es bestimmt noch einiges an Optimierungspotential.
Aber eins nach dem anderen. Erst muss es laufen dann kann ich einkürzen ;)
Performance finde ich eigendlich Wichtig. Je eine Seite aufgebaut ist, um so besser für den Besucher.

Zum Schreiben nutze ich PSPad. Zum Testen WebserverOnStick da ich das ganze nicht Installieren brauch und es per USB-Stick läuft.
Gibt es da noch etwas besseres oder reicht es erstmal aus?

Dieser Beitrag wurde von MiniComp bearbeitet: 01. März 2007 - 22:37

---- Wer Hilfe erwartet sollte auch in der Lage sein, die Probleme ausführlich zu ----
---- Beschreiben und alles an verwendbaren Informationen zusammenzutragen. ----
0

#11 Mitglied ist offline   MiniComp 

  • Gruppe: aktive Mitglieder
  • Beiträge: 460
  • Beigetreten: 07. April 04
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:NRW

geschrieben 02. März 2007 - 16:13

Der LEFT Befehl scheint leider nicht zu Funktionieren.
Weder in der Urfassung von oben, noch mit der geänderten Zeile mit substr.
Gebe ich die Befehls-Zeile im MySQL-Monitor ein wird der Feldinhalt korrekt gekürzt ausgegeben.
Jedoch als Programmzeile erhalte ich eine Fehlermeldung, das das Feld bei dem übergeben in die Variable nicht gefunden wird.
Warning: mysql_result() [function.mysql-result]: Feld5 not found in MySQL result index 3 in...

In Die Links hab ich zumindest mal reingesehen. Da wird noch viel Zeiit vergehen bis ich das ganze Kapiere :P
---- Wer Hilfe erwartet sollte auch in der Lage sein, die Probleme ausführlich zu ----
---- Beschreiben und alles an verwendbaren Informationen zusammenzutragen. ----
0

#12 Mitglied ist offline   Diewie 

  • Gruppe: aktive Mitglieder
  • Beiträge: 409
  • Beigetreten: 18. Juni 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Geisenhausen / München

geschrieben 02. März 2007 - 16:45

Ja so ist deine "Ausrüstung" genau richtig. So musst du dich nicht lange mit der Webserver, PHP und MySQL rumschlagen sondern kannst komfortabel arbeiten. Editor ist jeder in Ordnung. Am Besten mit Highlighting, aber das hat deiner ja sowieso.

Das er das Feld nicht findet liegt daran, dass das Feld jetzt praktisch keinen "richtigen" Namen mehr hat. Dafür gibts den Aliasperator "AS" mit dem du dem Feld wieder einen verarbeitbaren Namen geben kannst. Das würde in deinem Fall ca. so aussehen:

$res = mysql_db_query("Base", "SELECT LEFT(Feld1, 8) AS kurzFeld1 FROM Base1 ORDER BY Date $ub1" );


Diesen zugewiesenen Namen kannst du nun gewohnt so weiter benutzen:

$feld1_kurz = mysql_result($res, $i, "kurzFeld1");


MfG Stefan

Dieser Beitrag wurde von Diewie bearbeitet: 02. März 2007 - 16:46

0

#13 Mitglied ist offline   MiniComp 

  • Gruppe: aktive Mitglieder
  • Beiträge: 460
  • Beigetreten: 07. April 04
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:NRW

geschrieben 04. März 2007 - 19:39

So Funktioniert es :)
Jetzt muss ich das ganze nur zusammen bekommen und Die Datenbank und die Files mal auf einem "externen Webspace" Testen.

Für Optimierungen muss ich mich dann mal wieder Melden wenn ich etwas mehr Praxis (und vieleicht auch mehr Wissen als Fragezeichen im Kopf) habe.

Thx für die Hilfe soweit
---- Wer Hilfe erwartet sollte auch in der Lage sein, die Probleme ausführlich zu ----
---- Beschreiben und alles an verwendbaren Informationen zusammenzutragen. ----
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0