Das ist rein Programmiertechnisch nur ueber JavaScript loesbar. Wenn du in einer HTML-Seite irgendwas anklickst, dann geht der Focus darauf. Ist das einfach ein leerer Bereich oder Text, passiert garnichts. Ist es ein Link, bekomt dieser quasi "mitgeteilt" : "hey, DU hast den Fokus". Was dazu fuert, dass der "Link" ein neues Fenster mit deinem Impressum aufmacht, sich selbst anders darstellt, um dem Benutzer aufzuzeigen: "HIER ist der Focus". Um das geoeffnete Fenster kuemmert sich der Link dann nichtmehr.
Fazit, irgendwer muss dem Link "mitteilen", dass der Fokus weg ist. Das geht in JavaScript ueber x.blur(); Da das aber dein Impressum ist, sollte es nicht von JS abhengen.
Beiträge von Tobse
-
-
Was machst du denn da fuer rechnerreien fuer r?!?
HTML<textarea name="bla" rows="2" cols="40" onkeydown="if (keypress(event)=='enter')adjust(this);"></textarea>
Codefunction adjust(element) { var br=element.value.split("\n").length; if (br>2) element.rows++; }
Ich habe es nicht getestet, sollte aber funktionieren. -
Bei Facebook bleiben die Cols gleich. Du kannst dieses Script hier benutzen, es sollte "enter" fuer Die Enter-Taste zurueck geben. Dann eben der Textarea ein keydown event geben, die Funktion aufrufen und Zeilenumbrueche zaehlen. Wenn die groeser als die rows der Textarea sind, machste se groeser.
-
Wer will eine Webseite kaufen, die (zumindest in L.A.) fast 2 minuten braucht, um zu laden ?!? Dafuer sind fast 249 Euro zuviel.
-
Schon gewusst, das wenn man am Sylverterabend rote Unterwäsche trägt alle deine Wünsche in Erfüllung gehen ?
Einige behaupten sogar, das gerade die erotischen Wünsche besonders gut in Erfüllung gehen *grins
In diesem Sinne und wünscht euch für das neue Jahr mit der roten Unterwäsche alles das, was ihr gerne mit eurem jetzigen oder zukünftigen Wunschpartner gerne machen würdet.
Einbildung ist auch eine Bildung -
Ich benutze das @ garnicht. Mir faellt leider momentan kein genaues Beispiel ein, wann man das @ wirklich sinnvoll einsetzen kann, um einen unnoetigen Fehler zurueckzuhalten. Aber es gibt ja vieles, aber im grossen und ganzen stimme ich mit Pion ueberein.
-
Was ist das problem, wenn die Seite breiter als 1000px ist? Das Forum hier passt sich auch imer der Fensterbreite an. Kannst mal mim Firebug ins HTML und CSS schaun, da wirste hier glaub fuendig
-
Wenn im Live betrieb was anderes kommt ausser E_NOTICE dann stimmt was nicht und gehoert verbessert, evtl gibts da ein Paar ausnahmen, aber genau dafuer ist ja das @ da
-
Was mir jetzt aber neu ist, dass es nur 3 Fehlermeldungen gibt.
Nicht böse gemeint, aber diesen Beitrag "Tutorial" zu nennen, ist heftig überzogen.
Nein, natuerlich gibt es mehr. Aber ein E_NOTICE zu falsch zu bearbeiten ist recht schwierig.Keine gute Idee, wenn man aus irgendeinem Grund eine Injection zulässt, bekommt ein Angreifer so das Tabellenformat wesentlich schneller raus…
Oh, danke das dus sagst. Ich editier den Post gleich und fuege noch was an.
Außerdem sollte man sich auch um E_NOTICE kümmern, das sind echte Performance-Bremsen, auch wenn man sie ignoriert. Aus dem Grund auch das @ nur benutzen, wenn es keine andere Möglichkeit in PHP gibt.
Im ersten Code-Tag steht doch im kommentar, dass durch E_ALL viel Zeugs durchkommt, dass man in der Live-Version nicht brauchen kann und daher auf jeden fall unterdruecken sollte, aber beim Programmieren und Debuggen unbedingt beachten muss. E_NOTICE sind meistens wichtige dinge, ja, auch auf den Programmierstil bezogen wie "undefined Variable".THX fuer das gute Feedback.
@Unregistriert: Ja, ich uebe noch, ich versuchs aber noch zu verbessern
-
Dann wuensch ich mal fleisig mit, ein erfolgreiches neues Jahr an alle!
hoffe ihr seid alle gut reingerutscht.
Ich hoffe, das tu ich, muss noch warten -
Da in letzter Zeit öfters Code von TS's gepostet wurde, der Fehlermeldungen ausgespuckt hat, zusammen mit der Frage, was falsch ist, habe ich dieses Tutorial erstellt. Kritik ist willkommen, aber bitte Konstruktiv.
Fehlerbehandlung in PHP
Um immer alle Fehler zu sehen, sollte man folgendes an den Anfang seiner PHP-Dateien setzen:Hier werden evtl. viele NOTICE-Errors kommen. Daher sage ich zu denen auch noch was:
Ein E_NOTICE kommt meistens durch Unstimmigkeiten im Programmcode zustande. z.B.:Hier wird mit einer nicht-definierten variable gerechnet. Die Zählt PHP normalerweise als Null,
aber wenn alle Errors an sind, erhält man eine Fehlermeldung.Zitat
Notice: Undefined variable: a in foo.php on line 3Hier könnte z.B. eine falsch geschriebene Variable der Grund für ein falsches Ergebnis sein, für das man evtl. seine Rechnung verantwortlich macht.
Der simpelste Fehler ist der Syntax-Error. Jedoch sind die Meldungen von PHP da nicht immer ganz eindeutig.Das hier ergibt folgende Fehlermeldung:
Zitat
Parse error: syntax error, unexpected $end, expecting T_VARIABLE or T_DOLLAR_OPEN_CURLY_BRACES or T_CURLY_OPEN in /users/cptest/www/foo.php on line 3PHP sagt uns hier, das Script hört unerwarteterweise auf. Warum? da gibt es doch ein ?>.
In PHP kann man beliebig viele Zeilenumbrüche in einen String packen. daher parst PHP den Code bis zum >, weil der String nicht geschlossen wurde. Aber beim > hört das Script auf und das ergibt die Fehlermeldung.Hier parst PHP nur bis zum zweiten " und gibt den String aus, kein Fehler.
Eine komplexere Form des Syntax-Errors wäre z.B. das hier:
PHP<?php $foo="DeFbArxYZ"; if (strToLower(htmlspecialchars(mysql_real_escape_string(substr($_GET['bla'], 3, 4))) == strToLower(substr($foo, 3, 3))) { echo "Ja"; } else { echo "Nein"; } ?>
Und hier verliert man leicht die Übersicht. Da hilft natürlich erstmal ein Editor mit Syntaxhighlighting, der die Klammern hervorhebt.
Jedenfalls, PHP meckert hier:Zitat
Parse error: syntax error, unexpected '{' in /users/cptest/www/foo.php on line 3Da hilft es, zumindest gedanklich die Bedingung auseinanderzunehmen, denn einfach irgendwo eine Klammer setzen macht keinen Sinn.
PHP
Alles anzeigen<?php $foo="DeFbArxYZ"; if ( strToLower( htmlspecialchars( mysql_real_escape_string( substr( $_GET['bla'], 3, 4 ) ) ) == strToLower( substr( $foo, 3, 3 ) ) ) { echo "Ja"; } else { echo "Nein"; } ?>
Und man erkennt ziemlich schnell, das strToLower im ersten teil der Bedingung nicht geschlossen ist.
Btw: Wenn das script mit einer Datenbank verbunden ist, ist die Ausgabe: NeinDie Fehlermeldung des Typs "Warning" sind ähnlich zu behandeln, sie betreffen aber eher weniger den Code an sich. Ein typischer Fehler dieser Art ist dieser:
Zitat
Warning: Cannot modify header information - headers already sent by (output started at foo.php:3) in /users/cptest/www/foo.php on line 4
Das tritt immer dann auf, wenn man bereits eine Ausgabe gemacht hat, und dann die Funktion header() benutzt. Hier hilft es, das Script von vorne durchzugehen und die erste Ausgabe zu suchen.
Und weiter zum Tod jedes Scripts, zum Fatal-Error. Der kommt in den meisten Fällen bei Datenbankabfragen, daher nehme ich das im Beispiel.PHP
Alles anzeigen<?php $db=new mysqli("localhost", "user", "password", "datenbank"); $query=$db->query("SELECT foo, blub, defg, FROM abc WHERE d='bar', m='D'"); echo "<table><thead><td>foo</td><td>blub</td><td>defg</td></thead>"; while ($row=$query->fetch_array()) { echo "<tr>"; foreach ($row as $v) { echo "<td>".$row."</td>"; } echo "</tr>"; } echo "</table>"; $query->close(); $db->close(); // Ein meinem Fall existiert hier garkeine Datenbank, nur der Server ist online, d.h., // bereits der Verbindungsversuch schlaegt schon fehl. Wuerde die Verbindung jedoch // klappen, wuerde das Script am falschen Query scheitern. ?>
Das fuehrt zu einem Fatal-Error bei $query->fetch_array().
Zitat
Fatal error: Call to a member function fetch_array() on a non-object in /users/cptest/www/foo.php on line 5Da gibts 2 moeglichkeiten, das Problem zu loesen.
1. Die mysql_* Funktionen benutzen und in diesem Fall nur ein Warning anstadt einem Error zu erhalten\
2. Pruefen, ob das Query durchgegangen ist und nur dann fetch_array() aufrufen.Es ist wohl offensichtlich, dass hier 2. die bessere Idee ist.
PHP
Alles anzeigen<?php $db=new mysqli("localhost", "user", "passwort", "datenbank"); if ($query=$db->query("SELECT foo, blub, defg, FROM abc WHERE d='bar', m='D'")) { echo "<table><thead><td>foo</td><td>blub</td><td>defg</td></thead>"; while ($row=$query->fetch_array()) { echo "<tr>"; foreach ($row as $v) { echo "<td>".$row."</td>"; } echo "</tr>"; } echo "</table>"; $query->close(); } $db->close(); ?>
Und damit kommen wir zum 3. Punkt, die Fehler bei SQL-Statements.
Nun kommt schonmal keine Fehlermeldung mehr, aber wissen, wo das Problem steckt, weis man immernoch nicht. Dazu steht die variable $error im mysqli-Object bzw. die mysql_error() funktion bereit.
Von den beiden erfahren wir naemlich immer, was gerade falsch lauft.
Wenn man also von einer If-Abfrage erfaehrt, dass der Query fehlgeschlagen ist, dann immerEDIT:
Hier empfiehlt es sich jedoch, um SQL-Injector Angreiffern das Leben schwerer zu machen, diese Funktion zu benutzen:PHP
Alles anzeigenfunction logError($message) { if ($_SERVER['HOST_ADDR']=="127.0.0.1") { // localhost, error ausgeben echo "FEHLER: ".$message."<br>"; } else { // online, ins logfile file_put_contents( "errorlog.txt", file_get_contents("errorlog.txt").$message."\n" ); } }
Im allgemeinen: Bitte ALLE Fehlermeldungen GENAU anschauen, mit dem Code abgleichen und dann verbesern
-
Ich finde auch, dass es abnimmt, bin aber mom. auch im Urlaub, aber FH ist daheim sogar meine Startseite. Muss mich da auch sejuma anschliessen. Man muss aber auch die Positive Seite sehen:
In den Zeiten, in denen die Registrierten wenig Zeit haben (d.h., viele andere ja auch) sind es sogar 159 Gaeste. Das sieht fuer mich nicht wirklich nach "untergang" sondern eher nach uebergang zum nachschlagewerk aus. -
Hehe, ja, der IE... Das ist halt MS. vor Jahren haben die Open-Source'ler JS eingefuehrt und JS ist sofort im Netscape, Opera und bla. Deswegen war MS gezwungen, JS einzubauen, um Webseiten weiterhin anzeigen zu koennen, fuer eine eigenentwicklung wars zu spaet. Aber da MS ja alles andere als fuer open source ist, ham sie warscheinlich die JS-Funktionen abgeaendert, ich glaub, um JS unattraktiv zu machen, weil alle aufn IE aufpassen muessen xD. Hat aber nich geklappt...
ZitatEs war auch eher als Denkanstoß gedacht. Habe noch ein wenig daran rumgebastelt, vielleicht schreib ichs auch als jQuery plugin um, was sich treffen würde, da ich ja jQuery verwende.
Joa, evtl scheib ich auch mal eine jQuery-Version, hatte ich auch mal vor. Hatte vor langer zeit mal ein jQuery Kontextmenue geschrieben, ist aber nicht so ausgereift. -
Wie system zu aendern? So wie ich das sehe hast du in der valid_user.php das problem, gib uns mal bitte den kompletten quellcode von valid_user.php. Und sag uns bitte auch, was in der action vom formular steht, mit dem du dich einloggst. Von der datei bitte auch den kompletten quellcode.
-
Natuerlich. AJAX ist nichts anderes, als wenn du einen HTTP-Request sendest, sprich eine seite aufrufst. Nur der inhalt wird dann nicht im fenster angezeigt sondern an JS uebergeben. Probiers einfach aus
-
Aehm, ok, ich konnte das jetzt nicht testen aber so wie es aussieht fehl da der platz wo die momentane auswahl drin steht. Das ganze ist glaub noch etwas verbeserungswuerdig. Gut qaere es auch, wenn du es als jQuery plugin-in schreiben koenntest, dann kann man dein plugin auch mit css-selektoren einsetzen, wie z.b. $(".jsCombobox").combobox({opti:ons});
Alles in allem find ichs aber gut, dass du dir die muehe gemacht hast, mich nerven diese standard-dropdowns auch immer xD
@Alle, die das verwenden:
Vergesst nicht, auch fuer die user ohne js die funktionalitaet zu erhalten. -
Junge 1 posting REICHT! Siehe http://de.php.net/manual/de/function.mysql-error.php .
-
Mein problem mit der db ist halt folgendes:
Sowas wie Sprachelemente sind total common. Das wird bei jedem Seitenaufruf verwendet. Das mit der Datei spart meiner ansicht nach einfach zeit und kann evtl. bei einer seite die sonst keine Datenbankverbindung brauchen wuerde diese sparen. Hier ein Bsp:
Das CMS dass ich mom. fuer ein Projekt verwende hat folgende funktionen:
Templates, eines fuer jede seite
Seiten in der DB-Speicherbar
Seiten als PHP-Objekt
Navigation auch ueber die DB steuerbar (Die navi wird vom Template erzeugt)
Plugins als PHP-Objekt, aktive in der DB eingetragen
Seitenlayout (spalten) in der DB
Dadurch kommen insgesammt (pro Seitenaufruf) 7 Querys zusammen. Da ich ja nichts ueber eine HTML-GUI steuern koennen muss, hab ich durch das schreiben von nem eigenen template, dass weder spalten noch die Navi aus der DB liest nurnoch 1 query, den fuer die Seite. Und den unterschied hat man beim benutzen eindeutig gemerkt. -
Und wie machst du das auf fileebene? Wuerde man eine Tabelle fuer alle Texte anlegen, dann braeuchte man noch zusaetslich eine spalte, um zu speichern, auf welcher seite die angezeigt werden, also
und dann im konstruktor das dann damit abfragen:
Was aber, wenn ein text fuer mehrere bereiche verfuegbar sein soll? Doppelt eintragen ist da wohl ein no-go. Im Dateisystem kann man einfach alle dateien laden, die man braucht und spart sich die page-spalte.P.S.: Ich habe das nur so ausgefuehrt, um dem TS die Moeglichkeit aufzuzeigen.
-
Angenommen, die methode get(String key) saehe so aus:
PHP
Alles anzeigenpublic function get($key) { $sql="SELECT text_".$this->lang." FROM language_items WHERE key='".$key."' LIMIT 1": if ($res=mysql_query($sql)) { if ($res=mysql_fetch_array($res)) { return $res[0]; } else { return null; } } else { echo "MySQL-Error: ".mysql_error(); return ""; } }
Dann glaub ich nicht, dass das kuerzer ist, als es aus einem array rauszuhohlen, dass aus einer datei entstanden ist. Zumal, soweit ich weis, php dateien auch cached.