Variablen für Browsertyp werden nicht gelesen
BenCC
- php
Hallo Leute,
bei folgendem Script funktioniert das Auslesen insoweit, als dass nur der Wert für "andere Browser" richtig dargestellt wird. d.h., wenn ich mit IE5.0 die Site lade, dann gibt es unter IE5.0 keine Veränderung, bei andere Browser wird die Variable ums eins erhöht.
Hat jemand Idee, woran es liegt? Hier das Schript:
PS: Die datei ergebnis.txt ist auf neun Stellen auf 0 gesetzt. Diese Werte sind durch Komma getrennt.
<html>
<head>
<title>Eine Web-Umfrage</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="white">
<h1>Die Ergebnisse der Umfrage</h1>
<p>Folgende Umfrageergebnisse wurden ermittelt:</p>
<?php
$user = $_ENV['HTTP_USER_AGENT'];
$datei="ergebnis.txt";
$zeiger=fopen($datei,"r");
$umfrage=fread($zeiger,filesize($datei));
fclose($zeiger);
$werte=explode(",",$umfrage);
if(preg_match('/Mozilla/3.0\ (.*/',$user)) { $werte[0]++; }
elseif(preg_match('/Mozilla/4.0\ (.*/',$user)) { $werte[1]++; }
elseif(preg_match('/Mozilla/4.5\ (.*/',$user)) { $werte[2]++; }
elseif(preg_match('/Mozilla/4.7\ (.*/',$user)) { $werte[3]++; }
elseif(preg_match('/Mozilla/5.0\ (.*/',$user)) { $werte[4]++; }
elseif(preg_match('/Mozilla/2.0\ (.*/',$user)) { $werte[5]++; }
elseif(preg_match('/Mozilla/4.0\ (.*/',$user)) { $werte[6]++; }
elseif(preg_match('/Mozilla/4.0\ (.*/',$user)) { $werte[7]++; }
elseif(preg_match('/Opera/(.*/',$user)) { $werte[8]++; }
else { $werte[9]++; }
// Gesamtzahl aller Wahlvorgänge
$gesamt=$werte[0]+$werte[1]+$werte[2]+$werte[3]+$werte[4]+$werte[5]+$werte[6]+$werte[7]+$werte[8]+$werte[9];
// Höchstlänge der Balken angeben
$laenge=400;
// Anteil von Balken 1 (Indexwert NS30!)
$laengeNS30=($werte[0]/$gesamt)*$laenge;
// Anteil von Balken 2 (Indexwert NS40!)
$laengeNS40=($werte[1]/$gesamt)*$laenge;
// Anteil von Balken 3 (Indexwert NS45!)
$laengeNS45=($werte[2]/$gesamt)*$laenge;
// Anteil von Balken 4 (Indexwert NS47!)
$laengeNS47=($werte[3]/$gesamt)*$laenge;
// Anteil von Balken 5 (Indexwert NS50!)
$laengeNS50=($werte[4]/$gesamt)*$laenge;
// Anteil von Balken 6 (Indexwert IE30!)
$laengeIE30=($werte[5]/$gesamt)*$laenge;
// Anteil von Balken 7 (Indexwert IE40!)
$laengeIE40=($werte[6]/$gesamt)*$laenge;
// Anteil von Balken 8 (Indexwert IE50!)
$laengeIE50=($werte[7]/$gesamt)*$laenge;
// Anteil von Balken 9 (Indexwert OPER!)
$laengeOPER=($werte[8]/$gesamt)*$laenge;
// Anteil von Balken 10 (Indexwert OTHER!)
$laengeOTHER=($werte[9]/$gesamt)*$laenge;
// Werte auf ganze Zahlen runden
$laengeNS30=round($laengeNS30,0);
$laengeNS40=round($laengeNS40,0);
$laengeNS45=round($laengeNS45,0);
$laengeNS47=round($laengeNS47,0);
$laengeNS50=round($laengeNS50,0);
$laengeIE30=round($laengeIE30,0);
$laengeIE40=round($laengeIE40,0);
$laengeIE50=round($laengeIE50,0);
$laengeOPER=round($laengeOPER,0);
$laengeOTHER=round($laengeOTHER,0);
$neuerinhalt= implode(",",$werte);
$schreiben=fopen($datei,"w");
fwrite($schreiben,$neuerinhalt);
fclose($schreiben);
?>
<p>Bisher haben <?php echo $gesamt; ?> Teilnehmer</i> abgestimmt.<br>
So sieht das Ergebnis aus:</p>
<table border="0">
<tr>
<td><b>Netscape3.0</b></td>
<td> </td><td width="<?php echo $laengeNS30; ?>px" bgcolor="red"> </td>
<td> <?php echo $werte[0];?></i></td>
</tr></table><table>
<tr>
<td><b>Netscape4.0</b></td>
<td> </td><td width="<?php echo $laengeNS40; ?>px" bgcolor="yellow"> </td>
<td> <?php echo $werte[1];?></i></td>
</tr></table><table>
<tr>
<td><b>Netscape4.5</b></td>
<td> </td><td width="<?php echo $laengeNS45; ?>px" bgcolor="green"> </td>
<td> <?php echo $werte[2];?></i></td>
</tr></table><table>
<tr>
<td><b>Netscape4.7</b></td>
<td> </td><td width="<?php echo $laengeNS47; ?>px" bgcolor="blue"> </td>
<td> <?php echo $werte[3];?></i></td>
</tr></table><table>
<tr>
<td><b>Netscape5.0</b></td>
<td> </td><td width="<?php echo $laengeNS50; ?>px" bgcolor="black"> </td>
<td> <?php echo $werte[4];?></i></td>
</tr></table><table>
<tr>
<td><b>IE3.0</b></td>
<td> </td><td width="<?php echo $laengeIE30; ?>px" bgcolor="orange"> </td>
<td> <?php echo $werte[5];?></i></td>
</tr></table><table>
<tr>
<td><b>IE4.0</b></td>
<td> </td><td width="<?php echo $laengeIE40; ?>px" bgcolor="pink"> </td>
<td> <?php echo $werte[6];?></i></td>
</tr></table><table>
<tr>
<td><b>IE5.0</b></td>
<td> </td><td width="<?php echo $laengeIE50; ?>px" bgcolor="grey"> </td>
<td> <?php echo $werte[7];?></i></td>
</tr></table><table>
<tr>
<td><b>Opera</b></td>
<td> </td><td width="<?php echo $laengeOPER; ?>px" bgcolor="blue"> </td>
<td> <?php echo $werte[8];?></i></td>
</tr></table><table>
<tr>
<td><b>Andere Browser</b></td>
<td> </td><td width="<?php echo $laengeOTHER; ?>px" bgcolor="magenta"> </td>
<td> <?php echo $werte[9];?></i></td>
</tr>
</table>
</body>
</html>
mfg
BenCC
bei folgendem Script funktioniert das Auslesen insoweit, als dass nur der Wert für "andere Browser" richtig dargestellt wird. d.h., wenn ich mit IE5.0 die Site lade, dann gibt es unter IE5.0 keine Veränderung, bei andere Browser wird die Variable ums eins erhöht.
$user = $_ENV['HTTP_USER_AGENT'];
Kenne Deinen Server nicht, aber normalerweise liegen die Daten aus User-Agent: in $_SERVER["HTTP_USER_AGENT"], nicht in $_ENV. Insofern ist es auch kein Wunder, daß Du keine Treffer bekommst - $user dürfte schlichtweg leer sein.
Davon mal abgesehen..
if(preg_match('/Mozilla/3.0\ (.*/',$user)) { $werte[0]++; }
elseif(preg_match('/Mozilla/4.0\ (.*/',$user)) { $werte[1]++; }
elseif(preg_match('/Mozilla/4.5\ (.*/',$user)) { $werte[2]++; }
elseif(preg_match('/Mozilla/4.7\ (.*/',$user)) { $werte[3]++; }
elseif(preg_match('/Mozilla/5.0\ (.*/',$user)) { $werte[4]++; }
elseif(preg_match('/Mozilla/2.0\ (.*/',$user)) { $werte[5]++; }
elseif(preg_match('/Mozilla/4.0\ (.*/',$user)) { $werte[6]++; }
elseif(preg_match('/Mozilla/4.0\ (.*/',$user)) { $werte[7]++; }
elseif(preg_match('/Opera/(.*/',$user)) { $werte[8]++; }
..halte ich diese Art der Browserunterscheidung für mehr als zweifelhaft. Wenn Du Browser unterscheiden willst, dann kannst Du das nicht mit dem Mozilla-Teil vorne machen, sondern nur mit dem, was hinten in der Klammer steht. Es gibt wahrscheinlich alleine ein Dutzend verschiedener Browser, die sich als Mozilla/4.0 melden; sämtliche IE-Versionen ab 4.0 zum Beispiel, Netscape 4.0 selber, diverse andere.
Allerdings hoffe ich, daß ich nichts übersehen habe und Du nichts weggelassen hast, denn wenn man sich die Liste oben anschaut, sollte eigentlich sofort deutlich sein, daß sie auch aus einem anderen Grund völlig sinnlos ist: Du hast drei separate if-Zweige drin, die allesamt auf "Mozilla 4.0" testen (1, 6 und 7) - welcher davon ist denn nun gültig?
Ich gehe also mal davon aus, daß das noch nicht fertig ist :)
Gruß,
soenk.e