tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
589
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Tservarius Tservarius ist offline Mitglied Silber
    Registriert seit
    Sep 2004
    Beiträge
    90
    Kurz un knackig.
    Ich möchte alle Spalten einer Tabelle in einem PHP-Script abfragen und in einem DropDown ausgeben:
    habs versucht, nur irgendwie fruchtet mein:
    $result = mysql_querry(SHOW COLUMNS FROM '$spaltenaustabelle');
    nicht so ganz.

    weis jemand rat?

    #############

    Das Script:

    $result = mysql_querry(SHOW COLUMNS FROM '$spaltenaustabelle');

    echo ("<select size=\"1\" name=\"spalte\">");
    echo ("<option selected value=\"\">Keine Spalte verfügbar</option>");

    while ($row = mysql_fetch_row($result)) {
    echo "<option value=\"$row[0]\">$row[0]</option>\n<br>";
    }
    mysql_free_result($result);
    echo ("</select></td>
     

  2. #2
    saila saila ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Ort
    Siegburg
    Beiträge
    742
    als erstes solltest du dir angewöhnen die Fehlermeldungen mit einzubauen wie z.B. or die ();

    Dann ist folgendes, bevor du dein Script testest, prüfe am besten alles noch mal durch. Denn dein mysql_querry schreibt man z.B. so: mysql_query();

    Hinzu kommt, das man innerhalb der mysql_query()-Klammern mit denen hier beginnt -> " und vor dem Klammerende wieder aufhört mit ".

    Da du für einen select-tag logischerweise mehrere Möglichkeiten hast, musst du logischerweise das ganze was an Datenausgabe aus der DB-Abfrage kommt in eine while() Schleife einbinden. Ansonsten bekommst du ausschl. den letzten Eintrag in der DB.

    Nun noch der Hinweis in den Tutorialbereich. Les am besten dort einige Beispiele durch, wie man eine Datenbankabfrage startet, aufbaut und mit dem Ergebnis daraus eine einigermaßen gute Darstellung bekommt.

    PHP-Code:
    <?php
    // hier noch ein Beispiel
    include('mysql.php'); // Beinhaltet die Zugangsdaten zur Datenbank inkl. Auswahl der DB

    // Diese Daten sollten übrigens außerhalb des Hauptroots liegen - was die Zugangsdaten betrifft.

    // Abfrage der Datenbank inkl. der Angabe welche Tabelle abgefragt wird. Das Sternchen :) dient dazu, alle Spalteninhalte in ein Array zu packen.
    $contakt mysql_query("SELECT * FROM tabellenname");

    // Weil es um mehrere Inhalte geht sieht das wie folgt aus bzgl. der while() Schleife
    while($ergebnis mysql_fetch_assoc($contakt)) {
       echo 
    "<opiton value=\"".$ergebnis['deine_wahl']."\">".$ergebnis['inhalt']."</option>";
    }

    // die select-tag anfang -und ende wirst du selbst einbinden können.

    // Wenn du eine sehr schnelle Abfrage erreichen möchtest, nimmst du statt 
    // mysql_fetch_assoc() mysql_fetch_object();
    // achte aber auf die Verarbeitung danach ;)
    ?>
    Wie gesagt, lese dir noch einiges durch und teste das alles auf deinem PC, bevor es ins Netz kommt.
     
    tschöh mit öh
    salia

    Wenn kein Text oben vorhanden ist, hier klicken:
    Für PHP -> FAQ
    Für PHP -> php.net
    für MySQL -> dev.mysql.com

  3. #3
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Ich möchte erst einmal sailas Beitrag korrigieren:
    als erstes solltest du dir angewöhnen die Fehlermeldungen mit einzubauen wie z.B. or die ();
    Eine Fehlerbehandlung ist schon empfehlenswert, jedoch nicht einfach nur mittels die(). Besser sind schon
    beschreibende Fehlerbehandlungen wie etwa
    PHP-Code:
    if(!$result mysql_query($query)) {
      echo 
    '<p><strong>MySQL Error <tt>'.mysql_errno().'</tt>:</strong> '.htmlspecialchars(mysql_error()).'<pre>'.$query.'</pre></p>';
      exit;

    Hinzu kommt, das man innerhalb der mysql_query()-Klammern mit denen hier beginnt -> " und vor dem Klammerende wieder aufhört mit ".
    Das ist nicht ganz korrekt. Wichtig ist nicht etwa die Angabe von Anführungszeichen, sondern, dass der erste Parameter der mysql_query, also die Anfrage, eine Zeichenkette erwartet.

    Desweiteren sollten Anfragen mit SELECT * vermieden werden.
     
    Markus Wulftange

  4. #4
    saila saila ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Ort
    Siegburg
    Beiträge
    742
    Ok, jetzt fangen wir an Klugschei.....

    Wie er eine Fehlerbehandlung einbaut bleibt ihm überlassen. Wichtig ist, das er grundsätzlich eine hat! Worin übrigens der Unterschied zwischen or die() und !$result liegt hätt ich gerne erklärt. Wenn schkon Klug dann auch richtig.

    Nicht umsonst war der Hinweis Tuts...


    Und wer lesen kann ist klar im Vorteil.
    .....Ich möchte alle Spalten einer Tabelle.....

     
    tschöh mit öh
    salia

    Wenn kein Text oben vorhanden ist, hier klicken:
    Für PHP -> FAQ
    Für PHP -> php.net
    für MySQL -> dev.mysql.com

  5. #5
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Stelle dein Error-reporting auf E_ALL ....den Fehler mit querry() findet auch kein mysql_error()
    Geändert von Sven Mintel (07.09.04 um 00:07 Uhr)
     

  6. #6
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Worin übrigens der Unterschied zwischen or die() und !$result liegt hätt ich gerne erklärt.
    Der Unterschied zwischen die() und !$result besteht – neben der Tatsache, dass diese eigendlich nicht verglichen werden können – darin, dass es sich bei einem um eine Funktion (die()) und bei dem anderen um einen Operator (!) handelt.

    Und wer lesen kann ist klar im Vorteil.
    Das stimmt!
    Selbst wenn alle Spalten tatsächlich benötigt werden, sollten sie separat aufgeführt werden, weil
    • die Tabelle nachträglich erweitert werden könnte, die neue(n) Spalte(n) (im worst case ein BLOB!) nach der Abfrage aber nicht gebraucht werden
    • die Reihenfolge der Spalten bei der Ausgabe sonst undefiniert ist (bei den meisten Datenbanken ist es die Reihenfolge der Spaltendefinition bei der Anlage der Tabelle). Diese Reihenfolge könnte sich ändern (z.B. durch Einspielen eines Backups nach Erweiterung der Tabelle, durch eine neue Version des DBMS, etc.)
    • die Spalten sonst möglicherweise keinen vernünftigen oder eindeutigen Namen haben. Führt man die Spalten einzeln an, kann man mittels AS einen Namen (Alias) vergeben: SELECT p.pers_p_nr AS personalnummer FROM personal p ORDER BY personalnummer
    • dadurch im Script quasi automatisch dokumentiert wird, welche Spalten anschließend verarbeitet werden
    FAQ der Newsgroups de.comp.lang.php.* - 16.14. Warum soll ich nicht SELECT * schreiben?
     
    Markus Wulftange

  7. #7
    Avatar von Ben Ben
    Ben Ben Ben Ben ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Raum FFM
    Beiträge
    1.364
    @saila: Klar bleibt es ihm überlassen, doch soll ne Fehlerausgabe im Design ja aspäter auch ordentlich aussehen und da sich bei vielen hier zeit das sie wenn Fehlerausgabe diese einfach hinhunzen mit nem or die sind solche Möglichkeiten schon gut zu kennen....

    Den Unterschied zwischen dem boolschen NOT Operators ! und der Funktion die() ist neben der Aussage von _gumbo noch dadurch zu beschreiben, dass die() nichts anderes ist, als eine Ausgabe die Anschliessen das Script beendet, ähnlich einem echo mit nachfolgendem exit.
    Was man eher vergleichen könnte mit dem ! wäre das or, wenn der linke teil nicht TRUE ist wird eben or ausgeführt....
     

  8. #8
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Der Vorteil an meiner Fehlerbehandlung besteht wohl darin, dass der Fehler auch wirklich behandelt wird, anstatt bloß kontextlose Meldungen zu schreiben.

    Was den Verneinungsoperator angeht, verneint er einfach den nachstehenden Ausdruck. Eine längere Version des von mir beschriebenen Beispiels wäre z. B.:
    PHP-Code:
    if( ($result mysql_query($query)) === FALSE ) {
      [...]

     
    Markus Wulftange

Ähnliche Themen

  1. MySQL: GRANT UPDATE -Anweisung auf alle Spalten mit Ausnahme von einer
    Von Fools im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 18.09.10, 14:48
  2. Alle Spalten in einer Oracle-Tabelle auselsen
    Von Moutsch im Forum .NET Datenverwaltung
    Antworten: 1
    Letzter Beitrag: 16.02.10, 18:55
  3. Alle Spalten für ersten Eintrag in einer Spalte
    Von mario1234 im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 27.10.07, 21:25
  4. Antworten: 3
    Letzter Beitrag: 10.09.06, 06:00
  5. Antworten: 5
    Letzter Beitrag: 05.04.06, 09:46