php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 07.07.2007, 13:54  
Neuer Benutzer
 
Registriert seit: 20.06.2007
Beiträge: 7
shyrin
Standard 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
shyrin ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 07.07.2007, 14:43  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

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.


Zitat:
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.

Zitat:
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.
Zergling-new ist offline  
Alt 08.07.2007, 10:41  
Neuer Benutzer
 
Registriert seit: 20.06.2007
Beiträge: 7
shyrin
Standard

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
shyrin ist offline  
Alt 08.07.2007, 12:41  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

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.
Zitat:
$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.
Zergling-new ist offline  
Alt 08.07.2007, 14:29  
Neuer Benutzer
 
Registriert seit: 20.06.2007
Beiträge: 7
shyrin
Standard

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($strLink0$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$strSQLfalse,false);

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



<?
            
//Datenbankverbindung trennen
            
trennen();
?>
shyrin ist offline  
Alt 08.07.2007, 16:29  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Keine Ahnung und vor allem keine Lust mehr. Vielleicht kann ein anderer hier aus dem Forum helfen.
Zergling-new ist offline  
Alt 08.07.2007, 16:36  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

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!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 08.07.2007, 17:28  
Neuer Benutzer
 
Registriert seit: 20.06.2007
Beiträge: 7
shyrin
Standard

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.
shyrin ist offline  
Alt 09.07.2007, 03:23  
Erfahrener Benutzer
 
Registriert seit: 16.02.2006
Beiträge: 303
tinchen
Standard

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.

Zitat:
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
tinchen ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
auf nächsten Datensatz zugreifen cycap Datenbanken 5 18.12.2007 14:32
IE5 link futzt net, rechte Maus + link öffnen geht hackenbusch HTML, Usability und Barrierefreiheit 1 03.01.2007 00:48
CSS: Link Styles SvenLittkowski HTML, Usability und Barrierefreiheit 3 26.09.2006 17:13
datensatz problem 24bits PHP Tipps 2006 1 30.08.2006 18:52
Php script über link ausführen!?? Funky_ PHP Tipps 2006 2 20.06.2006 11:32
einen variablen datensatz löschen PHP Tipps 2007 3 04.11.2005 12:41
Daten aus MySQL-abfrage zum Link mit id zusammensetzen maccoder Datenbanken 2 13.09.2005 16:49
Suche Tipps für Persormance-Steigerung (Geld für Nützliches) Beitragsarchiv 18 16.08.2005 10:57
weiterleitung per link im gleichem frame PHP Tipps 2005 17 23.05.2005 11:34
Datensatz ändern funktioniert nicht PHP Tipps 2005 3 03.03.2005 23:09
Leeren Datensatz editierbar machen Anuschka PHP Tipps 2004-2 1 27.12.2004 13:28
Variabel in link übergeben und Datensatz löschen Datenbanken 4 17.12.2004 13:08
[Erledigt] über ein Link --&gt; Tabelleneintrag PHP Tipps 2004 9 03.11.2004 17:09
absoluter link PHP Tipps 2004 10 01.07.2004 23:00
PHP Link ??? PHP Tipps 2004 4 25.06.2004 17:24

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php ergebnisse als link, import_request_variables g url_, import_request_variables(\'p\',\'url_\');, link in datenbank speichern, datenbankausgabe als link, bibfunktionen.php, php datenbankausgabe vorlage, php datenbankausgabe per link, ausgabe von einzelnen datensätzen, php: mehrere links pro datensatz, http://www.php.de/php-tipps-2007/44314-datenbankausgabe-mit-link-zu-einzelnen-datensatz.html, \alles außer id\ mysql

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:38 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.