php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 08.07.2004, 16:54  
Gast
 
Beiträge: n/a
Standard Probleme bei Anordnung der Ergebnisse

Hallo nochmals.

Hab ein kleines Prob und hoffe dass es eine easy Lösung dafür gibt.

Und zwar frage ich über PHP meine SQL Datenbank hab, klappt super. Ich möchte die Abfrage ergebnisse nun in einer "unsichtbaren" Tabelle anzeigen, damit ein bissl Ordnung reinkommt. Und zwar soll es nicht so aussehen:

Zitat:
XXXX XXXX XXXXXXXXX XXXXXXXXXXX
XXXXXX XXXXX XXXXXX XXXXXXXXXX
XX XXXXXXXXX XXXXXXXXXXXXXX XXXXXXX
sondern halt so:
Zitat:

XXXX XXXX XXXX XXXX
XXXX XXXX XXXX XXXX
XXXX XXXX XXXX XXXX
geht das irgendwie ohne kompliziert zu werden?
 
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 08.07.2004, 17:14  
Gast
 
Beiträge: n/a
Standard

Lösung:

Du verwendest für die Ausgabe eine Tabelle:

Code:
$q=mysql_query("SELECT feld FROM tabelle WHERE 1 ORDER BY irgendwas");
$spalten=4;
$anzahl=mysql_num_rows($q);
$durchlaeufe=$anzahl+$spalten-($anzahl%$spalten);
echo "<table border=\"0\">";
for($i=0;$i<$durchlaeufe;$i++) {
    if(!(list($feld)=mysql_fetch_row($q)))
        $feld="";
    if(!($i%$spalten))
        echo "<tr>";
    echo "<td>$feld</td>";
    if(($i%$spalten)==($spalten-1))
        echo "</tr>";
}
echo "</table>";
$spalten definiert die Anzahl der Spalten, die angezeigt werden sollen.
Die Schleife muss in der Häufigkeit $spalten*x durchlaufen, in diesem Fall also 4 mal, 8 mal, 12 mal etc., damit abschließende <tr>-Tags gewährleistet sind.

Ungetestet!
 
Alt 08.07.2004, 17:40  
Gast
 
Beiträge: n/a
Standard

puuh. die Art der Programmierung ist mir schon arg schwer. vielleicht seh ich den Fehler auch nicht, und es wäre nett, wenn ihr mich drauf hinweist.

Bisher sieht mein Code so aus:
Code:
<?
  mysql_connect("localhost",
  "root","") or die
  ("Keine Verbindung moeglich");
  mysql_select_db("songtexte") or die
  ("Die Datenbank existiert nicht");
  
  $abfrage = "SELECT * FROM lyrics";
  $ergebnis1 = mysql_query($abfrage);

  while($row = mysql_fetch_object($ergebnis1))
    {
    
    echo $row->name;
    echo $row->vor;
    echo ''.$row->titel.'';
    echo $row->album;
    echo "<h2></h2>";
            
    }

?>
...und re gibt mir alles aus was in meiner datenbank drin ist, unterteilt in 4 spalten. wie bringen ich diesen code nur in zusammenhang mit diesem:

Code:
<?
 mysql_connect("localhost",
  "root","") or die
  ("Keine Verbindung moeglich");
  mysql_select_db("songtexte") or die
  ("Die Datenbank existiert nicht");


$q=mysql_query("SELECT * FROM lyrics"); 
$spalten=4; 
$anzahl=mysql_num_rows($q); 
$durchlaeufe=$anzahl+$spalten-($anzahl%$spalten); 
echo "<table border=\"0\">"; 
for($i=0;$i<$durchlaeufe;$i++) { 
    if(!(list($feld)=mysql_fetch_row($q))) 
        $feld=""; 
    if(!($i%$spalten)) 
        echo "<tr>"; 
    echo "<td>$feld</td>"; 
    if(($i%$spalten)==($spalten-1)) 
        echo "</tr>"; 
} 
echo "</table>"; 
 
?>
hab schon rumgespielt, aber was bringt es wenn ich noch nicht versteh.
 
Alt 08.07.2004, 18:05  
Gast
 
Beiträge: n/a
Standard

Damit es erstmal wie gewünscht funktioniert, ist lediglich folgendes zu sagen:

Wende niemals ein "SELECT *" an, sondern gib die Felder komma-separiert an, die du erhalten möchtest: "SELECT feld1, feld2, ... FROM tabelle..." Das hat überzeugende Gründe und keine Nachteile. Nehmen wir an, du möchtest aus deiner Tabelle den Vor- und Nachnamen jedes Datensatzes haben. Das bewerkstelligst du so:
Code:
SELECT vorname, nachname FROM tabelle
mysql_fetch_row() liefert dir nach dem Query bei jedem Aufruf einen weiteren Datensatz, genau so wie mysql_fetch_object(), nur in der Form eines Arrays. In unserem Fall steht an erster Stelle im Array der Vorname, an zweiter Stelle der Nachname, ganz wie die Reihenfolge im SELECT. list() überträgt die einzelnen Elemente eines Arrays auf Variablen. In unserem Fall bewirkt
Code:
list($vorname, $nachname)=mysql_fetch_row($q);
, dass in $vorname der Vorname steht, in $nachname der Nachname.

Mit diesen Variablen kannst du dann in deiner Schleife arbeiten, sie z.B. ausgeben. Das sind die einzigen Unterschiede zu deiner Vorgehensweise, die Daten aus der Datenbank zu holen. Der Rest ist das dynamische Aufbauen einer Tabelle und das Darstellen der Datenbankinhalte.
 
Alt 08.07.2004, 18:26  
Gast
 
Beiträge: n/a
Standard

hmm, das is mir schon soweit klar. er zeigt mir aber bei folgemdem code:
Code:
<?
 mysql_connect("localhost",
  "root","") or die
  ("Keine Verbindung moeglich");
  mysql_select_db("songtexte") or die
  ("Die Datenbank existiert nicht");


$q=mysql_query("SELECT vor, name, titel, album FROM lyrics"); 
$spalten=4; 
$anzahl=mysql_num_rows($q); 
$durchlaeufe=$anzahl+$spalten-($anzahl%$spalten); 
echo "<table border=\"0\">"; 
for($i=0;$i<$durchlaeufe;$i++) { 
    if(!(list($feld)=mysql_fetch_row($q))) 
        $feld=""; 
    if(!($i%$spalten)) 
        echo "<tr>"; 
    echo "<td>$feld</td>"; 
    if(($i%$spalten)==($spalten-1)) 
        echo "</tr>"; 
} 
echo "</table>"; 
 
?>
nur die vornamen verteilt über die verschiedenen spalten an, mehr nicht.

Meine DB ist so aufgebaut:
Zitat:
Vorname Name Titel Text Album

bei der Abfrage sollen alle spalten abgefragt werden und auch so wie sie in der DB sind wieder in der Tabelle angezeigt werden (ausser TEXT), sortiert nach dem NAMEN. bloss in dem Code den du mir gegeben hast, ist eine wichtige Funktion meines Codes verloren gegangen die ich unbedingt brauche:

und zwar das der Titel als LINK erscheint, der bei Klick den TEXT öffnet.

Mann, bin ich doof
 
Alt 08.07.2004, 18:33  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Edgecombe
hmm, das is mir schon soweit klar. er zeigt mir aber bei folgemdem code:[...Code...]
Entscheidend ist diese Stelle:
Code:
    if(!(list($feld)=mysql_fetch_row($q)))
Diese liefert dir momentan nur den Vornamen. Ändere wie folgt:
Code:
    if(!(list($vorname, $name, $titel, $text, $album)=mysql_fetch_row($q)))
Leuchtet das noch nicht ein? Das sind die Felder, die du im SELECT definiert hast, also liefert sie dir mysql_fetch_row() zurück. Nun verwende diese Variablen in der Schleife.

Die Verlinkung kannst du wie in deinem eigenen Beispiel setzen. Das Ding musst du halt umbauen:
Code:
echo ''.$row->titel.'';  // dein vorheriger Code
 
Alt 08.07.2004, 18:53  
Gast
 
Beiträge: n/a
Standard

Code:
<?
 mysql_connect("localhost",
  "root","") or die
  ("Keine Verbindung moeglich");
  mysql_select_db("songtexte") or die
  ("Die Datenbank existiert nicht");


$q=mysql_query("SELECT vor, name, titel, album FROM lyrics"); 
$spalten=4; 
$anzahl=mysql_num_rows($q); 
$durchlaeufe=$anzahl+$spalten-($anzahl%$spalten); 
echo "<table border=\"0\">"; 
for($i=0;$i<$durchlaeufe;$i++) { 
    if(!(list($vor, $name, $titel, $album)=mysql_fetch_row($q))) 
        $feld=""; 
    if(!($i%$spalten)) 
        echo "<tr>"; 
    echo "<td>$vor, $name, $titel, $album</td>"; 
    if(($i%$spalten)==($spalten-1)) 
        echo "</tr>"; 
} 
echo "</table>"; 
 
?>
soweit gehts, DANKE. Nur wollte ich nicht alle Informationen einer Zeile in einer Spalte unterbringen, sondern Stück für Stück. Die Vornamen in eine Spalte, dann die Nachnahmen in eine usw.

Ich weiss ich nerve, weiss aber nicht wenn ich sonst fragen kann... DANKE
 
Alt 09.07.2004, 04:09  
Erfahrener Benutzer
 
Registriert seit: 14.01.2004
Beiträge: 2.543
fantast
fantast eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von Saraneus
Wende niemals ein "SELECT *" an, sondern gib die Felder komma-separiert an, die du erhalten möchtest: "SELECT feld1, feld2, ... FROM tabelle..." Das hat überzeugende Gründe und keine Nachteile.
Aha ?!? Na dann schiess ma los. Ich hab mich mit dem Problem noch nich sonderlich tiefgreifend auseinandergesetzt, bin ma neugierig... #
__________________
Was ist validität?
fantast ist offline  
Alt 09.07.2004, 10:06  
Gast
 
Beiträge: n/a
Standard

@fantast

Nachteile:

1. Veränderungen der Tabellenstruktur ziehen manuelle Veränderungen im Skript nach sich. Schon bei einer kleineren Skriptmenge ist das sehr aufwändig. Außerdem bei häufig fehlenden Dokumentationen sehr unüberschaubar.
2. Aus größeren Tabellen will man meistens nicht alles zurückgeliefert bekommen. Damit leidert die Performance je nach Datenbankfülle.

Das sollte reichen :)
 
Alt 09.07.2004, 10:09  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Edgecombe
soweit gehts, DANKE. Nur wollte ich nicht alle Informationen einer Zeile in einer Spalte unterbringen, sondern Stück für Stück. Die Vornamen in eine Spalte, dann die Nachnahmen in eine usw.

Ich weiss ich nerve, weiss aber nicht wenn ich sonst fragen kann... DANKE
Falls du inzwischen einmal versucht hast, den Code zu verstehen, sollte dieser Ansatz genügen, selbst Initiative zu ergreifen und die Logik anzuwenden. Wenn du einen Programmierer brauchst, stehe ich gegen Entgelt gerne zur Verfügung :)
 
 


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
match, against: ergebnisse filtern DarkThunder Datenbanken 4 30.03.2007 10:51
Probleme bei Speicherung von serialize() Strings Manni2k PHP Tipps 2006 13 15.10.2006 15:06
Probleme mit mbstring extension unter Debian HStev Server, Hosting und Workstations 3 30.08.2006 20:55
Probleme bei der Installation von Turck MMCache tomx992 PHP-Fortgeschrittene 2 27.09.2005 20:31
Probleme beim Datenupload zu meiner Datenbank Datenbanken 3 05.09.2005 19:47
Häufigste Ergebnisse auslesen PHP Tipps 2005-2 3 14.08.2005 18:56
Probleme mit Sonderzeichen... Datenbanken 1 02.08.2005 23:37
probleme mit streams bei proc_open PHP-Fortgeschrittene 1 27.06.2005 12:19
[Erledigt] hilfe! probleme mit... PHP Tipps 2005 4 12.04.2005 22:55
[Erledigt] CSV Größe macht Probleme mit php PHP Tipps 2005 5 15.03.2005 21:29
Ergebnisse in einer anderen Spalte ausgeben PHP Tipps 2005 10 10.02.2005 10:13
[Erledigt] MYSQL Abfrage -&gt; Ergebnisse auf anzahl per seite begrenze PHP Tipps 2004-2 2 21.11.2004 21:28
[Erledigt] Technische Probleme mit Sessions PHP-Fortgeschrittene 4 18.11.2004 14:45
Ergebnisse von Abfragen einer Email zuweisen? PHP Tipps 2004 3 24.06.2004 16:57
PHP Bilder in DB / Probleme bei Änderung PHP-Fortgeschrittene 1 05.06.2004 11:20

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
select * nach name anordnen

Alle Zeitangaben in WEZ +2. Es ist jetzt 03:20 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.