kostenloser Webspace werbefrei: lima-city


Suche auf lima-city

  • in: Vista....wo ist Ausführen Menü??

    geschrieben von pjhimself

    Das "Ausführen"-Feld des Startmenüs wurde bei Vista entfernt. Finden kann man es noch im Startmenü-Ordner "Zubehör" oder schneller per Suchfeld, wie es bereits oben beschrieben wurde.

    Allerding bringt dir "Ausführen" in deinem Fall ja nicht viel, weil dort dann "cmd" einzugeben und dann in der erscheinenden Eingabeaufforderung "ipconfig" einzugeben, macht wenig Sinn.. Einfach gleich "Eingabeaufforderung" per Suchfeld suchen und direkt öffnen ;-)


    Wieso Willste das Wissen. Les Doch Einfach Mal Ein Vista Handbuch.

    @privatecitypage: Ein solcher Kommentar ist wohl wenig hilfreich und problemlösend..
  • in: Travian

    geschrieben von pjhimself

    Ich habe selbst auch sehr lange Travian gespielt. Die Stämme fand ich nicht so toll, hab' nur mal einen kleinen Klick drauf geworfen. Sah irgendwie extrem doof aus. Aber das ist wohl auch Geschmackssache. Von soher sind die beiden natürlich schon recht ähnlich.

    Der Einstieg an sich kann überall schwierig sein. Aber bei Travian halt nicht nur für Anfänger sondern für die Spieler an sich. In einer Welt kann man noch der erste gewesen sein und in einer anderen wird man bereits am Anfang vernichtet. Es ist alles möglich.
    Natürlich darf man die Erfahrung und Kontakte der älteren Semester nicht vergessen. Travian ist ein sehr strategisches Spiel, wo es viel um Diplomatie, Planung und Timing geht. Viele Spieler vergessen das total und scheitern daran. Die Grundsachen, die man dafür tun muss sind schon etwas eintönig, klar, aber das hat man ja eigentlich bei fast jedem Spiel. Im Endeffekt ist es halt schon ein Spiel, dass nicht für jeden geeignet ist. Für mich ist immer nur wichtig, dass die Atmosphäre stimmt, sonst hält es mich bei keinem Spiel allzu lange.

    Was die Bauzeiten angeht, sind die natürlich schon etwas lang, aber das eigentlich auch fast nur zum Anfang. Später ist es relativ egal (bis auf bei den Truppen^^), da man sich bei 20, 30 (fast vollkommen ausgebauten) Dörfern eh weniger für Bauzeiten interessiert und dort auch weniger Zeit an sich investiert als für andere Sachen.
    Ein Spiel, wo nicht nur die Bauzeiten (teilweise sogar mehrere Tage; von Stufe zu Stufe steigend) ätzend waren, war Ikariam, wo ich kurz mal aktiv war. Genervt hat mich da auch die Quasi-Isoliertheit von anderen Spielern.

    Ein großer Aspekt von Travian ist die Kommunikation der Spieler, die Organisierung in Allianzen, Verbänden, Meta-Allianzen etc., viel Politik (Bündnisse etc.), viel Planung (zB für einen Krieg), etc., etc. Eine Sache, die mich immer dabei bleiben ließ, waren eindeutig die ganzen Kammeraden im Spiel, das ganze Miteinander etc.

    Negativ ist natürlich, dass man im Endeffekt sehr viel Zeit für das Spiel braucht. Einen Account im späteren Spielverlauf allein zu führen, verlangt von einem schon sehr viel Einsatz - zumindest, wenn man bestimmte Ziele erreichen möchte. Deshalb werden sehr viele Accounts durch mehrere Spieler geführt, manchmal sogar bis zu sechs Spieler, eine Grenze an sich gibt es da wohl, wenn es zu Organisationsschwierigkeiten kommt.
    Außerdem gibt es auch den Welten mittlerweile Gold - eine Möglichkeit für den Spieler, verschiedene Vorteile zu erhalten (schnellere Produktion, höhere Angriffsstärken etc.). Dies wird aber gerade von den älteren Semestern, den erfahreren Spielern abgelehnt, da man dort ohne den Kauf von Gold keine Chance auf eine gute Position hat - leider. Durch Gold gibt es einfach zu viele Vorteile, die ein normaler Spieler selbst bei großem (u.a. zeitlich) Einsatz nicht kompensieren kann.

    Viele Spieler, die ich kenne, haben mittlerweile die ausländischen Server für sich entdeckt (Travian gibt es bereits in sehr vielen Ländern und Sprachen). Dort sind die meisten Spieler noch recht unerfahren und zudem hat man meist einen zeitlichen Vorteil durch die Zeitverschiebung / die unterschiedlichen Zeitzonen. Wenn man dort dann noch vielleicht mit einem heimischen Spieler zusammenarbeitet, hat man meist die besten Voraussetzungen für einen erfolgreichen Account.


    Zu Travianer: War bei der Beta-Runde dabei, aber fand spiel recht lahm und unsinnig, weshalb ich da nicht lange dabei geblieben bin. Habe gehört, dass sich da noch einiges getan haben soll, aber habe da seitdem nicht mehr reingeschaut und das auch nicht mehr vor.
  • in: Conditional Comments funktionieren nicht

    geschrieben von pjhimself

    CSS-Optimierung.. ein ziemlich leidiges und gehaßtes Thema..

    Problem bei CSS ist meiner Einschätzung nach, dass viele Abhängigkeiten der einzelnen Styles vorhanden sind. Dies kann unter Umständen einige Schwierigkeiten verursachen.

    Dazu kommt noch, dass CSS auch vom Aufbau des Dokuments abhängig ist.


    Es wäre also ganz gut, wenn du einen Link zu der Seite angeben könntest oder zumindest ein paar Codesnippets zu den Betreffenden Bereichen (HTML-Codeblock, betreffende Styles).
    Dann kann dir bestimmt besser geholfen werden. Ansonsten muss man teilweise ins Blaue raten, und das wär glaub' nicht allzu hilfreich für dich.

    Btw: Wenn du deine Seite für IE6 optimieren möchtest, kann es unter Umständen ziemliche viele Anpassungen erfordern. Diese haben ihren Ursprung meistens im Boxmodell, aber auch in teilweise unterschiedlich interpretierten Styles.

    Da hilft im Allgemeinen nur Trial&Error, gerade weil man manchmal doch Wege findet, es in zwei oder drei von den Browsern über einen einheitlichen Style zu regeln, obwohl man es am Anfang nicht vermutet hätte (z.B., weil vorher funktionierend anders gelöst in einem von ihnen).


    Edit:
    Falls du es noch nicht benutzen solltest: Für Firefox gibt es das mehr als nützliche Addon Firebug. Damit kannst du einen Seite live clientseitig anpassen. Speziell beim CSS ist das mehr als hilfreich.
    Für den Internet Explorer gibt es die sogenannte IE Web Developer Toolbar. Das Tool ist zwar nicht so schön umfassend wie Firebug, aber immernoch besser als gar nichts.
    Nebenbei: Es existiert auch eine JS-Skript-Variante von Firebug, die man in der Testphase in sein Projekt integrieren könnte. Hat allerdings ein paar Beschränkungen, ist nicht ganz gut zu handhaben, aber gibt einem dennoch wiederum Funktionen wie das direkte Ausführen von JS-Code etc. pp.
    Für Firefox gibt es zusätzlich auch noch ein Addon Web Developer Toolbar, aber das wird dir bei deinem Problem hier nicht weiterhelfen können.

    Beitrag geändert: 24.11.2008 17:04:08 von pjhimself
  • in: HTML und Design :S

    geschrieben von pjhimself

    Grundsätzlich stimme ich zu, dass man heutzutage Seiten per DIVs aufbaut und das Design über diese realisiert - alles schön table-less ;)

    Zu der relativen Höhe "100%": Wie bereits angedeutet sind prozentuale Angaben immer relativ und beziehen sich dabei auf den entsprechenden Wert des Container-Elements des Elementes. Die Angabe von 100% kann also nur dann funktionieren, wenn zuvor auch irgendwo eine Größe definiert wurde. Einzig und allein BODY und zur Sicherheit HTML können den Wert 100% erhalten - dort bezieht sich diese relative Größe dann auf den Viewport der Seite.
    <div id="outer" style="height: 200px;">
      foo
      <div id="inner" style="height: 50%;">bar</div>
    </div>
    Im oberen Beispiel wäre das DIV-Element #inner 100px hoch, da #outer 200px hoch ist (200px * 50% = 100px).

    Außerdem würde ich dir bei der Entwicklung deiner Seite das Firefox-Addon Firebug empfehlen. Mit diesem Tool kannst du die Style-Attribute deiner Seitenelemente einfach mal Client-seitig anpassen (nach Reload wieder weg), um so verschiedene Sachen ausprobieren zu können. (Das Tool bietet natürlich noch mehr Funktionalitäten.)

    Für IE-Nutzer (es scheint ja irgendwie leider immernoch welche zu geben - warum weiß keiner.. ^^) gibt es die IE Web Developer Toolbar. Bei Weitem nicht zu umfangreich und so gut verwendbar, benutzbar, aber wenn man an der Cross-Browser-Optimierung arbeitet, dass beste, was zu bekommen ist.


    Gruß
  • in: Conditional Comments funktionieren nicht

    geschrieben von pjhimself

    Hallo sincer,

    Condition Comments bieten die Möglichkeit, IE-spezifischen Code zu schreiben, welcher von anderen Browsern (oder auch IE-Versionen) ignoriert wird. Dieser Code beschränkt sich nicht nur auf CSS allein.

    Des Weiteren ist die Nutzung von @import an dieser Stelle unsinnig, da diese Stellen wenn überhaupt nur von IE-Browsern interpretiert werden und du dort die normalen <link>-Tags verwenden kannst.

    Zu den CSS-Dateien.. Deine oben zuerst geladene CSS-Datei "style.css" wird immer geladen, egal, um was für einen Browser es sich handelt. Somit existieren auch die sich darin befindlichen Style-Definitionen.
    Grundsätzlich funktioniert es bei CSS so, dass nachfolgende Definitionen vorangegangene überschreiben. Dh, dass bei dir bei einem IE-Browser über die zusätzlichen CSS-Dateien nur darin befindliche Definitionen genutzt und eventuell in der Standard-CSS-Datei vorher definierten Regeln überschrieben werden - aber nicht überschriebene Regeln dieser Datei werden natürlich auch genutzt.

    Zusammengefasst: Die letzte Regel für ein Attribut eines Elementes (oder auch einer Elementen-Klasse, ...) gilt.

    Zu beachten ist dabei natürlich noch, dass es auch Prioritätenunterschiede bei den Regeln gibt.
    Element-Styles vor ID-Styles vor Klassen-Styles ... (für deinen Fall aber wohl nicht so wichtig).

    Gruß
  • in: Kompakte Wiki gesucht

    geschrieben von pjhimself

    Guck dich doch mal auf http://de.wikipedia.org/wiki/Liste_von_Wiki-Software um. Dort sind viele Wikis aufgeführt, unter denen du sicherlich auch die passende für dich findest. Im unteren Bereich sind auch noch Links zu Wiki-Vergleichen etc.

    Eine umfangreichere Wiki-Sammlung findest du noch unter http://c2.com/cgi/wiki?WikiEngines (wird leider nicht als Link erkannt..), enthält sehr viele Wikis nach verschiedenen Kriterien sortiert, bietet auch ein wenig Unterstützung bei der Auswahl etc.

    TiddlyWiki (http://de.wikipedia.org/wiki/TiddlyWiki) z.B. benötigt ohne Plugins etc. nur 300kB, ist aber nur bis einem bestimmten Grad an Komplexität geeignet.

    PHPWiki (http://phpwiki.sourceforge.net/) könntest du dir evtl. auch noch ansehen.

    Ansonsten halte dich einfach an die beiden Übersichten. Diese bieten auch Links zu unterstützenden Seiten, was die Wahl des passenden Wikis angeht.

    Mehr kann ich dir bei dem Thema leider nicht helfen, aber vielleicht findet sich ja noch ein Wiki-Guru, der dir da vom Für und Wider der einzelnen Wikis aus seiner persönlichen Erfahrung berichten kann.
  • in: PHPMyAdmin + Special Chars

    geschrieben von pjhimself

    Die Funktion htmlspecialchars() wandelt nur die Zeichen &, <, >, ' und " um. Für eine umfassendere Umwandlung gibt es noch die Funktion htmlentities() (http://de.php.net/manual/de/function.htmlentities.php). Dort hast du auch vielseitige Möglichkeiten hinsichtlich der Zeichenkodierung, welche ja bei Unstimmigkeiten auch zu Problemen bei Darstellung ikm Browser führen kann.

    Möchtest du z.B. auch Text mit Zeilenumbrüchen in einem HTML-Absatz genauso mit diesen Umbrüchen darstellen, kannst du die Funktion nl2br() (http://de.php.net/manual/de/function.nl2br.php) nutzen - oder auch reguläre Ausdrücke wie:

    preg_replace('r?n', '<br/>', $text);


    Sieh dir aber auch die Funktionen im Bereich "Siehe auch" bei den Links zu den Funktionen an. Dort sind weitere Funktionen zu dem Thema zu finden.
  • in: PHP: Google Maps

    geschrieben von pjhimself

    Ich vermute mal, dass dein Problem darin liegt, dass du da fälschlicher Weise $-Zeichen vor die Eigenschaften geschrieben hast.

    Ändere das Ganze mal zu:
    $this->address = $geoData->addressField;
    $this->city = $geoData->cityField;
    $this->state = $geoData->stateField;
    $this->country = $geoData->countryField;
    $this->zipcode = $geoData->zipcodeField;
    $this->latitude = $geoData->latField;
    $this->longitude = $geoData->lngField;
    return true;


    Dann sollte (zumindest damit) eigentlich kein Problem mehr bestehen bzw. zumindest diese Fehlermeldung (an dieser Stelle) ausbleiben.
  • in: MySQL-result variable öfter in mysql_fetch_assoc()

    geschrieben von pjhimself

    Also ich verstehe deine Frage so, dass du deine Variable $result, welche du als Ergebnis der Funktion mysql_query erhälst, über die Funktion mysql_fetch_assoc einen neuen Wert übergeben willst und dann noch ein weiteres Mal den nächsten Wert aus dieser Variable auslesen möchtest.

    Keine Ahnung, ob das so in etwas das trifft, was du gerne machen würdest.

    Falls ja, dann ist da ein kleiner Denkfehler an sich enthalten. Wie von sandrock-jonas bereits erwähnt, handelt es sich bei dem Ergebnis der Funktion mysql_query und somit dem Inhalt der Variable $result um eine Referenz auf eine Ressource, von wo die Daten erst ausgelesen werden müssen.

    Dies kann man beispielsweise mit der Funktion mysql_fetch_assoc machen. Es gibt aber auch noch andere, alle mit mysql_fetch_*** beginnend. Alle diese Funktionen geben dir ein Array zurück, welches eine Ergebniszeile deines SQL-Queries darstellt und geht dabei von oben nach unten vor. (Es gibt auch Funktionen, die kein Array zurückgeben, welche hier aber mal bei Seite lassen möchte.) assoc steht dabei für assoziativ, d.h. du erhälst also ein assoziatives Array, bei dem die Schlüssel die Spalten-Namen des SQL-Ergebnisses sind und die Werte die Inhalte innerhalb der Spalten innerhalb der gerade ausgelesenen Zeile.

    Mit jedem erneuten Aufruf der Funktion zu solch einem SQL-Ergebnis erhälst du eine weitere Zeile von deinem Ergebnis.

    Möchtest du also alle deine Ergebniszeilen in ein Array einlesen, dann wäre das bspw. wie folgt möglich:
    $query = '...'; // hier deine Abfrage
    $result = @mysql_query($query);
    
    $entries = array();
    while ($row = @mysql_fetch_assoc($result)) {
            $entries[] = $row;
    }
    @mysql_free_result($result);

    Natürlich könntest du auch auf die Daten deines assoziativen Arrays $row dort dann zugreifen und verarbeiten, wie du es brauchst. In dem Beispiel werden sie einfach nur gesammelt, wie sie durch die Abfrage gegeben sind. Zugreifen kannst du auf die einzelnen Spalten, wie es bei my-selfmade bereits im Code steht, über $row['spaltenname'].

    Möchtest du wirklich nur zwei Ergebniszeilen auslesen, kannst du das auch gern so machen:
    $result1 = @mysql_fetch_assoc($result);
    $result2 = @mysql_fetch_assoc($result);

    (Wobei eine solche Benennung wohl nicht wirklich zu empfehlen ist, man das Ganze schon eindeutiger und sinnvoller gestalten sollte. Hab das jetzt nur von deinem $result2 abgeleitet.)
  • in: mysql eintrag problem

    geschrieben von pjhimself


    Warum nimmst du nicht einfach username als Primärschlüssel? Das hätte auch gleichzeitig den Effekt, dass jeder nur einmal innerhalb der Tabelle existieren kann. Eventuell hast du das bisher über die Deklaration als unique gelöst, aber unique + not null = primary key ;)


    Ein String als Primärschlüssel ist schlecht! Primärschlüssel sollten int werte sein damit Sie ohne Probleme in anderen Tabellen als Fremdschlüssel/Foreign Key verwendet werden können. Das heißt arbeitet man mit 2 verknüpften Tabellen, hat man zb.: 2 mal den user: "Hans" arbeitet man mit zahlen hat man diesen nur einmal, und in der anderen tabelle lediglich den "Fremdschlüssel" z.b: 1.

    Das würde sich schon bei wenigen usern auf die Datenbank größe auswirken und ebenso auf die performance des sql servers. Da ein computer schneller nach einer zahl suchen kann als einen string zu vergleichen.

    Das stimmt nicht! Wenn du ein DBMS nutzt, welches das FOREIGN KEY-Constraint richtig unterstützt, dann ist das völlig egal. MySQL unterstützt Fremdschlüssel jedoch nur beim InnoDB-Engine. Fremdschlüssel sind nur Referenzen, alles andere wäre auch Blödsinn bei der Erschaffung dieser gewesen. Diese Referenzen verweisen dann auf die wirkliche Werte, so dass diese nicht doppelt abgespeichert werden müssen.

    Solltest du natürlich Fremdschlüssel nicht zur Verfügung stehen haben wie bei MySQL bis auf InnoDB, dann magst du recht haben, dass dort das Ausweichen auf künstliche Schlüssel als Primärschlüssel günstiger sein kann, wenn man diese Fremdschlüssel-ähnlich verwenden möchte.

    Aber grundsätzlich ist deine Behauptung / Vermutung falsch.
  • in: phpMyAdmin Fehler

    geschrieben von pjhimself


    Ist das völlig egal, ob man den Primärschlüssel direkt an die Spalte schreibt, die zum Primärschlüssel gemacht werden soll, oder ob man das erst unten einträgt?


    Grund: Grammatikfehler


    Grundsätzlich ist zumindest in MySQL beides möglich. Richtig bzw. bevorzugt ist aber eigentlich die Schreibweise am Ende, welche auch mehr Sinn macht, speziell, wenn man mehrere Spalten als ein Primärschlüssel definieren möchte.

    Auch nachzulesen in der MySQL-Referenz. Grundsätzlich kommen zunächst die Definitionen der Spalten, gefolgt von den Constraints, wie bspw. PRIMARY KEY, INDEX, UNIQUE, etc.

    Jedoch sollte bei diesen Constraints darauf geachtet werden, dass MySQL (noch) nicht den gesamten SQL-Standard unterstützt, aber versucht, so gut wie möglich kompatibel zu sein und ignoriert dann einfach nicht unterstützte Elemente. Ein Beispiel dafür wäre das CHECK-Constraint.

    Hier die Definition aus der MySQL-Referenz:
    [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)
    (Alles in eckigen Klammern sind optionale Elemente.)


    Zu den künstlichen Schlüsseln:
    Klar sollte sein, dass man in einem guten Datenbankdesign so wenige künstliche Schlüssel wie möglich verwenden sollte. Also nur dann, wenn es nicht anders geht.

    Diese erscheinen vielleicht einfacher zu händeln, sind aber nur zusätzliche und unnötige Daten in der Datenbank. Selbst wenn man zum Beispiel einen String als Primärschlüssel verwendet und ihn dann später als Fremdschlüssel nutzen möchte, so ist dies auch überhaupt kein Problem, da dieser Fremdschlüssel (in der Regel) nur eine Referenz auf das eigentliche Datum ist - alles andere wären nur redundante Daten, was man ja vermeiden möchte.

    Dazu sollte man aber auch erwähnen, dass MySQL nur im InnoDB-Engine den FOREIGN KEY-Constraint unterstützt. In späteren Versionen wird sich das vielleicht noch ändern, wer weiß das schon genau, jedoch sind innerhalb von MySQL da noch an der ein oder anderen Stelle ein paar Sachen zu beachten.

    Nutzt man dort eine andere Engine, könnte man schon auf Grund der geringeren Speichergröße auf künstliche Schlüssel ausweichen, sollten sie als Fremdschlüssel bzw. zum in Beziehung setzen (sind ja dort keine wirklichen Fremdschlüssel) verwendet werden .


    Wie mehrfach erwähnt, gibt es derzeit noch einige Lücken in MySQL, wodurch man da an ein paar Stellen ein wenig aufpassen muss. Die MySQL-Refernenz hilft da aber mit Sicherheit weiter, welche unter http://dev.mysql.com/doc/ zu finden ist (in Deutsch bisher bis zur Version 5.1, 6.0 wird sicherlich noch folgen).
  • in: phpMyAdmin Fehler

    geschrieben von pjhimself

    AUTO_INCREMENT-Felder müssen Primärschlüssel sein, da im Allgemeinen die Regel gilt:
    UNIQUE + NOT NULL = PRIMARY KEY

    Dies wird bei einer AUTO_INCREMENT-Spalte auch erfüllt, da automatisch der nächste noch nicht verwendete Wert genutzt wird und sie so auch auf keinem Fall den Wert NULL annehmen kann.

    Es sollte eigentlich auch generell logisch erscheinen, dass man AUTO_INCREMENT nur bei Primärschlüsseln, genauer bei künstlichen Primärschlüsseln verwendet. Diese verwendet man sowieso nur dann, wenn man kein anderes Feld für den Primärschlüssel verwenden kann oder diese allein nicht ausreichen.

    Definieren kannst du Primärschlüssel über PRIMARY KEY (spalten). Für spalten kann man alle zum Primärschlüssel gehörigen Spalten durch ein Komma getrennt einsetzen.

    Speziell auf deine Tabelle angewandt, würde der SQL-Query dann wie folgt aussehen:
    CREATE TABLE mails (
      id INT NOT NULL AUTO_INCREMENT,
      user VARCHAR(50) NOT NULL,
      titel VARCHAR(50) NOT NULL,
      nachricht TEXT NOT NULL,
      von VARCHAR(50) NOT NULL,
      an VARCHAR(50) NOT NULL,
      PRIMARY KEY (id)
    );

  • in: mysql eintrag problem

    geschrieben von pjhimself

    beim select fehlt da nicht ein '%', warum vergleichst du nicht direkt die user names: Select...From WHERE username = '$username'
    Die %-Zeichen dienen als Wildcard / Platzhalter für andere Zeichen. Sofern er nicht alle Benutzer finden möchte, die den Inhalt von $username enthalten, braucht er die Wildcards nicht zu benutzen. Wie auch schon jemand anderem erwähnt, kann man in diesem Fall auch einfach nur einen Vergleich per = machen, also username = '$username'.

    Versuch mal deine SQL-Statements in dieser Art und Weise zu schreiben:
    [ code]
    <?
    $trag = "SELECT id FROM user WHERE username LIKE '" . $username . "'";
    ?>
    [ /code]
    Das ist nicht notwendig, da Variablen innerhalb von mit "-Zeichen deklarierten Stringketten ersetzt werden. Aus Performanz-Gründen könnte man jedoch auch die nachfolgende Variante verwenden:
    'SELECT id FROM user WHERE username LIKE "'.$username.'"'


    Um ein Anführungszeichen in der Echo-Funktion zu nutzen, wie in der nachfolgenden Zeile, musst du die Anführungszeichen mit einem Backslash escapen, was dann in etwa so aus sieht:
    [ code]
    <?
    if($passwort != $passwort2 OR $username == "" OR $passwort == "" )
    {
    echo "Eingabefehler. Bitte alle Felder korekt ausfüllen. <a href="eintragen.htm">Zurück</a>";
    exit;
    }
    ?>
    [ /code]
    Sonst wird das so interpretiert, als würde beim Anführungszeichen die Zeichenkette aufhören
    Prinzipiell richtig, jedoch empfiehlt es sich in solchen Fällen die Verwendung der Stringdeklarationszeichen umzukehren, um sich so das Escapen zu ersparen.

    Im Allgemeinen empfiehlt es sich sowieso, eher die '-Zeichen zu verwenden anstatt die "-Zeichen, da bei Stringketten, welche mit letzterem deklariert werden, immer nach zu ersetzenden Variablen gesucht wird. Auch $-Zeichen muss man nicht escapen, weil sie hier keinen besonderen Zweck erfüllen.

    Es kann auch sein, dass es einfach nicht funktioniert, weil du unbewusst bei phpMyAdmin eingeloggt bist, dann kannst du nichts eintragen.
    Stimmt mit Sicherheit nicht. Ich bin oft in Testphasen nebenher dort eingeloggt, um gleich bspw. die Ergebnisse zu überprüfen.

    [ code]
    $trag = "SELECT id FROM user WHERE username LIKE `$username`";
    [ /code]
    also mit actens dann kommt Unknown column 'Ironmantiger' in 'where clause' -->1

    aber es sollte doch nur schauen ob es diesen gibt.
    Das funktioniert nicht, da du hier deinen eingefügten Benutzernamen nicht als Stringkette sondern als Tabellenspalte deklarierst. Du musst dort einfach nur die `-Zeichen durch '-Zeichen ersetzen.

    Noch ein kleiner Tipp: Schreibe vor den mysql-Funktionen ein @-Zeichen (also z.B. @mysql_connect), wenn du eigene Fehlermeldung (wie bei dir durch die die()-Funktion) haben möchtest. Über dieses Zeichen unterdrückst du das Werfen von Meldungen und kannst dir so problemlos und schön deine eigenen zusammensetzen.

    @itasworld: Zumindest bei dem Problem zu seinem Beitrag davor wohl an dem, was ich dazu geschrieben habe, also an der Verwendung von `-Zeichen anstatt von '-Zeichen.

    Ansonsten dürfte das Problem an:
    $menge = mysql_num_rows($result)or die( mysql_error());
    liegen bzw. gelegen haben, da das Ergebnis der Funktion auch den int-Wert 0 annehmen kann, was als FALSE interpretiert wird und somit die Ausführung der die()-Funktion auslöst bzw. auslöste.

    Diesen Fehler hat er aber durch die Verwendung von deinem Code nicht mehr drin.

    Allgmein könntest du dir diese ganze Überprüfung auch sparen. Das macht grundsätzlich sowieso nur Probleme. Man bedenke die Nebenläufigkeit.
    Wenn zwei verschiedene Nutzer den selben Benutzernamen neu erstellen wollen, beide durch diese Überprüfung kommen, aber der Benuternamen beim zweiten Anlegen dann plötzlich doch schon vorhanden ist.

    In diesem Fall würde er bei dir beide anlegen. Dies liegt auch zum einen an deinem recht problematischen Tabellendesign (was ich mir aus den gegeben zusammengedacht habe, Abweichungen also möglich ;)). Du hast bei dir eine ID als Primärschlüssel, den du per auto-increment erstellst.

    Warum nimmst du nicht einfach username als Primärschlüssel? Das hätte auch gleichzeitig den Effekt, dass jeder nur einmal innerhalb der Tabelle existieren kann. Eventuell hast du das bisher über die Deklaration als unique gelöst, aber unique + not null = primary key ;)

    Dann könntest du das auch einfach so machen:
    $insertQuery = 'INSERT IGNORE INTO user'
            . ' (username, passwort, hp, mail, icq)'
            . " VALUES ('$username', '$passwort', '$hp', '$mail', '$icq')";
    @mysql_query($insertQuery)
            or die('Fehler beim Speichern des Benutzernames. <a href="eintragen.htm">Zurück</a>');
    
    $rows = @mysql_affected_rows($verbindung);
    if (@mysql_errno()) {
            die('Fehler bei der Überprüfung: '.@mysql_errno().' - '.@mysql_error());
    }
    
    if ($rows > 0) {
            echo 'Benutzername <b>'.$username.'</b> wurde erstellt. <a href="index.php?seite=login">Login</a>';
    }
    else {
            echo 'Benutzername schon vorhanden. <a href="eintragen.htm">Zurück</a>';
    }
    Beachte hierbei das IGNORE, da sonst Fehler beim Versuch, doppelte Einträge hinzuzufügen, ausgeworfen werden.
    Hier versucht er einfach, die Zeile einzufügen. Ist dies nicht möglich, wird sie auch nicht eingefügt. Anschließend wird überprüft, wie viele Zeilen eingefügt wurden bzw. genauer wie viele verändert wurden. Erhälst du hier 0, also das keine Zeile eingefügt wurde, weißt du automatisch, dass der Benutername schon existierte.

    PS: Noch ein paar kleine Rechtschreibfehler:
    Zeile 14: korekt => korrekt
    Zeile 33: Benutzernames => Benuternamens

    btw: Passwort auf Englisch wird password also mit d am Ende geschrieben (nur, weil du ansonsten englische Bezeichner bei deiner Tabelle verwendet hast)
  • in: Gute Softwarequalität - Woran erkennt man instinktiv eigentlich gute Software/Scripte?

    geschrieben von pjhimself

    Ich stimme da evil-devil zu.
    Einfache Nutzer ohne jegliche Programmierkenntnisse können mit Code nichts anfangen und werden daran sicherlich nicht die Qualität eines Skriptes messen. Eine einfache Beschreibung über die Benutzung, viele bzw. gebrauchte Features werden da die Kriterien sein.

    Für Programmierer, die nur keine PHP-Kenntnisse haben, macht sicherlich ein sauberer und gut kommentierter Code einen guten Eindruck.

    Für Leute, die den Code verstehen, ist sicherlich auch ein sauberer und gut kommentierter Code wichtig, gerade für das Verständis. Ein Code sollte auch gut strukturiert und möglichst nach dem DRY-Prinzip geschrieben sein - dh, mit möglichst wenig Redundanz. Auch das KISS-, MAYA-Prinzip und ähnliches sollte möglichst beachtet werden.

    Ansonsten finde ich es noch wichtig, dass man im Code möglichst Englisch verwendet anstatt vielleicht die eigene Muttersprache. Dadurch wird es international nutzbar, kann auch durch Leute aus anderen Sprachumgebungen leicht verstanden, verwendet oder weiterentwickelt werden. Darunter fasse ich allerdings nicht nur die Kommentare, sondern auch alle möglichen Bezeichner.

    Außerdem werden PHP-kundige Leute vermutlich auch auf verschiedene speziellere Punkte achten, von denen es sicherlich einige gibt.
  • in: Timestamp und MySQL Meckert.

    geschrieben von pjhimself

    Außerdem musst du innerhalb des SQL-Befehls andere Anführungszeichen verwenden.
    Stimmt nicht, denn man kann beide Anführungszeichen problemlos verwenden. Ich verwende aus verschiedenen Gründen innerhalb für PHP fast immer die Apostrophs für Strings, weshalb sich da automatisch die normalen Anführungszeichen ergeben, aber auch nicht immer.


    Zum Thema: Warum setzt du nicht DEFAULT CURRENT_TIMESTAMP, dann musst du das überhaupt nicht mehr selbst setzen und es wird immer automatisch der aktuelle verwendet.

    Außerdem kannst du noch das Attribut ON UPDATE CURRENT_TIMESTAMP nutzen, um diesen TIMESTAMP immer auf den letzten Änderungszeitpunkt setzen zu lassen.

    Außerdem bietet sich auch die SQL-Funktion NOW() an (Synonyme: CURRENT_TIMESTAMP, CURRENT_TIMESTAMP()).

    Die Funktion UNIX_TIMESTAMP() ergibt bei mir immer den Wert 0000-00-00 00:00:00, also für Spalten vom Typ TIMESTAMP wohl eher ungeeignet. (Vermute aber mal, dass du diesen Typ benutzt).

    Edit:
    Genau das, was mein Nachredner geschrieben hat, wollte ich mit meinem letzten kleinen Absatz ausdrücken. Der von evil-devil angeführte SQL-Befehl UNIX_TIMESTAMP() ist für den Typ TIMESTAMP nicht geeignet, dafür müsste INT UNSIGNED oder ähnliches verwendet werden. Leider kann man nicht erkennen, welcher Typ verwendet werden soll. Ich würde sicherlich zum Typ TIMESTAMP raten, auch auf Grund der zuvor angeführten Möglichkeiten.

    Beitrag geändert: 15.8.2008 2:21:03 von pjhimself
  • in: Suche Ettinlist (PHP script)

    geschrieben von pjhimself

    laut einem etwas älteren Forumspost, das ich gefunden habe, wird bzw. wurde dieses Script auf der Seite http://www.zuendeleien.de/ verwendet. Nimm doch einfach dort mal mit der Autorin Kontakt auf. Vielleicht kann sie es dir geben.

    ansonsten könntest du vielleicht unter http://www.phparchiv.de/ nach einem Script suchen, was ähnliches leistet.
  • in: Remote MySQL-Zugriff

    geschrieben von pjhimself

    Ich habe leider irgendwie Probleme, remote auf meine Datenbank zuzugreifen bzw. es scheitert bereits bei dem Verbindungsaufbau zum Server. (per mysql_connect)

    Ich bekomme als Fehlermeldung (per mysql_error):
    * Lost connection to MySQL server at 'reading initial communication packet', system error: 110

    und als Fehlernummer (per mysql_errno): 2013

    Aus dem MySQL-Manuel:
    * Error: 2013 (CR_SERVER_LOST)
    Message: Lost connection to MySQL server during query
    wobei eher Folgendes passen würde (und wohl auch passt):
    * Error: 2055 (CR_SERVER_LOST_EXTENDED)
    Message: Lost connection to MySQL server at '%s', system error: %d


    Ich hatte auch bereits schon mal von einem anderen Ort aus remote auf eine meiner Datenbanken zugegriffen - ohne Probleme, ist jedoch auch schon eine ganze Weile her. Komm irgendwie derzeit nicht dahinter, was das Problem sein könnte. Normalerweise sollten ja Remote-Zugriffe funktionieren.

    Hoffe, dass vielleicht irgendjemand eine Idee hat.


    Edit:

    Mittlerweile vermute ich, dass es wohl nicht an lima sondern an dem anderen Space liegt.

    Frag mich nur, was dort das Problem sein könnte. Apache-Einstellung, ...

    Bin da für jede Idee dankbar.

    Beitrag geändert: 14.8.2008 21:25:25 von pjhimself
  • in: MySQL-Tabelle anlegen

    geschrieben von pjhimself

    hmm.. deine Informationen lassen jetzt noch nicht viel Einblick in dein Problem bzw. deren Ursache(n) gewinnen.

    wie bzw. wo möchtest du denn die Tabellen anlegen? ich nehme mal an, dass du schon die ersteigerte Datenbank als Ziel ausgewählt hast (z.B. per mysql_select_db) und nicht innerhalb deines CREATE-Statements irgendwelche Schematas oder Datenbanken als Ziel auswähltst oder sonstiges. Könnte jedenfalls eine mögliche Fehlerquelle sein, wenn du versuchen solltest auf eine andere Datenbank oder den Server zuzugreifen, da du dort natürlich keine Zugriffsrechte hast - halt nur für deine Datenbank.

    ansonsten könntest du nochmal dein CREATE-Statement hier posten, damit man dort vielleicht noch irgend eine mögliche Ursache finden kann.
  • in: hiddenfeld problem

    geschrieben von pjhimself

    da es mit Editieren nicht geklappt hat und ich nur weiße Seite bekommen hab.. hier halt als neuer Beitrag:

    Hier mal etwas strukturierter: ;)
    <?php
            $link = @mysql_connect(\'localhost\', \'root\', \'\') or die(\'Keine Verbindung moeglich\');
            @mysql_select_db(\'leihsystem\') or die(\'Die Datenbank existiert nicht\');
    ?>
    <body bgcolor=\"#663333\" text=\"#FFCC99\" link=\"#FF9966\" vlink=\"#FF9900\" alink=\"#FFFFFF\">
            <h1 align=\"center\">
                    <u>Ger&auml;te Reservierung</u>
            </h1>
            <h3 align=\"left\">Bitte folgendes Formular ausf&uuml;llen!!</h3> 
            <form action=\"Leihsystem2.php\" method=\"post\">
                    <table>
                            <tr>
                                    <td>Name:</td>
                                    <td>
                                            <input name=\"Name\" size=\"30\" maxlength=\"100\">
                                    </td>
                            </tr>
                            <tr>
                                    <td>Von Datum:</td>
                                    <td>
                                            <input name=\"Datum1\" size=\"30\" maxlength=\"30\">
                                    </td>
                            </tr>
                            <tr>
                                    <td>Von Zeit:</td>
                                    <td>
                                            <input name=\"Zeit1\" size=\"30\" maxlength=\"30\">
                                    </td>
                            </tr>
                            <tr>
                                    <td colspan=\"2\">
                                            <h4>Aktuelles Datum und Uhrzeit: <?=date(\'d.m.Y - H:i\'); ?> Uhr</h4>
                                    </td>
                            </tr>
                            <tr>
                                    <td>Bis Datum:</td>
                                    <td>
                                            <input name=\"Datum2\" size=\"30\" maxlength=\"30\">
                                    </td>
                            </tr>
                            <tr>
                                    <td>Bis Zeit:</td>
                                    <td>
                                            <input name=\"Zeit2\" size=\"30\" maxlength=\"30\">
                                    </td>
                            </tr>
                            <tr>
                                    <td>Geraet:</td>
                                    <td>
                                            <select name=\"Geraet\" size=\"1\">
                                                    <option>Bitte w&auml;hlen sie ein Ger&auml;t aus..</option> 
                                                    <option>Beamer</option>
                                                    <option>Laptop</option>
                                            </select>
                                    </td>
                            </tr>
                            <tr>
                                    <td>Raum:</td>
                                    <td>
                                            <input name=\"Raum\" size=\"30\" maxlength=\"30\">
                                    </td>
                            </tr>
                            <tr>
                                    <td>Bemerkung:</td>
                                    <td>
                                            <input name=\"Bemerkung\" size=\"100\" maxlength=\"100\">
                                    </td>
                            </tr>
                            <tr>
                                    <td></td>
                                    <td>
                                            <input type=\"submit\" value=\"Absenden\">
                                            <input type=\"reset\" value=\"Zur&uuml;cksetzen\">
                                    </td>
                            </tr>
                    </table>
                    <input type=\"hidden\" name=\"hidden\" value=\"hidden\">
            </form>
    <?php 
            $Name = $_POST[\'Name\'];
            $Datum1 = $_POST[\'Datum1\'];
            $dat1 = explode (\'.\', $Datum1);
            $Zeit1 = $_POST[\'Zeit1\'];
            $time1 = explode (\':\', $Zeit1);
            $Datum2 = $_POST[\'Datum2\'];
            $dat2 = explode (\'.\', $Datum2);
            $Zeit2 = $_POST[\'Zeit2\'];
            $time2 = explode (\':\', $Zeit2);
            $Geraet = $_POST[\'Geraet\'];
            $Raum = $_POST[\'Raum\'];
            $Bemerkung = $_POST[\'Bemerkung\'];
    
            if (hidden == \'hidden\')
            {
                    if ($Name == \'\')
                    {
    ?>
            <p>Bitte geben Sie ihren Namen ein!</p>
    <?php
                    }
                    if ($Datum1 == \'\')
                    {
    ?>
            <p>Bitte geben Sie das Ausleihdatum ein!</p>
    <?php
                    }
                    if ($Zeit1 == \'\')
                    {
    ?>
            <p>Bitte geben sie die Ausleihzeit an!</p>
    <?php
                    }
                    if ($Datum2 == \'\')
                    {
    ?>
            <p>Bitte geben sie Das Rückgabedatum an!</p>
    <?php
                    }
                    if ($Zeit2 == \'\')
                    {
    ?>
            <p>Bitte geben Sie die Rückgabezeit an!</p>
    <?php
                    }
                    if ($Geraet == \'Bitte wählen sie ein Gerät aus..\')
                    {
    ?>
            <p>Bitte wählen sie ein Gerät aus!</p>
    <?php
                    }
                    if ($Raum == \'\')
                    {
    ?>
            <p>Bitte geben Sie einen Raum an!</p>
    <?php
                            die(\'\');
                    }
    
                    $timestamp1 = mktime($time1[0],$time1[1],0,$dat1[1],$dat1[0],$dat1[2]);
                    $timestamp2 = mktime($time2[0],$time2[1],0,$dat2[1],$dat2[0],$dat2[2]); 
    ?>
            <h2 align =\"left\">
                    <u>&Uuml;berblick der Daten</u>
            </h2>
            <table border=\"1\" align=\"left\">
                    <tr>
                             <th>Name</th>
                             <th>Datum1</th>
                             <th>Zeit1</th>
                             <th>Datum2</th>
                             <th>Zeit2</th>
                             <th>Geraet</th>
                             <th>Raum</th>
                             <th>Bemerkung</th>
                     </tr>  
    <?php
                    $eintrag  = \'INSERT INTO leihdb (Name, vomts,bists, Geraet, Raum, Bemerkung) \';
                    $eintrag .= \'VALUES (\"\'.$Name.\'\",\"\'.$timestamp1.\'\",\"\'.$timestamp2.\'\",\"\'.$Geraet.\'\",\"\'.$Raum.\'\",\"\'.$Bemerkung.\'\")\';
                    $eintragen = @mysql_query($eintrag);
    
                    $abfrage = \'SELECT * FROM leihdb\';
                    $ergebnis = @mysql_query($abfrage);
    
                    while ( $row = @mysql_fetch_assoc($ergebnis) )
                    {
    ?>
                    <tr>
                            <td><?=$row[\'Name\']; ?></td>
                            <td><?=date(\'d.m.Y\', $row[\'vomts\']); ?></td>
                            <td><?=date(\'H:i\', $row[\'vomts\']); ?></td>
                            <td><?=date(\'d.m.Y\', $row[\'bists\']); ?></td>
                            <td><?=date(\'H:i\', $row[\'bists\']); ?></td>
                            <td><?=$row[\'Geraet\']; ?></td>
                            <td><?=$row[\'Raum\']; ?></td>
                            <td><?=$row[\'Bemerkung\']; ?></td>
                    </tr>
    <?php
                    }
    ?>
            </table>
    <?php
            }
            /* close database connection */
            @mysql_close($link);
    ?>

    Hier bekommst du das ganze auch nochmal her:
    http://pjhimself.lima-city.de/73630.php.txt (Format: UNIX - ANSI, sollte aber keine große Rolle spielen)

    Was ich an Fehlern etc ad-hoc gesehen habe, habe ich auch gleich angepasst. Da hier natürlich das Ende und ein Teil des Anfangs fehlt, musst du halt gucken, inwiefern es in deinen Code passt.

    Noch was grundsätzliches: Du solltest am Anfang einer HTML-Seite (und das wird auch bei PHP generiert ;) ) immer eine Doctype-Deklaration haben (Transitional, Strict, ..). Außerdem verwendest du einige Attribute, die nicht bei allen Doctypes erlaubt sind und gegebenfalls ins CSS verlagert werden müssten (bspw. align). Schick deine Seite doch auch mal durch den HTML-Validator der W3C (innerhalb von Notepad++ kannst du den Inhalt deiner Seite gleich dorthin schicken lassen).
  • in: hiddenfeld problem

    geschrieben von pjhimself

    du benutzt Notepad++ ?? der Code sieht irgendwie teilweise automatisch erzeugt aus mit irgendwelchen komischen Programmen^^

    benutze selbst Notepad++

    jedoch: Bevor ich dir da wirklich helfen kann, musst du deinen Code schon ein wenig aufräumen und strukturieren. Mir fehlt die Zeit, das auch noch zu machen ;)

    Was mir aber schon aufgefallen ist, dass du da ein paar unschöne Codezeilen und Überschneidungen bei hast. So hast du beispielsweise an ein paar Stellen Start-Tags vor einem If-Block und den dazugehörigen End-Tag innerhalb dieses If-Blocks. Das solltest du auf jeden Fall auch ändern, so dass der Code auch unabhängig von der Bedingung funktioniert.

    Was die schließende Klammer anbelangt.. wenn man deinen Code so nimmt wie er da steht, könntest du die einfach ans Ende stellen, da erhälst du keine Fehlermeldung. Jedoch handelt es sich ja bei deinem Code um einen Ausschnitt. Somit musst du die passende Stelle schon in deinem Code suchen. Auf jeden Fall sollte diese Stelle nach dem table-End-Tag liegen, welche ja hier auch nicht mehr zu sehen sind.

    Poste doch nochmal eine bereinigte und besser strukturierte Variante deines Codes, dass man auch einen besseren Überblick hat. So wird es allen schwer fallen, dir da helfen zu können. Berherzige auch die Tipps meines letzten Beitrags.
    Das hat auch nix mit PHP oder irgendeiner anderen Sprache zu tun, sondern sollte doch allgemein immer gemacht werden ;) Spätestens, wenn du nach längerer Zeit mal wieder in deinen Code guckst und/oder dort etwas verändern möchtest, wirst du sonst kaum durchblicken können. Und wir haben den Code auch nicht mal geschrieben ;)

    Eventuell siehst du es ja dann auch selbst.
  • in: hiddenfeld problem

    geschrieben von pjhimself

    die Fehler hast hast du in dem Code von Gerate.php in den Zeilen 23 und 28

    ein String ist eine Zeichenkette, welche du in PHP entweder mit \' oder \" einschließt. Dadruch, dass beides möglich ist, kannst du dann das andere Zeichen innerhalb des Strings benutzen. Ansonten kannst musst du die escapen (mit vorangestelltem Backslash, zB \\\").

    außerdem sollt ich vielleicht noch hinzufügen, dass das mit Verknüpfung der Funkionen etwa blöd ausgedrückt war^^

    allgemein: die Funktion echo gibt einen String/eine Zeichenkette aus, alternativ kann dafür auch print() verwendet werden, macht aber kaum Unterschied. genauere Infos kannst du dir bspw unter http://de2.php.net durchlesen

    dh: du brauchst dort kein OR die(), wenn die Funktion nicht funktioniert/scheitert, hast du eh nen Problem^^ OR die() verwendet man zB bei Funktionen aus der SQL-Sparte, wie du es ja auch machst.


    @bratwurstmitkruste:

    Bitte schreib deinen Code doch mal etwas ordentlicher um ;) da kann man kaum durchsehen.

    ein paar kleine Tipps:
    - es fehlen verschiede Endtags, zB oft </p>
    - der Starttag <h4> fehlt u.a.
    - die meisten der <br>-Tags sind bestimmt überflüssig
    - selbiges gilt für die nbsp-Entitäten
    - Entferne Stellen wie ?><?php
    - PHP-Code kann in den HTML-Code eingestreut werden, dh, du kannst u.a. auch folgendes machen (als simples Beispiel):
    <?php
    if ( Bedingung )
    {
    ?>
        <h1>Überschrift 1</h1>
    <?php
    }
    else
    {
    ?>
        <h1>Überschrift 2</h1>
    <?php
    }
    ?>

    - außerdem: Entgegen dem, was du geschrieben hast, ist die letzte schließende Klammer nicht zu \'if (hidden ==...\' gehörig, sondern zu der while-Schleife unten, es fehlt also eine schließende Klammer unten
    -> mit einem guten Editor wär dir das auch schnell aufgefallen ;)
    - zum Ausrichten/Formatieren von Forumlaren kannst du sehr gut Tabellen innerhalb des Formulars verwenden und so Texte und dazugehörige Eingabefelder entsprechend deinen Wünschen positionieren

    PS: Du hast zur Konkatenation von String , anstatt . verwender, auch ein Fehler
    echo $datum.\" - \".$uhrzeit.\" Uhr\";


    Beitrag geändert: 10.4.2008 21:32:32 von pjhimself
  • in: hiddenfeld problem

    geschrieben von pjhimself

    das Problem mit der 1 liegt daran, dass du
    echo \"ein String\" or die(\"oder hier Abbrechen\");

    schreibst. Er wird dir da immer 1 zurückgeben. Es ist wie eine logische Verknüpfung der beiden Funktionen.

    weiß auch gar nicht, wozu du dort die() brauchst.

    schreib einfach nur >> echo \"Test\"; << dann solltest du da weiter kommen ;)
  • in: Tabelle erstellen

    geschrieben von pjhimself

    also, ich vermute mal, dass du dir das in der Form vorgestellt hast, dass du eine Eingabemaske hast, wo die Ergebnisse eingegeben werden, welche dann zB in einer SQL-Datenbank gespeichert werden (sofern die einzelnen Ergebnisse auch benötigt werden) und dann eine weitere, welche die Übersichtstabelle abbildet. Dort werden einfach nach dem Eintragen der Spielergebnisse dem Gewinner-Team die entsprechenden Punkte hinzugefügt bzw bei einem Unentschieden halt beiden Teams.

    Beispielsweise könnte so ein Formular für eine Seite eintragen.php aussehen:
    <form action=\"eintragen.php\" method=\"post\">
            <input type=\"hidden\" name=\"team_name1\" value=\"TeamName1\" />
            <input type=\"hidden\" name=\"team_name2\" value=\"TeamName2\" />
            TeamName1
            <input type=\"text\" size=\"1\" name=\"team1\" />
            :
            <input type=\"text\" size=\"1\" name=\"team2\" />
            TeamName2
            <input type=\"submit\" value=\"Eintragen\" />
    </form>


    Die hidden-Felder dienen zur Übertragung des Teamnamens, die text-Felder für die Ergebnisse. Davon müsste dann entsprechend ein Forumular pro Spiel vorhanden sein, welches noch nicht eingetragen ist. Die könntest du beispielsweise auch über PHP automatisch erstellen lassen.

    Du ließt dann dort einfach die Werte aus der Variable $_POST aus und verarbeitest diese entsprechend, zB könnte so der Anfang dieser Seite eintragen.php aussehen:
    <?php
    
    function updateTable($team, $points)
    {
            $query  = \'UPDATE table \';
            $query .= \'SET points=points+\'+$points.\' \';
            $query .= \'WHERE team=\"\'.$team.\'\"\';
            $result = @mysql_query($query);
    }
    
    if ( isset($_POST[\'team1\']) && isset($_POST[\'team2\']) )
    {
            $team_name1 = $_POST[\'team_name1\'];
            $team_name2 = $_POST[\'team_name2\'];
    
            $goals1 = (int) $_POST[\'goals1\'];
            $goals2 = (int) $_POST[\'goals2\'];
    
            $draw = $goals1 == $goals2 ? true : false;
            $winner = $goals1 < $goals2 ? $team_name1 : $team_name2;
            
            /* connect to database */
            $link = @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD) OR die(\'Can not connect to database: \'.mysql_error());
            $db_selected = @mysql_select_db(MYSQL_DATABASE) OR die(\'Can not select database: \'.mysql_error());
            
            /* insert result */
            $query  = \'INSERT INTO results (team1, team2, goals1, goals2) \';
            $query .= \'VALUES(\"\'.$team_name1.\'\",\"\'.$team_name2.\'\",\'.$goals1.\',\'.$goals2.\')\';
            $result = @mysql_query($query);
            
            /* update table */
            if ( $draw )
            {
                    updateTable($team_name1, 1);
                    upddateTable($team_name2, 1);
            }
            else
                    updateTable($winner, 3);
            
            /* close connection to the database */
            @mysql_close($link);
    }
    
    ?>


    Diese Übersichttabelle, die ich hier einfach mal \"table\" genannt habe, musst du dann nur noch auslesen, was recht einfach zu lösen ist.

    bspw wie folgt:
    <?php
    
    /* connect to database */
    $link = @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD) OR die(\'Can not connect to database: \'.mysql_error());
    $db_selected = @mysql_select_db(MYSQL_DATABASE) OR die(\'Can not select database: \'.mysql_error());
    
    /* get table data */
    $query  = \'SELECT team,points \';
    $query .= \'FROM table \';
    $query .= \'ORDER BY points DESC, team ASC\';
    $result = @mysql_query($query);
    
    while( $row = @mysql_fetch_assoc($result) )
            $table[] = $row;
    
    /* close connection to the database */
    @mysql_close($link);
    
    ?>
    !DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/2002/REC-xhtml1-20020801/DTD/xhtml1-transitional.dtd\">
    <html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"de\" lang=\"de\">
    
    <head>
            <title>Liga-Tabelle</title>
    </head>
    
    <body>
            <table>
                    <thead>
                            <tr>
                                    <th>Mannschaft</th>
                                    <th>Punkte</th>
                            </tr>
                    </thead>
                    <tbody>
    <?php
    foreach ($table as $row)
    {
    ?>
                            <tr>
                                    <td><?=$row[\'team\']; ?></td>
                                    <td><?=$row[\'points\']; ?></td>
                            </tr>
    <?php
    }
    ?>
                    </tbody>
            </table>
    </body>
    
    </html>


    Das ist jetzt natürlich alles nur beispielhaft und noch nicht richtig ausgearbeitet.

    An die Stellen MY_HOST, MYSQL_USER, MYSQL_PASSWORD und MYSQL_DATABASE müssen dann natürlich auch deine Daten.


    Dies als Anregung zum Start. Musst dir halt genau überlegen, wie das alles aussehen soll und entsprechend dann anpassen, verwenden, ..

    Referenz zu PHP: http://de2.php.net/
    Referenz zu MySQL: http://dev.mysql.com/doc/
  • in: Formatierung von <objekt> funktioniert nicht.

    geschrieben von pjhimself

    der Internet Explorer macht leider öfters mal was er will. vielleicht kannst du ja bei Google einen Star-Hack zu deinem Problem finden, wirst ja bestimmt nicht der erste mit diesem Problem sein.

    ..und nur weil der IE/MS sich nicht den Standards beugen will, hat man wieder nur Stress^^
  • in: Formatierung von <objekt> funktioniert nicht.

    geschrieben von pjhimself

    das wird zum Teil daran liegen, dass bestimmte Eigenschaften bei dem Object-Tag nicht existieren.

    eine Übersicht über den Tag: http://www.w3schools.com/tags/tag_object.asp
    (auch, welche Eigenschaften bei welchem Doctype verwendbar sind)


    hier die von dir versuchten Styles vor der Validierung:
    <style type=\"text/css\">
    object
    {
            margin-left: 0px;
            margin-top: 0px;
            width:540px;
            height:490px;
            scrollbars: hidden;
            overflow:hidden;
            overflow-x: hidden;
            overflow-y: hidden;
    }
    </style>

    Ergebnis der Validierung:
    14      object  Die Eigenschaft scrollbars existiert nicht :  hidden
    16      object  Die Eigenschaft overflow-x existiert nicht in CSS level 2.1, aber in [css3] : hidden
    17      object  Die Eigenschaft overflow-y existiert nicht in CSS level 2.1, aber in [css3] : hidden
    
    Ihr validiertes Cascading Style Sheet:
    object {
            margin-left : 0;
            margin-top : 0;
            width : 540px;
            height : 490px;
            overflow : hidden;
    }



    Abgesehen von der Validierung des CSS kann es natürlich auch zu Problemen bei Eigenschaften kommen, die es bei deinem Doctype gar nicht gibt. Unter Selfhtml oder den Link oben gibt es dazu genauere Infos, welche wo verwendbar sind.

    Ich würde dir aber einfach raten, von XHTML Strict abzuweichen und für die Seite Transitional zu nehmen. Dort ist der iframe-Tag auch erlaubt.


    PS:
    HTML Validator: http://validator.w3.org/
    CSS Validator: http://jigsaw.w3.org/css-validator/
  • in: datetime Format umwandeln

    geschrieben von pjhimself

    mach es dir doch einfach:
    Bei der Speicherung von deinen Daten in der MySQL lässt du die Formatierung yyyy-mm-dd hh:mm:ss (Datumsschreibweise: \'Y-m-d H:i:s\'), da es zB u.a. bei Vergleichen besser geeignet ist.

    Beim Auslesen dieser lässt du dir das umwandeln per SQL-Query

    bswp:
    SELECT DATE_FORMAT(myDate, \"%d.%m.%Y %T\") AS myDate FROM table


    Eine weitere Möglichkeit wäre das PHP-basiert über das Datetime-Objekt zu machen:
    /* create DateTime-object */
    $dateTime = date_create($time);
    /* get formatted date-string */
    $new_time = $dateTime->format(\'d.m.Y H:i:s\');
    
    // alternativ:
    // $new_time = date_format($dateTime, \'d.m.Y H:i:s\');


    Es gibt auch noch ein paar andere Funktionen und Möglichkeiten, dies zu erreichen.
    (über date_parse() und viele mehr)

    Ich persönlich verwende die Variante über den SQL-Query. Das \"AS myDate\" ermöglicht dir dabei die normale Verwendung, als wenn es direkt ausgelesen wäre.


    Beitrag geändert: 1.4.2008 12:41:51 von pjhimself


    Beitrag geändert: 1.4.2008 12:42:39 von pjhimself
  • in: Zeitzone ändern

    geschrieben von pjhimself

    ja, auf lima-city.de ist es möglich, jedoch nicht überall.

    /* set timezone if available */
    if ( function_exists(\'date_default_timezone_set\') )
            date_default_timezone_set(\'Europe/Berlin\');


    Damit wird zunächst die Verfügbarkeit überprüft und dann eventuell ausgeführt. Gewählte Zeitzone ist die unsere, kann natürlich auch durch andere ersetzt werden. Welche Zeitzonen verfügbar/wählbar sind, kannst du unter http://de2.php.net/manual/en/timezones.php nachsehen.
    Dadurch wird die Zeitzone für alle nachfolgenden datumsbezogenen Operationen festgelegt.

    @karpfen: So einfach ist das auch wieder nicht ;) Dazu müsstest du erstmal wissen, unter welcher Zeitzone der Server läuft, welche Zeit der Server hat und welche Abweichung zu deiner gewünschten vorherrscht. Über die oben genannte Funktion stellst du die Zeitzone damit für alle nachfolgenden Sachen ein und hast keinen Stress weiter ;)
  • in: Session id\'s in php

    geschrieben von pjhimself

    du musst außerdem beachten, dass in allen Seiten dann am Anfang vor der ersten Ausgabe jeweils \"session_start();\" aufgerufen wird.
    diese Funktion startet eine neue Session, sofern eine alte nicht mehr vorhanden ist, oder nimmt eine alte Session wieder auf.

    Außerdem musst du dieser Seite die Session-ID auch übergeben (GET-/POST-Paramater \"PHPSESSID\", Cookie), bspw. als hidden-Feld in einem Formular. URL-kodiert ist auf Grund der dadurch entstehenden Sicherheitsmängel nicht unbedingt zu empfehlen, dh. auf die GET-Variante sollte eher verzichtet werden, musst du aber im Kontext deines Einsatzgebietes selbst entscheiden.
    Sofern Cookies aktiviert sind auf dem Client, wird die Session-ID auch dort hinterlegt und jeweils abgefragt. In diesem Fall wäre die Übergabe als Parameter nicht nötig. Verzichtet man jedoch darauf, ist die Wiederaufnahme der Session nicht garantiert.

    Weiterhin kannst du innerhalb der Session Inhalte in der Variable $_SESSION speichern, die die ganze Session über erhalten bleiben, erst dann verschwinden, wenn sie per unset() wie bspw \"unset($_SESSION[\'name\']);\" entfernt oder die Session über \"session_unset();\" und \"session_destroy();\" beendet wurde (zB bei einem Logout).


    Beitrag geändert: 1.4.2008 12:15:18 von pjhimself
  • in: \"Nachrichten\" per JS ect. an anderen Computer senden?

    geschrieben von pjhimself

    Also das beschriebenee Projekt wurde per JAVA geschrieben, also ein JAVA-Server der sich um alles kümmert. Jedoch hast du dann ja immernoch deine ständigen Abfragen, die zu diesem Zeitpunkt dort durch ständiges neuladen gekennzeichnet war (seehr nervend gewesen^^). Ich hab erst mit JAVA gearbeitet und dann mit PHP angefangen. Komm gut mit beidem klar ;)

    Zu deiner Frage: Eine Runde muss nicht begrenzt sein, dass liegt selbstverständlich zum einen am Spiel und dessen Regeln und zum anderen an deinen Wünschen, deiner Konzipierung, wie du dir das halt vorstellst.

    Du müsstest so oder so ständig abfragen. In welchem Abstand das Ganze dann gemacht wird/werden muss, hängt auch stark vom Spiel ab. Um die Ressourcen etwas zu schonen, solltest du am besten schon etwas \"Freizeit\" einbauen. Dies wird sich bei fast jedem solcher Spiele machen lassen, schließlich muss der Spieler ja erst überlegen, auf den gegnerischen Zug reagieren und dann entsprechen seinen Zug absenden. Plus Verarbeitungszeit kommt da bestimmt schon etwas zusammen, was du dann mittels Timer frei von Requests halten könntest.

    Inwiefern das nachher möglich ist, hängt aber voll von dir und deinem Spiel ab. Das mit der Begrenzung auf 30s war als Beispiel gedacht.

    Grundsätzlich würde ich dir raten, dass du einfach einen POST-Request machst, bei dem die Session-ID mitgesendet wird. Damit könntest du dann das Spiel identifizieren. Beispielsweise in einer Tabelle Games mit den Spalten Game, Player1, Player2 wobei bei den Spielern deren Session-ID und bei Game die Game-ID gespeichert wird. Oder eine Tabelle mit den Session-IDs, denen dann das Spiel zugeordnet wird.

    Hast da recht viele Möglichkeite bei der Identifizierung.

    Dazu dann noch weitere Tabellen zu jedem Spiel.

    Am besten, du lässt gleich die Session-ID in eine JS-Variable schreiben, dann kannst du die für deine Requests leichter benutzen.
  • in: Frage zu Ajax

    geschrieben von pjhimself

    Also, allgemein kannst du auf Elemente zugreifen, die du als innerHTML zugewiesen hast. Der Einwand wegen den Anführungszeichen sollte natürlich genau von die überprüft werden, passiert ja doch mal schnell und gerne sowas ;) Ansonsten könnte es eventuell auch sein, dass du ein Element abfragen willst, dass es noch gar nicht gibt, also das ein Element mit deiner child_id noch nicht existiert.

    Als Beispiel, dass es allgemein funktioniert: http://pjhimself.lima-city.de/72822.html (werd die Datei ein paar Tage drauf lassen)

    Wie du dort beim Ausprobieren sehen kannst, ist das alles kein Problem. Schau dir einfach mal den Quelltext davon an. Ist aber ohne Ajax-Request, da ich jetzt mal von einer korrekten Rückgabe ausgehe (solltest du aber auch noch überprüfen) und stellt nur die Übergabe an innerHTML von Elementen als Teil eines Strings und deren spätere Abfrage dar. Wird auch abgefangen, wenn das Element nicht vorhanden ist.

    Wenn das noch nicht für deinen Problemlösung ausreichend sein sollte, müsstest du schon ein paar Informationen liefern, wie Fehlermeldungen, wie sich das Problem genau darstellt, etc.
  • in: \"Nachrichten\" per JS ect. an anderen Computer senden?

    geschrieben von pjhimself

    Ich habe vor einer Weile mir auch ein solches Projekt angesehen und getestet (war jedoch auch noch nicht fertig zu diesem Zeitpunkt), dort wurde Othello oder Reversi (weiß ich nicht mehr so genau, welches von beiden) realisiert.
    Dort wurde zu diesem Zeitpunkt auch noch mit diesem Problem gekämpft und die Seite hat sich ständig neu geladen und das Ziehen von Zügen war nur zwischen den Ladezüglen möglich.

    Da hab ich auch gleich an JS gedacht.

    Grundsätzlich, wie schon erwähnt wurde, kannst du mittels Ajax nicht zwischen zwei Computern sondern nur mit dem Server kommunizieren. Du kannst beispielsweise Seiten über die GET- bzw POST-Methode abfragen und erhälst als Response den Inhalt dieser Seite / das Ergebnis dieser Abfrage.

    Was du aber auf jeden Fall machen kannst, ist, dass du die grundsätzliche Logik des Spiels als JS auslagerst. Damit sparst du dir schon mal einiges. Ansonsten könntest du das über eine weitere Seite, die die eigentliche Kommunikation mit dem Server übernimmt regeln. Dh, du machst dann einen Request zu dieser Seite mittels Ajax (bspw unter Verwendung von prototype), welche dir dann zB die Position einer Spielfigur zurückgibt. Diese Information könntest du dann wieder über JS verarbeiten, entsprechend die Darstellung anpassen.

    Was du dir dann aber noch überlegen müsstest, ist, wie das zeitliche geregelt wird. Also, wie viel Zeit hat ein Spieler zum Ziehen, die Verarbeitung dessen (musst du dir ein entsprechendes Backend überlegen) und die Abfrage der Züge anderer.

    Bsp: Ein Spieler hat maximal 30s Zeit zum Ziehen. Wenn er zieht werden die benötigten Informationen weitergeleitet, wenn nicht wird auch dieses gemeldet und entsprechend reagiert. Anschließend muss dies verarbeitet werden. Dies kann je nachdem etwas dauern. Erst nach der Verarbeitung kann ein anderer Spieler die Daten zu diesem Zug abholen. Dh, das die Wartezeit auf den Zug des Gegenspielers wahrscheinlich etwa doppelt so lange dauern wird.


    Bei Reversi könntest du zum Beispiel ein Array benutzen, um die Positionen der einzelnen weißen und schwarzen Steine zu speichern / festzulegen. Über dieses Array stellst du diese dann auf deinem Spielbrett dar. Außerdem kannst du dem Spieler alle möglichen Züge markieren, von denen er dann einen auswählen kann. Das machst du dann mit einer anderen Funktion, welche an Hand der Positionen der weißen und schwarzen Spielsteine die berechnet und dann auch die in einem Array speichert, was auch mit bei der Darstellung berücksichtigt wird.

    Übertragen werden müsste jeweils nur die Position des neuen eigenen Spielsteins. Geholt werden muss entsprechend die Position des neuen Spielsteins des Gegners. Dies könnte beispielsweise in einer Datenbank gespeichert werden. Am Anfang muss zudem natürlich auch noch festgelegt werden, welcher Spieler welche Farbe nimmt. Außerdem muss man die \"Übernahme\" von gegnerischen Spielsteinen verarbeiten. Das kann aber auch bei jedem Client selbst über eine JS-Funktion gemacht werden, wenn ein neuer gegnerischer oder eigener Zug gemacht wurde/erhalten wurde.

    Für eine bessere Zuordnung könnte man Sessions benutzen, welche natürlich auch als Parameter bei Anfragen mitgesendet werden müssten. Die Session-ID könnte zudem als alternierender Teil von Tabellennamen benutzt werden, auf denen die einzelnen Spiele arbeiten und welche nach dem Spiel wieder gelöscht werden.

    Das größte Problem wäre nun höchstens noch die Abfrage des gegnerischen Zuges. Dafür könnte man einen Timer verwenden, der einen bestimmte Zeit verstreichen lässt und anschließen abfragt oder frequentiell im Hintergrund abfragt, ob ein neuer Zug bereit steht. Ein Spieler muss ja schließlich nicht warten, bis die vorgegebene Maximalzeit verstrichen ist.

    Am besten wäre es natürlich, wenn der Server zeitversetzt anworten würde, also dann, wenn er den nächsten Zug liefern kann.

    Im Normalfall sollte vielleicht aber auch eine Abfrage alle 10s ausreichend sein, welche dann bspw. \"Kein neues Zug\" oder \"S_C8\" / \"W_D9\" zurückliefert.


    Wie du das genau lösen willst, musst du dir dann genau überlegen. Da du aber deiner Frage nach, wohl schon das Spiel mehr oder weniger fertig hast, solltest du dir ja schon einige Gedanken gemacht haben und auch die Portierung der Logik sollt nicht wirklich ein Problem darstellen.


    Beitrag geändert: 31.3.2008 3:47:43 von pjhimself
  • in: bild ohne html code mit php anzeigen

    geschrieben von pjhimself

    das, was familie-schiffer suchte, war eine Möglichkeit, dass innerhalb einer Datei \"bild.php\" Bilder geöffnet und ausgegeben werden, also diese Datei als Bilddatei-Ersatz dient

    zur Problemlösung:

    <?php
    
    header(\'Content-type: image/png\');
    
    $image_path = \'...\';
    $img = imagecreatefrompng($image_path);
    
    /* start: for transparency */
    $width = imagesx($img);
    $height = imagesy($img);
    $new_img = imagecreatetruecolor($width, $height);
    
    imagealphablending($new_img, false);
    $colorTransparent = imagecolorallocatealpha($new_img, 0, 0, 0, 127);
    imagefill($new_img, 0, 0, $colorTransparent);
    imagesavealpha($new_img, true);
    
    imagecopyresampled($new_img, $img, 0,0,0,0, $width, $height, $width, $height);
    /* end: for transparency */
    
    imagepng($new_img);
    imagedestroy($new_img);
    
    ?>


    bei $image_path muss dann natürlich der Bildpfad hin, gegebenfalls ein variabler durch das einlesen eines GET-Paramaters (zB \"bild.php?bild=1\" )

    Dieses Beispiel ist für PNG-Dateien mit Transparenz.
    Der Teil mit der Transparenz ist nur bei Bilder nötig, die Transparenz enthalten (zB PNG, GIF).
    (dann auch auf die korrekten Variablen achten: ohne Transparenz muss unten anstatt $new_img $img stehen)

    Angepasst werden müssen jeweils der header, die Funktionen imagecreatefrom.. und image.. (jeweils png durch den Bildtyp ersetzen).
  • in: Informatikstudium

    geschrieben von pjhimself

    also bei uns hat man im Grundstudium drei Mathematik-Kurse, speziell für Informatiker (Mathematik, .. gehört auch zu unserem Institut). Logik und Diskrete Mathematik (1), Analysis (2) und Lineare Algebra (3). Wobei man dazu auch sagen muss, dass diese Kurse zu den umfangreicheren gehören, man also nicht nur eine Vorlesung pro Woche + zusätzliche Verantstaltungen hat. Auch der Inhalt ansich umfasst eine ganze Menge und Mathematik ist ja iA das Sorgenkind vieler Schüler und Studenten^^

    Was dann genau im Hauptstudium bzw. Master-Studiengang kommt, hängt vorallem von der eigenen ausgewählten Richtung ab.

    Wichtig ist aber, dass das dort gelehrte die Grundlage für das Verständnis vieler anderer Sachen bildet und vieles sich dann das ein oder andere Mal in anderen Veranstaltungen wiederfinden wird.

    Auch wenn verschiedene andere Kurse keine Mathekurse sind, auch nicht so bezeichnet werden, enthalten sie doch viele mathematische Elemente. Vorne weg natürlich Kurse zur theoretischen Informatik. Wenn man dann Themen wie Automatentheorie o.ä. behandelt, kann man sich vorstellen, dass das nicht ohne Mathematik gehen wird.

    Also im Grunde hat Informatik schon viel mit Mathematik zu tun, ob es nun Algorithmen, Laufzeiten, Automaten oder sonstige Sachen sind.
  • in: Informatikstudium

    geschrieben von pjhimself

    also prinzipiell kannst du dich natürlich nicht einschreiben, aber ansonsten.. also bei uns an der Uni wäre es eigentlich kein Problem, sich mal eine Vorlesung anzusehen. man hat dann zwar nicht Zugriff auf die Ressourcen der Uni (PC-Pools etc) und zum Teil auch nicht auf die Vorlesungs-Materialien, aber es wird ja nicht überprüft, ob du wirklich Angehöriger des Fachbereichs bist. Tutorien sind da wieder etwas anderes, da könnte es schon schwieriger werden.

    Also Vorlesungen anhören, speziell wenn man sich das nur mal ansehen möchte, sollte kein Problem darstellen. mehr wird aber nicht drin sein. wird dir logischer Weise nicht angerechnet werden, wenn du zu allen Vorlesungen dort gehst, alles was du machst, machst du halt dann für dich ;) wäre aber auch Zeitverschwendung, wenn man das dann eh nochmal machen muss..
  • in: [php] devide : 0 fehler umgehen

    geschrieben von pjhimself

    @ sincer: Hast du denn schon den von mir geposteten Code ausprobiert? Wie gesagt, hab ihn getestet und er funktioniert.

    Die Anmerkung von m062 solltest du auch beherzigen. Für solche Fälle gibt es das von mir in meinem Code verwendete Konstrukt:

    Bedingung ? falls wahr : ansonsten;

    zB kannst du es bei der Übergabe von Werten benutzen, wie
    $var = $x > $y ? $x : $y;

    oder auch einfach als direkte Wertrückgabe wie
    <a href=\"<?=$a == $b ? $href_1 : $href_2; ?>\">Link</a> usw.

    Aber wie gesagt, der von mir gepostete Code funktioniert und sollte dir eigentlich helfen, probier\'s mal aus ;)
  • in: Informatikstudium

    geschrieben von pjhimself

    hi,

    bei mir ist es Berlin :) und komme jetzt ins 4. Semester.

    Die grundlegenden Themen im Studium sind vorallem die Bereiche Technik (angefangen bei Schaltungen u.a. über die Funktionsweise von Betriebssystemen wie u.a. Scheduling etc über Netzwerke und Protokolle etc), Theoretische Informatik (umfasst Dinge wie Automatentheorie etc), Mathematik (die Grundlagen von allem, dabei ist alles von Logik über Lineare Algebra und Analysis u.a.) und natürlich der Bereich Programmierung und Algorithmen (worin diverse Algorithmen, Verfahrensweisen, Strukturen usw behandelt werden)
    im Hauptstudium wählst du dir dann eine der an deiner Uni möglichen Richtungen, ob es nun in Richtung KI oder sonstigem geht, bleibt ja dir und deinen Fähigkeiten überlassen

    Programmierung selbst kann dabei in verschiedenen Bereichen vorkommen, in unterschiedlichem Umfang, auch die Sprachen variieren.

    iA kann man nicht sagen, dass man irgendeine Sprache können muss (zumal man auch nicht unbedingt wissen kann, welche man nun wirklich brauchen wird), jedoch sind meiner Meinung nach grundlegende Verständnisse im Bereich der Programmierung elementar. Wer damit nix anfangen kann, sollte sich vielleicht eher was anderes suchen. Sprachen allgemein sind ja eh vollkommen egal, da man damit nur Algorithmen innerhalb der durch die Sprache vorgegebenen Syntax darstellt. Auf das Verständnis, was dahinter steckt, kommt es eher an. In die Sprachen kann man sich dann doch recht schnell einarbeiten, zumindest in dem Maße, wie es nötig wird.

    Vor kam bei mir bisher Haskell, Java, C, Assembler, HTML, XML, JavaScript, PHP, ... (wobei, wenn man genau sein will, ein paar der genannten genau genommen ja gar keine Programmiersprachen, sondern Auszeichnungssprachen sind ;) ), um mal ein paar zu nennen.

    Wie gesagt, geeignet ist eigentlich jeder, der sich sehr für Informatik als Ganzes interessiert (zumindest für das meiste :P ) und der auch schon etwas Erfahrung in privater Eigenarbeit gesammelt hat ;) Wer grad mal einen PC anschalten kann und nur mal auf der Tastatur rumklimpert, wird da sicherlich nicht lange bei bleiben.

    Und genau das ist eigentlich auch ein großer Schwachpunkt der Informatik. Denn, es gibt iA ziemlich große Unterschiede, was das Vorwissen angeht. (Deshalb kannst du da auch nicht genug von haben ;) ) Leute, mit geringem oder gar keinem Vorwissen werden oftmals recht schnell abgeschreckt, andererseits kann es für die sehr erfahrenen schon oft mal recht langweilig werden.

    Dh: Nimm dir irgendeine Programmiersprache, beschäftige dich mit den grundsätzlichen Verfahrensweisen, Strukturen und Abläufen. Auch solche Sachen wie Struktogramme und Ablaufdiagramme können da helfen. Verinnerliche einfach den ganzen Prozess ansich. Hab schon oft erlebt, das manche schon an der grundsätzlichen Denkweise scheitern. Viele Prozesse laufen später einfach automatisch im Kopf ab (Was will ich haben, was soll passieren, was passiert dann und dann, etc). Am Anfang ist es daher wahrscheinlich ratsam, mit Pseudocode zu beginnen. Wie der dann in den jeweiligen Sprachen übersetzt dargestellt wird, ist dann ja nur noch trivial ;)
    Wenn du das verinnerlicht hast, also einfach mal was ad-hoc programmieren kannst, ohne gleich am Prozess frustriert zu scheitern, sollte das eigentlich schon mal ganz gut aussehen. (Debugging gehört auch zum Prozess ;) )

    Außerdem kann es nur ratsam sein, sich auch mal mit der Hardware-Seite eines PCs auseinander zu setzten. Auch sich mal Linux und Windows anzusehen, wäre sicherlich in jeder Hinsicht von Vorteil.

    Was die Jobaussichten angeht.. ich persönlich sehe das derzeit recht optimistisch, dass man als Informatiker auch in ein paar Jahren noch recht gut und problemlos Jobs finden wird. Dabei muss man aber auch festhalten, dass es auch klar auf deine Fähigkeiten ankommt, welche Jobs du machen kannst.
    Die Anzahl der Jobs im IT-Bereich werden wahrscheinlich noch weiter steigen (aber natürlich auch nicht mehr ewig ;) ), da ja überall IT eingesetzt wird. Außerdem kann man nun auch nicht sagen, dass zu viele Informatiker ausgebildet werden. Schließlich springen von den schon ansich nicht soo vielen auch noch einige ab. Insofern glaub ich derzeit an eine recht gute Jobaussicht.

    PS: Es würde sich vielleicht für dich anbieten, dass du dir einfach mal ein paar Vorlesungen ansiehst, auch iA. Da bekommst du dann einen besseren Eindruck in das ganze Geschehen und im speziellen auch in die Uni und den Fachbereich, den du dir ansiehst, kannst vielleicht auch mit dem ein oder anderen Studenten vor Ort sprechen, etc und so für dich selbst schon vorab feststellen, ob Informatik das richtige Studienfach für dich ist.
  • in: TORWÄCHTER für die Homepage

    geschrieben von pjhimself

    zum einen wäre es ganz interessant zu wissen, was du für Kenntnisse im Bereich Programmierung besitzt.
    zum anderen, was meinst du mit \"generelles Passwort\"? Falls damit gemeint sein soll, dass alle User das selbe Passwort haben und benutzen, dann wäre das iA nicht zu empfehlen, dann könntest du das Ganze auch ohne Login-System machen..

    ich würde jetzt bei diesem Problem zu PHP + MySQL tendieren, womit das bei entsprechendem Wissen, recht gut zu realisieren sein könnte. (brauchst natürlich dafür eine Datenbank)

    Du brauchst eine Registierung und je nachdem, wie du dir das vorgestellt hast, einen Adminbereich, wo du registrierte Nutzer freischalten kannst.

    Der normale Login ist dann kein Problem mehr.

    Außerdem sollten die Passwörter natürlich nicht einfach als Plain-Text abgespeichert werden, es sollte dann schon als salted Hash abgespeichert werden. (Als salt lässt du bei der Registrierung einfach einen zufälligen String fixer länge generieren.)

    Wenn du nach fertigen Scripts googlen solltest, musst du da nur genau aufpassen, dass es ein ordentliches ist.
    Jedoch bietet es sich im Normalfall eher an, ein spezielles zu schreiben, was genau an die Einsatzumgebung und die Wünsche angepasst ist. (zB was für Daten bei dem Einloggen über den User geladen werden, etc.)
  • in: [php] devide : 0 fehler umgehen

    geschrieben von pjhimself

    hi,

    also, sollte bei deinem Snippet immernoch der \"division by zero\"-Fehler kommen, fänd ich das recht komisch. Wenn es aber nicht berechnen sollte, wenn es dann soll, könnte das vielleicht daran liegen, dass du in deinem else-Zweig zuerst mit \" beginnst und mit \' endest, das Ganze mit dem Ergebnis der Rechung und anschließend mit dem Ende, welches mit \' geöffnet und mit \" geeschlossen wird, konkatenieren willst. Es sollte dort eigentlich dann der gesamte String wie er da steht (nach Ersetzen der Variablen durch ihre Werte, da es ja innerhalb der \"-Quotes ist) ausgegeben werden.

    Hab das mal bei nachfolgenden Code getestet, dort funktioniert alles ohne Probleme (am Anfang sieht man ein paar Testdaten - einmal mit und einmal ohne 0). Dort ist auch das mit der if-else-Verzweigung etwas schlanker und performanter gestaltet.

    <?php
            $udat = array
            (
                    array(13, 1, 1, 3),
                    array(0, 1, 1, 11)
            );
    ?>
    <html>
    
    <head>
            <title>Test</title>
    </head>
    
    <body>
            <table>
    <?php
            for ($i = 0; $i < count($udat); $i++)
            {
    ?>
            <tr>
                    <td class=\"g\"><?=$udat[$i][3]; ?></td>
                    <td class=\"w\"><?=$udat[$i][0] == 0 ? \'(0 per day)\' : \'(\'.round($udat[$i][3] * 100 / $udat[$i][0]).\'%)\'; ?></td>
            </tr>
    <?php
            }
    ?>
            </table>
    </body >
    
    </html>


    Hoffe, das hilft dir vielleicht weiter.

    So long,
  • in: welches webseiten program ist besser für geschäftlich

    geschrieben von pjhimself

    iA googlen ;)

    Denke, dass du hier http://www.oscommerce.de/ vielleicht was passendes finden könntest. Ist Open-Source, aber genauer kannst du dich ja auf der Website und den Foren dort informieren.

    Falls es nicht ausreichen sollte, such doch einfach mal bei google nach kostenlosen/free Online Shop/eShop-Systemen. Da findet sich sicher was passendes für deine Zwecke.

    ansonsten: selbst schreiben :P
  • in: Array bleibt nach auslesen aus Datenbank Leer

    geschrieben von pjhimself

    ich nehme mal an, dass du schon überprüft hast, ob das zurückgebene Array wirklich leer ist (zB mit print_r).

    wenn ich mir den Code ansehe, finde ich zwei Probleme, an denen es liegen könnte. Zum einen machst du ja einen JOIN über die stateid der ersten Tabelle a und prestate der zweiten Tabelle b. Diese werden ja für die Zuordnung, für das Zusammenfassen benutzt. Jede Reihe enthält so die Daten beider Tabellen, für die diese beiden Werte übereinstimmen.
    Hast du dort keine Übereinstimmungen, solltest du auch keine Ergebnisse erhälten.

    Zum anderen erstellst du ein Array $return, welches jedoch nie zurückgegeben wird. Es fehlt also
    return $return;

    nach deiner While-Schleife.

    Dies sollte wohl das Problem sein.

    Ein weiteres Problem bekommst du aber auch noch durch dein
    $return = array();
    innerhalb der While-Schleife. Damit wird jedesmal ein neues Array erzeugt und das alte überschrieben. Somit kannst du mit dem derzeitigen Code sowieso nur maximal einen Datensatz erhalten.

    Mit dem folgenden Code sollte dies funktionieren:
    <?php
    function db_CountryPrefixes()
    {
            ...
            $id = 0;
            $return = array();
            
            ...
    
            while($resultLine=mysql_fetch_array($query))
            {
                    $return[$id] = array();
                    
                    $return[$id][\"state\"]    = $resultLine[\"statename\"];
                    $return[$id][\"priority\"] = $resultLine[\"statepriority\"];
                    $return[$id][\"prefix\"]   = $resultLine[\"statepre\"];
                    $return[$id][\"number\"]   = $resultLine[\"prenr\"];
                    
                    $id++;
            }
            
            return $return;
    }
    ?>

    Bei ... hab ich einfach nur bestimmtes weggelassen, was wie in deinem Code erhalten bleibt.

    Du musst dann natürlich den weiteren Code soweit anpassen, dass du über die ID der Einträge auf die Werte zugreifst.

    Außerdem hast du in deinem weiteren Code auch noch einige Fehler.
    for($id = 1; $id <= count($prefix_data[\'id\']) ; $id++)

    Das Count wird dir hier immer 0 zurück geben, da du nicht die Anzahl der Datensätze des ganzen Arrays abfragst, sondern die Größe des Arrays $prefix_data[\'id\'], was bei dir ja nur der ID-Wert war.

    Mit dem veränderten Code müsste die Zeile zu
    for ($id = 0; $id < count($prefix_data); $id++)
    geändert werden. Falls du den ID-Wert nicht brauchen solltest wäre auch eine foreach-Schleife möglich. Anschließend greifst du dann zB mit $prefix_data[$id][\'state\'] auf die entsprechenden Daten zu.

    Damit sollte dein Problem hoffentlich gelöst sein.
  • in: iframe zusammen mit neuem Fenster öffnen

    geschrieben von pjhimself

    eine andere Möglichkeit wäre, dass du als Link
    <a href=\"javascript:getNews(\'news1.htm\');\">News1</a>

    benutzt, mit folgendem JavaScript-Code in der Indexseite:
    var site = \'\';
    function getNews(newssite)
    {
            site = newssite;
            window.open(\'news.htm\', \'\', \'\');
    }

    Anschließend greifst du auf die Variable innerhalb der Newsseite wie folgt zu:
    function init()
    {
            if (opener.site != undefined)    
                    document.getElementById(\'akt\').src = opener.site;
    }

    Diese Funktion musst du natürlich auch beim Laden der Seite aufrufen.
    <body onload=\"init()\">

  • in: Werte ausgeben

    geschrieben von pjhimself

    versuchs mal hiermit, habe es auch getestet und es werden nur die Zeilen des entsprechenden Bereichs ausgegeben ;)

    <?php
    /* separartor */
    define(\'SEPARATOR\', \'::\');
    /* searched area - editable within the real script */
    $search = \'Squad 1\';
    /* get file content */
    $lines = file(\'test.txt\');
    /* filter searched area */
    $inside = false;
    foreach ($lines as $line)
            if ( ereg(SEPARATOR.$search.SEPARATOR, $line) )
                    /* start found */
                    $inside = true;
            else if ( trim($line) == \'\' )
                    /* empty line as mark for the end */
                    break;
            else if ( $inside )
                    /* output of the content of the searched area */
                    echo $line.\'<br/>\';
    ?>

    Edit:
    Hab den Code in Zeile 16 von \"$inside = false;\" zu \"break;\" geändert. Damit wird die Schleife nach der letzten (und leeren) Zeile verlassen. Damit bleiben unnötige Abfragen aus und das wird etwas effizienter und schneller.

    Beitrag geändert: 9.3.2008 23:00:01 von pjhimself
  • in: Sonderzeichen in PHP

    geschrieben von pjhimself

    Hier mal ein exemplarischer Code. Das einfache erstellen der Arrays an Hand deiner Zeichenketten hätte nicht ausgereicht, da noch verschiedene Zeichen enthalten waren, die auch über den Zeichencode kodiert werden müssen.

    Nachfolgender Code getestet und funktionsfähig ;)

    <?php
    /* get post data */
    if ($_SERVER[\'REQUEST_METHOD\'] == \'POST\')
            $text1 = $_POST[\'text\'];
    
    if (isset($text1) && trim($text1) != \'\') {
            /* definition of charsets */
            $zeich0 = 
                    array(
                            \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", 
                            \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", 
                            \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"!\", \"?\", \"*\", \"<\", 
                            \">\", \".\", \",\", \"=\", \"+\", \"-\", \"(\", \")\"
                    );
            $zeich1 = 
                    array(
                            \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", 
                            \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", 
                            \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"!\", \"?\", \"*\", \"<\", 
                            \">\", \".\", \",\", \"=\", \"+\", \"-\", \"(\", \")\"
                    );
            $zeich2 = 
                    array(
                            \"&#945;\",  \"&#1074;\", \"&#162;\",  \"&#8706;\", \"&#1108;\", \"&#402;\", \"&#103;\", \"&#1085;\",
                            \"&#953;\",  \"&#1504;\", \"&#1082;\", \"&#8467;\", \"&#1084;\", \"&#951;\", \"&#963;\", \"&#961;\", 
                            \"&#113;\",  \"&#1103;\", \"&#1109;\", \"&#1090;\", \"&#965;\",  \"&#957;\", \"&#969;\", \"&#967;\", 
                            \"&#1091;\", \"&#122;\",  \"&#33;\",   \"&#1567;\", \"&#9679;\", \"&#171;\", \"&#187;\", \"&#46;\",   
                            \"&#44;\",   \"&#61;\",   \"&#43;\",   \"&#45;\",   \"&#40;\",   \"&#41;\"
                    );
            $zeich3 = 
                    array(
                            \"&#52;\",  \"&#56;\",  \"&#40;\",  \"&#100;\", \"&#51;\",  \"&#102;\", \"&#57;\",  \"&#104;\", 
                            \"&#33;\",  \"&#116;\", \"&#107;\", \"&#49;\",  \"&#109;\", \"&#110;\", \"&#48;\",  \"&#112:\", 
                            \"&#113;\", \"&#114;\", \"&#53;\",  \"&#55;\",  \"&#117;\", \"&#118;\", \"&#119;\", \"&#120;\", 
                            \"&#121;\", \"&#50;\",  \"&#33;\",  \"&#53;\",  \"&#42;\",  \"&#60;\",  \"&#62;\",  \"&#46;\",  
                            \"&#44;\",  \"&#61;\",  \"&#43;\",  \"&#45;\",  \"&#40;\",  \"&#41;\"
                    );
            $zeich4 = 
                    array(
                            \"&#193;\", \"&#223;\", \"&#268;\", \"&#270;\",  \"&#276;\",  \"&#358;\", \"&#286;\", \"&#292;\",  
                            \"&#296;\", \"&#308;\", \"&#310;\", \"&#313;\",  \"&#1052;\", \"&#323;\", \"&#336;\", \"&#1056;\", 
                            \"&#81;\",  \"&#340;\", \"&#346;\", \"&#356;\",  \"&#218;\",  \"&#86;\",  \"&#372;\", \"&#1046;\", 
                            \"&#374;\", \"&#377;\", \"&#33;\",  \"&#1567;\", \"&#9679;\", \"&#171;\", \"&#187;\", \"&#46;\",  
                            \"&#44;\",  \"&#61;\",  \"&#43;\",  \"&#45;\",   \"&#40;\",   \"&#41;\"
                    );
            $zeich5 = 
                    array(
                            \"&#3588;\", \"&#3666;\", \"&#962;\",  \"&#3668;\", \"&#1108;\", \"&#358;\",  \"&#65262;\", \"&#1106;\", 
                            \"&#3648;\", \"&#1503;\", \"&#1082;\", \"&#108;\",  \"&#3667;\", \"&#3616;\", \"&#3663;\",  \"&#1511;\", 
                            \"&#7907;\", \"&#1491;\", \"&#1459;\", \"&#116;\",  \"&#1458;\", \"&#1513;\", \"&#1468;\",  \"&#1509;\", 
                            \"&#1488;\", \"&#122;\",  \"&#33;\",   \"&#1567;\", \"&#9679;\", \"&#171;\",  \"&#187;\",   \"&#46;\",  
                            \"&#44;\",   \"&#61;\",   \"&#43;\",   \"&#45;\",   \"&#40;\",   \"&#41;\"
                    );
            $zeich6 = 
                    array(
                            \"&#228;\", \"&#98;\",  \"&#267;\", \"&#100;\", \"&#235;\", \"&#102;\", \"&#289;\", \"&#104;\", 
                            \"&#239;\", \"&#106;\", \"&#107;\", \"&#108;\", \"&#109;\", \"&#110;\", \"&#246;\", \"&#112;\", 
                            \"&#113;\", \"&#114;\", \"&#115;\", \"&#116;\", \"&#252;\", \"&#118;\", \"&#119;\", \"&#120;\", 
                            \"&#255;\", \"&#380;\", \"&#33;\",  \"&#63;\",  \"&#42;\",  \"&#60;\",  \"&#62;\",  \"&#46;\", 
                            \"&#44;\",  \"&#61;\",  \"&#43;\",  \"&#45;\",  \"&#40;\",  \"&#41;\"
                    );
            $zeich7 = 
                    array(
                            \"&#225;\", \"&#98;\",  \"&#263;\", \"&#100;\", \"&#233;\", \"&#102;\", \"&#103;\", \"&#104;\", 
                            \"&#237;\", \"&#106;\", \"&#107;\", \"&#108;\", \"&#109;\", \"&#324;\", \"&#337;\", \"&#112;\", 
                            \"&#113;\", \"&#341;\", \"&#347;\", \"&#117;\", \"&#250;\", \"&#118;\", \"&#119;\", \"&#120;\", 
                            \"&#253;\", \"&#378;\", \"&#33;\",  \"&#63;\",  \"&#42;\",  \"&#60;\",  \"&#62;\",  \"&#46;\", 
                            \"&#44;\",  \"&#61;\",  \"&#43;\",  \"&#45;\",  \"&#40;\",  \"&#41;\"
                    );
            $zeich8 = 
                    array(
                            \"&#923;\", \"&#66;\",    \"&#4355;\", \"&#68;\",   \"&#931;\",  \"&#70;\",   \"&#71;\",    \"&#905;\", 
                            \"&#72\",   \"&#73\",     \"&#922;\",  \"&#4354;\", \"&#76;\",   \"&#1471;\", \"&#1256;\",  \"&#79;\", 
                            \"&#80;\",  \"&#63635;\", \"&#423;\",  \"&#428;\",  \"&#1522;\", \"&#85;\",   \"&#63629;\", \"&#87;\", 
                            \"&#933;\", \"&#89;\",    \"&#33;\",   \"&#63;\",   \"&#42;\",   \"&#9665;\", \"&#9655;\",  \"&#46;\", 
                            \"&#44;\",  \"&#61;\",    \"&#43;\",   \"&#45;\",   \"&#40;\",   \"&#41;\"
                    );
            $zeich9 = 
                    array(
                            \"&#65425;\", \"&#20035;\", \"&#99;\",    \"&#100;\",   \"&#20039;\", \"&#65399;\", \"&#103;\", \"&#12435;\", 
                            \"&#65417;\", \"&#65420;\", \"&#12474;\", \"&#65434;\", \"&#65462;\", \"&#20992;\", \"&#111;\", \"&#65393;\", 
                            \"&#113;\",   \"&#23610;\", \"&#19970;\", \"&#65394;\", \"&#117;\",   \"&#8730;\",  \"&#119;\", \"&#65426;\", 
                            \"&#65432;\", \"&#20057;\", \"&#33;\",    \"&#63;\",    \"&#42;\",    \"&#60;\",    \"&#62;\",  \"&#46;\", 
                            \"&#44;\",    \"&#61;\",    \"&#43;\",    \"&#45;\",    \"&#40;\",    \"&#41;\"
                    );
            $zeich10 =
                    array(
                            \"&#9424;\", \"&#9425;\", \"&#9426;\", \"&#9427;\", \"&#9428;\", \"&#9429;\", \"&#9430;\", \"&#9431;\", 
                            \"&#9432;\", \"&#9433;\", \"&#9434;\", \"&#9435;\", \"&#9436;\", \"&#9437;\", \"&#9438;\", \"&#9439;\", 
                            \"&#9440;\", \"&#9441;\", \"&#9442;\", \"&#9443;\", \"&#9444;\", \"&#9445;\", \"&#9446;\", \"&#9447;\", 
                            \"&#9448;\", \"&#9449;\", \"&#33;\",   \"&#63;\",   \"&#8859;\", \"&#60;\",   \"&#62;\",   \"&#3663;\", 
                            \"&#44;\",   \"&#8860;\", \"&#8853;\", \"&#8861;\", \"&#40;\",   \"&#41;\"
                    );
            /* random charset - composition of the other ones */
            $zeich11 = array();
            for ($i = 0; $i < count($zeich0); $i++) {
                    $x = rand(0, 10);
                    eval(\"\\$zeich11[\\$i] = \\$zeich\".$x.\"[\\$i];\");
            }
            
            /* create text versions */
            $text = str_replace($zeich0, $zeich1, $text1);
            for ($i = 2; $i <= 11; $i++)
                    eval(\"\\$text\".$i.\" = str_replace(\\$zeich1, \\$zeich\".$i.\", \\$text);\");
    }
    ?>
    <html>
    
    <head>
            <meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">
            <title>So klappt\'s :-)</title>
    </head>
    
    <body>
            <center>
                    <form method=\"POST\">
                            <p>Text, der umgewandelt werden soll:</p>
                            <input type=\"text\" size=\"50\" name=\"text\" value=\"<?php if (isset($text1) && trim($text1) != \'\') { echo $text1; } ?>\" />
                            <br/>
                            <input type=\"submit\" value=\"Umwandeln\" />
                    </form>
    <?php
    /* output */
    if (isset($text1) && trim($text1) != \'\')
            for ($i = 2; $i <= 11; $i++) {
    ?>
                    <p><input type=\"text\" size=\"50\" value=\"<?php eval(\"echo \\$text\".$i.\";\"); ?>\" /></p>
    <?php
            }
    ?>
            </center>
    </body>
    
    </html>



    Beitrag geändert: 28.2.2008 7:03:41 von pjhimself
  • in: Sonderzeichen in PHP

    geschrieben von pjhimself

    das problem ist eigentlich ganz klar.
    die sonderzeichen, die du gerne angezeigt bekommen möchtest, müssen ja kodiert dargestellt werden, also über &amp;#..; das sind aber dann jeweils mehrere zeichen, die ein sonderzeichen repräsentieren. die funktion str_split() erzeugt aus einem gegebenen string ein array, jedes zeichen wird ein eintrag. somit hast du anstatt wir gewünscht (...,\"&amp;#..;\",...) dann (...,\"&amp;\",\"#\",..,\";\",...). deshalb werden deine zeichen nicht richtig angezeigt, weil du die zeichencodes auseinandertrennst.

    mache doch anstatt erst einen string und daraus dann ein array, gleich ein array mit den einträgen. das sollte dein problem beheben.

    btw, nach deinem head-tag fehlt noch der body-tag ;)
  • in: MD5 verschlüsseelung

    geschrieben von pjhimself

    MD5 ist eine Einweg-Funktion, es gibt also keine Umkehrfunktion, weshalb man von einem Hash nicht den ursprünglichen Wert herausbekommen kann.

    Angriffstechniken wie Rainbow Tables oder ähnliches sind Methoden, den ursprünglichen Wert durch Probieren herauszufinden.
    Hierbei sind die Möglichkeiten zum Herausfinden aber natürlich auch auf die enthaltenen Einträge beschränkt. Somit sind natürlich leichte Passwörter auch schneller und einfacher herauszubekommen und mit einer höheren Wahrscheinlichkeit verbunden, dass sie enthalten sind.

    Methoden zur Verbesserung der Sicherheit wie Salted Hash oder auch der Improved Hash Algorithm bilden hierbei einfach wieder den Hash von einem Hash etc, natürlich unter Verwendung der speziellen Charakteristiken (zB bei Salted Hash einen Salt während der Anwendung einzubauen, bspw md5(md5(salt).md5(password)) ).
    Dadurch wird zwar die Sicherheit erhöht, aber natürlich wäre es wie bei einem normalen Hash auch möglich, urspüngliche Werte herauszufinden, was aber logischer Weise auch mit extrem erhöhtem Speicherverbrauch und auch Dauer verbunden wäre.

    Da es mit den heutigen PCs überaus lange dauern würde, solche Hashs zu \"entschlüsseln\", kann man diese Methode auch getrost anwenden. Eine einfache Anwendung von MD5 wäre jedoch nicht allzu sicher und auch nicht anzuraten. Gerade weil man auch davon ausgehen muss, dass viele Anwender (bzw. sogar eher die meisten) kein allzu sicheres Passwort benutzen. Ein Angreifer könnte so sicherlich in relativ kurzer Zeit viele Passwörter herausbekommen und je nach Art der Umgebung entsprechend Schaden anrichten.

    Von dem her, überleg dir eine geeignete Variante mit Salt oder auch beschäftige dich etwas mit dem von monsta89 erwähnten Improved Hash Algorithm, des es dort auch frei als Download geben sollte, sofern ich mich recht erinnere.
  • in: Bildergalerie in Homepage einbinden

    geschrieben von pjhimself

    ist JavaScript, sieht man auch, wenn man in den Quellcode schaut. da findet man auch die JS-Files. ansonsten wurde die Seite wohl mit TYPO3 4.1 CMS erstellt (laut Quellcode).

    der Link zu dem Lightbox-Script sollte das Problem wohl lösen. ist zwar nicht identisch mit diesem, aber ich find\'s bald sogar besser, wobei man das andere doch häufiger auf anderen Seiten antrifft (eventuell Teil vom CMS). wenn\'s genau das sein soll, guck dir einfach die JS-Files aus dem Quellcode an ;) oder natürlich mal das CMS (aber nur für das brauchst du nicht gleich das CMS)

    aber da das Lightbox sowieso frei verfügbar zu sein scheint, hast du dort 100%-ig keine Copyright-Probleme oder sonstiges ;)
  • in: MySQL Datenbank Update

    geschrieben von pjhimself

    Danke für die Hilfe

    @ evil-devil: das war mir klar, aber manuell soll\'s ja nicht mehr sein ;)

    @ tct: Danke für die Hilfe, habs jetzt ohne RegExp hinbekommen.

    Die Daten/Insert-Anweisungen hole ich mit file_get_contents, lösche dann erst alle Einträge der Tabelle und füge dann mit mysqli_multi_query die neuen Daten ein.

    Und es funktioniert jetzt. :thumb:

    Manchmal steht man auf\'m Schlauch..
  • in: MySQL Datenbank Update

    geschrieben von pjhimself

    Hallo,

    ich bin zugegebendermaßen noch recht neu auf dem Gebiet und weiß noch nicht recht, wie ich das realsieren kann, was ich möchte.

    Ich habe eine externe Datei, zB http://domain.de/datei.sql, in der sich ein Dump befindet, also

    INSERT INTO \'tabelle\' VALUES (wert1,wert2,wert3);
    ...

    Die entsprechene Tabelle ist bereits in meiner Datenbank hier angelegt und hab auch das jetzt schon einmal manuell importiert.

    Würde das gerne mittels php machen. Also, dass nur die php-Datei aufgerufen werden muss und ein Update der Daten gemacht wird.

    Wäre toll, wenn mir einer weiterhelfen könnte, wie ich die Daten der externen sql-Datei eintragen lassen kann.
  • in: Online-Durchsuchung

    geschrieben von pjhimself

    sehe das ähnlich, dass da einer das Ganze etwas übertrieben hat. finde das aber im Grunde nicht allzu abwägig.

    automatische Updates gibt es keine bzw. noch nicht - soweit ich weiß. zudem wären Router mit eigener Software nicht betroffen. viele würden da doch eher auf OpenSource-Projekte oder selbstgeschriebene Software umsteigen.

    na ja, und dass das neue Gesetz für unsere staatlichen Datensammler den Bürgern weitgehend die Rechte nimmt, sollte ja uns allen klar sein.
    sollte die Klage vor dem Bundesverfassungsgericht scheitern, wäre das wohl die schlechteste Entwicklung, die man sich vorstellen könnte..
  • in: E-Mail, welcher Anbieter findet ihr am besten?

    geschrieben von pjhimself

    ich persönlich habe gmx, googlemail, aol (ungenutzt) und ein paar Uni-Adressen, welche ich über Thunderbird benutze.

    finde gmx an sich ganz gut, jedoch ein kleines Manko ist, dass man Emails nur über pop3 amrufen kann (beim Freemail-Account).

    ansonsten ist natürlich der Speicher und die Suchfunktion nicht schlecht dort. zudem hat man Google Talk inklusive (was man allerdings eigentlich nicht wirklich braucht - zumindest ich nicht).

    und wär Probleme damit hat, dass Google Emails lesen könnte.. dann benutzt doch Thunderbird und verschickt verschlüsselte Email bspw. via OpenPGP.

    Spamfilter sind bei Google sehr gut, bisher kam bei mir nix durch. bei gmx war das eigentlich recht lange ähnlich. da war selbst im Spamordner nie was. aber alles was soweit kommt landet im Spamordner.
    kann also eigentlich nicht meckern.

    Web.de und Hotmail hab ich bisher noch nie getestet, aber 12MB wie bei Web.de wären mir bei weitem zu wenig.

    an sich sind aber eigene Mailserver natürlich am besten ;)

    Beitrag geändert: 18.1.2008 23:47:10 von pjhimself
  • in: Netzwerkadresse beziehen?

    geschrieben von pjhimself

    ich hatte auch mal ähnliche Probleme

    es wurde dann versucht, eine dynamische IP vom Router zugewiesen zu bekommen, was aber nicht klappte, weshalb der PC sich dann selbst eine gegeben hat.
    Problem war recht simple.. der Router war nicht DHCP-fähig. demzufolge musste ich die IP und Standardgateway selbst eintragen. danach ging es wieder problemlos. wobei ich mit einem Rechner damit gar keine Probleme hatte..

    also im Grunde einfach so vorgehen, wie masterbee es geschrieben hat.

    ihr solltet ja eigentlich wissen, welche PCs sich in dem Netzwerk befinden. sollte es ein ähnliches Problem sein, wie bei mir, sollte es dann kein Problem sein, herauszufinden, welche IPs noch frei sind.
  • in: JS Function Variable weitergeben

    geschrieben von pjhimself

    mach das doch einfach mit

    function meineFunktion(count) {
        count++;
        timer = setTimeout(function() { meineFunktion(count); }, 1000);
    }


    innerhalb von function() {} kannst du schreiben was du möchtest, also auch eine Funktion aufrufen, der eine Variable übergeben wird.
  • in: HTMLReader

    geschrieben von pjhimself

    Diese beiden sollten dir dabei eigentlich helfen können.

    http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/text/html/parser/ParserDelegator.html
    http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/text/html/HTMLEditorKit.ParserCallback.html


    kleines Beispiel:

    import java.net.*;
    import java.io.*;
    import javax.swing.text.*;
    import javax.swing.text.html.*;
    import javax.swing.text.html.parser.*;
    
    public class TagCounter extends HTMLEditorKit.ParserCallback {
        int tagCount;
    
        public void handleStartTag(HTML.Tag t, MutableAttributeSet a, int pos) {
            tagCount++;
        }
    
        public void handleEndTag(HTML.Tag t, int pos) {
            if (t == HTML.Tag.HTML)
                System.out.print(tagCount);
        }
    
        public void handleSimpleTag(HTML.Tag t, MutableAttributeSet a, int pos) {
            tagCount++;
        }
    
        public static void main(String[] argv) {
            try { // URL holen
                URL page = new URL(argv[0]);
                URLConnection connection = page.openConnection();
                connection.connect();
                if (connection.getContentType().startsWith(\"text/html\")) {
                    // bei HTML Inhalt Ströme aufstecken
                    InputStream is = connection.getInputStream();
                    InputStreamReader isr = new InputStreamReader(is);
                    BufferedReader br = new BufferedReader(isr);
                    TagCounter tagCounter= new TagCounter();
                    // Parser erzeugen und aufrufen
                    ParserDelegator parser = new ParserDelegator();
                    parser.parse(br,tagCounter, false);
                }
            } catch (Exception e) {}
        }
    }



    Du musst da natürlich handleText() entsprechend passend für dein Programm verwenden. Je nachdem, was du machen willst, wie die HTML-Seite aufgebaut ist. Bspw. wenn du nur Text zwischen bestimmten Tags auslesen willst, musst du halt vorher den Tag bei handleStartTag() identifizieren. Außerdem müssen verschiedene einfache Tags vielleicht innerhalb des Textes passend umgesetzt werden.

    Informiere dich am besten erstmal etwas bei den oberen Links und probiere dann ein wenig, was für dich passend und ausreichend ist.

    Hoffe, das hilft dir weiter.


    Beitrag geändert: 17.1.2008 21:41:55 von pjhimself
  • in: PHP & HTML in einer datei?

    geschrieben von pjhimself

    um es kurz zu sagen, ja, das ist auch der Sinn des Ganzen.

    PHP ist eine serverseitige Skriptsprache, die im Grunde am Ende HTML erstellt. Der Inhalt kann aber je nach übergebener Variable oder sonstigen Einstellung unterschiedlich ausfallen, wodurch dynamische Inhalte erstellt werden können.

    PHP und HTML können beide gleichzeitig innerhalb einer PHP-Datei benutzt werden. PHP-Code kann regelrecht in den HTML-Code eingestreut werden.

    Bsp:
    <h3>Das ist ein Test</h3>
    <table>
    <?php
        $myarray = array(\"Null\", \"Eins\", \"Zwei\", \"Drei\");
        
        for ($i = 0; $i < count($myarray); $i++) {
    ?>
        <tr>
          <td><?php echo $i; ?></td>
          <td><?php echo $myarray[$i]; ?></td>
        </tr>
    <?php
        }
    ?>
    </table>

    Wenn man das nicht so machen könnte, müsste man alles, was man fest als HTML ausgeben möchte, mittels echo oder ähnlichem ausgeben, also innerhalb des PHP-Codes. So spart man sich diese Funktionsaufrufe.
  • in: replace() -Problem

    geschrieben von pjhimself

    @ agentelmo: so funktioniert das leider nicht. der reguläre Ausdruck muss zwischen / und / stehen. Er kann, soweit mir bekannt, auch nicht angepasst werden.

    @ kamel92: versteh nicht ganz, wozu dort den kompletten Inhalt einer Variable brauchst. schließlich wird das dann innerhalb des Strings, auf den du replace() anwendest gesucht und dann vielleicht ausgetauscht. wenn du vielleicht etwas mehr Code posten würdest, könnte man vielleicht gucken, was du erreichen willst und ob man das vielleicht auch anders lösen kann.
  • in: Problem mit CSS

    geschrieben von pjhimself

    Also bei mir werden dein \"linker\" und \"rechter\" Bereich auch nebeneinander angezeigt. Zwar mit Lücke dazwischen, aber das lässt sich kaum ändern.

    Eventuell liegt das auch meiner Auflösung.. (hab es mir verkleinertem Fenster probiert und glaube, weiß was du meinst.)

    Dann könnte ich dir nur empfehlen, keine statischen Breiten für beide zu nutzen. Dadurch kann natürlich einer und in diesem Fall immer der rechte der beiden Verdrängt werden, da nicht genügend Platz vorhanden ist. Dies geschieht immer automatisch. Erst dann, wenn der Platz selbst für eines der beiden Elemente nicht mehr ausreicht, wird ein Scrollbalken angezeigt.
  • in: Border verschwindet ?!

    geschrieben von pjhimself

    der font-Tag ist in der aktuellen HTML-Version expired. Je nachdem, was für ein doctype du am Anfang deklariert hast, wird das nicht interpretiert bzw. kann zu Konflikten führen.

    Alles was mit Design zu tun hat, wurde ins CSS verlagert. Möglich ist zB noch der strong-Tag zur Auszeichnung besonderer/wichtiger Textstellen.

    Falls es am doctype liegen sollte, informiere dich am besten bei Selfhtml, was für dieses erlaubt ist.
    Hilfreich sind auch die Validatoren von w3c.org, um Fehler schnell zu finden.
  • in: Welchen HTML Editor benutzt ihr?

    geschrieben von pjhimself

    Ich persönlich benutze Notepad++ derzeit v4.4
    Es unterstützt Synataxhighlighting für eine Vielzahl von Sprachen, es ist aber auch möglich welche für eigene (Pseudo-)Sprachen zu erstellen.

    Außerdem sind die Formate überaus nützlich, speziell dann, wenn man selbst Windowsuser ist und mit bspw. Linuxuser zusammenarbeitet. Man kann dort zwischen Windows, Unix und MAC Format wechseln und auch verschiedene Kodierungen wie ANSI, UTF-8,.. stehen einem zur Verfügung.
    Beeinhaltet einen Hexeditior, kann Funktionslisten anzeigen (zur schnellen Navigation speziell bei größeren Projekten) und bieten noch eine Vielzahl anderer Funktionen.

    Kleines Manko an dem Syntaxhighlighting ist, dass es die Dateien an Hand ihrer Dateiendung interpretiert anstatt an Hand ihres Inhalts. Das kann manchmal zu Problemen führen. Ansonsten kann natürlich die Sprache auch manuell ausgewählt werden.
    Hoffe, dass sich das in einer der kommenden Versionen verbessert.

    Ach ja, er ist OpenSource, d.h. man könnte auch selbst etwas daran ändern bzw. daran mitarbeiten.
    (Wegen dem Punkt davor: Leider derzeit keine Zeit ;) )
  • in: Div Positionierung

    geschrieben von pjhimself

    Wenn du den Footer einfach nur innerhalb des Main-Div ganz unten anordnern willst, sollte die relative Positionierung ausreichend sein. Du implementierst dann deinen Footer einfach als letzten Div innerhalb deines Main-Divs. Dadurch wird er immer relativ zum letzten Div davor angeordnet, also entsprechend unter diesem.

    Wenn du allerdings den Footer zB am unteren Ende der Seite anzeigen lassen willst, kannst du dass wie folgt machen:
    ...
    <style type=\"text/css\">
        ...
        div.footer {
            position: fixed;
            bottom: 0;
        }
        ...
    </style>
    
    ...
    
    <div class=\"footer\">This is my footer.</div>
    
    ...

    Über das bottom-Attribut kannst du hierbei noch den Abstand entsprechend deinen Wünschen anpassen.
    Durch fixed bleibt dieses Element zudem immer unten fixiert und wird nicht beim Scrollen bewegt, kann aber in Kombination mit dem IE Probleme bereiten, da dieser das soweit ich weiß wohl nur teilweise unterstützt.
    Außerdem sollte auch eine Zentrierung (wenn gewünscht) mittels \"left: auto; right: auto;\" möglich sein. Alte Tags wie center sind expired. Das kannst du dir aber genauer bei Selfhtml ansehen.

    Zudem kann ich zum Validieren der Website den HTML Validator http://validator.w3.org/ und den CSS Validator http://jigsaw.w3.org/css-validator/ von w3c.org nur empfehlen zu benutzen. Damit siehst du recht schnell, an welchen Stellen du nicht standardkonform gearbeitet hast und wo es Probleme beim Anzeigen und Interpretieren deiner HTML-Seite kommen kann

Login zum Webhosting ohne Werbung!