mysql_fetch_array in 2 verschiedene Spalten?

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

  • mysql_fetch_array in 2 verschiedene Spalten?

    Ich würde gerne 2 unterschiedliche Ausgaben in eine Zeile packen.

    Angenommen ich habe eine SQL mit folgenden Daten:

    ID - FW - Geraet
    1 - 32 - CP10
    2 - 33 - ERT

    Ich möchte mir jetzt alle Geräte mit FW = 32 in der ersten Spalte der Tabelle anzeigen lassen und alle mit FW = 33 in der zweiten Spalte.
    Jetzt werden aber alle FW32 in die erste Spalte geschrieben und die zweite Spalte bleibt leer. Erst nachdem die FW32 Abfrage erledigt ist, fängt FW33 an. Das gibt natürlich erst einmal eine Menge leere Felder bevor die FW33 dann endlich anfängt.

    Ich habe es dann mit den Code unten versucht, jedoch funktioniert das nicht ganz
    In der ersten Spalte wird mir nur das Gerät mit ID =1 angezeigt, in der zweiten Spalte werden mir die korrekten Geräte angezeigt.

    Hat jemand von euch eine Idee?

    BTW, ich bin PHP/SQL Anfänger und wurschtel mich so durch Anleitungen und Forum...


    PHP-Code:
    //Tabelle Abfragen
        $entry             = "SELECT * FROM ts_fw WHERE fw = 32 LIMIT $start, $eintraege_pro_seite";
        $result32    = mysql_query($entry);
        $entry1             = "SELECT * FROM ts_fw WHERE fw = 33 LIMIT $start, $eintraege_pro_seite";
        $result33    = mysql_query($entry1);
    echo mysql_error();        
        echo '<div class="entry">';

        
    // Tabellenbeginn
        while($daten32=mysql_fetch_array($result32))
      {
        while($daten33=mysql_fetch_array($result33))
        {

    ?>
          <tr bgcolor="#9CBBD1">
            <td width="11%" bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
              <?php echo"<a href=\"edit_part_link.php?daten_edit=$daten32[id]\">$daten32[id]</a>"?>
            </font></td>
            <td bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
              <?php echo"<a href=\"edit_part_link.php?daten_edit=$daten32[id]\">$daten32[uniop]</a>"?>
            </font></td>
            <td bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
              <?php echo"<a href=\"edit_part_link.php?daten_edit=$daten33[id]\">$daten33[id]</a>"?>
              </font></td>
            <td bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
              <?php echo"<a href=\"edit_part_link.php?daten_edit=$daten33[id]\">$daten33[uniop]</a>"; }}?>
            </font></td>
          </tr>
          <tr bgcolor="#314477">
            <td background="../images/cellpic.gif" colspan=6 align="left"><font face="Tahoma" size=2 color="#FFFFFF"><b>

  • #2
    Ich würde beide Ergebnisse erstmal auslesen und in ein indiziertes Array speichern.

    PHP-Code:
    <?php
    $entry 
    "SELECT * FROM ts_fw WHERE fw = 32 LIMIT $start$eintraege_pro_seite ORDER BY id";
    $result32 mysql_query($entry);
    $row32 = array();
    $i 0;//Zählvariable, um ganz sicher zu gehn
    while($daten32=mysql_fetch_array($result32))
    {
        
    $row32[$i] = $daten32;
        
    $i++;
    }

    $entry1 "SELECT * FROM ts_fw WHERE fw = 33 LIMIT $start$eintraege_pro_seite ORDER BY id";
    $result33 mysql_query($entry1);
    $row33 = array();
    $i 0;
    while(
    $daten33=mysql_fetch_array($result33))
    {
        
    $row33[$i] = $daten33;
        
    $i++;
    }


    //Auslesen
    $count count($row32) & count($row33)//der binäre operator sorgt dafür, dass die höhere zahl genommen wird
    for ($i 0$i $count$i++)
    {
        
    /**
        * So kann man dann auf beide ergebnisse gleichzeitig zugreifen, je nach ORDER-Klausel
        */
        
    $row32[$i]//spalte des ersten ergebnisses
        
    $row33[$i]//spalte des zweiten...
    }
    ?>

    Kommentar


    • #3
      Habe ich jetzt gemacht, nur werde ich daraus nicht ganz schlau.

      Ich habe vorher die Daten hiermit ausgegeben:
      [/PHP]
      PHP-Code:
      echo"<a href=\"edit_part_link.php?daten_edit=$daten32[id]\">$daten32[uniop]</a>"
      Damit bekomme ich leider nur leere Spalten.
      Anbei einmal der komplette Code. Vielleicht hilft das weiter..

      PHP-Code:
      <html>
      <head>
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head>
      <body bgcolor="#FFFFFF" text="#FFFFFF" link="#000000" vLink="#000000" aLink="#000000">
      <form action="edit_part.php" method="post">
      <table width="400" border="0" cellspacing="0" cellpadding="0">
        <tr>
          <td><table cellpadding=4 cellspacing=1 width="247" bgcolor="#000000" align="center">
            <tr bgcolor="#314477">
              <td background="../images/cellpic.gif" colspan=6><font face="Tahoma" size=2 color="#FFFFFF"><b>&raquo; Daten anzeigen</b></font></td>
            </tr>
            <tr bgcolor="#9CBBD1">
              <td width="11%" bgcolor="#9CBBD1"><b><font face="Tahoma" size="2" color="#000000">ID</font></b></td>
              <td width="36%" bgcolor="#9CBBD1"><b><font face="Tahoma" size="2" color="#000000">FW32</font></b></td>
              <td width="10%" bgcolor="#9CBBD1"><b><font face="Tahoma" size="2" color="#000000">ID</font></b></td>
              <td width="43%" bgcolor="#9CBBD1"><b><font face="Tahoma" size="2" color="#000000">FW33</font></b></td>
            </tr>
      <?php

      //Abfrage auf welcher Seite man ist
      $seite $_GET["seite"];  

      //Wenn man keine Seite angegeben hat, ist man automatisch auf Seite 1
      if(!isset($seite))
         {
         
      $seite 1;
         }

      //Verbindung zu Datenbank aufbauen
      require "_data.inc1.php";

      // 2. Erstellung der Verbindung zur Datenbank:
      $db=mysql_connect($dbhost$dbuser$dbpasswd);
      mysql_select_db($mydb$db);

      //Eintraege pro Seite
      $eintraege_pro_seite 20;

      //Ausrechen welche Spalte man zuerst ausgeben muss:
      $start $seite $eintraege_pro_seite $eintraege_pro_seite;

      $entry "SELECT * FROM ts_fw WHERE fw = 32 LIMIT $start$eintraege_pro_seite ORDER BY id";
      $result32 mysql_query($entry);
      $row32 = array();
      $i 0;//Zählvariable, um ganz sicher zu gehn
      while($daten32=mysql_fetch_array($result32))
      {
          
      $row32[$i] = $daten32;
          
      $i++;
      }

      $entry1 "SELECT * FROM ts_fw WHERE fw = 33 LIMIT $start$eintraege_pro_seite ORDER BY id";
      $result33 mysql_query($entry1);
      $row33 = array();
      $i 0;
      while(
      $daten33=mysql_fetch_array($result33))
      {
          
      $row33[$i] = $daten33;
          
      $i++;
      }


      //Auslesen
      $count count($row32) & count($row33);//der binäre operator sorgt dafür, dass die höhere zahl genommen wird
      for ($i 0$i $count$i++)
      {
          
      /**
          * So kann man dann auf beide ergebnisse gleichzeitig zugreifen, je nach ORDER-Klausel
          */
          
      $row32[$i];//spalte des ersten ergebnisses
          
      $row33[$i];//spalte des zweiten...
      }
      ?>
            <tr bgcolor="#9CBBD1">
              <td width="11%" bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
                <?php echo"<a href=\"edit_part_link.php?daten_edit=$daten32[id]\">$daten32[id]</a>"?>
              </font></td>
              <td bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
                <?php echo"<a href=\"edit_part_link.php?daten_edit=$daten32[id]\">$daten32[uniop]</a>"?>
              </font></td>
              <td bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
                <?php echo"<a href=\"edit_part_link.php?daten_edit=$daten33[id]\">$daten33[id]</a>"?>
                </font></td>
              <td bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
                <?php echo"<a href=\"edit_part_link.php?daten_edit=$daten33[id]\">$daten33[uniop]</a>";?>
              </font></td>
            </tr>
            <tr bgcolor="#314477">
              <td background="../images/cellpic.gif" colspan=6 align="left"><font face="Tahoma" size=2 color="#FFFFFF"><b>

      <?php
      //Jetzt kommt das "Inhaltsverzeichnis",
      //sprich dort steht jetzt: Seite: 1 2 3 4 5

      //Wieviele Eintr&auml;ge gibt es &uuml;berhaupt

      //Wichtig! Hier muss die gleiche Abfrage sein, wie bei der Ausgabe der Daten
      //also der gleiche Text wie in der Variable $abfrage, blo&szlig; das hier das LIMIT fehlt
      //Sonst funktioniert die Bl&auml;tterfunktion nicht richtig,
      //und hier kann nur 1 Feld abgefragt werden, also id


          
      $result        mysql_query("select id from ts_fw");
          
      $menge         mysql_num_rows($result);

      //Errechnen wieviele Seiten es geben wird
      $wieviel_seiten $menge $eintraege_pro_seite;

      //Ausgabe der Seitenlinks:
      echo "<div align=\"left\">";
      echo 
      "<b>Seite:</b> ";

      //Ausgabe der Links zu den Seiten
      for($a=0$a $wieviel_seiten$a++)
         {
         
      $b $a 1;

         
      //Wenn der User sich auf dieser Seite befindet, keinen Link ausgeben
         
      if($seite == $b)
            {
            echo 
      "  <b>$b</b> ";
            }

         
      //Aus dieser Seite ist der User nicht, also einen Link ausgeben
         
      else
            {
            echo 
      "  <a href=\"?seite=$b\">$b</a> ";
            }
         }
      echo 
      "</div>"mysql_close($db);
      ?>
              </b></font> </td>
            </tr>
          </table></td>
          <td>&nbsp;</td>
        </tr>
      </table>
      <br>
      <center><input type="submit" name="abgeschickt" value="Übernehmen"></center></form>
      </body>
      </html>

      Kommentar


      • #4
        Du musst das ganze in der for-Schleife auslesen:

        PHP-Code:
        <?php
        //Auslesen
        $count count($row32) & count($row33);//der binäre operator sorgt dafür, dass die höhere zahl genommen wird
        for ($i 0$i $count$i++)
        {
            
        /**
            * So kann man dann auf beide ergebnisse gleichzeitig zugreifen, je nach ORDER-Klausel
            */
            
        $row32[$i];//spalte des ersten ergebnisses
            
        $row33[$i];//spalte des zweiten...

        ?>
              <tr bgcolor="#9CBBD1">
                <td width="11%" bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
                  <?php echo"<a href=\"edit_part_link.php?daten_edit=$daten32[$i]['id']\">$daten32[$i]['id']</a>"?>
                </font></td>
                <td bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
                  <?php echo"<a href=\"edit_part_link.php?daten_edit=$daten32[$i]['id']\">$daten32[$i]['uniop']</a>"?>
                </font></td>
                <td bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
                  <?php echo"<a href=\"edit_part_link.php?daten_edit=$daten33[$i]['id']\">$daten33[$i]['id']</a>"?>
                  </font></td>
                <td bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
                  <?php echo"<a href=\"edit_part_link.php?daten_edit=$daten33[$i]['id']\">$daten33[$i]['uniop']</a>";?>
                </font></td>
              </tr>
              <tr bgcolor="#314477">
                <td background="../images/cellpic.gif" colspan=6 align="left"><font face="Tahoma" size=2 color="#FFFFFF"><b>

        <?php
        }
        In der Schleife werden die beiden vorherigen parallel angelegten multidimensionalen Arrays ausgelesen.

        Kommentar


        • #5
          Vielen Dank für die Hilfe, aber auch hier bleiben leider die Spalten leer

          Kommentar


          • #6
            error_reporting() hochgedreht??

            Kommentar


            • #7
              Nope, läuft eine Standard Xampp in akutellster Version drauf.

              Kommentar


              • #8
                *möööp* falsche Antwort! Lies die Regeln und befolge sie auch bitte!

                Kommentar


                • #9
                  PHP-Code:
                  <?php echo "<a href=\"edit_part_link.php?daten_edit=".$daten32[$i]['id']."\">".$daten32[$i]['uniop']."</a>"?>
                  Mein Fehler, es muss so aufgebaut sein. Zumindest ist das sauberer.

                  Kommentar


                  • #10
                    Sorry, habe den Debug jetzt ein

                    » Daten anzeigen
                    ID FW32 ID FW33

                    Notice: Use of undefined constant ON - assumed 'ON' in C:\xampp\htdocs\parts\ts\out.php on line 23

                    Notice: Undefined index: seite in C:\xampp\htdocs\parts\ts\out.php on line 26

                    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\parts\ts\out.php on line 51

                    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\parts\ts\out
                    Leider funktionierte die sauberere Lösung auch nicht. Die Tabellen bleiben immer noch leer.

                    Kommentar


                    • #11
                      Na das Problem offenbart sich doch hier schon:
                      Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\parts\ts\out.php on line 51
                      Die Abfrage scheitert, mysql_fetch_array kann gar keine Einträge liefern - die Ursache für dieses Problem findet sich auch schnell: die beiden Querys sind fehlerhaft: ORDER BY kommt vor LIMIT. Ein Prüfung auf Mysql Fehler findet sich in den Regeln übrigens auch als Tipp.
                      Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                      Kommentar


                      • #12
                        Das scheint nicht an meiner Lösung zu liegen, sondern daran, das mit der sql-Abfrage etwas nicht stimmt

                        Wenn keine Daten geholt werden, kann auch das Array nicht gefüllt werden^^

                        Füge mal nach jeden Aufruf von mysql_query(), echo mysql_error ein.

                        Mach ausserdem mal ein var_dump von $row32 und $row33.

                        EDIT:
                        Ah ok, Habe die Abfrage nur schnell überflogen

                        Kommentar


                        • #13
                          Danke, den Fehler beim fetch_array habe ich jetzt beseitigt.

                          Bleibt noch der Fehler:
                          Notice: Use of undefined constant ON - assumed 'ON' in C:\xampp\htdocs\parts\ts\out.php on line 23

                          Notice: Undefined index: seite in C:\xampp\htdocs\parts\ts\out.php on line 26
                          Wie gesagt, ich bin ziemlich neu in PHP und bin auf euch angewiesen

                          Bisher habe ich viele Dinge mit Google lösen können, jedoch hier versage ich wohl auf der ganzen Linie.

                          Kommentar


                          • #14
                            Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                            Kommentar


                            • #15
                              PHP-Code:
                              /**
                              * Debugging
                              */
                              error_reporting(E_ALL); #zeig alle Fehler
                              ini_set("display_errors"ON); #sorgt dafür, dass überhaupt Fehler angezeigt werden 
                              Soviel dann zum Thema Anleitung
                              PHP-Code:
                              /**
                              * Debugging
                              */
                              error_reporting(E_ALL); #zeig alle Fehler
                              ini_set("display_errors""ON"); #sorgt dafür, dass überhaupt Fehler angezeigt werden 
                              Nachdem ich die vorherigen Fehler dank der Hilfe von "tontechniker" und seinen Google Links (danke nochmal) gelöst habe, habe ich nun wieder den mysql_fetch Fehler
                              » Daten anzeigen
                              ID FW32 ID FW33

                              Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\parts\ts\out.php on line 52

                              Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\parts\ts\out.php on line 62
                              Hier nocheinmal mein überarbeitetes Script:
                              PHP-Code:
                              <html>
                              <head>
                              <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head>
                              <body bgcolor="#FFFFFF" text="#FFFFFF" link="#000000" vLink="#000000" aLink="#000000">
                              <form action="edit_part.php" method="post">
                              <table width="400" border="0" cellspacing="0" cellpadding="0">
                                <tr>
                                  <td><table cellpadding=4 cellspacing=1 width="247" bgcolor="#000000" align="center">
                                    <tr bgcolor="#314477">
                                      <td background="../images/cellpic.gif" colspan=6><font face="Tahoma" size=2 color="#FFFFFF"><b>&raquo; Daten anzeigen</b></font></td>
                                    </tr>
                                    <tr bgcolor="#9CBBD1">
                                      <td width="11%" bgcolor="#9CBBD1"><b><font face="Tahoma" size="2" color="#000000">ID</font></b></td>
                                      <td width="36%" bgcolor="#9CBBD1"><b><font face="Tahoma" size="2" color="#000000">FW32</font></b></td>
                                      <td width="10%" bgcolor="#9CBBD1"><b><font face="Tahoma" size="2" color="#000000">ID</font></b></td>
                                      <td width="43%" bgcolor="#9CBBD1"><b><font face="Tahoma" size="2" color="#000000">FW33</font></b></td>
                                    </tr>
                              <?php
                              /**
                              * Debugging
                              */
                              error_reporting(E_ALL); #zeig alle Fehler
                              ini_set('display_errors''ON'); #sorgt dafür, dass überhaupt Fehler angezeigt werden

                              //Abfrage auf welcher Seite man ist
                              $seite = (isset($_GET['seite']));
                              //$seite = (isset($_GET['seite']))?$_GET['seite']:'';

                              //Wenn man keine Seite angegeben hat, ist man automatisch auf Seite 1
                              if(!isset($seite))
                                 {
                                 
                              $seite 1;
                                 }

                              //Verbindung zu Datenbank aufbauen
                              require "_data.inc1.php";

                              // 2. Erstellung der Verbindung zur Datenbank:
                              $db=mysql_connect($dbhost$dbuser$dbpasswd);
                              mysql_select_db($mydb$db);

                              //Eintraege pro Seite
                              $eintraege_pro_seite 20;

                              //Ausrechen welche Spalte man zuerst ausgeben muss:
                              $start $seite $eintraege_pro_seite $eintraege_pro_seite;

                              $entry "SELECT * FROM ts_fw WHERE fw = 32 LIMIT $start$eintraege_pro_seite ";
                              $result32 mysql_query($entry);
                              $row32 = array();
                              $i 0;//Zählvariable, um ganz sicher zu gehn
                              while($daten32=mysql_fetch_array($result32))
                              {
                                  
                              $row32[$i] = $daten32;
                                  
                              $i++;
                              }

                              $entry1 "SELECT * FROM ts_fw WHERE fw = 33 LIMIT $start$eintraege_pro_seite ";
                              $result33 mysql_query($entry1);
                              $row33 = array();
                              $i 0;
                              while(
                              $daten33=mysql_fetch_array($result33))
                              {
                                  
                              $row33[$i] = $daten33;
                                  
                              $i++;
                              }


                              //Auslesen
                              $count count($row32) & count($row33);//der binäre operator sorgt dafür, dass die höhere zahl genommen wird
                              for ($i 0$i $count$i++)
                              {
                                  
                              /**
                                  * So kann man dann auf beide ergebnisse gleichzeitig zugreifen, je nach ORDER-Klausel
                                  */
                                  
                              $row32[$i];//spalte des ersten ergebnisses
                                  
                              $row33[$i];//spalte des zweiten...

                              ?>
                                    <tr bgcolor="#9CBBD1">
                                      <td width="11%" bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
                                        <?php echo"<a href=\"edit_part_link.php?daten_edit=$daten32[$i]['id']\">$daten32[$i][id]</a>"?>
                                      </font></td>
                                      <td bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
                                        <?php echo "<a href=\"edit_part_link.php?daten_edit=".$daten32[$i]['id']."\">".$daten32[$i][uniop]."</a>"?>
                                      </font></td>
                                      <td bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
                                        <?php echo"<a href=\"edit_part_link.php?daten_edit=$daten33[$i]['id']\">$daten33[$i][id]</a>"?>
                                        </font></td>
                                      <td bgcolor="#FFFFFF"><font face="Tahoma" size="2" color="#000000">
                                        <?php echo "<a href=\"edit_part_link.php?daten_edit=".$daten32[$i]['id']."\">".$daten33[$i][uniop]."</a>"; } ?>
                                      </font></td>
                                    </tr>
                                    <tr bgcolor="#314477">
                                      <td background="../images/cellpic.gif" colspan=6 align="left"><font face="Tahoma" size=2 color="#FFFFFF"><b>


                              <?php
                              //Jetzt kommt das "Inhaltsverzeichnis",
                              //sprich dort steht jetzt: Seite: 1 2 3 4 5

                              //Wieviele Eintr&auml;ge gibt es &uuml;berhaupt

                              //Wichtig! Hier muss die gleiche Abfrage sein, wie bei der Ausgabe der Daten
                              //also der gleiche Text wie in der Variable $abfrage, blo&szlig; das hier das LIMIT fehlt
                              //Sonst funktioniert die Bl&auml;tterfunktion nicht richtig,
                              //und hier kann nur 1 Feld abgefragt werden, also id


                                  
                              $result        mysql_query("select id from ts_fw");
                                  
                              $menge         mysql_num_rows($result);

                              //Errechnen wieviele Seiten es geben wird
                              $wieviel_seiten $menge $eintraege_pro_seite;

                              //Ausgabe der Seitenlinks:
                              echo "<div align=\"left\">";
                              echo 
                              "<b>Seite:</b> ";

                              //Ausgabe der Links zu den Seiten
                              for($a=0$a $wieviel_seiten$a++)
                                 {
                                 
                              $b $a 1;

                                 
                              //Wenn der User sich auf dieser Seite befindet, keinen Link ausgeben
                                 
                              if($seite == $b)
                                    {
                                    echo 
                              "  <b>$b</b> ";
                                    }

                                 
                              //Aus dieser Seite ist der User nicht, also einen Link ausgeben
                                 
                              else
                                    {
                                    echo 
                              "  <a href=\"?seite=$b\">$b</a> ";
                                    }
                                 }
                              echo 
                              "</div>"mysql_close($db);
                              ?>
                                      </b></font> </td>
                                    </tr>
                                  </table></td>
                                  <td>&nbsp;</td>
                                </tr>
                              </table>
                              <br>
                              <center><input type="submit" name="abgeschickt" value="Übernehmen"></center></form>
                              </body>
                              </html>

                              Kommentar

                              Lädt...
                              X