kostenloser Webspace werbefrei: lima-city


ID von dem Eintrag der MYSQL als div id verwenden?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    Hallo, ich bin auf der suche nach einigen Tipps, wie ich folgendes realisieren kann:

    Ich würde gerne die "id" des eintrags aus meiner mysql datenbank der id des div-containers zuweisen. Ich hatte an etwas gedacht wie:

    <div id="<?php echo $id;?>"></div>

    aber das funktioniert, vor allem wenn ich mehrere einträge habe nicht.. Aus rein logischen gründen kann ich das also schon mal vergessen.


    Jemand eine Idee?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. m**********n

    <?php
    $result = mysql_query("SELECT id FROM divs");
    while($id = mysql_fetch_object($result))
    {
     echo "<div id=\"" + $id + "\"></div>";
    }


    Ungetestet, müsste aber funktionieren. Du kannst dir ja mal die Doku von mysql_fetch_object() und von vielen anderen Funktionen in Richtung mysql_fetch_???() anschauen.

    Mfg

    Mator
  4. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    mator-kaleen schrieb:
    <?php
    $result = mysql_query("SELECT id FROM divs");
    while($id = mysql_fetch_object($result))
    {
     echo "<div id=\"" + $id + "\"></div>";
    }


    Ungetestet, müsste aber funktionieren. Du kannst dir ja mal die Doku von mysql_fetch_object() und von vielen anderen Funktionen in Richtung mysql_fetch_???() anschauen.

    Mfg

    Mator


    Jein... Die Div ist zwar da, aber sie wird falsch angezeigt.. Und beim Link (testweise auskommentiert) funktioniert es leider nicht :/

    // echo "<a href=\"javascript:anzeigen('" + $id + "');\">Kommentare anzeigen</a>";
     echo "<div id=\"" + $id + "\"style=\"display: none\">";
     echo $comment; 
     echo "</div>";
  5. <?php
    
    $query = 'SELECT id, comment FROM table ORDER BY id';
    $result = mysql_query($query);
    
    while ($row = mysql_fetch_object($result)) {
    	echo '<a href="#" onclick="anzeigen(\' + '.$row->id.' + \');">Kommentare anzeigen</a>';
    	echo '<div id="'.$row->id.'" style="display: none">'.$row->comment.'</div>';
    }
    mysql_free_result($result);
    
    ?>


    Beitrag zuletzt geändert: 23.11.2011 16:36:59 von fabo
  6. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    fabo schrieb:

    //EDIT:
    Hab grad nachträglich das fehlende abschließende Div eingefügt und nach id sortiert


    //EDIT2:
    Abfrage erneut geändert:
    <?php 	
    $connection = mysql_connect("$host" , "$user" , "$pass") OR DIE ("Keine Verbindung zu der Datenbank moeglich.");
    $db = mysql_select_db($dbase , $connection) or die ("Auswahl der Datenbank nicht moeglich.");
    
    // Datenbankabfrage
    $query = "SELECT id,autor,title,news,date,name,email,text FROM news, comments WHERE news.id = comments.belongs ORDER BY id";    
    $result = mysql_query($query, $connection) or die (mysql_error()); 
    
    while ($row = mysql_fetch_array($result)){ 
    $id = $row['id'];
    $autor = $row['autor']; 
    $title = $row['title']; 
    $news = $row['news']; 
    $pubdate = strtotime($row['date']);
    $pubdate = date(r, $pubdate); 	
    $name = $row['name'];
    $email = $row['email'];
    $text = $row['text'];
    echo '<div>';
    echo $news;
    echo '<a href="#" onclick="javascript:anzeigen(\''.$id.'\');">Kommentare anzeigen von id'.$id.'</a>';
    echo '<div id="'.$id.'" style="display: none">';
    echo $text;
    echo '</div>';
    echo '</div>';
    }
    ?>


    Jetzt besteht lediglich das Problem, dass wenn z.B. id 1 mehrere Kommentare beinhaltet, es die news erneut schreibt... Statt den 2. Kommentar an den 1. einfach anzuhängen... Hoffe das ist einigermaßen verständlich ausgedrückt naja so sieht es jetzt aus:

    News varchar(5000) TestlinkKommentare anzeigen von id1 //HIER DRINNE STEHT DER 1. KOMMENTAR
    News varchar(5000) TestlinkKommentare anzeigen von id1 //HIER STEHT DER ZWEITE
    Strong Text mit einem Link in neuem TabKommentare anzeigen von id2

    Der dritte eintrag mit ganz viel text um zu schauen, ob die div funktioniert....Kommentare anzeigen von id3



    So soll es aussehen:
    News varchar(5000) TestlinkKommentare anzeigen von id1 //HIER DRINNE STEHT DER 1. UND DER 2. KOMMENTAR
    Strong Text mit einem Link in neuem TabKommentare anzeigen von id2

    Der dritte eintrag mit ganz viel text um zu schauen, ob die div funktioniert....Kommentare anzeigen von id3

    **HIER DRINNE beschreibt, dass der Text in einer versteckten Div ist, die dank fabo's hilfe mit einem klick erst angezeigt wird... Nur zur erklärung

    Beitrag zuletzt geändert: 23.11.2011 19:43:14 von kill-a-teddy
  7. Verstehe kein Wort, aber einen Rat kann ich dir geben: Verwende an Stelle von Varchar(5000) lieber Text ;)
  8. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    fabo schrieb:
    Verstehe kein Wort, aber einen Rat kann ich dir geben: Verwende an Stelle von Varchar(5000) lieber Text ;)


    Das ist ja der text hehe :D Wird so aus der Datenbank ausgelesen :P
  9. Ich rede vom Spaltentyp.
  10. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    fabo schrieb:
    Ich rede vom Spaltentyp.


    Achsoo... Hab dazu eine Frage.. Wenn ich das auf text ändere, werden dann die html befehle ausgegrenzt? Wenn ich z.B. <img> tag habe geht der da rein oder nicht?
  11. Klar geht der da rein. Da geht alles rein, was man nicht vorher filtert.
  12. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    fabo schrieb:
    Klar geht der da rein. Da geht alles rein, was man nicht vorher filtert.


    Ok ich komm zwar grad aus irgendwelchen unerklärlichen gründen nicht in mein Datenbank aber ich werd es mir merken danke ;)

    Jetzt brauch ich nur noch eine Lösung für des andere Problem :(
  13. Wenn du das andere Problem in leicht verständliche Sätze formulieren kannst, findet sich dafür vielleicht auch noch eine Lösung.
  14. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    fabo schrieb:
    Wenn du das andere Problem in leicht verständliche Sätze formulieren kannst, findet sich dafür vielleicht auch noch eine Lösung.


    Ich versuche es mal mit pseudo:

    Hier steht der erste Blog eintrag
    Darunter eine Div, wo die kommentare stehen...


    Die kommentare werden dem Blog eintrag zugeordnet mit einer spalte, die ich mal "belongs" genannt (aus der comments tabelle) habe, welche eine beziehung mit "id" (aus news) hat.

    Wenn der Kommentar also zu Eintrag eins gehört, dann bekommt belongs die ziffer eins.. Soweit klar denke ich..
    Wenn ein zweiter Kommentar ebenfalls zu eintrag eins gehört, bekommt er auch die ziffer eins...

    <Div 1> <zeigt kommentare></div>

    Das Problem jetzt ist:
    Der 2. Kommentar wird nicht in die div vom eintrag eins rein gepackt, sondern erstellt selber einer div:
    <div 1><kommentar 1></div>
    <div 1><kommentar 2></div>

    Genau das will ich aber nicht, ist ja doof, wenn der selbe eintrag mehrmals geschrieben wird es soll also

    <div 1> kommentar1, kommentar2</div>
    sein...
  15. kill-a-teddy schrieb:
    fabo schrieb:
    Wenn du das andere Problem in leicht verständliche Sätze formulieren kannst, findet sich dafür vielleicht auch noch eine Lösung.


    Ich versuche es mal mit pseudo:

    Hier steht der erste Blog eintrag
    Darunter eine Div, wo die kommentare stehen...


    Die kommentare werden dem Blog eintrag zugeordnet mit einer spalte, die ich mal "belongs" genannt (aus der comments tabelle) habe, welche eine beziehung mit "id" (aus news) hat.

    Wenn der Kommentar also zu Eintrag eins gehört, dann bekommt belongs die ziffer eins.. Soweit klar denke ich..
    Wenn ein zweiter Kommentar ebenfalls zu eintrag eins gehört, bekommt er auch die ziffer eins...

    <Div 1> <zeigt kommentare></div>

    Das Problem jetzt ist:
    Der 2. Kommentar wird nicht in die div vom eintrag eins rein gepackt, sondern erstellt selber einer div:
    <div 1><kommentar 1></div>
    <div 1><kommentar 2></div>

    Genau das will ich aber nicht, ist ja doof, wenn der selbe eintrag mehrmals geschrieben wird es soll also

    <div 1> kommentar1, kommentar2</div>
    sein...


    <?php
    error_reporting(E_ALL);
    $connection = mysql_connect($host , $user , $pass) OR DIE ("Keine Verbindung zu der Datenbank moeglich.");
    $db = mysql_select_db($dbase , $connection) or die ("Auswahl der Datenbank nicht moeglich.");
    
    // Datenbankabfrage
    $query = "SELECT id,autor,title,news,date,name,email,text FROM news, comments WHERE news.id = comments.belongs ORDER BY id";
    $result = mysql_query($query, $connection) or die (mysql_error());
    $newsArray=Array();
    
    while ($row = mysql_fetch_array($result)){
            /*
            $id = $row['id'];
            $autor = $row['autor'];
            $title = $row['title'];
            $news = $row['news'];
            $pubdate = strtotime($row['date']);
            $pubdate = date(r, $pubdate);
            $name = $row['name'];
            $email = $row['email'];
            $text = $row['text'];
             */
            $newsArray[$id]=Array('autor'=>$row['autor'],
            'title'=>$row['title'],
            'news'=>$row['news'],
            'pubdate'=>date(r, strtotime($row['date'])),
            'name'=>$row['name'],
            'email'=>$row['email']);
            $newsArray[$id]['text'][]=$row['text'];
    }
    
    
    foreach($newsArray as $id => $nA)
     {
            echo '<div>';
            echo $nA['news'];
            echo '<a href="#" onclick="javascript:anzeigen(\''.$id.'\');">Kommentare anzeigen von id'.$id.'</a>';
            echo '<div id="'.$id.'" style="display: none">';
                    foreach ($nA['text'] as $text)
                    {echo $text;}
            echo '</div>';
            echo '</div>';
     }
    ?>

    (ungetestet)
    :wave:

    Beitrag zuletzt geändert: 24.11.2011 4:11:17 von simuliertes
  16. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    simuliertes schrieb:
    (ungetestet)
    :wave:



    Notice: Undefined index: news in D:\xampp\htdocs\blue\blog.php on line 129

    Paar andere Fehler waren noch, die hab ich schon von allein beseitigt, aber den verstehe ich net so ganz ^^
    betroffen ist

    echo $newsArray['news'];

    Das selbe auch mit der Line:

    foreach ($newsArray['text'] as $text)

    demnach werden auch nicht alle Kommentare angezeigt, die den "belongs-wert" 1 haben

    Kann man nicht einfach nur eine Anweisung schreiben, die sagt, wenn "belongs" ist gleich wie "id" dann erstelle jeweils diese div mit dem $text als inhalt??

    Beitrag zuletzt geändert: 24.11.2011 12:30:24 von kill-a-teddy
  17. Da hast Du ein bisschen zu viel berichtigt, die Fehler kommen durch Deine Fegerbeseitigung.,
    Ohne Deinen "Fehlerbeseitigten" Code kann ich aber auch nicht helfen.


  18. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    Also ich hab es jetzt mit einer neuen Variante probiert mittels Array und das Ergebnis ist zwar gut, aber nicht das was ich haben wollte :( Es macht mir durch das foreach nicht für jeden Kommentar ein Feld, sondern für jede Zeile aus der mysql Datenbank siehe da

    Der dazu gehörige code ist:

    <?php
    error_reporting(E_ALL);
    $connection = mysql_connect("$host" , "$user" , "$pass") OR DIE ("Keine Verbindung zu der Datenbank moeglich.");
    $db = mysql_select_db($dbase , $connection) or die ("Auswahl der Datenbank nicht moeglich.");
    
    $query = "SELECT news.id,autor,title,news,date,name,email,comment_text,belongs FROM news, comments WHERE belongs = news.id GROUP BY belongs";    
    $result = mysql_query($query, $connection) or die (mysql_error()); 
    while ($row = mysql_fetch_array($result)){ 
    $id = $row['id'];
    $autor = $row['autor']; 
    $title = $row['title']; 
    $news = $row['news']; 
    $pubdate = strtotime($row['date']);
    $pubdate = date("r", $pubdate); 
    $newsArray=Array('name'=>$row['name'],'text'=>$row['comment_text'],'email'=>$row['email']);
    echo '<div id="blog_content">';
    echo $news;
    echo '<a href="#" onclick="javascript:anzeigen(\''.$id.'\');">Kommentare anzeigen von id'.$id.'</a>';
    echo '<div id="'.$id.'" style="display: none">';
    foreach ($newsArray as $id => $text)
    {
    echo '<div id="comment_section">';
    echo '<ol class="comments first_level">';
    echo '<li>';
    echo '<div class="comment_box commentbox1">';
    echo '<div class="gravatar">';
    echo '<img src="images/avator.png" alt="author" />';
    echo '</div>';
    echo '<div class="comment_text">';
    echo '<div class="comment_author">';
    echo $id;
    echo '</div>';
    echo '<p>';
    echo $text;
    echo '</div>';
    echo '<div class="cleaner"></div>';
    echo '</div>';
    echo '</li>';
    echo '</ol>';
    echo '</div>';
    }
    echo '</div>';
    echo '</div>';
     }
    ?>


    Jetzt muss es nur noch nicht die Felder, sondern die einzelnen "belongs" auslesen... Übersichtshalber ein Screen der mysql datenbank
  19. puh....

    Ich denke mal ich erkläre was die Grundidee, der "Trick", bei meinem ersten Code war.
    Erstens ermöglicht Dir das speichern in einem Array, die Ausgabe von der SQL-abfrage zu trennen.
    Dann war das hier der Clou:
    $anyArray[]="anyText"

    Dadurch wird das Array $anyArray automatisch immer um ein Feld erweitert.
    Weil die id ($row['id'];) ja einzigartig ist (sein muss) wird das auch als key genommen.
    Ich merke gerade , da war wohl der Fehler in meinem Code.
    Mach mal die /*
    und */
    weg und probier's nochmal...

    Jedenfalls Hast du als Ergebnis ein Array das etwa so aussieht:
    $newsArray----------["1"]--
                      |       |-['autor']="hier steht der Autor"
                      |       |-['title']="hier steht der Titel"
                      |       |-['news']="hier stehen die News"
                      |       |-['pubdate']="hier steht wasaucimmer pubdate bedeutet"
                      |       |-['email']="hier steht die Email"
                      |       |-['Text']--
                      |                  |-[0]="Erster kommentartext"
                      |                  |-[1]="zweiter kommentartext"
                      |                  |-[2]="usw..."
                      --["2"]--
                      |       |-['autor']="hier steht der Autor"
                      |       |-['title']="hier steht der Titel"
                      |       |-['news']="hier stehen die News"
                      |       |-['pubdate']="hier steht wasaucimmer pubdate bedeutet"
                      |       |-['email']="hier steht die Email"
                      |       |-['Text']--
                      |                  |-[0]="Erster kommentartext"
                      |                  |-[1]="zweiter kommentartext"
                      |                  |-[2]="usw..."
                      --["3"]--usw...


    Wenn Du Also (im Beispiel) die News mit der ID 2 plus alle Kommentare dazu sehen willst:
    Echo $newsArray["1"]["News"];
      foreach ($newsArray["1"]["Text"] as $kommentare){
            Echo $kommentare;
      }


    Alle News+Kommentare wäre:
    foreach ($newsArray as $nA)
    {
      Echo $nA["News"];
      foreach( $nA["Text"] as $kommentar)
          {
               Echo $kommentar;
          }
    }

    News+Kommentare +id
    foreach ($newsArray as $id => $nA)
    {
      Echo "News Id: ".$id;
      Echo $nA["News"];
      foreach( $nA["Text"] as $kommentar)
          {
               Echo $kommentar;
          }
    }

    Dritter Kommentar von News-id 2:
    Echo $newsArray["2"]["Text"][2];


    Hier der verbesserte Code den Du mal testen solltest:
    <?php
    error_reporting(E_ALL);
    $connection = mysql_connect($host , $user , $pass) OR DIE ("Keine Verbindung zu der Datenbank moeglich.");
    $db = mysql_select_db($dbase , $connection) or die ("Auswahl der Datenbank nicht möglich.");
    
    // Datenbankabfrage
    $query = "SELECT id,autor,title,news,date,name,email,text FROM news, comments WHERE news.id = comments.belongs ORDER BY id";
    $result = mysql_query($query, $connection) or die (mysql_error());
    $newsArray=Array();
    
    while ($row = mysql_fetch_array($result)){
            $id = $row['id'];
            $newsArray[$id]=Array('autor'=>$row['autor'],
            'title'=>$row['title'],
            'news'=>$row['news'],
            'pubdate'=>date(r, strtotime($row['date'])),
            'name'=>$row['name'],
            'email'=>$row['email']);
            $newsArray[$id]['text'][]=$row['text'];
    }
    foreach($newsArray as $id => $nA)
     {
            echo '<div>';
            echo $nA['news'];
            echo '<a href="#" onclick="javascript:anzeigen(\''.$id.'\');">Kommentare anzeigen von id'.$id.'</a>';
            echo '<div id="'.$id.'" style="display: none">';
                    foreach ($nA['text'] as $text)
                    {echo $text;}
            echo '</div>';
            echo '</div>';
     }
     //test-Anzeige
     echo "<code>";
     print_r($newsArray);
     echo "</code>";
    ?>


    p.s. ich hatte bisher angenommen "news" sind der blog-text , id eine fortlaufende Nummer die für jeden neuen blog-text vergeben werden und "text" die dazugehörigen Kommentare.
    So ist jedenfalls der Code ausgelegt.

    Beitrag zuletzt geändert: 25.11.2011 4:32:50 von simuliertes
  20. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    simuliertes schrieb:
    p.s. ich hatte bisher angenommen "news" sind der blog-text , id eine fortlaufende Nummer die für jeden neuen blog-text vergeben werden und "text" die dazugehörigen Kommentare.
    So ist jedenfalls der Code ausgelegt.


    Naja fast

    Der 1. Test Kommentar wird nicht angezeigt, er gehört eigentlich in die gleiche div wie der 2. Test Kommentar...

    Zur veranschaulichung hab ich nochmal ein Beispiel einer externen seite.. Man klicke unten auf kommentare und es öffnen sich alle kommentare... Das selbe will ich nur in einer div haben, das formatieren usw. kann ich selbst ^^

    Wäre auch an sich überhaupt kein Problem, wenn ja wenn da nicht der Punkt wäre, dass ich nicht einen Blog eintrag, sondern mehrere auf einer Seite habe, mit verschiedenen ID's...

    Ich will also, dass alle Kommentare mit der "belongs" id 1 dem div container, welcher individuell für den Beitrag mit der id 1 erstellt wird angezeigt werden...

    Beitrag zuletzt geändert: 25.11.2011 14:18:21 von kill-a-teddy
  21. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!