BenCC: PHP-Script funktioniert nicht so richtig

Hallo Leute,

ich habe ein PHP-Schript, welches die Aufgabe hat, Browser zu identifizieren und
das Erebnis grafisch auszugeben. Habe das Script soweit geschrieben, aber
irgendwie macht es nicht das, was ich will. Wenn ich mit einem bestimmten Browser
z.B. IE5.5 die Site anwähle, dann geschieht nichts. D.h., dass die Anzahl der
Besuche sich nicht ändert. Die Gesamtzahl bleibt auf 9 und bei jedem Browsertyp
habe ich nur einen Besuch. Ich habe Euch das Script mal gepostet, für den Fall,
dass jemand weiss, woran das liegt.
PS: In der Datei ergebnis.txt habe ich an neun Stellen durch Komma getrennt
als Startwert jeweils den Wert 0 festgelegt.

<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'};
if(preg_match('/Mozilla/3.0\ (.*/',$User)) { $NS30+1; }
elseif(preg_match('/Mozilla/4.0\ (.*/',$User)) { $NS40+1; }
elseif(preg_match('/Mozilla/4.5\ (.*/',$User)) { $NS45+1; }
elseif(preg_match('/Mozilla/4.7\ (.*/',$User)) { $NS47+1; }
elseif(preg_match('/Mozilla/5.0\ (.*/',$User)) { $NS50+1; }
elseif(preg_match('/Mozilla/2.0\ (.*/',$User)) { $IE30+1; }
elseif(preg_match('/Mozilla/4.0\ (.*/',$User)) { $IE40+1; }
elseif(preg_match('/Mozilla/4.0\ (.*/',$User)) { $IE50+1; }
elseif(preg_match('/Opera/(.*/',$User)) { $OPER+1; }
else {$OTHER++; }

$datei="ergebnis.txt";
$zeiger=fopen($datei,"r");
$umfrage=fread($zeiger,filesize($datei));
fclose($zeiger);
// String zerlegen, Array entsteht
$umfrage=explode(",",$umfrage);
// Welcher Wert wurde im Formular ausgewählt?
// Diese Position wird um 1 erhöht!
$umfrage[$User]=++;
// Gesamtzahl aller Wahlvorgänge
$gesamt=$umfrage[$NS30]+$umfrage[$NS40]+$umfrage[$NS45]+$umfrage[$NS47]+$umfrage[$NS50]+$umfrage[$IE30]+$umfrage[$IE40]+$umfrage[$IE50]+$umfrage[$OPER]+$umfrage[$OTHER];
// Höchstlänge der Balken angeben
$laenge=400;
// Anteil von Balken 1 (Indexwert NS30!)
$laengeNS30=$umfrage[$NS30]*$laenge/$gesamt;
// Anteil von Balken 2 (Indexwert NS40!)
$laengeNS40=$umfrage[$NS40]*$laenge/$gesamt;
// Anteil von Balken 3 (Indexwert NS45!)
$laengeNS45=$umfrage[$NS45]*$laenge/$gesamt;
// Anteil von Balken 4 (Indexwert NS47!)
$laengeNS47=$umfrage[$NS47]*$laenge/$gesamt;
// Anteil von Balken 5 (Indexwert NS50!)
$laengeNS50=$umfrage[$NS50]*$laenge/$gesamt;
// Anteil von Balken 6 (Indexwert IE30!)
$laengeIE30=$umfrage[$IE30]*$laenge/$gesamt;
// Anteil von Balken 7 (Indexwert IE40!)
$laengeIE40=$umfrage[$IE40]*$laenge/$gesamt;
// Anteil von Balken 8 (Indexwert IE50!)
$laengeIE50=$umfrage[$IE50]*$laenge/$gesamt;
// Anteil von Balken 9 (Indexwert OPER!)
$laengeOPER=$umfrage[$OPER]*$laenge/$gesamt;
// Anteil von Balken 10 (Indexwert OPER!)
$laengeOTHER=$umfrage[$OTHER]*$laenge/$gesamt;
// Werte auf ganze Zahlen runden
$laengeNS30=round($laengeNS30);
$laengeNS40=round($laengeNS40);
$laengeNS45=round($laengeNS45);
$laengeNS47=round($laengeNS47);
$laengeNS50=round($laengeNS50);
$laengeIE30=round($laengeIE30);
$laengeIE40=round($laengeIE40);
$laengeIE50=round($laengeIE50);
$laengeOPER=round($laengeOPER);
$laengeOTHER=round($laengeOTHER);
// Ausgabe nur für Testzwecke:
// echo "$laenge0 $laenge1 $laenge2";
?>
<p>Bisher haben <i><?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;?>" bgcolor="red"> </td>
<td> <i><?php echo $umfrage[$NS30];?></i></td>
</tr></table>
<table border="0">
<tr>
<td><b>Netscape4.0</b></td>
<td> </td><td width="<?php echo $laengeNS40;?>" bgcolor="yellow"> </td>
<td> <i><?php echo $umfrage[$NS40];?></i></td>
</tr></table>
<table border="0">
<tr>
<td><b>Netscape4.5</b></td>
<td> </td><td width="<?php echo $laengeNS45;?>" bgcolor="green"> </td>
<td> <i><?php echo $umfrage[$NS45];?></i></td>
</tr></table>
<table border="0">
<tr>
<td><b>Netscape4.7</b></td>
<td> </td><td width="<?php echo $laengeNS47;?>" bgcolor="blue"> </td>
<td> <i><?php echo $umfrage[$NS47];?></i></td>
</tr></table>
<table border="0">
<tr>
<td><b>Netscape5.0</b></td>
<td> </td><td width="<?php echo $laengeNS50;?>" bgcolor="black"> </td>
<td> <i><?php echo $umfrage[$NS50];?></i></td>
</tr></table>
<table border="0">
<tr>
<td><b>IE3.0</b></td>
<td> </td><td width="<?php echo $laengeIE30;?>" bgcolor="orange"> </td>
<td> <i><?php echo $umfrage[$IE30];?></i></td>
</tr></table>
<table border="0">
<tr>
<td><b>IE4.0</b></td>
<td> </td><td width="<?php echo $laengeIE40;?>" bgcolor="pink"> </td>
<td> <i><?php echo $umfrage[$IE40];?></i></td>
</tr></table>
<table border="0">
<tr>
<td><b>IE5.0</b></td>
<td> </td><td width="<?php echo $laengeIE50;?>" bgcolor="grey"> </td>
<td> <i><?php echo $umfrage[$IE50];?></i></td>
</tr></table>
<table border="0">
<tr>
<td><b>Opera</b></td>
<td> </td><td width="<?php echo $laengeOPER;?>" bgcolor="blue"> </td>
<td> <i><?php echo $umfrage[$OPER];?></i></td>
</tr></table>
<table border="0">
<tr>
<td><b>Andere Browser</b></td>
<td> </td><td width="<?php echo $laengeOTHER;?>" bgcolor="magenta"> </td>
<td> <i><?php echo $umfrage[$OTHER];?></i></td>
</tr></table>
</body>
</html>

Danke im Voraus für Tip.

mfg
BenC

  1. if(preg_match('/Mozilla/3.0\ (.*/',$User)) { $NS30+1; }
    elseif(preg_match('/Mozilla/4.0\ (.*/',$User)) { $NS40+1; }
    elseif(preg_match('/Mozilla/4.0\ (.*/',$User)) { $IE40+1; }
    elseif(preg_match('/Mozilla/4.0\ (.*/',$User)) { $IE50+1; }

    Ja subba, die haste doch dreimal, also kommt er in den 2. und 3. nie rein, wg. "elseif".

  2. hi

    Besuche sich nicht ändert. Die Gesamtzahl bleibt auf 9 und bei jedem Browsertyp
    habe ich nur einen Besuch. Ich habe Euch das Script mal gepostet, für den Fall,
    dass jemand weiss, woran das liegt.
    PS: In der Datei ergebnis.txt habe ich an neun Stellen durch Komma getrennt
    als Startwert jeweils den Wert 0 festgelegt.

    $User = $ENV{'HTTP_USER_AGENT'};

    da fehlt ein Unterstrich vor dem "ENV" und außerdem müssen das sind das bei arrays keine geschweiften, sondern eckige klammern als so;
    $_ENV["HTTP_USER_AGENT"];

    if(preg_match('/Mozilla/3.0\ (.*/',$User))

    { $NS30+1; }
    hier werden die werte soweit ich weiß nicht erhöht es muss entweder
    $NS30+=1; heißen oder einfach $NS30++ (wie bei $OHTER++;)

    bei den folgenden genauso

    $umfrage[$User]=++;

    wenn "User" ein feld in dem array "umfrage" sein soll dann muss die zuweisung aber "$umfrage["User"]++; lauten (das "=" kann man weglassen)
    ich vermute mal das deine txt-datei etwas so aussieht:
    0,0,0,0,0 usw. (mit zahlen halt)
    dann bekommst du aber mit der funktion "explode" einen array auf den du mit $umfrage[0], $umfrage[1], usw, zugreifen kannst

    // Gesamtzahl aller Wahlvorgänge
    $gesamt=$umfrage[$NS30]+$umfrage[$NS40]+$umfrage[$NS45]+$umfrage[$NS47]+$umfrage[$NS50]+$umfrage[$IE30]+$umfrage[$IE40]+$umfrage[$IE50]+$umfrage[$OPER]+$umfrage[$OTHER];

    hier genauso

    hth
    Tobias

  3. Hallo Leute,

    ich habe ein PHP-Schript, welches die Aufgabe hat, Browser zu identifizieren und
    das Erebnis grafisch auszugeben. Habe das Script soweit geschrieben, aber
    irgendwie macht es nicht das, was ich will. Wenn ich mit einem bestimmten Browser
    z.B. IE5.5 die Site anwähle, dann geschieht nichts. D.h., dass die Anzahl der
    Besuche sich nicht ändert. Die Gesamtzahl bleibt auf 9 und bei jedem Browsertyp
    habe ich nur einen Besuch. Ich habe Euch das Script mal gepostet, für den Fall,
    dass jemand weiss, woran das liegt.
    PS: In der Datei ergebnis.txt habe ich an neun Stellen durch Komma getrennt
    als Startwert jeweils den Wert 0 festgelegt.

    <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'};

    $_ENV['HTTP_USER_AGENT']

    if(preg_match('/Mozilla/3.0\ (.*/',$User)) { $NS30+1; }

    hier wird eine nichtinitialisierte Variable ($NS30) benutzt.
    Es wird 1 zum aktuellen Wert (undefiniert) dazuaddiert und das Ergebnis nicht weiter benutzt.

    elseif(preg_match('/Mozilla/4.0\ (.*/',$User)) { $NS40+1; }
    elseif(preg_match('/Mozilla/4.5\ (.*/',$User)) { $NS45+1; }
    elseif(preg_match('/Mozilla/4.7\ (.*/',$User)) { $NS47+1; }
    elseif(preg_match('/Mozilla/5.0\ (.*/',$User)) { $NS50+1; }
    elseif(preg_match('/Mozilla/2.0\ (.*/',$User)) { $IE30+1; }
    elseif(preg_match('/Mozilla/4.0\ (.*/',$User)) { $IE40+1; }
    elseif(preg_match('/Mozilla/4.0\ (.*/',$User)) { $IE50+1; }
    elseif(preg_match('/Opera/(.*/',$User)) { $OPER+1; }

    hier gilt jeweils das gleiche.

    else {$OTHER++; }

    Hier wird der Wert der nichtinitialisierten Variable $OTHER um 1 erhöht.

    $datei="ergebnis.txt";
    $zeiger=fopen($datei,"r");
    $umfrage=fread($zeiger,filesize($datei));
    fclose($zeiger);
    // String zerlegen, Array entsteht
    $umfrage=explode(",",$umfrage);
    // Welcher Wert wurde im Formular ausgewählt?
    // Diese Position wird um 1 erhöht!
    $umfrage[$User]=++;

    Was ist das denn? Du weist $umfrage[$User] den Inkrement-Operator zu.

    Den Rest tu ich mir nicht mehr an....
    Andreas