Ankündigung

Einklappen
Keine Ankündigung bisher.

Datenbankausgabe mit Link zu einzelnen Datensatz

Einklappen

Neue Werbung 2019

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

  • shyrin
    hat ein Thema erstellt Datenbankausgabe mit Link zu einzelnen Datensatz.

    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

  • tinchen
    antwortet
    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

    Einen Kommentar schreiben:


  • shyrin
    antwortet
    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.

    Einen Kommentar schreiben:


  • dr.e.
    antwortet
    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.

    Einen Kommentar schreiben:


  • Zergling-new
    antwortet
    Keine Ahnung und vor allem keine Lust mehr. Vielleicht kann ein anderer hier aus dem Forum helfen.

    Einen Kommentar schreiben:


  • shyrin
    antwortet
    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();
    ?>

    Einen Kommentar schreiben:


  • Zergling-new
    antwortet
    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.

    Einen Kommentar schreiben:


  • shyrin
    antwortet
    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

    Einen Kommentar schreiben:


  • Zergling-new
    antwortet
    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.

    Einen Kommentar schreiben:

Lädt...
X