PHP Code aktualisieren / Funktionsänderung

Fonsi-Heizer

Mitglied
Hallo zusammen.

Ich darf wieder einmal um Euren Rat bitten.

Zum Anfang poste ich hier gleich mal den PHP Code um was es geht:

PHP:
<html>
<head>
    <style type="text/css">
        body { background-color:#C0C0C0; font-family:Verdana; color:#FFFFFF;}
        .tischueberschrift { color:#8A1A19; font-weight:bold; font-size:30pt;}
        .staende { border:1px solid #8A1A19; background-color:#D4AAAB;}
        td { font-size:10pt; font-weight:bold;}
        .footer {font-family: verdana; font-size: 10px; color: #8A1A19; font-weight: bold;}
        input.runden {width:30px;}
        img {border:0;}
    </style>
</head>
<body>
<?php
    //phpinfo();
    $aktualisieren = false;
    if (isset($_REQUEST["do"])) {
        $aktion = $_REQUEST["do"];
        if ("reset" == $aktion) {
            $tisch = $_REQUEST["tisch"];
            $datei = "daten/$tisch/stand.txt";
            $wdatei = fopen($datei, "w+");
            fwrite($wdatei, "Spieler 1;000;Spieler 2;000;Spieler 3;000;Spieler 4;000;Runden;0;Status;0");
            fclose($wdatei);
            $aktualisieren = true;
        }
        if ("setrunde" == $aktion) {
            $tisch = $_REQUEST["do_tisch"];
            $runden = $_REQUEST["Runden_".$tisch];
            $s1 = $_REQUEST["Runden_".$tisch];
            $s2 = $_REQUEST["Runden_".$tisch];
            $datei = "daten/$tisch/stand.txt";
            $wdatei = fopen($datei, "w+");
            fwrite($wdatei, "Spieler 1;000;Spieler 2;000;Spieler 3;000;Spieler 4;000;Runden;$runden;Status;0");
            fclose($wdatei);
            $aktualisieren = true;      
        }
    }
    if (isset($_REQUEST["speichern"])) {
    $temp_tisch_old = "";
        $temp_tisch_akt = "";
        $temp_tisch_old_wert = "";
        foreach ($_REQUEST as $post_key => $post_wert) {
            $temp_tisch_akt = substr($post_key,0,8);
               if (substr($post_key,0,5) == "Tisch") {              
                if ($temp_tisch_akt == $temp_tisch_old) {
                    //jetzt muss gespeichert werden
                    $post_pfad = split("_",$post_key);              
                    $datei = "daten/$post_pfad[0]/spieler.xml";
                    //$datei = "daten/Tisch-1/spieler_temp.xml";
                    $post_wert = htmlentities($post_wert);
                    $temp_tisch_old_wert = htmlentities($temp_tisch_old_wert);
                       $wdatei = fopen($datei, "w+");
                    fwrite($wdatei, "<ArrayOfString>\n<string>$temp_tisch_old_wert</string>\n<string>$post_wert</string>\n<string>Spieler 3</string>\n<string>Spieler 4</string>\n</ArrayOfString>");
                    fclose($wdatei);
                }
               }
            $temp_tisch_old = substr($post_key,0,8);
            $temp_tisch_old_wert = $post_wert;
           //phpinfo();
        }
        $aktualisieren = true;
    }
  
    if ($aktualisieren) {
        //echo "<script>location.href=\"tische-internet-admin.php\";</script>";
    }
?>
<center>
  <span class="tischueberschrift">Turnierleitung Tisch-Administration</span>
</center><br>
<form name="form1" method="post" action="">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
    <tr>
        <td width="33%"></td>
        <td align="left" width="33%">
            <?php
          
            $Pfad="./daten/";
            $verzeichnisse = array();
          
            if($Verzeichniszeiger=opendir($Pfad))
            {
                //Filesystem sequentiell auslesen
                while($Datei=readdir($Verzeichniszeiger))
                {
                    //unötige Verzeichnisse entfernen
                    if ($Datei!="." && $Datei!=".." && $Datei!="undefined")
                    {
                        //Wenn es sich um eine Verzeichnis handelt
                        if(is_dir($Pfad.$Datei))
                        {
                            array_push($verzeichnisse, $Datei);
                        }
                    }
                }
                closedir($Verzeichniszeiger);
                // Sortieren des Arrays
                natsort ($verzeichnisse);
                //Ausgabe der Verzeichnisse              
            }
            ?>
            <table>
                <tr>
                    <td></td>
                    <td><img src="bilder/spacer.gif" height="1px" width="100px"/></td>
                    <td></td>
                    <td><img src="bilder/spacer.gif" height="1px" width="300px"/></td>
                    <td><img src="bilder/spacer.gif" height="1px" width="30px"/></td>
                    <td></td>
                    <td><img src="bilder/spacer.gif" height="1px" width="30px"/></td>
                    <td><img src="bilder/spacer.gif" height="1px" width="300px"/></td>
                    <td></td>
                    <td><div align="center" class="footer">race&nbsp;to</div></td>
                    <td></td>
                    <td><img src="bilder/spacer.gif" height="1px" width="50px"/></td>                  
                </tr>
                <?php
                    foreach ($verzeichnisse as $v) {
                        if ($v != "Raster_GP_2013" && $v != "Raster_Salzburg_open" && $v != "Tisch-20" && $v != "Tisch-21" && $v != "Tisch-15" && $v != "Tisch-23" && $v != "Tisch-24" && $v != "Tisch-25" && $v != "Tisch-26" && $v != "Tisch-27" && $v != "Tisch-28" && $v != "Tisch-29" && $v != "Tisch-30") {
                            //Spielstand Datei
                            $file = "daten/$v/stand.txt";                          
                            $spielstand = implode ("", file ($file));
                            $spielstaende = explode (";", $spielstand);
                            $s1s= ltrim($spielstaende[1],"0");
                            $s2s = ltrim($spielstaende[3],"0");
                            $status = $spielstaende[11];
                            $status = is_numeric($status) ? $status : 3;
                            $runden = $spielstaende[9];
                            $runden = is_numeric($runden) ? $runden : 0;
                            echo "<tr>\n";
                            echo "    <td bgcolor=\"#8A1A19\">&nbsp;</td>\n";
                            echo "    <td align=\"left\" class=\"staende\">\n";
                            echo "    $v\n";
                            echo "    </td>\n";
                            echo "    <td><img src=\"css/$status.png\" alt=\"Tisch\" /></td>\n";
                            //Spieler Datei
                            $spielfile = "daten/$v/spieler.xml";
                            $spieler = implode ("", file ($spielfile));
                            preg_match_all("|<[^>]+>(.*)</[^>]+>|U",$spieler,$ausgabe, PREG_SET_ORDER);
                            $s1 = $ausgabe[0][1];
                            $s2 = $ausgabe[1][1];
                            $s1_form = str_replace(" ","-",$s1);
                            $s2_form = str_replace(" ","-",$s2);
                          
                            if ($s1s == "") $s1s = "0";
                            if ($s2s == "") $s2s = "0";
                            echo "                    <td width=\"50%\" align=\"right\" class=\"staende\"> \n";
                            echo "                        <input name=\"".$v."_".$s1_form."\" type=\"text\" value=\"$s1\" maxlength=\"20\">\n";                                          
                            echo "                    </td>                                                \n";
                            echo "                    <td align=\"right\" class=\"staende\"> \n";
                            echo "                        " . $s1s . "            \n";                                      
                            echo "                    </td>                                                \n";
                            echo "                    <td> \n";
                            echo "                        -            \n";                                  
                            echo "                    </td>\n";
                            echo "                    <td class=\"staende\"> \n";
                            echo "                        " . $s2s . "            \n";                                  
                            echo "                    </td>\n";
                            echo "                    <td width=\"50%\" align=\"left\" class=\"staende\"> \n";
                            echo "                        <input name=\"".$v."_".$s2_form."\" type=\"text\" value=\"$s2\" maxlength=\"20\">\n";                                  
                            echo "                    </td>\n";
                            echo "                    <td></td>\n";
                            ?>
                            <td class="staende"><input class="runden" name="Runden_<?php echo $v; ?>" type="text" value="<?php echo $runden; ?>" maxlength="2"></td>
                            <td></td>
                            <td>
                            <a href="#" title="<?php echo $v; ?> Runden setzen und reset" onClick="if (!confirm('Soll der Rundenstand an <?php echo $v; ?> und Stand zurückgesetzt werden?')) return false; document.getElementById('do').value='setrunde';document.getElementById('do_tisch').value='<?php echo $v; ?>'; document.form1.submit();"><img src="css/reset.png" alt="Runden Speichern" /></a>
                            <!--&nbsp;
                            <a href="tische-internet-admin.php?do=reset&amp;tisch=<?php echo $v; ?>" title="<?php echo $v; ?> Reset" onclick="if (!confirm('Soll der <?php echo $v; ?> wirklich zurückgesetzt werden?')) return false;"><img src="css/reset.png" alt="Tisch zurücksetzen" /></a>--></td>
                            <?php
                        }
                    }                      
                ?>
                </tr>
                <tr>
                    <td></td>
                    <td><img src="bilder/spacer.gif" height="1px" width="100px"/></td>
                    <td></td>
                    <td><img src="bilder/spacer.gif" height="1px" width="300px"/></td>
                    <td><img src="bilder/spacer.gif" height="1px" width="30px"/></td>
                    <td></td>
                    <td><img src="bilder/spacer.gif" height="1px" width="30px"/></td>
                    <td align="right">
                        <input name="aktualisieren" type="submit" value="Refresh">
                        <input name="speichern" type="submit" value="Speichern">
                        <input name="do" id="do" type="hidden" value="">
                        <input name="do_tisch" id="do_tisch" type="hidden" value="">
                    </td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>
                <tr>
                    <td colspan="12" class="footer">
                    <img src="css/0.png" alt="Tisch" /> Waiting &nbsp;&nbsp;&nbsp;
                    <img src="css/1.png" alt="Tisch" /> In progress &nbsp;&nbsp;&nbsp;
                    <img src="css/2.png" alt="Tisch" /> Finished &nbsp;&nbsp;&nbsp;
                    <img src="css/3.png" alt="Tisch" /> Dataset Error &nbsp;&nbsp;&nbsp;
                    </td>
                </tr>              
            </table>
        </td>
        <td width="33%"></td>
    </tr>

</table>
</form>
</body>
</html>

Was macht dieses Script überhaupt?

Dieses Script liest aus den Verzeichnissen Tisch-1,... die stand.txt aus und gibt diese aus. Des weiteren gibt es eine Schreibe in Datei Funktion, welche zurzeit in eine spieler.xml die Daten schreibt.

Wie Ihr sehen könnt, ist hier auch eine "veraltete Funktion" split bestandteil, welche ich mittlerweile nur mit explode ersetzt habe.

Was möchte ich nun erreichen / aktualisieren?

Ich möchte gerne, statt der spieler.xml die stand.txt beschreiben!
Des Weiteren hat sich der Aufbau der stand.txt geändert.

ALT:
Code:
Spieler 1;000;Spieler 2;000;Spieler 3;000;Spieler 4;000;Runden;0;Status;0
NEU:
Code:
1;Spieler 1;0;Spieler 2;0;Spieler 3;0;Spieler 4;0;00:00:00;0;0

Wichtig wäre das die Spieler 1 - 4 via dem oben angeführten Script beschrieben werden könnten, sowie auch die Runden.

Hier noch einmal in Grün markiert welche Daten ich in die neue stand.txt schreiben möchte:

1;Spieler 1;0;Spieler 2;0;Spieler 3;0;Spieler 4;0;00:00:00;0;0

Vielen Dank im Voraus.

LG
 
Zuletzt bearbeitet:
Ich habe die 200 Zeilen Code noch gar nicht weiter angeschaut.
Kannst du ev. eine abgespeckte Version posten? Die ganzen echos sind für deine Frage total irrelevant und blasen nur den Code zur Unlesbarkeit auf.
 
Hallo Yaslaw!
Danke für Deine Antwort!

Ich versuche mein bestes, den Code zu kürzen und aufzugliedern:

Hier noch ein Screenshot der Oberfläche:

2v7hg8xp.png


Fangen wir am Anfang mit folgenden Code an:

PHP:
<?php
    //phpinfo();
    $aktualisieren = false;
    if (isset($_REQUEST["do"])) {
        $aktion = $_REQUEST["do"];
        if ("reset" == $aktion) {
            $tisch = $_REQUEST["tisch"];
            $datei = "daten/$tisch/stand.txt";
            $wdatei = fopen($datei, "w+");
            fwrite($wdatei, "1;Spieler 1;0;Spieler 2;0;Spieler 3;0;Spieler 4;0;00:00:00;0;0");
            fclose($wdatei);
            $aktualisieren = true;
        }
        if ("setrunde" == $aktion) {
            $tisch = $_REQUEST["do_tisch"];
            $runden = $_REQUEST["Runden_".$tisch];
            $s1 = $_REQUEST["Runden_".$tisch];
            $s2 = $_REQUEST["Runden_".$tisch];
            $datei = "daten/$tisch/stand.txt";
            $wdatei = fopen($datei, "w+");
            fwrite($wdatei, "1;Spieler 1;0;Spieler 2;0;Spieler 3;0;Spieler 4;0;00:00:00;0;$runden");
            fclose($wdatei);
            $aktualisieren = true;     
        }
    }
    if (isset($_REQUEST["speichern"])) {
    $temp_tisch_old = "";
        $temp_tisch_akt = "";
        $temp_tisch_old_wert = "";
        foreach ($_REQUEST as $post_key => $post_wert) {
            $temp_tisch_akt = substr($post_key,0,8);
               if (substr($post_key,0,5) == "Tisch") {            
                if ($temp_tisch_akt == $temp_tisch_old) {
                    //jetzt muss gespeichert werden
                    $post_pfad = explode("_",$post_key);            
                    $datei = "daten/$post_pfad[0]/stand.txt";
                    $post_wert = htmlentities($post_wert);
                    $temp_tisch_old_wert = htmlentities($temp_tisch_old_wert);
                       $wdatei = fopen($datei, "w+");
                    fwrite($wdatei, "\n;$temp_tisch_old_wert;\n;$post_wert;\n;Spieler 3;\n;Spieler 4;\n;");
                    fclose($wdatei);
                }
               }
            $temp_tisch_old = substr($post_key,0,8);
            $temp_tisch_old_wert = $post_wert;
           //phpinfo();
        }
        $aktualisieren = true;
    }
 
    if ($aktualisieren) {
        //echo "<script>location.href=\"tische-internet-admin.php\";</script>";
    }
?>

Dieser Abschnitt hängt mit folgendem zusammen:

PHP:
<a href="#" title="<?php echo $v; ?> Runden setzen und reset" onClick="if (!confirm('Soll der Rundenstand an <?php echo $v; ?> und Stand zurückgesetzt werden?')) return false; document.getElementById('do').value='setrunde';document.getElementById('do_tisch').value='<?php echo $v; ?>'; document.form1.submit();"><img src="css/reset.png" alt="Runden Speichern" /></a>
                            <!--&nbsp;
                            <a href="tische-internet-admin.php?do=reset&amp;tisch=<?php echo $v; ?>" title="<?php echo $v; ?> Reset" onclick="if (!confirm('Soll der <?php echo $v; ?> wirklich zurückgesetzt werden?')) return false;"><img src="css/reset.png" alt="Tisch zurücksetzen" /></a>--></td>

PROBLEM:

Der Befehl do & do_tisch sollte bei Betätigung nur die Runden überschreiben, aber nicht die Spieler bzw. Spielstände zurücksetzen.

Beim "speichern" sollte ebenfalls, nur dass gespeichert werden, was auch wirklich geändert wird.

Das wäre eigtl. schon alles, was noch fehlt, im Moment.

Das andere hab ich bereits anpassen können!
 
Hallo.

Ich habe das Problem mittlerweile gelöst, indem ich den Datensatz in ein Array gepackt habe, und dann nur noch die zu ersetzenden Arrays zurück gebe.

LG
 
Zurück