Main /

Wer Weiss Was PHP

Wer Weiss Was PHP

Elsnis Antworten auf PHP-Fragen über Wer Weiss Was

oder: Fragen Sie Dr. Cloogshice!

Ich bin als PHP-Experte bei wer-weiss-was.de eingetragen.
Hier habe ich einige neuere Anfragen und meine Antworten darauf zum Thema PHP zusammengetragen, vielleicht sind sie auch noch für andere hilfreich.


Firefox ignoriert Style

Frage:
Ich habe (quasi als kleines Übungsprojekt) für ein kleines "Clübchen" eine Internetseite (www.sc-zur-post.de) basierend auf PHP 4.0 entwickelt und habe beim testen festgestellt, dass folgendes Style-Sheet im IE bestens funktioniert, in Firefox jedoch ignoriert wird:

<div align="center" style="position:relative;height=250px;width:100%;overflow=auto;">

Antwort:
Nein es liegt nicht an dem Style den Du genannt hast, sondern an folgendem:

<div align="center" style="position:relative; height=250px; width:100%; overflow=auto; scrollbar-base-color:orange; scrollbar-3dlight-color:orange; scrollbar-arrow-color:white; scrollbar-darkshadow-color:#c0c0c0; scrollbar-face-color:orange; scrollbar-highlight-color:orange; scrollbar-shadow-color:orange; scrollbar-track-color:white;">

Du benutzt damit einfach eine Eigenschaft, die allein der IE unterstützt und die kein Standard ist. Diese ganzen "Scrollbar" sachen sind eine Microsoft-Erfindung, da wurden wieder mal eigene Süppchen gekocht. siehe: http://de.selfhtml.org/css/eigenschaften/anzeigefenster.htm#scrollbar

Um ein Fenster in der Seite für alle Browser darzustellen kannst Du ein <iframe> verwenden. siehe: http://de.selfhtml.org/html/frames/eingebettete.htm

Ich persönlich würde auf den Scrollkram verzichten und die News ganz normal auf der Seite anzeigen, die dann ggf. länger wird, das läßt sich dann auch wenigstens ausdrucken, wenn man will.


Bestimmten Wert in datenbankgefülltem Select-Feld auswählen

Frage:
Ich habe ein Select Box erstellt die mit Werten aus einer Datenbank gefüllt wird.

<select name="kraj">
<?php while($kraj=mysql_fetch_array($resID)){
  echo "<option value=" . $kraj['id'] . " " . $selected . ">" . $kraj['name'] . "</option>";}
?>
</select>

Das heißt hier werden alle Namen aus der Tabelle "kraj" plus index aufgelistet.

  1. Wie mache ich es, dass beim Aufrufen dieser Form zum Beispiel der Eintrag mit dem Index 15 als "selected" angezeigt wird und nicht der erste?
  2. Und wie greife ich auf einen selektierten Wert zu?

Antwort:

  1. Indem Du z.B. einen zähler mitlaufen läßt oder in der Datenbank vermerkst, daß ein bestimmter Eintrag SELECTED sein soll: Das mit dem Zähler sähe z.B. so aus:
<select name="kraj">
<?php
$count = 0;
while( $kraj = mysql_fetch_array($resID) ) {
   if (++$count == 15)      
      $selected = 'SELECTED';
   else    
      $selected = '';
   echo "<option value=" . $kraj['id'] . " " . $selected . ">" . $kraj['name'] . "</option>";
}
?>
</select>
  1. Wie ist die frage gemeint? Beim Absenden des Formulars wird nur der selektierte Eintrag übertragen.

Prozessvisualisierung

Frage:
ich arbeite an einer Prozessvisualisierung. Die Daten kommen vom Prozess an einen DDE Server. Von dort gehen sie an die Prozesssoftware. Ich will nun die Daten parallel auf einer html seite ausgeben. Folglich habe ich mir überlegt, die Daten vom DDE Server zu holen und in eine MySQL Datenbank zu importieren. Von dort kann ich mittels php Seiten programmieren, die mir die Daten ausgeben. Kennst du einen Weg, die Daten vom DDE Server in eine MySQL Datenbank zu überführen? Das System läuft unter Windows NT 4.0

Antwort:
Ich weiß zwar nicht was ein DDE-Server ist, aber wenn er csv-Dateien schreiben kann ist zumindest eine schnittstelle vorhanden.
Es wäre möglich die CSV-Dateien bei jedem Zugriff direkt mit PHP einzulesen und auszuwerten, sofern es sich nicht um mehrere Megabytes handelt (wg. performance).

Ansonsten einfach im PHP-Script testen ob eine CSV vorhanden ist, diese in mysql importieren (entsprechende Meldung ausgeben - könnte länger dauern) und löschen. Wenn keine vorhanden ist, Daten aus mysql visualisieren. Achtung: Wenn das Importieren länger als 30 sek. dauert muß in der php.ini die "maximal execution time" hochgesetzt werden - sonst bricht das script ab.


Sessionverwaltung

Frage
in letzter Zeit habe ich mal ranbegeben mir eine neue Programmiersprache ins Repertoire zu holen: PHP!

Als kleines Übungsprojekt habe ich für ein Clübbchen aus der Umgebung eine I-Net-Site gebastelt, die einen Login-Bereich hat. Dieser wird über Sessions "verwaltet".
Erstellt habe ich das ganze lokal auf meinem Rechner zu Hause. Als alles einwandfrei funktionierte habe ich die Site testweise ins Netz geladen, und schwups, wie nicht anders erwartet traten Fehler auf.

Folgende Fehler werden mir gemeldet:

   Warning: session_start(): Cannot send session cookie - 
   headers already sent by (output started at index.php:2) in login.php on line 61

   Warning: session_start(): Cannot send session cache limiter - 
   headers already sent (output started at index.php:2) in login.php on line 61

Woran kann sowas liegen?

Antwort:

  1. Du hast die Warnings auf deinem lokalen System abgeschaltet (siehe php.ini) - sie traten garantiert dort auch schon auf.
  2. Der Fehler ist, daß eine Ausgabe vor session_start() erfolgte, das hat meist damit zu tun, daß vorher entweder ein echo oder print befehl steht (darf nicht -> anleitung lesen) oder die öffnende php-Klammer <?php nicht ganz am Anfang der Quellcodedatei steht, also entweder html-Tags oder Leerzeichen oder Zeilenumbrüche vor der Klammer stehen.

Hintergrund ist, daß die Session-Verwaltung über Cookies funktioniert, die im HTTP-Header dem browser übermittelt werden. Wenn aber bereits eine Ausgabe erfolgt ist, ist der Header bereits gesendet (er muß vor jeglicher Ausgebe gesendet werden - so schreibt es das http-Protokoll vor). Genau das sagt die Fehlermeldung aus.


PHP auf Windows NT 4

Frage
ich habe ein php-script das mit der php.exe ausgeführt werden soll.

Jetzt habe ich dem Kunden mit script samt php.exe und dlls hingespielt, habe jedoch ein kleines Problem. Der Kunde hat NT4? und da läuft die php.exe erst garnicht an sondern meldet, das wohl die Funktion GetLongPathNames nicht in der Kernel32.dll existiert.

Jetzt meine Frage:
Hat schon einmal jemand die php.exe unter NT zum Laufen gebracht und wenn, wie?

Antwort:
Wenn das Skript mit PHP4 einen Absturz verursacht wird es mit PHP 5 sicher auch nicht besser laufen. Besser das Script debuggen.
Die Funktion GetLongPathNames gibt es erst sein Windows 95, Windows NT unterstützt noch keine langen Dateinamen. Es funktionieren nur sehr alte Versionen von PHP unter NT. Keine Chance. Dem Kunden sollte nahegelegt werden ein aktuelles Betriebssystem zu verwenden, allein der Sicherheit wegen.

Frische Änderungen | Menü editieren
zuletzt geändert am 17.10.2005 15:40 Uhr von Elsni
Edit Page | Page History