Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Kleine Frage

Einklappen

Neue Werbung 2019

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

  • Gast-Avatar
    Ein Gast erstellte das Thema [Erledigt] Kleine Frage.

    [Erledigt] Kleine Frage

    Hallo,

    zuerstmal die Ausgangssituation:

    CODE:

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

    $abfrage = "SELECT * FROM lyrics WHERE id LIKE 'w'";
    $ergebnis1 = mysql_query($abfrage);

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


    }

    mysql_free_result($ergebnis1);


    ?>


    Hiermit lasse ich mir aus meiner Datenbank alles anzeigen was die ID "w" trägt. Jetzt möchte ich die Informationen aus der Spalte "text" nicht anzeigen lassen, sondern erst, wenn ich auf den Titel klicke. Sprich, ich möchte gern das Ergebnis "Titel" als Link zum Ergebnis "Text" machen.

    Geht das? Wo kann ich mich schlau lesen, oder habt ihr ne Kurzversion?

    Danke im voraus

  • Gast-Avatar
    Ein Gast antwortete
    Rechts so



    *agreed*

    nichts nervt mehr, als selbst son prob zu haben. Dann findet man einen Thread der EWIG lange darauf rumreitet, und wenn der Frager die Lösung hat, tut er sie nicht kund


    zu $row->id und $row['id']

    mit $row['id'] rufst du einen Wert aus dem index eines assoziativen arrays auf. Genauso gehts mit ner Zahl statt nem Namen mit normalen arrays.

    ein assoziatives array ist ein array, das statt eines integer-indexes auch einen einprägsamen index-namen benutzt.

    bsp:
    //Array mit integer-index
    array[1]="Kiel";
    array[2]="Schleswig-Holstein";
    array[3]="BRD";


    //Array mit assoziativem index
    array['stadt']="Kiel";
    array['bundesland']="Schleswig-Holstein";
    array['staat']="BRD";


    mit $row->id rufst Du Variablen aus einer Klasse direkt ab, die für funktionen oder kontruktoren eingesetzt wurden. Als Bsp. hab ich mal ne mysql.class.php zusammen gegriffelt:

    <?php
    class db_connection { /# Name der Klasse
    var $db_url="localhost";
    var $db_user="username";
    var $db_pw="DB_passwort";
    var $db_name="Datenbankname";
    var $db_table="Tabelle";
    var $gast="benutzer";
    var $passwort="pass";
    var $verbindung;
    var $resultat;

    // DB verbinden
    function db_connection() { /#Mit db konnektieren /#hat den selben namen, wie die Klasse. Die Function wird deshalb konstruktor genannt. die Variablen eines konstruktors werden mit $this->variable angesprochen!
    GLOBAL $db_url,$db_user,$db_pw,$db_name;
    $this->verbindung = mysql_connect($this->db_url, $this->db_user, $this->db_pw) or die ("Konnte keine MySql-Verbindung aufbauen\n");
    mysql_select_db($this->db_name, $this->verbindung) or die ("Konnte die MySql-Datenbank nicht auswählen\n");
    return(true);
    }

    function db_abfrage($query){ /# ist eine normale Funktion innerhalb der klasse
    if(!$resultat=mysql_query($query, $this->verbindung)) {
    echo '
    '.mysql_errno().':'.mysql_error().'
    #1
    ';
    }
    return($resultat);
    }

    }
    ?>

    Da sehen wir schon die Schreibweise. this->variable wird bei konstruktoren immer angegeben, dort ergibt die normale übergabe von variable einen fehler
    bei:
    $this->verbindung = mysql_connect($this->db_url, $this->db_user, $this->db_pw), erkennt man schon die vereinfachung, die durch $this->verbindung eingeführt wird, statt immer wieder den mysql_connect($........) anzugeben, wenn eine abfrage erfolgen soll. $this->verbindung ist übrigends der Verbindungs-identifier für die Datenbank.
    wenn ihr also per include/require ("mysql.class.php "); diese datei einbindet, könnt ihr jede Variable aus der Klasse die schon mal verarbeitet worden ist, direkt abrufen - des geht auch mit den standardklassen.

    abgerufen wird alles in dem parent-script.

    kleines intro..
    <?php
    $mysql_class="../mysql.class.php";
    require($mysql_class);

    $database=new db_connection; /# aus der klasse db_connection wor eine neue instanz initiiert.
    $query="SELECT benutzer,pass,active FROM member WHERE benutzer LIKE '".$_SERVER['PHP_AUTH_USER']."'";

    if(!isset($PHPSESSID)){
    if($_SERVER['PHP_AUTH_USER']) { //username-feld leer?
    if($_SERVER['PHP_AUTH_PW']) { //passwort-feld leer?
    if($db_rueck=$database->db_abfrage($query)) { /#db_abfrage ist in der "ur"-klasse db_connection zu finden
    .
    .
    .
    .
    ?>


    Hier wirkt es vielleicht nicht unbedingt sinnig, es so zu machen. wirkt umständlich, doch es gibt zwei nette argumente dazu.
    - Man kann sich meistens das umständliche übergeben und zerlegen von arrays schenken, um an einen einzelnen wert zu gelangen.
    - man benutzt keine aliases *klingt komisch als argument?*
    nun ja, wenn alles läuft und korrekt eingestellt ist, sind aliases ne feine sache, um sich kurz zu fassen. wenn die aliase nicht oder nicht korrekt arbeiten, kann es ganz schön müßig sein, die aliase zu entfernen. ist aber nur für portable lösungen wirklich interessant, denn es läuft immer.

    Kleiner Tipp:
    wenn ihr fest steckt, und euch keinen Reim auf die aktionen des scriptes, druckt mal die Werte der Variablen einfach auf der folgenden Seite aus.
    wenn ich mich verrenne, mach ich ne leere php-seite, wo nur alle parameter/aufrufe (z.b. SQL. da kann man viele unschöne überraschungen erleben, weil die abfrage dann in der richtigen verbindung anders ausgeben wird als eigentlich gedacht. ich sag nur select abfrage, mit und ohne "",'',``,"'.$var.'",'".var."' usw.) ausgegeben werden. Das ist oft VIEL aufschlussreicher als jede Fehlermeldung.

    - wenn ich an meinen KRAMPF mit den SQL-Abfragen denke, bis ich herausgefunden hab, das es an ner fehlerhaften implementation der DB des Hosters lag. Hat mich im endeffekt auch 1-2 Wochen(n00b) gekostet, aber andersrum wär ich wohl NIE zur Lösung gekommen, da ich zuletzt zu 100% sicher war, das net ich zu hohl bin, sondern der Hoster


    so hoffe, das net fehler drin sind *wer einen findet, darf ihn essen*
    wenn ich n paar leutz zeit und nerven gespart hab, dann freuts.
    ansonsten .... *SPAM!*

    Einen Kommentar schreiben:


  • imported_Ben
    antwortet
    manche mögen es als spam interpretieren ..
    sollen sie .. mir egal.

    also ich kritisiere ja oft leute in diesem forum, da sie keinerlei eigenleistung zeigen etc.

    jetzt mal 180° wende ..
    nehmt euch mal ein bsp. an edgecombe.

    selber versuchen .. wenns gar net weitergeht nachfragen .. mit den tipps weiterarbeiten .. nicht diese dummen "ich suche ein scrpt, wer kann mir helfen"-fragen ..

    lob in deine richtung edgecombe ..

    muss meiner ansicht nach auch mal sein ..

    grüe ben ..

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Nein, leider nicht, hatte es so
    Code:
    echo ''$row->titel'';
    bin jetzt schonmal ein ganzes schlück stauer. ich danke dir.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    wie hast du es ausgetauscht?
    Code:
    echo ''.$row->titel.'';
    so?

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    okokok. einen hab ich noch, was mir grad aufgefallen ist. im vergleich wohl ne kleinigkeit für EUCH.

    Code:
    echo 'songtext';
    Der Link funzt, nur die Bezeichnung ist immer die gleiche. Jetzt würd ich gern als Bezeichnung den Titel aus der gleichnamigen Spalte dahinbringen. Hab auch schon versucht, das ">songtext</a>" gegen "$row->titel" zu ersetzen, aber hülft nix.

    bittebitte

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    ich hab's jahaaaa.

    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 'songtext';
        
        }
    
    
    ?>
    hab zwar noch nicht verstanden, warum, aber das wird noch. vielen dank erstmal bis hierhin. meld mich heut bestimmt nochmal

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    lass dir mal nur $row['ID'] ausgeben, ob das geht...

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    daran lag es nicht. hab mehrere varianten ausprobiert. die bezeichnung der spalten sind auch alle kleingeschrieben... hmmm

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    du wählst bei deiner test.php ja immer die Falsche Spalte aus:
    eine SPlate "id" gibt es nicht, nur eine Spalte "ID" wie mir scheint.

    Code:
    echo 'songtext';

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    zu 1. egal auf welchen link ich gehe, da steht immer
    Code:
    http://localhost/detail.php?id=
    
    zu 2. wenn ich oben ne 1 oder 2 oder 3 hinter das gleich setze, erscheint der text, den ich habe will.
    
    zu 3. ok, entfernt.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    1. Geh mal mit der Maus auf so einen Link und schau was in der Statusleite des Browsers steht (unten link)

    2. klick mal auf so einen Link und schriebe oben bei der Adressleiste mal ne Zahl dazu, z.B. 1

    3. du bracuhst eigentlich das mysql_free_results() am ende nicht

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    der link wie du ihn eben gepostet hast, führt nirgendwo hin. nur ne blanke seite. hab die scripts so übernommen wie du sagtest. ausserdem: was oder welches meinst du mit script vorher?

    hab meine test.php:
    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 'songtext';
        
        }
    
    mysql_free_result($ergebnis1);
    
    
    ?>
    und die detail.php:
    Code:
    <? 
    
    mysql_connect("localhost", 
      "root","") or die 
      ("Keine Verbindung moeglich"); 
      mysql_select_db("songtexte") or die 
      ("Die Datenbank existiert nicht"); 
    $id = $_GET['id']; 
    $query = "select text from lyrics where ID='$id'"; 
    $detail = mysql_query($query); 
    $detail = mysql_fetch_array($detail); 
    
    echo $detail['text']; 
    ?>

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    theoretisch sollte das das Script machen, dass den Link herstellt.
    Schau mal zum Spaß in der Statusleiste des Browsers, wohin so ein Link führt?
    wenn da überall
    http://localhost/detail.php?id=
    steht, stimmt was nicht mit dem Script vorher

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    ok ok ok. Bin halt noch grün hinter den Ohren, und ich weiss auch das ich schon mehr will als ich selbst kann. Aber ich bin sooooo nah dran.

    Soweit funzt es alles... geil ABER irgendwas stimmt noch nicht, wenn ich auf den link klicke, erscheint eine leere seite und im browser stehtwenn ich nun hinter das id= z.b. eine 1 setzte, zeigt er mir den text an?

    Einen Kommentar schreiben:

Lädt...
X