• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Frage : Abspeicherung (3. Fälle können eintreten)

So wie ich das sehe wäre es leicht diese "Stelle" so umzubauen, dass die zusätzlichen Spalten befüllt werden. Allerdings ist der Code anfällig für SQL-Injection, was dazu führen kann, dass jeder beliebige User Dir Deine Datenbank komplett löschen kann.
Wenn das also von Deiner gekauften Software so kaputt ausgeliefert wurde, dann solltest Du Dich mal an den Hersteller wegen eines Updates wenden. Denn SQL-Injections sind heutzutage nichts neues mehr, und entsprechende Gegenmaßnahmen sind weitreichend bekannt.

Naja am leichtesten wäre es wohl für jede Position das ganze einzeln abzuspeichern und wieder neu auszulesen :

Sprich hier :

PHP:
  //Rechter Verteidiger
  $result = mysql_query("SELECT * FROM ".$conf['db_prefix']."_spieler WHERE (position='Rechter Verteidiger' OR position2='Rechter Verteidiger' OR position3='Rechter Verteidiger') AND verein_id='".$verein['id']."' AND verein_id > '0' AND verletzt='0' AND gesperrt='0' AND status='1' ORDER BY nachname ASC, kunstname ASC");
  while ($spieler = mysql_fetch_array($result)) {


    $row_rv = $tpl_inhalt->getblock("row_rv");

    $spieler_name = ($spieler['kunstname']) ? $spieler['kunstname'] : substr($spieler['vorname'],0,1).". ". $spieler['nachname'];

        $ds =  $spieler['w_staerke'];
       $position = "Rechter Verteidiger";
    $row_rv->assign(array(
      "spieler_id"=>$spieler['id'],
      "spieler_name"=>stripslashes($spieler_name),
          "ds"=>$ds
    ));

 // Insert bzw Update Befehl bzw auslesungsbefehl

wäre wohl am einfachsten oder denk ich mal wieder zu simple ?

    if ($spieler['id'] == $aufstellung['spieler1']) $row_rv->assign_block("rv_selected");

    $tpl_inhalt->assign("row_rv",$row_rv);
    $row_rv->clear();

  }

  mysql_free_result($result);
  //-Rechter Verteidiger

@miniA4kuser : weil die Position ja später festgelegt wird (im obenstehenden Code) ;)
 
Naja am leichtesten wäre es wohl für jede Position das ganze einzeln abzuspeichern und wieder neu auszulesen :

Sprich hier :
Also Du wirst Deine Änderungen sicherlich an mindestens zwei verschiedenen Stellen durchführen müssen:
1. dort, wo die Spieler gespeichert werden, müssen auch ihre Positionen festgehalten werden
2. dort, wo die Positionen der Spieler ausgelesen und dargestellt werden sollen (dies können mehrere Stellen sein, weil es ja eventuell auch Statistik-Seiten gibt, in denen die Positionen eine Rolle spielen)
Ob der im letzten Beitrag gezeigte Code-Fetzen eine der beiden Stellen darstellt, kann ich nicht erkennen, er ist komplett aus dem Kontext gerissen (obwohl ich vermute, dass Du die Felder position2 und postion3 bereits selbst hinzugefügt hast, beim Versuch das Problem damit anzugehen).
 
Also der oben gepostete code fetzen ist für das auslesen und anzeigen zuständig ;)

Was muss ich denn nun genau machen?
 
Also der oben gepostete code fetzen ist für das auslesen und anzeigen zuständig ;)

Was muss ich denn nun genau machen?
Bevor man was auslesen kann, muss man erst einmal was gespeichert haben. Und damit man was speichern kann, muss man festlegen wie.
Da wir nicht wissen, was Du wie festgelegt / definiert hast und welche Codeteile wie zusammenhängen, noch was diese für Aufgaben / Anteil am Gesamtprojekt haben, fällt es schwer Dir konkrete Hinweise zu geben. Zumal Du auch noch nicht so wirklich den Durchblick hast, was SQL und PHP angeht. Da wirst Du Dich wohl oder übel reinarbeiten müssen.
 
Bevor man was auslesen kann, muss man erst einmal was gespeichert haben. Und damit man was speichern kann, muss man festlegen wie.
Da wir nicht wissen, was Du wie festgelegt / definiert hast und welche Codeteile wie zusammenhängen, noch was diese für Aufgaben / Anteil am Gesamtprojekt haben, fällt es schwer Dir konkrete Hinweise zu geben. Zumal Du auch noch nicht so wirklich den Durchblick hast, was SQL und PHP angeht. Da wirst Du Dich wohl oder übel reinarbeiten müssen.


also hier werden die Spieler eingelesen und in das Array $default_aufstellung gespeichert :

PHP:
      //Spieler
      for ($i=1; $i<=11; $i++) {
        $default_aufstellung .= "spieler".$i."='".$_POST['spieler_'. $i]."',";
      }

Abgespeichert wird das ganze hier :

PHP:
      $res = mysql_query("SELECT COUNT(id) AS exist FROM ".$conf['db_prefix']."_aufstellung WHERE verein_id='".$verein['id']."'");
      $tab = mysql_fetch_array($res);
      mysql_free_result($res);

      if ($tab['exist']) {
         $res = mysql_query("UPDATE ".$conf['db_prefix']."_aufstellung SET ".$default_aufstellung." WHERE verein_id='".$verein['id']."'");
      }
      else {
        $res = mysql_query("INSERT INTO ".$conf['db_prefix']."_aufstellung SET ".$default_aufstellung.", verein_id='".$verein['id']."'");
      }

      if (!$res) {
        $err[] = "<b>Datenbankfehler:</b> ". mysql_error();
      }

und ausgegeben hier :

PHP:
 //Innenverteidiger
  $result = mysql_query("SELECT * FROM ".$conf['db_prefix']."_spieler WHERE (position='Innenverteidiger' OR position2='Innenverteidiger' OR position3='Innenverteidiger') AND verein_id='".$verein['id']."' AND verein_id > '0' AND verletzt='0' AND gesperrt='0' AND status='1' ORDER BY nachname ASC, kunstname ASC");
  while ($spieler = mysql_fetch_array($result)) {

    $row_iv = $tpl_inhalt->getblock("row_iv");

    $spieler_name = ($spieler['kunstname']) ? $spieler['kunstname'] : substr($spieler['vorname'],0,1).". ". $spieler['nachname'];

        $ds =  $spieler['w_staerke'];

    $row_iv->assign(array(
      "spieler_id"=>$spieler['id'],
      "spieler_name"=>stripslashes($spieler_name),
          "ds"=>$ds
    ));

    if ($spieler['id'] == $aufstellung['spieler3']) $row_iv->assign_block("iv_selected");

    $tpl_inhalt->assign("row_iv",$row_iv);
    $row_iv->clear();

  }

  mysql_free_result($result);
  //-Innenverteidiger

meine Überlegung war die Position wo er spielt zusammen mit dem Spieler zu übergeben nur komm ich grad auf keinen nenner wie..
 
also hier werden die Spieler eingelesen und in das Array $default_aufstellung gespeichert :
PHP:
      //Spieler
      for ($i=1; $i<=11; $i++) {
        $default_aufstellung .= "spieler".$i."='".$_POST['spieler_'. $i]."',";
      }
Die Spieler kommen per POST von irgendeinem Formular. Wenn von dort auch die Positionen kommen, dann kannst Du die Schleife um eine Zeile erweitern, die auch diese Positionen übernimmt. Lass Dir halt notfalls mal ausgeben, welche SQL-Statements Dein Skript zusammenbaut. Mit minimalen SQL-Kenntnissen sollte das eigentlich kein Problem sein.

Ansonsten ist Dein Datenbank-Code immer noch gefährlich kaputt. Benutzereingaben ungefiltert auf die Datenbank zu jagen ist mutig. Sobald der erste Benutzer mit Namen "'; drop table <<prefix>>_aufstellung; --" ankommt, ist Deine Aufstellungstabelle restlos und ohne Rückmeldung gelöscht und Du stehst ohne Daten da.
Außerdem haben Deine Statements ein Komma zuviel, offensichtlich schluckt MySQL das trotzdem.
 
ich hab versucht per input type hidden die Positionen mit rüberzunehmen.. Jedoch hat das das ganze Formular zerschossen..

Das Formular ist so aufgebaut :

PHP:
<table width="100%" cellspacing="0" cellpadding="0" border="0">
   <tr>
 <td align="center">

                    <select name="spieler_3" class="klein">

                      <option></option>
<!-- START row_iv -->

    <option value="{spieler_id}"<!-- START iv_selected --> selected<!-- END iv_selected --> class="klein">{spieler_name} ({ds})</option><!-- END row_iv -->

                   </select>
                  </td>
 
Jedoch hat das das ganze Formular zerschossen..
Dann musst Du das halt so machen, dass es nicht das Formular zerschießt - was auch immer das heißt.
Du musst schon ein bißchen konkreter werden, vor allem solltest Du Dir den Code im Browser anschauen, Dein Template ist da nur im zweiten Schritt relevant.
 
Ich hatte es so :

PHP:
<table width="100%" cellspacing="0" cellpadding="0" border="0">
   <tr>
 <td align="center">

                    <select name="spieler_3" class="klein">
                    <input type="hidden" name="position" value="ms">

                      <option></option>
<!-- START row_iv -->

    <option value="{spieler_id}"<!-- START iv_selected --> selected<!-- END iv_selected --> class="klein">{spieler_name} ({ds})</option><!-- END row_iv -->

                   </select>
                  </td>

So waren dann die Auswahl felder leer. Und die Möglichkeiten standen neben den leeren Auswahlfeldern ;)
 
also müsste der input tag vor dem select kommen?
Auf jeden Fall außerhalb, ob davor oder danach ist bei hidden völlig Wurscht.
Aber so ganz kann ich den Ansatz mit einem Hidden-Feld nicht verstehen, Du hast doch 11 Spieler und willst 11 Positionen speichern. Die können ja schlecht alle "position" heißen, wie willst Du denn alle 11 unterscheiden? Außerdem wenn die Felder alle hidden sind, dann scheint ja die Position der einzelnen Spieler schon festzustehen, je nachdem ob man als Spieler_1 oder Spieler_2, usw. ausgewählt wird. Warum brauchst Du da überhaupt eine extra Position?
 
Auf jeden Fall außerhalb, ob davor oder danach ist bei hidden völlig Wurscht.
Aber so ganz kann ich den Ansatz mit einem Hidden-Feld nicht verstehen, Du hast doch 11 Spieler und willst 11 Positionen speichern. Die können ja schlecht alle "position" heißen, wie willst Du denn alle 11 unterscheiden? Außerdem wenn die Felder alle hidden sind, dann scheint ja die Position der einzelnen Spieler schon festzustehen, je nachdem ob man als Spieler_1 oder Spieler_2, usw. ausgewählt wird. Warum brauchst Du da überhaupt eine extra Position?


ya es steht auch fest wo spieler_1 usw spielen, ich will nur vom Formular aus die Position übergeben damit man dann die Position abspeichern kann
 
Ja Spieler_1, Spieler_2 ist vordefiniert was diese spielen.. Ich will halt vom Formular aus übergeben lassen welche Position der Spieler spielt ;)
 
Ja Spieler_1, Spieler_2 ist vordefiniert was diese spielen.. Ich will halt vom Formular aus übergeben lassen welche Position der Spieler spielt ;)
Wenn es sowieso klar ist, dann muss man die Position gar nicht wirklich speichern oder übergeben, denn es ist ja implizit festgelegt. Außerdem ist es dumm sich auf Daten vom Client / Benutzer zu verlassen (siehe auch meinen Einwurf zu SQL-Injection), weil wenn jemand ein bißchen was kann, dann könnte er / sie / es Dir locker zwei (oder 11) Tormänner unterjubeln (und dann Deine Datenbank löschen). Ich hoffe Du prüfst irgendwo, ob jeder Spieler nur einmal ausgewählt wurde.
 
Ja klar es wird geprüft das ein Spieler nur einmal ausgewählt ist ;) Dieses mit der SQL-Injection werde ich selbstverständlich noch beheben, wir befinden uns jedoch gerade noch in der Entwicklungsphase :). Naja aber es muss ja dennoch gespeichert werden auf welcher Position der Spieler spielt, denn es wird ja in die Aufstellungs-Tabelle nur die spieler_id abgefragt. In der Berechnung werden sich die ganzen Spieler Informationen (spielerfähigkeiten etc) dann von der Spieler tabelle geholt. Sprich es müsste spätestens (bzw nur) in der Spieler Tabelle festgehalten werden auf welcher Position der Spieler aufgestellt wurde.
 
Naja aber es muss ja dennoch gespeichert werden auf welcher Position der Spieler spielt, denn es wird ja in die Aufstellungs-Tabelle nur die spieler_id abgefragt.
Du speicherst die Spieler ID des ersten Spielers im Feld spieler_1. Dein hidden-Feld ist nicht editierbar, bedeutet also der Spieler im Feld spieler_1 ist immer der Torwart.
 
Ja eben richtig ;) spieler_2 ist z.B. in einem System der Linksverteidiger in einem anderen System jedoch ein Innenverteidiger (nur als Beispiel jetzt denn diese Fälle gibt es wirklich ;)). In der Aufstellungsdatei ist das ganze auch kein problem da bleibt der Spieler auch LV IV usw usf. Bei der Berechnung jedoch zieht er ja nur die spieler_id zugrunde und frägt dann die Hauptposition ab (jedoch nicht die Position auf welche der Spieler eingesetzt wurde :)).

Sprich ich setzte Spieler X Hauptposition DM Nebenposition LM auf der Position LM ein. Dann wird das ganze auch so ausgegeben.

Bei der Berechnung jedoch wird wieder auf die Hauptposition zurückgegriffen. sprich der eigentlich im LM spielende Spieler, spielt dann wieder im DM (was ja nicht stimmt). Also muss spätestens in der spieler tabelle festgehalten werden auf welcher Position der Spieler eingesetzt wird
 
Ja eben richtig ;) spieler_2 ist z.B. in einem System der Linksverteidiger in einem anderen System jedoch ein Innenverteidiger (nur als Beispiel jetzt denn diese Fälle gibt es wirklich ;)). In der Aufstellungsdatei ist das ganze auch kein problem da bleibt der Spieler auch LV IV usw usf. Bei der Berechnung jedoch zieht er ja nur die spieler_id zugrunde und frägt dann die Hauptposition ab (jedoch nicht die Position auf welche der Spieler eingesetzt wurde :)).
Nunja, dann kannst Du auch schlecht mit hidden-Feldern arbeiten, weil da kann der Benutzer kaum die aktuelle, gesetzte Position des Spielers ändern.
 
Mh ich dachte mir einfach das man einfach vom Formular die Position übergibt wo er spielt. Sprich das der User eben nur den Spieler auswählt und das Script dann auswertet wo der Spieler gesetzt ist
 
Zurück
Oben