ID von dem Eintrag der MYSQL als div id verwenden?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anzeigen
array
auswahl
code
date
datenbank
eins
eintrag
email
feld
host
http
kommentar
ordern
problem
stehen
text
url
verbindung
ziffer
-
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? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
<?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 -
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>";
-
<?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 -
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 -
Verstehe kein Wort, aber einen Rat kann ich dir geben: Verwende an Stelle von Varchar(5000) lieber Text ;)
-
Ich rede vom Spaltentyp.
-
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? -
Klar geht der da rein. Da geht alles rein, was man nicht vorher filtert.
-
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 :( -
Wenn du das andere Problem in leicht verständliche Sätze formulieren kannst, findet sich dafür vielleicht auch noch eine Lösung.
-
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... -
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)
Beitrag zuletzt geändert: 24.11.2011 4:11:17 von simuliertes -
simuliertes schrieb:
(ungetestet)
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 -
Da hast Du ein bisschen zu viel berichtigt, die Fehler kommen durch Deine Fegerbeseitigung.,
Ohne Deinen "Fehlerbeseitigten" Code kann ich aber auch nicht helfen.
-
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 -
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 -
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage