Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Funktion zur Ausgabe eines Datensatzes meiner Datenbank

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Funktion zur Ausgabe eines Datensatzes meiner Datenbank

    Hi,

    ich habe folgendes Problem:
    ich will einen ausgewählten Datensatz mir einer einer Funktion ausgeben, ich habe bereits eine funktion erstellt, um die datenbnak zu öffnen und eine Funktion, um den datensatz aus zu wählen:

    <?php
    class db
    {

    var $host = "";
    var $user = "";
    var $password = "";
    var $db = "";
    var $verbindung = "";
    var $sq = "";

    function db($host, $user, $password, $db)
    {
    $this->host = $host;
    $this->user = $user;
    $this->pass = $password;
    $this->db = $db;

    if(!$this->verbindung = mysql_connect($this->host, $this->user, $this->passwort))
    {
    echo "Fehler beim Verbinden...";
    }

    $select = mysql_select_db($db, $this->verbindung)
    or die ("Datenbank nicht erreichbar");

    return $this->verbindung;

    }

    function sql($sql)
    {
    if (!$this->sq = mysql_query($sql, $this->verbindung))
    {
    echo "Fehler beim Senden der Abfrage!";
    }
    return $this->sq;
    }


    }


    ?>

    momentan geb ich meinen datensatz mit folgendem code aus:

    <?php
    include ("db_class.php");
    ?>
    <link rel='stylesheet' type='text/css' href='mein.css'>
    <table width="50%" border="1" >
    <tr>
    <th>ID </th>
    <th>Name </th>
    <th>Vorname </th>
    <th>E-Mail </th>
    </tr>
    <?php


    $db = new db("localhost","root","", "klasse");
    $sq = $db->sql("SELECT * FROM schueler");

    while ($zeile = mysql_fetch_array($sq) )
    {

    $id = $zeile["id"];
    $vorname = $zeile["vorname"];
    $name = $zeile["name"];
    $email = $zeile["email"];

    echo"
    <tr class='normal'>
    <td>$id </td>
    <td>$vorname </td>
    <td>$name </td>
    <td>$email </td>
    </tr>";
    }
    ?>
    </table>
    ich will auf der seite, in der ich die funktionen aufrufe aber nur funktionenen stehen haben, da ich momentan nur den einen bestimmten datensatz ausgeben kann, weil ich die tabelle vorgeben muss, die tabellenspalten soll aber die überschriften der datenbankspalten haben und diese automatisch verwenden, damit ich keine manuelle tabelle für die auszugebenden datensätze schreiben muss, sondern es durch eine function automatisch geschieht

    ich hoffe ich könnt mir schnell weiter helfen

    lg

  • #2
    Hi,

    Boa, da hast du aber viel zu kompliziert geschrieben. Das geht viel einfacher. Ausserdem sind einige Teile des Codes falsch angewandt.

    1. Wir erstellen ein file (dbconnect.php):
    PHP-Code:
    <?php

     session_start
    ();

     
    $server['dbserver'] = "localhost";    // Name des MySQL-Servers
     
    $database['database'] = "host";    // Name der Datenbank
     
    $dbuser['dbuser'] = "user";    // Name des Datenbank-Benutzers
     
    $dbpass['dbpass'] = "password";    // Passwort des Datenbank-Benutzers

     
    $conn mysql_connect($server$dbuser$dbpass);
     if (
    $conn)
     {
        if (!
    mysql_select_db($database))
        {
          die(
    "<span style=color:red>Fehler: Bitte Admin mitteilen: Datenbank existiert nicht.</span>");
        }
     }
     else
     {
          die(
    "<span style=color:red>Fehler: Bitte Admin mitteilen: Datenbank-Verbindungsfehler.</span>");
     }
    ?>
    Diese kannst du bei Bedarf mit include_once("dbconnect.php") ; einfügen.

    Dann zur Abfrage (musst dann hald in deinem Code anpassen:
    PHP-Code:
    <?php
    include_once("dbconnect.php");

    // vordefinieren von $tbody
    $tbody null;

    $sql "SELECT * FROM schueler ";
    $result mysql_query($sql);

    if(
    $result)
    {
        while(
    $obj mysql_fetch_array($result))
        { 
            
    // $obj ist jetzt ein array mit den gewünschten angaben
           
    $string $obj["Tabellenfeld"];
           
    $tbody .= '
           <tr>
               <td>Was du ausgeben willst</td>
           </tr>'
    ;
        }
    }
    else
    {
        
    // Fehlermeldung
    }
    ?>
    Dann must du natürlich noch die Variable $tbody in die <table> schreiben.
    So:
    Code:
    <table width="50%" border="1" >
        <tr>
            <th>ID </th>
            <th>Name </th>
            <th>Vorname </th>
            <th>E-Mail </th>
        </tr>
        <?php echo $tbody; ?>
    </table>
    Ich hoffe du verstehst das so.

    BTW: Der HTML-Teil ist aber nicht richtig. Es beginnt immer mit (dem Doctypefalls du einen hasst - steht immer zuoberst) dem HTML-Tag dann HEAD, dann BODY usw. Sonst wird das nix mit deiner Tabelle.

    Mfg

    Kommentar


    • #3
      ja ich weiß, dass es so geht wie du es geschrieben hast, aber das ist nicht dass, was ich brauche..ich brauche eine klasse die ich auf meine homepage einfügen kann um dorf das programmieren zu erleichtern, d.h. ich möchte eine seite für einen onlineshop erstellen, dorf rufe ich meine klasse mit include auf und dann schreib ich eben fix 3 oder 4 funktionen und ich hab die ausgabe einer kundentabelle auf dieser seite, dann hab ich eine seite von meinm verein, da füge ich diese seite auch wieder it include ein und geb lass da alle mitglieder ausgeben, die <= 18 sind also die jugend...das sind jetzt nur beispiele... klar ich köntne alles mit copy+paste machen, ist aber nicht meine aufgabe ^^ ich muss eine solche klasse erstellen, die möglichst viele funktionen zu datenbanken enthält, so dass das schreiben anderer homepages vereinfacht wird, wenn ich diese eine seite mit include einfüge...

      Kommentar


      • #4
        @habbohighs
        Da sind gleich drei Dinge, die du Anfängern nicht raten sollst:
        • Es gibt eigentlich (fast) nie wirklich einen Grund, SELECT * FROM zu benutzen
        • Bei [man]mysql_query()[/man] muss immer der Rückgabewert abgefragt und ein möglicher Fehlerfall behandelt werden.
        • [man]mysql_fetch_array()[/man] ohne die Angabe eines Ergebnistyps sollte vermieden werden, da sonst das Ergebnis immer doppelt zurück geliefert wird. Also besser [man]mysql_fetch_assoc()[/man], bzw [man]mysql_fetch_row()[/man] (oder wenn du schon eine Variable $obj brauchst, [man]mysql_fetch_object()[/man]) benutzen

        Kommentar


        • #5
          * Es gibt eigentlich (fast) nie wirklich einen Grund, SELECT * FROM zu benutzen
          * Bei mysql_query() muss immer der Rückgabewert abgefragt und ein möglicher Fehlerfall behandelt werden.
          * mysql_fetch_array() ohne die Angabe eines Ergebnistyps sollte vermieden werden, da sonst das Ergebnis immer doppelt zurück geliefert wird. Also besser mysql_fetch_assoc(), bzw mysql_fetch_row() (oder wenn du schon eine Variable $obj brauchst, mysql_fetch_object()) benutzen
          O.o Das wusste ich gar nicht. Ist gut, dass du mir das sagst.

          Wie meinst du mysql_query() muss immer der Rückgabewert abgefragt... Ich habe doch if($result) geschrieben, oder verstehe ich jetzt etwas falsch?

          Ich habe nicht gewusst, dass mysql_fetch_assoc im Prinzip das gleiche ist wie mysql_fetch_array($string, MSQL_ASSOC) - da beide ein assoziativen Indizes liefern.

          BTW: Bei php_manual ist überall das (*) zu finden.

          Vielen Dank für die Hinweise.
          Mfg

          Kommentar


          • #6
            Zitat von habbohighs Beitrag anzeigen
            Wie meinst du mysql_query() muss immer der Rückgabewert abgefragt... Ich habe doch if($result) geschrieben, oder verstehe ich jetzt etwas falsch?
            Da hast du recht, da habe ich zu wenig genau hingesehen. Meistens wird das direkt verwendent,
            PHP-Code:
            mysql_query($sql) or exit(mysql_error()); 
            aber selbstverständlich geht das auch auf deine Art
            Zitat von habbohighs Beitrag anzeigen
            BTW: Bei php_manual ist überall das (*) zu finden.
            Zitat von [URL='http://www.php-faq.de/q-sql-select.html?pop=1&tmpl=component']php-faq.de[/url]
            Im MySQL-Manual wird in den Beispielen der Einfachheit halber fast immer SELECT * verwendet. Daran darf man sich jedoch für die Praxis kein Beispiel nehmen, sagt auch das Handbuch explizit - Zitat: "You should NEVER, in an application, use SELECT * and retrieve the columns based on their position, because the order in which columns are returned CANNOT be guaranteed over time; A simple change to your database may cause your application to fail rather dramatically."

            Kommentar


            • #7
              aber selbstverständlich geht das auch auf deine Art
              Da bin ich aber beruhigt. ^^

              Das andere hab ich schon gelesen. Wenn sich jemand die Mühe macht schaue ich schon rein.
              Habe eben gedacht, dass es bei solchen professionellen manuals mit spalten und nicht mit (*)
              gecodet ist oder dass es einen Hinweis dazu hat.

              Danke nochmals.

              Mfg

              Kommentar


              • #8
                ich will euch ja nur ungerne stören aber habt ihr vll. noch eine idee, wie ich meine methode(function) erstellen kann? sodass ich jede beliebige datenbank eine tabelle habe, die sich natürlich ändert, sobald ich die datenbank ändere . . .

                Kommentar


                • #9
                  Zitat von AtriX_Fabsy Beitrag anzeigen
                  sodass ich jede beliebige datenbank eine tabelle habe, die sich natürlich ändert, sobald ich die datenbank ändere . . .
                  Was soll das heissen? Warum sollen wir dir helfen, wenn du dich nicht mal bemühst, einen halbwegs verständlichen Satz zu schreiben?

                  Na trotzdem, vielleicht hilft dir das:
                  PHP-Code:
                  function show_data($tabelle){
                      
                  $felder = array();
                      echo 
                  "<table>\n<tr>";
                      
                  $sql "SHOW COLUMNS FROM $tabelle");
                      
                  $res mysql_query(sql) or exit(mysql_error());
                      while (
                  $obj mysql_fetch_object($res)){
                          
                  $felder[] = $obj->Field;
                          echo 
                  "<th>$obj->Field</th>";
                      }
                      echo 
                  "</tr>\n";
                      
                  $sql "SELECT * FROM $tabelle";    // In diesem Fall ok!
                      
                  $res mysql_query(sql) or exit(mysql_error());
                      while (
                  $obj mysql_fetch_object($res)){
                          echo 
                  "<tr>";
                          foreach (
                  $felder as $feld){
                              echo 
                  "<td>$obj->$feld</td>"
                          
                  }
                          echo 
                  "</tr>";
                      }
                      echo 
                  "</table>";

                  Kommentar


                  • #10
                    ich habs jetzt folgendermaßen gelöst:


                    PHP-Code:
                     function tablehead()
                     {
                      
                    $anzahl func_num_args();
                      
                    $spalte func_get_args();
                      echo 
                    "<table width='50%' border='1'>";
                      echo 
                    "<tr class='normal'>";
                      for ( 
                    $i=0$i<$anzahl$i++ )
                      {
                       echo 
                    "<td>$spalte[$i]</td>";
                      }
                      echo 
                    "</tr>";
                     }


                     function 
                    table()
                     {
                      echo 
                    "<tr class='normal'>";

                      while (
                    $zeile mysql_fetch_array($sq) )
                      {
                       for ( 
                    $i=0$i<$anzahl$i++ )
                       {
                        
                    $spalte[$i] = $zeile["$spalte[$i]"];
                       }
                       echo 
                    "<tr class='normal'>";
                       for ( 
                    $i=0$i<$anzahl$i++ )
                       {
                        echo 
                    "<td> $spalte[$i] </td>";
                       }
                        echo 
                    "</tr>";
                      }
                      echo 
                    "</table>";
                     } 
                    tablehead() funktioniert auch soweit, aber table() noch net..
                    danke lazydog aber deinen quellcode versteh ich nicht, dafür hab ich zu wenig php kenntnisse...

                    Kommentar


                    • #11
                      Zitat von AtriX_Fabsy Beitrag anzeigen
                      deinen quellcode versteh ich nicht, dafür hab ich zu wenig php kenntnisse...
                      Dann eigne dir halt mal die Grundlagen an. Ich in dem Code ist nichts, was nicht mit minimen Grundkenntnissen zu verstehen wäre. Die als Parameter angegebene Tabelle wird einfach, inkl. Kopfzeile, ausgegeben.

                      Kommentar


                      • #12
                        vielen dank für euer bemühen ich habs jetzt dank meines informatiklehrers geschafft das problem zu lösen!

                        Kommentar

                        Lädt...
                        X