Link-Abfrage in einer Schleife PHP/MySQL

Joe

Erfahrenes Mitglied
Hallo ihr.

Ich arbeite an einem Newstemplate und steck etwas fest. Schlicht gesagt sind meine Kenntnisse recht unzureichend.

Das Template funktioniert soweit aber ich würde gerne wissen wie ich im News-Archiv
Die Links zu den "Headlines" abfragen kann.

Konkret: if Link (soll in der selben Seite ausgeführt werden) geklickt
dann zeige Datum und Textnews zum Link

optimal aber nicht zwingend wäre wenn sich das ganze zwichen den andren Links öffnet


Das ganze befindet sich in der Schleife von Case 1
PHP:
<?php
if($_GET["archiv"]==1){
$var = $_GET["var"];}
switch ($var) 
{


/////////////////  Hier
case 1:
echo '<p class="info">in Work</p>';
$sql = 'SELECT
	Titel,
	Datum,
	Inhalt
  FROM
	news
  ORDER BY
	Datum DESC LIMIT 3';
   // "ORDER BY" damit die Datensätze nach der Datumsspalte sortiert werden, absteigend

  $result = $db->query($sql);
  if (!$result) {
	die ('Konnte den Folgenden Query nicht senden: '.$sql."<br />\nFehlermeldung: ".$db->error);
  }
  if (!$result->num_rows) {
	echo '<p class="info">Es sind keine Newsbeiträge vorhanden</p>';
   } else {
	while ($row = $result->fetch_assoc()) {


      ////// Diesen Teil möchte ich Abfragen und dann mit Datum und Inhalt füllen falls 
      ////// der Link geklickt wurde
		echo '<p class="news_text or"><a href="#">'.$row['Titel']."</a></p>\n";



   }
}
echo '<p class="news_text or"> <a href="http://zahnrad.kilu.de/index.php">zur&uuml;ck</a></p>';
break;
default:






$sql = 'SELECT
	Titel,
	Datum,
	Inhalt
  FROM
	news
  ORDER BY
	Datum DESC LIMIT 3';
   // "ORDER BY" damit die Datensätze nach der Datumsspalte sortiert werden, absteigend

  $result = $db->query($sql);
  if (!$result) {
	die ('Konnte den Folgenden Query nicht senden: '.$sql."<br />\nFehlermeldung: ".$db->error);
  }

  
  if (!$result->num_rows) {
	echo '<p class="info">Es sind keine Newsbeiträge vorhanden</p>';
   } else {
	while ($row = $result->fetch_assoc()) {
		echo '<h2>'.$row['Titel']."</h2>\n";
		echo '<p class="datum">'.$row['Datum']."</p>\n";
		echo '<p class="news_text">'.$row['Inhalt']."</p>\n";
	}
   }
echo '<p class="news_text or"> <a href="http://zahnrad.kilu.de/index.php?archiv=1&var=1">&auml;ltere Nachrichten zeigen</a></p>';
break;
}
?>
<h2>Links</h2>
		<p class="news_text or">Hier k&ouml;nnte ihr Link stehen<br />kontaktieren sie mich  </p>
<p class="news_text or"> <a target="_blank" unwichtig">egal</a></p>

<div class="ta_r">

<h2>Besucher: <? echo $gcc_hits; ?></h2>
		</div>	
</div>
</div>


Ich weiss auch nicht so recht obs nicht ne bessere Lösung gibt um das Archiv aufzurufen, so das nicht extra die Seite neugeladen muss sondern nur der Inhalt ersetzt wird. (in Moment zwar unötig aber könnte bei vielen Usern schon Serverlastig werden oder?)
 
Moin Joe,


das ist, wenn ich dich recht verstanden habe, eher eine Javascript-Problematik.

Es gäbe da 2 Möglichkeiten.

Die 1. Du gibst das, was du später zeigen willst, bereits aus, allerdings versteckt per CSS. Dann brauchst du es beim Klick per JS nur noch einblenden.

Die 2. Beim Klick fragst du den Server nochmal per AJAX nach den anzuzeigenden Inhalten ab, und fügst sie per JS dort ein, wo du sie haben willst.

Welche der beiden Varianten man nimmt, hängt davon ab, wie umfangreich die einzublendenden Inhalte sind...bei der 1. Variante würden diese ja schon an den Browser übermittelt werden, was bei umfangreichen Daten auch umfangreichen Traffic zur Folge hat....und das für Inhalte, welche u.U. garnicht benötigt werden.
 
  • Gefällt mir
Reaktionen: Joe
Kannst mich mal im ICQ adden, da kann ich dir denke ich schneller Helfen.


//Edit

Nen wort helfen mit adden vertauscht....
(Sry, ich schreibe heute irgendwie voll den Müll :D )
 
  • Gefällt mir
Reaktionen: Joe
Ja ich dachte auch schon an Javaskript denn 'nur einen Inhalt' innnerhalb der Schleife angezeigt zu bekommen scheint schwierig.

Dachte zuerst an onclick aber habs erst mal verworfen.

Ich habs erst mal doch über einen Link gelöst mit angehängter ID
allerdings gibt er mir nicht den gewünschten Inhalt irgendwas ist noch falsch

news.tpl:
PHP:
<?php
if($_GET["archiv"]==1){
$var = $_GET["var"];
$oldnews = $_GET["ID"];}         /////// Hier wird die ID vom Link geholt
switch ($var) 
{
case 1:
echo '<p class="info">in Work</p>';
$sql = 'SELECT
        ID,
	Titel,
	Datum,
	Inhalt
  FROM
	news
  ORDER BY
	Datum DESC LIMIT 10';
   // "ORDER BY" damit die Datensätze nach der Datumsspalte sortiert werden, absteigend

  $result = $db->query($sql);
  if (!$result) {
	die ('Konnte den Folgenden Query nicht senden: '.$sql."<br />\nFehlermeldung: ".$db->error);
  }
  if (!$result->num_rows) {
	echo '<p class="info">Es sind keine Newsbeiträge vorhanden</p>';
        }


//////////////// Da versuche ich den Inhalt auszugeben wo ich noch ein Fehler hab
     if ($oldnews !=NULL) {
          $row = $result->fetch_assoc();
          echo '<h2>'.$row['Titel']."</h2>\n";
	  echo '<p class="datum">'.$row['Datum']."</p>\n";
	  echo '<p class="news_text">'.$row['Inhalt']."</p>\n";
/////////////////


   } else {
	while ($row = $result->fetch_assoc()) {

/////////// Hier ist der Link mit angehängter ID
		echo '<p class="news_text or"><a href="http://zahnrad.kilu.de/index.php?archiv=1&var=1?ID='.$row["ID"].'">'.$row['Titel']."</a></p>\n";


   }
}
echo '<p class="news_text or"> <a href="http://zahnrad.kilu.de/index.php">zur&uuml;ck</a></p>';
break;
default:
$sql = 'SELECT
	Titel,
	Datum,
	Inhalt
  FROM
	news
  ORDER BY
	Datum DESC LIMIT 3';
   // "ORDER BY" damit die Datensätze nach der Datumsspalte sortiert werden, absteigend

  $result = $db->query($sql);
  if (!$result) {
	die ('Konnte den Folgenden Query nicht senden: '.$sql."<br />\nFehlermeldung: ".$db->error);
  }

  
  if (!$result->num_rows) {
	echo '<p class="info">Es sind keine Newsbeiträge vorhanden</p>';
   } else {
	while ($row = $result->fetch_assoc()) {
		echo '<h2>'.$row['Titel']."</h2>\n";
		echo '<p class="datum">'.$row['Datum']."</p>\n";
		echo '<p class="news_text">'.$row['Inhalt']."</p>\n";
	}
   }
echo '<p class="news_text or"> <a href="http://zahnrad.kilu.de/index.php?archiv=1&var=1">&auml;ltere Nachrichten zeigen</a></p>';
break;
}
?>
<h2>Links</h2>
		<p class="news_text or">Hier k&ouml;nnte ihr Link stehen<br />kontaktieren sie mich  </p>
<p class="news_text or"> <a target="_blank" href="http://www.myspace.com/binjaheartofmidnight">MySpace Bluemoon</a></p>

<div class="ta_r">

<h2>Besucher: <? echo $gcc_hits; ?></h2>
		</div>	
</div>
</div>


Da ich noch am üben bin sehe ich nicht so schnell den Fehler.
Finds nett das du schon zum 2.en mal hilfst :)

Ich schätz mal das diese Variante weniger Serverlastig ist als wenn ich den Text vorher unsichbar bereitstelle mit hidden. Oder?


@Styler2go muss ich mir erst installieren. Brauche sonst ICQ sehr wenig. Bist dort mit selben Nick?
 
Zuletzt bearbeitet:
Was den Fehler anbelangt...ich sehe da nirgends ein QUERY welches einen Datensatz anhand der ID ausliest.

Auch ist der Link nicht korrekt.

Code:
http://zahnrad.kilu.de/index.php?archiv=1&var=1?ID='.$row["ID"].'"

...aus dem roten Fragezeichen musst du ein & machen.

Was die Serverlast betrifft.... die ist bei deiner Variante eher höher, denn die Daten fragst du eh alle aus der DB ab.
Durch den Link muss die DB dann nochmal abgefragt werden.

Ist halt die Frage, womit du da so an News rechnest(Datensatzanzahl/Datenmenge)...um zu Entscheiden, was sinnvoller ist .
 
  • Gefällt mir
Reaktionen: Joe
Du kannst auch auf den irc
Code:
Server: nuclear-media
port: 6667
room: #g15
kommen oder per Jabber oder msn. Je nachdem was du hast. Ich finde es bei solch großen sachen einfach besser über einen IM dienst.

//Edit

ICQ ist doch hier links nebne mir die grüne Blume.. darüber soltle das doch auch möglich sein mich zu adden oder anzuschreiben oder so... denk ich mal :D
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Joe
Wir haben es nun über den IRC gelöst:
PHP:
	while ($row = $result->fetch_assoc()) {
 
if ($_GET['ID'] == $row['ID'] && isset($_GET['ID']))
{
$sq = "SELECT * FROM news WHERE ID = ".$_GET['ID'];
$res = $db->query($sq);
$ro = $res->fetch_assoc();
echo '<h2>'.$ro['Titel'].'</h2>';
echo '<p class="datum">'.$ro['Datum'].'</p>';
echo '<p class="news_text">'.$ro['Inhalt'].'</p>';
} else {
		  echo '<p class="news_text or"><a href="http://zahnrad.kilu.de/index.php?archiv=1&var=1&ID='.$row["ID"].'">'.$row['Titel']."</a></p>\n";
}
   }
 
  • Gefällt mir
Reaktionen: Joe
Recht vielen Dank Styler das ist genau so wie ichs mir vorgestellt habe :)
Dafür hätte ich wohl ne ganze Weile gebraucht. Werde es mir noch mal genau anschauen um was draus zu lernen.


Zuletzt stellt sich mir nur die Frage ob es Serverlastig ist, das über Links zu machen. Also die News über Links abrufen.
Die Seite wird ja immer neugeladen durch den klick auf den Link.
Ginge das überhaupt ohne ein Reload der Seite?

Auf jedenfall geht es und dafür nochmal Danke Styler!


@Sven
Hab dein Post etwas zu spät gesehen.
Naja ich denk das die News genauso oft frequentiert werden wie auf andren Seiten. Da dies ja ein grösseres Projekt wird denk ich werd ich eh nicht umhin kommen Java zu benutzen. Zumal die Serverlast in so einem Projekt ja wichtig ist. Da ichs im Moment mit meinem niedrigen Wissensstand nicht anders lösen kann lass ichs erst mal so. Zumindest hab ich da später ein Ansatz um die Last zu reduzieren. Bei den News schlägts ja noch nit so ins Gewicht wie bei späteren Teilen des Projekts. Dennoch werd ichs mal im Auge bahalten und mit der Zeit wenn ich mehr Erfahrung hab abändern :)
 
Zuletzt bearbeitet:
Zurück