Zum Inhalt springen

computercrustie

Mitglieder
  • Gesamte Inhalte

    207
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von computercrustie

  1. Könntest du etwas genauer werden ? Welcher Scrollbalken erscheint nicht ? Der der Seite oder der eines Größenbegrenzten Elements (wie div z.Bsp) mit overflow: auto ? Welcher Browser ?
  2. Im Mozilla funktionierts, nur im IE (6) anscheinend nicht.
  3. Poste bitte mal das Script http://www.bmf-gmbh.de/sites/frameset/sub_navigation.php von deiner Seite. Der Fehler scheint dort zu liegen (was wird denn im Header gesendet ?)
  4. Aber gern doch: RegEx-Tutorial (für preg-Funktionen)
  5. <meta http-equiv="cache-control" content="no-cache">
  6. Mit css kannst du das auch realisieren: <html> <head> <style type="text/css"> input.button { border: none; background-image: url('grafik.gif'); width: 100px; height: 40px; cursor: pointer; } </style> </head> <body> <form action="#"> <input type="text" value="test" /> <input type="reset" value="Zurücksetzen" class="button" /> </form> </body> </html>
  7. preg_replace($pattern,$replace,$text) führt eine Ersetzung in $text von einem regulären Ausdruck $pattern durch $replace aus. In unserem Fall liegt das Datum als tt.mm.yyyy vor, wobei die drei Bestandteile durch Punkte getrennt sind. Demzufolge muss der reguläre Ausdruck so aussehen: /(\d.*?).(\d.*?).(\d.*?)$/ (\d.*?). findet eine Zahlen bis zum Punkt und erzeugt eine sogenannte Backreference (dadurch können wir uns beim Ersetzen in $replace darauf beziehen) (\d.*?).(\d.*?). findet zwei Zahlen (jeweils eine Backreference) durch Punkt getrennt wobei die zweite am Ende einen Punkt haben muss. .(\d.*?)$ findet eine Zahl vor der ein Punkt vorkommt und die am Ende des $text steht in $replace können wir uns nun auf diese Backreferences beziehen. Diese werden in der Reihenfolge des Auftretens in $pattern durchnummeriert (beginnend bei 1). Das erfolgt durch $3-$2-$1 Hier wird das zerlegte Datum in der Form yyyy-mm-tt wieder zusammengesetzt... ...und ist somit für strtotime(...) interpretierbar. Wenn du aber, wie Jaraz bereits geschrieben hast, das Datum in deinen Datensätzen gleich als Timestamp (Sekunden seit 01.01.1970) ablegst, dann ist diese Umwandlung nicht mehr notwendig und ausgeben kannst du das Datum dann via date("d.m.Y",$timestamp)
  8. Hast du denn keine Möglichkeit, eine Datenbank für diese Zwecke zu nutzen ? Damit wärst du wesentlich schneller und hast auch viel mehr (zumindest einfachere) Möglichkeiten zur Bearbeitung der Datensätze. Zu dem Hinweis von Jaraz: Solltest du keine Datenbank nutzen können, dann nimm auf jeden Fall einen Unix-Timestamp, denn damit sparst du dir auch das Konvertieren beim Sortieren und somit auch Rechenzeit. @Jaraz: Da mittels usort() kein Interpreter-Code ausgeführt werden muss (ausser zum Vergleich), denke ich, dass diese Variante nach dem Einlesen die schnellere ist. Denn da es keine "Insert"-Funktion für Arrays in PHP gibt (zumindest noch nicht) müssten ja die Element beim "Davor"-Einfügen immer um eins nach hinten verschoben werden (wenn man nicht zwei Arrays nutzt). Und was auch wichtig wäre ist die Anzahl der Datensätze. Auf jeden Fall eine interessante Frage.
  9. Eigentlich nur der Vergleich: if($jjjj2 <= $jjjj) if($mm2 <= $mm) if($tt2 < $tt) {...} [/PHP] Angenommen, Datum 2 ist 10.12.2001 und Datum 1 der 10.10.2004: [PHP] if ( 2001 <= 2004 ) //ja, also if (12 <= 10) //nein, also abbruch, obwohl Datum2 kleiner Datum1 ist! Dein Algorithmus ist auch sehr verschwenderisch, da die Iteration komplett durchlaufen wird, auch wenn bereits alle Werte sortiert sind. Das ist eine gute Frage von Jaraz... Holst du die Daten eventuell aus einer Datenbank ?
  10. Dein Bubblesort müsste übrigens richtiger so aussehen: function bubble_sort($alles) { $pattern='/(\d.*?).(\d.*?).(\d.*?)$/'; $replace='$3-$2-$1'; do { $ok = true; for ($i=0; $i < (count($alles)-1); $i++) { $ta = strtotime(preg_replace($pattern,$replace,$alles[$i][0])); $tb = strtotime(preg_replace($pattern,$replace,$alles[$i+1][0])); if ($ta>$tb) { $tmp = $alles[$i]; $array[$i] = $alles[$i+1]; $alles[$i+1] = $tmp; $ok = false; } } } while (!$ok); } [/PHP] Ich habe deine Datumzerlegung mal ersetzt.
  11. JETZT weiss ich, worauf du hinauswillst! Also nochmal function sort_by_date($a,$ { $pattern='/(\d.*?).(\d.*?).(\d.*?)$/'; $replace='$3-$2-$1'; $ta = strtotime(preg_replace($pattern,$replace,$a[0])); $tb = strtotime(preg_replace($pattern,$replace,$b[0])); return $ta>$tb; } usort($alles,"sort_by_date"); print_r($alles); [/PHP] Nimm deine Bubblesort-Funktion raus, integriere die "sort_by_date"-Funktion (s.o.) und sortiere dann mittels usort dein Array. Ich habe den Aufruf hier gleich so gemacht, dass er auf dein Beispiel passt (Datensatzarray heißt $alles und $alles[..][0] ist immer das Datum). Zur Funktionsweise: mittels usort(..) kannst du ein Array (1. Parameter) über eine benutzerdefinierte Funktion (2. Parameter, Funktionsname als String) sortieren. Hierbei werden der benutzerdefinierten Funktion zwei Parameter (zwei zu vergleichende Elemente des zu sortierenden Arrays) übergeben, mit denen du dann deinen Vergleich machen kannst. In deinem konkreten Fall sind diese zwei Elemente auch wiederum Arrays, so dass wir uns aus diesen das entsprechende Feld (hier Index 0) nehmen müssen, um einen Vergleich anstellen zu können. Ich habe hier mit RegEx nichts weiter getan, als das Datum vom Format dd.mm.yyyy in eine für strtotime(..) verständliche (englische) Notation zu bringen (yyyy-mm-dd). strtotime(..) wandelt jetzt dieses Datum in einen Unix-Timestamp (Anzahl Sekunden seit 1.1.1970) um, so dass diese sich jetzt vergleichen lassen. Soll das Array absteigend sortiert werden, musst du lediglich $ta>$tb durch $tb>$ta ersetzen. Ich hoffe, das hat geholfen.
  12. Mit RegEx noch etwas kürzer: function sortdate($a,$ { $pattern='/(\d.*?).(\d.*?).(\d.*?)$/'; $replace='$3-$2-$1'; $ta = strtotime(preg_replace($pattern,$replace,$a)); $tb = strtotime(preg_replace($pattern,$replace,$); return $ta>$tb; } $datum = array( "13.08.1997","16.12.1977","25.08.1979","05.05.2004" ); usort($datum,"sortdate"); print_r($datum); [/PHP]
  13. Da muss ich Jaraz Recht geben, das wäre auf jeden Fall die bessere Variante, da so auch gleich die Gültigkeit des Datums geprüft wird (30.02.03 ist zum Beispiel ungültig). Aber trotzdem der Regex dazu (für preg-Funktionen von PHP, ist also PERL-Kompatibel) /((?:0(?!0)|1|2|3)(?<!3)[0-9]|3[0-1])\.((?:0(?!0)|1)(?<!1)[0-9]|1[0-2])\.((?:[0-9]{4})|(?:[0-9]{2}))/ Hier wird geprüft, ob die Zahl vor dem Punkt zwischen 01 und 31 liegt, die Zahl zwischen dem Punkt zwischen 01 und 12 und die Jahreszahl 2 oder 4 Stellen hat (bei drei Stellen werden nur die ersten beiden zurückgegeben). Für Tag, Monat und Jahr werden auch Backreferences erzeugt.
  14. Noch etwas: anstatt des festen Datums kannst du auch das aktuelle nehmen: SELECT TO_DAYS( NOW() ) - TO_DAYS( anmeldedatum ) AS angemeldete_tage, DATE_FORMAT( anmeldedatum, '%d.%m.%Y') AS angemeldet_seit FROM tabelle Wenn "anmeldedatum" ein Feld mit einem Datumtyp in der Tabelle "tabelle" ist, dann liefert diese Abfrage für jeden Datensatz folgende Felder zurück: angemeldete_tage: Anzahl Tage seit Anmeldung (bis jetzt) angemeldet_seit: Datum des Anmeldens im Format dd.mm.yyyy
  15. Versteh ich nicht ?! Du wolltest doch die Tagesdifferenz zum 01.06.2004 haben, oder nicht ? Die hast du jetzt, und zwar in Tagen. [EDIT] Falls du die formatierte Ausgabe eines Datums via MySql meinst: SELECT DATE_FORMAT(datum,'%d.%m.%Y') FROM tabelle [/EDIT]
  16. mmh, mit Payment-Anbietern kenne ich mich nicht aus und weiss daher auch nicht, wie das funktioniert. Allerdings kannst du bei Abfragen mittels .htaccess verschiedene Benutzer und Benutzergruppen abfragen. Vielleicht klappts ja damit: http://de.selfhtml.org/diverses/htaccess.htm
  17. Ja, warum auch einfach wenn's kompliziert geht Lass diese Berechnung doch gleich MySql ausführen, somit sparst du Code.
  18. SELECT TO_DAYS(datum) - TO_DAYS('2004-06-01') AS tage FROM tabelle
  19. Seltsam, bei mir funktionierts einwandfrei. Aber es könnte vielleicht daran liegen, dass ich die preg-funktionen von PHP benutze und nicht ASP. $parr = array("/(?<!<\/a|\")>/si","/(<[^a|\/])/si"); $rarr = array(">","<"); $text=<<<ENDTEXT in einem text sollen alle < durch < und > durch > ersetzt werden. aber nur wenn die < und > nicht zu einen <a href="...">xxx</a> tag gehören. ENDTEXT; echo preg_replace($parr,$rarr,$text); [/PHP] ergibt: [code] in einem text sollen alle <durch < und > durch > ersetzt werden. aber nur wenn die <und > nicht zu einen <a href="...">xxx</a> tag gehören. [/code]
  20. Ich habe etwas: /(<[^a|\/])/si findet alle <, denen kein "a" oder "/" direkt folgt /(?<!<\/a|\")>/si findet alle >, vor denen direkt kein </a und kein " steht Das bedeutet auch, dass link-Tags immer so geschrieben werden müssen: <a href=".."> </a> (ohne Leerzeichen oder sonstiges hinter "<" bzw. vor ">") und demzufolge einem >, das ersetzt werden soll, kein ",a oder A voransteht
  21. Stimmt, daran hab ich gar nicht gedacht! Ich überleg noch mal, poste wenn ich was habe. [EDIT] Gibt es denn irgendwelche Erkennungsmerkmal in deinem Text, ob es sich um ein Tag handelt oder nicht (zum Beispiel: bei Tags folgt direkt auf < ein Buchstabe, sonst ein Leerzeichen oder eine Zahl) ? [/EDIT]
  22. Erstens verbitte ich mir diese Bemerkung (<kindisch...>) - das kann man meinem Sohn sagen. Ich habe diese Ausdrucksform nur gewählt, um meinem Unmut darüber Ausdruck zu machen, dass in diesem Fall ohne es auszuprobieren behauptet wird, es würde nicht funktionieren. Aber was solls. @dersherriff: Deine Ausführung sind vollkommen korrekt, allerdings haben diese nichts mit meinem Beispiel zu tun: echo "<a href='mailto:$row[mail]'>$row[mail]</a>"; [/PHP] Der Index des Array $row ist hier zum einem ein String und wird, da die Variable bereits innerhalb Anführungszeichen steht, auch als ein solcher interpretiert. Und das ist nicht nur Zufall, sondern eine Regel des PHP-Interpreter. Zu dem Fall mit der Konstante: Konstantennamen werden innerhalb Anführungszeichen nicht interpretiert sondern als einfache Zeichenkette angenommen: [PHP] $row['mail']='me@domain.de'; define('mail','Fehler'); echo "<a href='mailto:$row[mail]'>$row[mail]</a>"; //ergibt: //<a href='mailto:me@domain.de'>me@domain.de</a> Würde der Interpreter die definierte Konstant 'mail' innerhalb des Strings finden, dann müsste wohl oder übel ein leerer Link herauskommen. Und bevor jetzt wieder jemand behauptet, Hochkommate als Trenner für Attributwerte innerhalb HTML-Tags würden zwar funktionieren, wären aber nicht korrekt: www.w3c.org Ich bitte aus diesem Grund alle (auch die diesen Thread nur lesen) sich vor dem posten zu informieren, bevor man es tut (zumindest wenn es auf diese Art und Weise geschieht). Ich nehme mich davon nicht aus, aber da ich hier unter Fachleuten bin, lese ich erst nach und schreibe dann. Noch etwas: bitte fühlt euch nicht angegriffen, der Eindruck könnte hier unter Umständen entstehen, ist aber in keinster Weise so gemeint (was in einem Gespräch im Angesicht nicht der Fall wäre) In diesem Sinne ein schönes Wochenende.
  23. zu 1. wird er wohl zu 2. wird es nicht Erst testen, dann meckern!
  24. Genau das gleiche Problem habe ich beim Mozilla auch schon festgestellt: div { border: 1px solid #000; } div.inner1 { width: 80%; } div.inner2 { width: 80%; } <div> <div class="inner1"> <div class="inner2"> </div> </div> </div> Sollte eigentlich drei jeweils innerhalb liegende Ebenen ergeben, macht Mozilla leider nicht (im Gegensatz zum IE). Mozilla nimmt hier als Bezugsgröße zu den 80% die Breite des äußersten div statt des direkt übergeordneten.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...