Ankündigung

Einklappen
Keine Ankündigung bisher.

Datenbankausgabe mit Link zu einzelnen Datensatz

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

  • Datenbankausgabe mit Link zu einzelnen Datensatz

    Schönen guten Tag,

    Ich brauche mal wieder Hilfe.
    Wie das Topic schon sagt: ich möchte nach der Suche in einer MYSQL-DB die Ergebnisse in einer Tabelle ausgegeben haben. In dieser Tabelle soll er über die ID Links erstellen, mit denen man die einzelnen Datensätze wieder zum Ändern im Formular aufrufen kann.
    Teil 1 klappt ja schonmal mit einer Ausgabe Funktion:

    PHP-Code:
        function ausgeben($Con$strSQL$boolURL$boolMail)
        {
        
    //$strSQL="SELECT * FROM funde;";
        
    global $phpModus;
        
    $Z=0;
        
    $CSSKlasse="";
        
    $ausgabe="";

        
    $ergebnis=mysql_query($strSQL$Con);
        
    $strTemp=fehler($phpModus);

        if (
    $ergebnis!=NULL)
        {
            
    $ausgabe="<table class=\"tabausgabe\">";
            
    //Ergebnis ausgeben
            
    while ($datensatzmysql_fetch_array($ergebnis,MYSQL_NUM))
            {
                
    $Z++;
                if ((
    $Z 2)==0)
                {
                    
    $CSSKlasse="zeile02";
                }
                else
                {
                    
    $CSSKlasse="zeile01";
                }
                if (
    $Z==1)
                {
                            
    $ausgabe .= "<tr>";
                            
    //Spaltenüberschriften ausgeben
                            
    for($I=0;$I<=count($datensatz)-1;$I++)
                                {
                                    
    $ausgabe .= "<th>" mysql_field_name($ergebnis,$I)  . "</th>";
                                    
    $strTemp .=fehler($phpModus);
                            }
                            
    $ausgabe .= "</tr>";
                }
                
    $ausgabe .= '<tr class="' $CSSKlasse '">';
                for(
    $I=0;$I<=count($datensatz)-1;$I++)
                {

                    if ((
    email($datensatz[$I]))&&(($boolMail==true)))
                    {
                        
    $ausgabe .= "<td>" hlink($datensatz[$I]) . "</td>";
                    }
                    elseif((
    url($datensatz[$I]))&&(($boolURL==true)))
                    {
                        
    $ausgabe .= "<td>" hlink($datensatz[$I]) . "</td>";
                    }
                    else
                    {
                        
    $ausgabe .= "<td>" $datensatz[$I] . "</td>";
                    }
                }
                
    $ausgabe .= "</tr>";
            }
            
    $ausgabe .="</table>"

    Beim Erstellen der Links sind aber alle meine Versuche fehlgeschlagen (mit den merkwürdigsten Ergebnissen.

    als Ansatz dachte ich an sowas wie:

    PHP-Code:
    echo "<a href=\"edit.php?id="$datensatz['id'] ."\">"$datensatz['id'] ."</a>
    \n"

    Aber wo ichs auch hinpacke, ich erreiche immer nur entweder korrekte Links und leere restliche Felder, oder der Link unter allen Datensätzen, die sich dann immer wieder wiederholen u.s.w ^^

    vielleicht kann mir ja jemand auf die Sprünge helfen.
    Vielen Dank schonmal
    Shy


  • #2
    Naja zunächst mal rufst du mit mysql_fetch_array($resource, MYSQL_NUM) die Ergebnisse ja als Array mit numerischen Indexen ab. Ein Zugriff wie $datensatz['id'] wird dann fehlschlagen.

    Einen offensichtlichen Fehler sehe ich jetzt aber grade nicht.


    ich erreiche immer nur entweder korrekte Links und leere restliche Felder
    Das hört sich etwas danach an, dass die restlichen Felder irgendwie durch diese Aktion "korrekten Link erstellen" überschrieben/gelöscht werden.

    oder der Link unter allen Datensätzen, die sich dann immer wieder wiederholen
    Falsche Schleifenbedingung, fehlerhaftes HTML? Wie sieht der HTML-Quelltext jeweils aus?

    Letztlich bleibt dir nur debuggen debuggen debuggen.. Wenn du dir nicht sicher bist, was in einer Variable steht, dann lass dir den Inhalt einfach mal mit var_dump() ausgeben. An den Anfang deines Skriptes solltest du auch unbedingt error_reporting(E_ALL) setzen und alle Fehler und Hinweise korrigieren. PHP-Hinweise (Notice) verraten dir Unsauberkeiten im Code, zB Zugriff auf nicht existente Variable etc.

    Kommentar


    • #3
      danke@Zergling

      ich bin wieder mal einen Schritt weiter, allerdings hab ich 2 neue kleinere Probleme (und wieder mal keine Ahnung, warum das so ist). Error Reporting hab ich an - spuckt aber keine Hinweise aus.
      Das erste ist, dass er die Tabelle mit Kopfzeile anlegt, aber alle Ergebnisse in die erste Spalte schreibt. Also alles in die Spalte ID (die anderen bleiben leer). Oh da fällt mir ein, dass ich das Feld ID noch loswerden muss. Wie kann ich in der Folgenden Zeile sagen, dass er alles außer ID anzeigen soll?:

      $ausgabe .= "<th>" . mysql_field_name($ergebnis,$I) . "</th>";

      Das zweite kleinere ist, dass die Sache mit den verschiedenen Zeilenfarben nicht funktioniert. Wenn ich statt <td> <td bgcolor="$color"> setze, kommt ein "unexpected T_VARIABLE". Aber $color ist doch definiert, oder? Hier ist nochmal die Funktion:
      PHP-Code:
          function ausgeben($Con$strSQL)
          {

          global 
      $phpModus;
          
      $Z=0;
          
      $CSSKlasse="";
          
      $ausgabe="";
              
      $colors = array(0=>"#ADD8E6"1=>"#FFFFE0");
          
      $ergebnis=mysql_query($strSQL$Con);
          
      $strTemp=fehler($phpModus);

          if (
      $ergebnis!=NULL)
          {
              
      $ausgabe="<table class=\"tabausgabe\">";
              
      //Ergebnis ausgeben

           
      while ($datensatzmysql_fetch_assoc($ergebnis))
              {
                  
      $color $colors[$Z%2];
              
      $Z++;

                  if (
      $Z==1)
                  {

                              
      $ausgabe .= "<tr>";
                              
      //Spaltenüberschriften ausgeben
                              
      for($I=0;$I<=count($datensatz)-1;$I++)
                                  {
                                      
      $ausgabe .= "<th>" mysql_field_name($ergebnis,$I)  . "</th>";
                                      
      $strTemp .=fehler($phpModus);
                              }
                              
      $ausgabe .= "</tr>";
                  }
                  
      $ausgabe .= '<tr>';

                  {

                      
      $ausgabe .= "<td bgcolor="$color"><a href=\"edit.php?id="$datensatz['id'] ."\">"$datensatz['find'] . "</a>,
                       " 
      .$datensatz['classify'] . ","$datensatz['quadrant'] . ","$datensatz['room'] . ","$datensatz['trench'] . ","$datensatz['unit'] . ","$datensatz['layer'] . ","$datensatz['fdate'] . "," $datensatz['name']. "</td>";




                   
      "</td>";

                  }
                  
      $ausgabe .= "</tr>";
              }
              
      $ausgabe .="</table>";

              
      //Speicher wieder freigeben
              
      mysql_free_result($ergebnis);
             
      $strTemp .=fehler($phpModus);
          }
              
      //Inhalte ausgeben
              
      return $strTemp $ausgabe;

          } 
      für weitere Denkanstöße wäre ich also sehr dankbar

      Gruß
      Shy

      Kommentar


      • #4
        Also so kommen wir nicht weiter - wenn auf deine Aussagen kein Verlass ist kann ich dir nicht weiterhelfen. Entweder hast du error_reporting(E_ALL) nicht an oder dein Code unten ist verpfuscht.
        $ausgabe .= "<td bgcolor="$color">
        Das erzeugt einen Parse-Error.

        Ich kann auch all deine anderen Probleme nicht nachvollziehen, $color wird zwingend bei jedem Schleifendurchlauf erstellt und mit sinnvollem Inhalt gefüllt und auch deine Kopfzeile sieht für mich korrekt aus.

        Schick doch mal bitte jetzt den richtigen PHP-Code und den von ihm erzeugten HTML-Code.

        Kommentar


        • #5
          Hab ich doch geschrieben: "Wenn ich statt <td> <td bgcolor="$color"> setze, kommt ein "unexpected T_VARIABLE".

          Ich weiß nicht so richtig, welchen erzeugten html-code du brauchst? Das Formular denke ich mal nicht, denn die Werte werden ja richtig übergeben und ich bekomme alles was ich brauche aufgelistet.

          und das file an das die Formularwerte übergeben werden, wo die Funktion dann aufgerufen wird (ganz unten), sieht so aus:
          PHP-Code:
          <?
          error_reporting(E_ALL);
              include("dbconnect.php");
              include("bibfunktionen.php");
              //Datenbankverbindung aufbauen
              verbinden();
              import_request_variables('G','url_');
          ?>
          <?
                          //Anzeigeoptionen festlegen
                          $lngAnzahl=2; //Anzahl Ergebnisse, die untereinander angezeigt werden sollen
                          if (@$url_Start=="")
                          {
                              $url_Start=0; //Zeile, ab die die Ausgabe erfolgen soll.
                          }
                          //Ausgabe der Suchkriterien

                              echo "

          You searched for: Find Number=" . @$url_txtfind . "</p>";
                              echo "

          You searched for: Classification=" . @$url_txtclassify . "</p>";
                              echo "

          You searched for: Quadrant=" . @$url_txtquadrant . "</p>";
                              echo "

          You searched for: Room=" . @$url_txtroom . "</p>";
                              echo "

          You searched for: Trench=" . @$url_txttrench . "</p>";
                              echo "

          You searched for: Unit=" . @$url_txtUnit . "</p>";
                              echo "

          You searched for: Layer=" . @$url_txtLayer . "</p>";
                              echo "

          You searched for: Find Date=" . @$url_txtfdate . "</p>";
                              echo "

          You searched for: Name=" . @$url_txtname . "</p>";
                              echo "

          Operator was:" . @$url_optOperator . "</p>";

                              $strOperator="AND";
                              if (@$url_optOperator=="Oder")
                              {
                                  $strOperator="OR";
                              }
                              else
                              {
                                  $strOperator="AND";
                              }
                              if ($strOperator=="AND")
                              {
                                  if (@$url_txtfind==""){ $url_txtfind="%";};
                                  if (@$url_txtclassify==""){ $url_txtclassify="%";};
                                  if (@$url_txtquadrant==""){ $url_txtquadrant="%";};
                                  if (@$url_txtroom==""){ $url_txtroom="%";};
                                  if (@$url_txttrench==""){ $url_txttrench="%";};
                                  if (@$url_txtunit==""){ $url_txtunit="%";};
                                  if (@$url_txtlayer==""){ $url_txtlayer="%";};
                                  if (@$url_txtfdate==""){ $url_txtfdate="%";};
                                  if (@$url_txtname==""){ $url_txtname="%";};
                              }

                              $strSQL="SELECT id,find,classify,quadrant,room,trench,unit,layer,fdate,name FROM funde" .
                                  " WHERE (" ;
                              $strSQL .="(find LIKE '" . @$url_txtfind . "') " .
                                  $strOperator ;
                              $strSQL .=" (classify LIKE '" .
                                  @$url_txtclassify . "') " . $strOperator ;
                              $strSQL .=" (quadrant LIKE '" .
                                  @$url_txtquadrant . "') " . $strOperator ;
                              $strSQL .=" (room LIKE '" .
                                  @$url_txtroom . "') " . $strOperator ;
                              $strSQL .=" (trench LIKE '" .
                                  @$url_txttrench . "') " . $strOperator ;
                              $strSQL .=" (unit LIKE '" .
                                  @$url_txtunit . "') " . $strOperator ;
                              $strSQL .=" (layer LIKE '" .
                                  @$url_txtlayer . "') " . $strOperator ;
                              $strSQL .=" (fdate LIKE '" .
                                  @$url_txtfdate . "') " . $strOperator ;
                              $strSQL .=" (name LIKE '" .
                                  @$url_txtname . "')) ";
                              $strSQL .=" ORDER BY find," .
                                  "classify,room";

                                 $strSQL2=$strSQL . ";";

                              $strSQL .=" LIMIT " . $url_Start . "," . $lngAnzahl . ";";

                              $lngAnz=getAnzahl($strSQL2);
                              if ($lngAnz==0)
                              {
                                  echo "<p class=\"erganzahl\">No entries in matched the critera!</p>";
                              }
                              else
                              {
                                  echo "<p class=\"erganzahl\">Found " . $lngAnz .
                                      " Entries " .
                                      " which matched your criteria!</p>";

                              //Navigationsleiste erzeugen
                              $strLink=getDatei()  . "?" .  $_SERVER['QUERY_STRING'];

                              //Prüfen, ob &Start vorhanden ist
                              if (eregi("&Start",$strLink)>0)
                              {
                                  //Parameter vorhanden
                                  $lngPos=stripos($strLink, "&Start");

                                  //Parameter abschneiden
                                  if ($lngPos>0)
                                  {
                                      $strLink=substr($strLink, 0, $lngPos);
                                  }
                              }
                              //Parameter berechnen und anhängen
                              $strTemp="";
                              $S=0;
                              for ($I=0;$I<$lngAnz;$I+=$lngAnzahl)
                              {
                                  $S++;
                                  if ($S==1)
                                  {
                                      $strTemp ="<a href=\"" . $strLink . "&Start=" . $I . "\">" . $S . "</a>";
                                  }
                                  else
                                  {
                                      $strTemp .="|<a href=\"" . $strLink . "&Start=" . $I . "\">" . $S . "</a>";
                                  }
                              }
                           }
                          //Navigationsleiste ausgeben
                          echo "<p class=\"navigation\">$strTemp</p>";
                          //Suchergebnis ausgeben

             echo ausgeben($Con, $strSQL, false,false);

                          //echo ausgeben($Con, $strSQL, false,false);
                  ?></p>



          <?
                      //Datenbankverbindung trennen
                      trennen();
          ?>

          Kommentar


          • #6
            Keine Ahnung und vor allem keine Lust mehr. Vielleicht kann ein anderer hier aus dem Forum helfen.

            Kommentar


            • #7
              Hallo shyrin,

              ich kann Zergling wirklich verstehen. Deinen Code zu debuggen macht keinen Spass, denn der ist so wirr und zeugt nicht von gutem Stil.

              Code:
              import_request_variables('G','url_');
              und

              haufenweise "@"-Zeichen machen das ganze in einer Weise intransparent, das ein Debugging unmöglich macht. Ich gebe dir einen Guten Tipp: mal das, was du eigentlich vor hast auf ein Blatt Papier und zerlege es solange in einzelne Schritte, bis du jeden einzelnen Schritt sauber abbilden kannst ohne zig if's verschachteln zu müssen. Anschließend implementierst du das nochmal, dann helfe ich dir auch weiter.
              Viele Grüße,
              Dr.E.

              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
              1. Think about software design before you start to write code!
              2. Discuss and review it together with experts!
              3. Choose good tools (-> Adventure PHP Framework (APF))!
              4. Write clean and reusable software only!
              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

              Kommentar


              • #8
                nicht mein Fehler. Alles was du bemängelst, ist exakt von ner Vorlage aus nem Lehrbuch: "Datenbankprogrammierung mit Mysql 5 & PHP 5" (BHV-Verlag). Ich versuch das nur anzupassen.

                Kommentar


                • #9
                  Auch Lehrbücher sind wohl nicht mehr das, was sie mal waren.
                  Ein @ im Code spricht eher von grobem Unfug. Ist zwar nur eine "notice"
                  Unterdrückung, weil die Variablen nicht vorbelegt ist, aber das macht es
                  auch nicht viel besser.

                  Dein Hintergundfarbe in Zeiten von CSS im Code zu verankern, html Code
                  durchgängig im PHP Modus durchzuackern etc. führt den Stil von oben fort.

                  Wie kann ich in der Folgenden Zeile sagen, dass er alles außer ID anzeigen soll?
                  Das wird durch den Feldindex bestimmt, du solltest wissen an welcher Stelle
                  das Datenfeld id steht und auch, wie man in dieser for Schleife den index
                  entsprechend verändert.
                  Code:
                  $ausgabe .= "<td bgcolor="$color"><a href=\"edit.php?id=". $datensatz['id'] ."\">". $datensatz['find'] . "</a>,
                  Schau dir mal bitte diese PHP Syntax an. Was macht ", \", ". etc?

                  Grüße
                  Tine

                  Kommentar

                  Lädt...
                  X