[PHP MySQL] Eingabeformular aus zwei Tabellen - LEFTJOIN

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [PHP MySQL] Eingabeformular aus zwei Tabellen - LEFTJOIN

    Hallo,

    ich versuche mich gerade schrittweise an mein Eingabeformular heranzutasten.

    Mit folgendem Formular wähle ich den Spieltag aus:

    HTML-Code:
    <form id="SpAusw" name="Spieltag_Auswahl" method="post" action="WTTippen.php">
      <p>
        <label>Spieltag auswählen:    </label>
        <label>
        <select name="Spieltag_Auswahl2" id="Spieltag_Auswahl">
          <?php
    do {  
    ?>
          <option value="<?php echo $row_WTSpieltage['wtMatchID']?>"
    <?php if (!(strcmp($row_WTSpieltage['wtMatchID'], 
    $row_wmSpielplan['wmSpieltag']))) {echo "selected=\"selected\"";} ?>>
    <?php echo $row_WTSpieltage['wtMatchText']?></option>
          <?php
    } while ($row_WTSpieltage = mysql_fetch_assoc($WTSpieltage));
      $rows = mysql_num_rows($WTSpieltage);
      if($rows > 0) {
          mysql_data_seek($WTSpieltage, 0);
          $row_WTSpieltage = mysql_fetch_assoc($WTSpieltage);
      }
    ?>
        </select>
        <input type="submit" name="Go" id="Go" value="Go" />
        </label>
       <?php echo $_POST[Spieltag_Auswahl2]?></p>
    Ich möchte nun aus meinen beiden Tabellen

    wmSpielplan: wmSpielID ¦ wmSpielZeit ¦ wmSpielort ¦ wmTeamA ¦ wmTeamB ¦ wmSpieltag ¦ wmToreA ¦ wmToreB

    wtTipps: wtMatchID ¦ wtSpieltagID ¦ wtTeamA ¦ wtTeamB ¦ wtTippA ¦ wtTippB ¦ wtUser ¦ wtPunkte ¦ wtTimestamp

    die wmSpielID, wmSpiel_Timestamp, wmSpielort, wmTeamA, wmTeamB, wmSpieltag, wtTippA, wtTippB abfragen, wenn UserName, SpieltagID und MatchID übereinstimmen. Das habe ich soweit mit folgender Abfrage geschafft.

    PHP-Code:
    $Tipp_User_wtTipps "-1";
    if (isset(
    $row_UserName['UserName'])) {
      
    $Tipp_User_wtTipps $row_UserName['UserName'];
    }
    $SetSpieltag_wtTipps "-1";
    if (isset(
    $_POST[Spieltag_Auswahl2])) {
      
    $SetSpieltag_wtTipps $_POST[Spieltag_Auswahl2];
    }
    mysql_select_db($database_wm2010$wm2010);
    $query_wtTipps sprintf("SELECT wmspielplan.wmSpielID, wmspielplan.wmSpiel_Timestamp, 
    wmspielplan.wmSpielort, wmspielplan.wmTeamA, wmspielplan.wmTeamB, wmspielplan.wmSpieltag, 
    wttipps.wtTippA, wttipps.wtTippB FROM wmspielplan, wttipps WHERE 
    wmspielplan.wmSpielID=wttipps.wtMatchID AND wttipps.wtUser=%s AND wmspielplan.wmSpieltag=%s"

    GetSQLValueString($Tipp_User_wtTipps"text"),
    GetSQLValueString($SetSpieltag_wtTipps"text"));

    $wtTipps mysql_query($query_wtTipps$wm2010) or die(mysql_error());
    $row_wtTipps mysql_fetch_assoc($wtTipps);
    $totalRows_wtTipps mysql_num_rows($wtTipps); 
    Mit folgender Ausgabe lasse ich die Auswahl anzeigen:

    HTML-Code:
    <p>&nbsp;</p>
    <table border="1">
      <tr>
        <td>wmSpielID</td>
        <td>wmSpiel_Timestamp</td>
        <td>wmSpielort</td>
        <td>wmTeamA</td>
        <td>wmTeamB</td>
        <td>wmSpieltag</td>
        <td>wtTippA</td>
        <td>wtTippB</td>
      </tr>
      <?php do { ?>
        <tr>
          <td><?php echo $row_wtTipps['wmSpielID']; ?></td>
          <td><?php echo $row_wtTipps['wmSpiel_Timestamp']; ?></td>
          <td><?php echo $row_wtTipps['wmSpielort']; ?></td>
          <td><?php echo $row_wtTipps['wmTeamA']; ?></td>
          <td><?php echo $row_wtTipps['wmTeamB']; ?></td>
          <td><?php echo $row_wtTipps['wmSpieltag']; ?></td>
          <td><?php echo $row_wtTipps['wtTippA']; ?></td>
          <td><?php echo $row_wtTipps['wtTippB']; ?></td>
        </tr>
        <?php } while ($row_wtTipps = mysql_fetch_assoc($wtTipps)); ?>
    </table>
    Die Abfrage liefert mir folgendes Ergebnis:

    wmSpielID wmSpiel_Timestamp wmSpielort wmTeamA wmTeamB wmSpieltag wtTippA wtTippB
    1 2011-06-10 16:00:00 Johannesburg - JSC S�dafrika Mexiko S1 0 2
    2 2011-06-10 20:30:00 Kapstadt Uruguay Frankreich S1 4 1
    3 2012-06-10 16:00:00 Johannesburg - JEP Argentinien Nigeria S1 1 4
    4 2012-06-10 13:30:00 Nelson Mandela Bay/Port Elizabeth Korea Republik Griechenland S1 0 0
    5 2012-06-10 20:30:00 Rustenburg England USA S1 2 3
    6 2013-06-10 13:30:00 Polokwane Algerien Slowenien S1 6 5
    7 2013-06-10 20:30:00 Durban Deutschland Australien S1 2 2
    8 2013-06-10 16:00:00 Tshwane/Pretoria Serbien Ghana S1 3 4

    Das ist soweit gut, solange der User schon getippt hat, d.h. wtTippA und wtTippB sind in der Datenbank vorhanden. Ich möchte nun aber die Tabelle auch anzeigen lassen, wenn die Tipps noch nicht vorhanden sind.

    Könnte das mit LEFTJOIN in meiner Abfrage funktionieren, oder kann ich das nicht kombinieren?

    Danke
    Markus
    Zuletzt geändert von mark2911; 06.05.2010, 19:46.

  • #2
    Ich habe die SQL-Abfrage mal wie folgt angepasst:

    PHP-Code:
    $Tipp_User_wtTipps "-1";
    if (isset(
    $row_UserName['UserName'])) 
    {
      
    $Tipp_User_wtTipps $row_UserName['UserName'];
    }
    $SetSpieltag_wtTipps "-1";
    if (isset(
    $_POST[Spieltag_Auswahl2])) 
    {
      
    $SetSpieltag_wtTipps $_POST[Spieltag_Auswahl2];
    }
    mysql_select_db($database_wm2010$wm2010);
    $query_wtTipps sprintf("
                        SELECT 
                            wmspielplan.wmSpielID, wmspielplan.wmSpiel_Timestamp, 
                            wmspielplan.wmSpielort,    wmspielplan.wmTeamA, wmspielplan.wmTeamB, 
                            wmspielplan.wmSpieltag,    wttipps.wtTippA, wttipps.wtTippB 
                        FROM wmspielplan 
                        LEFT JOIN wttipps ON wmspielplan.wmSpielID=wttipps.wtMatchID 
                        WHERE wttipps.wtUser=%s AND wmspielplan.wmSpieltag=%s"

                            
    GetSQLValueString($Tipp_User_wtTipps"text"),
                            
    GetSQLValueString($SetSpieltag_wtTipps"text")
                            );
    $wtTipps mysql_query($query_wtTipps$wm2010) or die(mysql_error());
    $row_wtTipps mysql_fetch_assoc($wtTipps);
    $totalRows_wtTipps mysql_num_rows($wtTipps); 
    Das Ergebniss ist momentan das gleiche. Wenn ich einen Spieltag auswähle, welcher noch nicht getippt wurde, dann bekomme ich nichts angezeigt. Ich möchte aber die Tabelle auch ohne gesetzte Tipps sehen.
    Ich vermute, dass dies mit "WHERE wttipps.wtUser=%s" immer noch unterdrückt wird. Wie kann ich das ändern?
    Zuletzt geändert von mark2911; 03.05.2010, 23:37.

    Kommentar


    • #3
      Kann man den Code auch irgendwie sinnvoll formatieren? Ich seh da nur einen riesenlangen Wurstzeichensalat.

      Kommentar


      • #4
        Ich hab mal versucht, es besser darzustellen.

        PHP-Code:
        $Tipp_User_wtTipps "-1";
        if (isset(
        $row_UserName['UserName'])) 
        {
          
        $Tipp_User_wtTipps $row_UserName['UserName'];
        }
        $SetSpieltag_wtTipps "-1";
        if (isset(
        $_POST[Spieltag_Auswahl2])) 
        {
          
        $SetSpieltag_wtTipps $_POST[Spieltag_Auswahl2];
        }
        mysql_select_db($database_wm2010$wm2010);
        $query_wtTipps sprintf("
                            SELECT 
                                wmspielplan.wmSpielID, wmspielplan.wmSpiel_Timestamp, 
                                wmspielplan.wmSpielort,    wmspielplan.wmTeamA, wmspielplan.wmTeamB, 
                                wmspielplan.wmSpieltag,    wttipps.wtTippA, wttipps.wtTippB 
                            FROM wmspielplan 
                            LEFT JOIN wttipps ON wmspielplan.wmSpielID=wttipps.wtMatchID 
                            WHERE wttipps.wtUser=%s AND wmspielplan.wmSpieltag=%s"

                                
        GetSQLValueString($Tipp_User_wtTipps"text"),
                                
        GetSQLValueString($SetSpieltag_wtTipps"text")
                                );
        $wtTipps mysql_query($query_wtTipps$wm2010) or die(mysql_error());
        $row_wtTipps mysql_fetch_assoc($wtTipps);
        $totalRows_wtTipps mysql_num_rows($wtTipps); 
        Zuletzt geändert von mark2911; 03.05.2010, 23:45.

        Kommentar


        • #5
          PHP-Code:
          $sql sprintf("
              SELECT
                  s.wmSpielID, s.wmSpiel_Timestamp, s.wmSpielort, 
                  s.wmTeamA, s.wmTeamB, s.wmSpieltag, t.wtTippA, t.wtTippB 
              FROM
                  wmspielplan s
              LEFT JOIN
                  wttipps t ON ( s.wmSpielID = t.wtMatchID AND t.wtUser = '%s' )
              WHERE
                  s.wmSpieltag = '%s'"
          ,
              
          mysql_real_escape_string($Tipp_User_wtTipps),
              
          mysql_real_escape_string($SetSpieltag_wtTipps)
          ); 

          Kommentar


          • #6
            Super, hat funktioniert

            [COLOR=#000000][COLOR=#cc0000]SELECT
            s.wmSpielID, s.wmSpiel_Timestamp, s.wmSpielort,
            s.wmTeamA, s.wmTeamB, s.wmSpieltag, t.wtTippA, t.wtTippB [/COLOR][/COLOR]
            Du hast in der Abfrage bei SELECT "s." und "t." eingeführt. Wie nennt man das? Ich würde es gerne nachlesen.

            Kommentar


            • #7
              Zitat von mark2911 Beitrag anzeigen
              Du hast in der Abfrage bei SELECT "s." und "t." eingeführt. Wie nennt man das? Ich würde es gerne nachlesen.
              Das sind Alias-Namen.

              MySQL :: MySQL 5.0 Reference Manual :: 12.2.8 SELECT Syntax

              Kommentar


              • #8
                So, ich habe jetzt mein Eingabeformular erstell:

                HTML-Code:
                <form id="Tippen" name="Spiel_Tippen" method="post" action="WTTippen.php">
                  <p>&nbsp;</p>
                  <table border="1">
                    <tr>
                      <td>wmSpielID</td>
                      <td>wmSpiel_Timestamp</td>
                      <td>wmSpielort</td>
                      <td>wmTeamA</td>
                      <td>wmTeamB</td>
                      <td>wmSpieltag</td>
                      <td>wtTippA</td>
                      <td>wtTippB</td>
                    </tr>
                <?php 
                do 
                { ?>
                    <tr>
                        <td><?php echo $row_wtTipps['wmSpielID']; ?></td>
                        <td><?php echo $row_wtTipps['wmSpiel_Timestamp']; ?></td>
                        <td><?php echo $row_wtTipps['wmSpielort']; ?></td>
                        <td><?php echo $row_wtTipps['wmTeamA']; ?></td>
                        <td><?php echo $row_wtTipps['wmTeamB']; ?></td>
                        <td><?php echo $row_wtTipps['wmSpieltag']; ?></td>
                        <td><input type="text" name="wtTipp[TippA][]" size="1" style="width:40" 
                            maxlength="2" value="<?php echo $row_wtTipps['wtTippA']; ?>" /></td>
                        <td><input type="text" name="wtTipp[TippB][]" size="1" style="width:40" 
                            maxlength="2" value="<?php echo $row_wtTipps['wtTippB']; ?>" /></td>
                           <input type="hidden" name="wtTipp[Spieltag][]" value="<?php echo $row_wtTipps['wmSpieltag']; ?>">
                           <input type="hidden" name="wtTipp[SpielID][]" value="<?php echo $row_wtTipps['wmSpielID']; ?>">
                           <input type="hidden" name="wtTipp[UserName][]" value="<?php echo $row_UserName['UserName']; ?>">
                    </tr>
                <?php 
                } 
                while ($row_wtTipps = mysql_fetch_assoc($wtTipps)); ?>
                  </table>
                  
                  <input type="submit" name="speichern" id="speichern" value="speichern" />
                  <p></p>
                  
                </form>
                Die Eingabe wurde an ein mehrdimensionales Array übergen.
                Die Ausgabe
                PHP-Code:
                <?php print_r($_POST['wtTipp']);?>
                ergibt folgendes Ergebnis:

                Array (
                [TippA] => Array ( [0] => 0 [1] => 4 [2] => 1 [3] => 0 [4] => 2 [5] => 6 [6] => 2 [7] => 3 )
                [TippB] => Array ( [0] => 2 [1] => 1 [2] => 4 [3] => 0 [4] => 3 [5] => 5 [6] => 2 [7] => 4 )
                [Spieltag] => Array ( [0] => S1 [1] => S1 [2] => S1 [3] => S1 [4] => S1 [5] => S1 [6] => S1 [7] => S1 )
                [SpielID] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 )
                [UserName] => Array ( [0] => Markus [1] => Markus [2] => Markus [3] => Markus [4] => Markus [5] => Markus [6] => Markus [7] => Markus )
                )
                Ich möchte nun dieses Array wieder in tabellenform ausgeben.

                Dazu habe ich mir folgenden Code überlegt, allerdings bekomme ich keine Werte angezeigt.

                HTML-Code:
                <table width="100" border="1">
                  <tr>
                    <th scope="col">User</th>
                    <th scope="col">Spieltag</th>
                    <th scope="col">Spiel</th>
                    <th scope="col">Score A</th>
                    <th scope="col">Score B</th>
                
                  </tr> 
                   <?php $tipp=$_POST['wtTipp'];
                         foreach($tipp as $var)
                         {?> 
                         
                  <tr>
                    <td><?php echo $var['UserName']?></td>
                    <td><?php echo $var['Spieltag']; ?></td>
                    <td><?php echo $var['SpielID']; ?></td>
                    <td><?php echo $var['TippA']; ?></td>
                    <td><?php echo $var['TippB']; ?></td>
                  </tr><?php   
                          }?>
                </table>
                Wie muss ich die Ausgabe gestalten, damit ich die einzelnen Werte in der Tabelle angezeigt bekomme?

                Danke.

                Markus
                Zuletzt geändert von mark2911; 03.05.2010, 23:43.

                Kommentar


                • #9
                  Hallo,

                  du packst das Array falsch herum an. Normalerweise ist die erste Dimension der Datensatz und die zweite dessen Felder. Bei dir ist die erste Dimension eine Eigenschaft und die zweite deren Wert für einen bestimmten Datensatz.

                  Daher musst du auch das foreach sozusagen von hinten schreiben:

                  PHP-Code:
                  foreach ($tipp["UserName"] as $key => $dummy) {
                      
                  // hier kannst du jetzt $tipp["sonstwas"][$key] abrufen
                      // z. B. $tipp['Spieltag'][$key]

                  Gruß,

                  Amica
                  [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                  Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                  Super, danke!
                  [/COLOR]

                  Kommentar


                  • #10
                    Hi Amica,

                    Danke.

                    Du schreibst:

                    du packst das Array falsch herum an. Normalerweise ist die erste Dimension der Datensatz und die zweite dessen Felder.
                    Wie müsste ich denn das Array richtig aufbauen?

                    Gruss
                    Markus

                    Kommentar


                    • #11
                      Hab ich dir doch schon geschrieben. Eine Lösung für deinen Fall (also deine Array-Struktur) ist auch dabei.
                      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                      Super, danke!
                      [/COLOR]

                      Kommentar

                      Lädt...
                      X