Mal wieder Blätterfunktion im Newsscript

istmiregal

Mitglied
Hallo,
Entschuldigung das ich schon wieder mit sooo einen Thema anfange, aber ich finde bei meinem Script den Fehler nicht. Bin halt nur ein "Feierabendprogrammirer":).
Ja ich habe auch schon :google: und hier im Forum nichts gefunden was mir helfen kann.
Bevor ich den Fehler ausführlich beschreibe erst einmal den Link zu meiner Versuchsseite, damit ihr es selber testen könnt. Hier der Link

So jetzt mein Problem:
Wie Ihr seht handelt es sich um ein newsscript wo automatisch der neuste Eintrag angezeigt wird. Die Restlichen Einträge stehen nur mit dem "titel" in einer Auflistung. Weil in der Datenbank mittlerweile etliche Einträge stehen ist auch eine Blätterfunktion eingebaut.
Wenn ich jetzt die Seite aufrufe funktioniert alles gut. Man sieht den neusten Eintrag, man kann auch mit der Blätterfunktion zu den nachfolgenden Seiten blättern. Aber sobald ich einen älteren Eintrag anklicke steht nur noch dieser Eintag in der Auflistung und die Blätterfunktion funktioniert auch nicht richtig. Es sollte aber die 30 nächsten Einträge in der Auflistung stehen und die Blätterfunktion sollte auch funktionieren.
Hier jetzt der Code:
PHP:
<?PHP
  $title = "Einsätze";
  include_once("head.php");
  // HIER WIRD DER DATENBANK ZUGANG EINGEFUEHRT
?>
  
<div id="Inhalt">
 <?php  
 
 // HIER STEHT DER AKTUELLE EINTRAG 
  $per_page = 30;
  $position = $_GET['position'];
  if($position == "") $position=0;
  
  if($_GET['id'] == "") $eintrag_string = "SELECT id, name, mail, timest, posting, titel, datum FROM ffg_repo ORDER BY id DESC LIMIT 1";
  
  else $eintrag_string = "SELECT id, name, mail, timest, posting, titel, datum FROM ffg_repo WHERE id=".$_GET['id'];
  $eintrag_query = mysql_query($eintrag_string);  
  $eintrag = mysql_fetch_array($eintrag_query);
  ?>     
      <table ><tr><div id="eintrag">
        <h2><?PHP echo $eintrag['datum'];?>
        -
        <?PHP echo $eintrag['titel']; ?></h2>
        </tr>
     <tr>
        <?PHP echo $eintrag['posting']; ?>
        <div class="footer">
        <i><a href="mailto:<?PHP echo $eintrag['mail']; ?>"><?PHP echo $eintrag['name']; ?></a> am <?PHP echo date("d.m.Y",$eintrag['timest']); ?></i>
      </div><p>
    Hier findet Ihr weitere Einsätze:
    
        <tr>
          <th width="92">
            Name:
          </td>
          <th width="100">
            Datum:
          </td>
          <th width="424">
            Einsatz:
          </td>
        </tr>
<?PHP
  //  HIER KOMMT DIE AUFLISTUNG DER FOLGENDEN EINTRAEGE
 
  if($_GET['id'] == "") $news_string = "SELECT id, name, mail, timest, titel, datum FROM ffg_repo ORDER BY id DESC LIMIT $position,$per_page";
  else $news_string = "SELECT id, name, mail, timest, posting, titel, datum FROM ffg_repo WHERE id=".$_GET['id'];
  $news_query = mysql_query($news_string);
  
  while($row = mysql_fetch_array($news_query)){
    ?>
        <tr>
          <td><i><a href="mailto:<?PHP echo $row['mail']; ?>">
            <?PHP echo $row['name']; ?></a>&nbsp;</a>am:&nbsp;<?PHP echo date("d.m.Y",$row['timest']); ?></a></i>
          </td>
          <td>
            <?PHP echo $row['datum']; ?>
          </td>
          <td>
      <a href="einsaetze.php?id=<?PHP echo $row['id']; ?>">
            <?PHP echo $row['titel']; ?>
      </a>
          </td>
        </tr>
    <?PHP
  }
?>
    </table>
      <div class="footer" >
     <i> <?PHP
     
     // HIER IST DIE BLAETTERFUNKTION
     
              $count_string = "SELECT count(*) FROM ffg_repo ";
              $count_query = mysql_query($count_string);
              $anzahl = mysql_fetch_row($count_query);
              $vorher = $position -30;
              $nachher = $position +30;
              if($vorher>=0) echo "<a href=\"einsaetze.php?id=".$_GET['id']."&position=".$vorher."\"> Neuere Meldung &lt;&lt;</a>&nbsp;&nbsp;&nbsp;";
              if($nachher<$anzahl[0]) echo "<a href=\"einsaetze.php?id=".$_GET['id']."&position=".$nachher."\">&gt;&gt; Ältere Meldungen </a>";
              
            ?></i></div>
           
    </div>

    </div>
     </body>

Es wäre schön wenn jemand von Euch den Fehler finden könntet und mir den oder die Tips zur Behebung geben könntet.
 
Zuletzt bearbeitet:
Der Fehler liegt in im SQL Befehl.
Bu hast angegeben, dass wenn eine Einsatz-ID angegeben ist nur diese in der weiteren Einsatzauflistung angezeigt werden soll:
PHP:
if($_GET['id'] == "") $news_string = "SELECT id, name, mail, timest, titel, datum FROM ffg_repo ORDER BY id DESC LIMIT $position,$per_page";
  else $news_string = "SELECT id, name, mail, timest, posting, titel, datum FROM ffg_repo WHERE id=".$_GET['id'];
Verwende einfach nur
PHP:
$news_string = "SELECT id, name, mail, timest, titel, datum FROM ffg_repo ORDER BY id DESC LIMIT $position,$per_page";
für die Auflistung, dann müsste es glaube ich funktionieren ;)
 
Hallo und Danke für deine Antwort,

deinen Vorschlag hatte ich auch schon mal probiert, dabei ist immer die Auflistung zu sehen und die Blätterfunktion klappt auch.
Soweit so gut, aber wenn ich jetzt auf der Zweiten Seite zB. den dritten Eintrag anklicke startet die Auflistung wieder bei dem neusten Eintrag. Ich müsste dann erst wieder die Blätterfunktion anklicken um dann zB. den vierten Eintrag auf der Zweiten Seite anzuklicken. Das finde ich ziemlich umständlich.
Ich müsste doch die ID des Angezeigten Einsatzes an die Auflistung und die Blätterfunktion weitergeben um von diesem Punkt die Auflistung zu starten.
Bei meinem Script gebe ich auch die ID weiter, aber ich finde den Fehler nicht warum er mir nicht die nächsten dreißig Einträge anzeigt.
 
Damit müsste es funktionieren:
PHP:
$anfang=$_GET[id]+1;
$news_string = "SELECT id, name, mail, timest, titel, datum FROM ffg_repo ORDER BY id DESC LIMIT $anfang,$per_page";
Der Startpunkt ist halt dann nicht genau ein vielfaches von deinen angegebenen (ich glaube) 30, sondern um eins größer als die ID des angezeigten Datensatzes, was aber meines Erachtens nach egal sein müsste :D

Ich hoffe, dass ist was du suchst...
 
Hallo nach Wien,

Ich muss dich leider enttäuschen. Jetzt zeigt er mir die erste Auflistung an und wenn ich blättere passiert nichts. Er bleibt immer auf der ersten Auflistung stehen. Wenn ich jetzt einen älteren Eintrag anklicke, wird der Bericht geöffnet aber es erscheint keine Auflistung der älteren Einträge mehr.

Wenn ich das richtig versteh müsste ich in meinem Script eine Verbindung von $_GET [id] in der Auflistung zur der Position in Blätterfunktion herstellen. Aber ich weiß jetzt nicht wie.
Ich dachte es würde reichen wenn ich
PHP:
$position = $_GET['id'];
einfüge, aber da passiert auch nur (nach anklicken), dass die Auflistung auf einen Eintrag reduziert wird. Dazu kommt das die Blätterfunktion nicht mehr funktioniert.

Danke noch mal für deine Hilfe.
 
Hast Du das wieder in die if-Abfrage eingebaut die im Script in deinem ersten Post steht?
Ersetz mal im hier geposteten Script den SQL Befehl für die weitere Auflistung durch:
PHP:
$newsstring="SELECT * FROM ffg_repo WHERE id>'$_GET[id]' ORDER BY id DESC LIMIT $per_page";
Damit suchst Du dann $per_page Einträge deren id größer ist als die des aktuellen.
 
Hallo,
wenn ich das so schreibe:
PHP:
  $news_string="SELECT * FROM ffg_repo WHERE id>'$_GET[id]' ORDER BY id DESC LIMIT $per_page";  
  $news_query = mysql_query($news_string);
Habe ich beim ersten Aufruf eine Auflistung. Aber die Blätterfunktion funktioniert nicht richtig. Es werden nur die ersten Einträge angezeigt. Wenn ich dann einen Eintrag anklicke verringt sich die Auflistung von anfangs 30 Einträgen bis zu diesem. Das heißt ich klicke den 15. Eintrag an, stehen nachher die 15 Neusten Einträge da.

Wenn ich eine if abfrage mache, wie diese:
PHP:
if($_GET['id'] == "") $news_string="SELECT * FROM ffg_repo WHERE id>'$_GET[id]' ORDER BY id DESC LIMIT $per_page";  
  else $news_string = "SELECT id, name, mail, timest, posting, titel, datum FROM ffg_repo WHERE id=".$_GET['id'];
  $news_query = mysql_query($news_string);
Dann habe ich das gleiche Problem mit der Blätterfunktion, es werden nur die neusten 30 Einträge angezeigt. Sobald ich einen Eintrag anklicke steht in der Auflistung nur noch der einzelne Eintrag und die Blätterfunktion klappt gar nicht mehr.

Ich bin schon bald soweit das Script ganz neu und anders zu schreiben. Aber ich wüsste nicht ob es mit einer anderen Scripsprache besser klappt.

Danke für deine Tipps.
 
Also ich setze mich da mal rann. Wenn ich das mal so sagen darf:
Dein Programmierstil ist beschissen... Du öffnest Tags die nicht mehr geschlossen werden, du wechselst dauernd zwischen PHP und HTML-"Modus" was das ganze unheimlich unleserlich macht.

Hier mal wie es funktionieren könnte (musst es anpassen habe es nur bei mir getestet und logischerweise nicht die ganze Tabelle angelegt).
PHP:
<?PHP
  $title = "Einsätze";
  include_once("head.php");
  // HIER WIRD DER DATENBANK ZUGANG EINGEFUEHRT
?>

<div id="Inhalt">
<?php  
 
// HIER STEHT DER AKTUELLE EINTRAG 
$per_page = 30;
if(isset($_GET['id'])) {
	$id = $_GET['id'];
}
else {
	$sql_max_id = "SELECT id FROM ffg_repo ORDER BY id DESC LIMIT 1";
	$max_id = mysql_fetch_array(mysql_query($sql_max_id));
	$id = $max_id['id'];
}

echo $PHP_SELF;

$eintrag_string = "SELECT * FROM ffg_repo WHERE id = $id LIMIT 1";
$eintrag = mysql_fetch_array(mysql_query($eintrag_string));

echo '
<table>
	<tr>
		<td colspan="3">
			<div id="eintrag">
				<h2>'.$eintrag['datum'].' - '.$eintrag['titel'].'</h2>
				<br>
				'.$eintrag['posting'].'
			</div>
			
			<div class="footer">
				<i><a href="mailto:'.$eintrag['mail'].'">'.$eintrag['name'].'</a>  am '.date("d.m.Y", $eintrag['timest']).'</i>
			</div>
		</td>
	</tr>
	<tr>
		<td colspan="3">
			Hier findet Ihr weitere Einsätze:
		</td>
	</tr>
	<tr>
		<td width="92">
			Name:
		</td>
		<th width="100">
			Datum:
		</td>
		<td width="424">
			Einsatz:
		</td>
	</tr>
';

//  HIER KOMMT DIE AUFLISTUNG DER FOLGENDEN EINTRAEGE

$news_string = "SELECT * FROM ffg_repo WHERE id > $id LIMIT $per_page";
$news_query = mysql_query($news_string);

while ($row = mysql_fetch_array($news_query)) {
	
	echo '
	<tr>
		<td>
			<i><a href="mailto:'.$row['mail'].'">'.$row['name'].'</a> am: '.date("d.m.Y", $row['timest']).'</i>
		</td>
		<td>
			'.$row['datum'].'
		</td>
		<td>
			<a href="einsaetze.php?id='.$row['id'].'">'.$row['titel'].'a</a>
		</td>
	</tr>
	';
}

echo '
</table>

<div class="footer">
Blättern:<br>
';

// HIER IST DIE BLAETTERFUNKTION
$count_string = "SELECT count(*) FROM ffg_repo";
$anzahl_erg = mysql_fetch_row(mysql_query($count_string));
$anzahl = $anzahl_erg[0];

$vorher = $anzahl - 30;
$nachher = $anzahl + 30;

if($vorher >= 0) {
	echo '<a href="einsaetze.php?id='.$vorher.'">&lt;&lt; Ältere Meldungen</a>';
}

if($nachher<$anzahl) {
	echo '<a href="einsaetze.php?id='.$nachher.'">Neuere Meldung &gt;&gt;</a>';
}

echo '
</div>
</body>
';

?>

BITTE! :)

Bin mal eben essen - schaue danach nochmal drüber
Kannst dich glücklich schätzen das ich gerade Langeweile hab ;)

lg
 
so - alles vergessen vom Post gerade ;)

Hier die funktionierende Version:
PHP:
<?PHP
  $title = "Einsätze";
  include_once("head.php");
  // HIER WIRD DER DATENBANK ZUGANG EINGEFUEHRT
?>

<div id="Inhalt">
<?php  
 
// HIER STEHT DER AKTUELLE EINTRAG 
$per_page = 30;
if(isset($_GET['id'])) {
	$id = $_GET['id'];
}
else {
	$sql_max_id = "SELECT id FROM ffg_repo ORDER BY id DESC LIMIT 1";
	$max_id = mysql_fetch_array(mysql_query($sql_max_id));
	$id = $max_id['id'];
}

echo $PHP_SELF;

$eintrag_string = "SELECT * FROM ffg_repo WHERE id = $id LIMIT 1";
$eintrag = mysql_fetch_array(mysql_query($eintrag_string));

echo '
<table>
	<tr>
		<td colspan="3">
			<div id="eintrag">
				<h2>'.$eintrag['datum'].' - '.$eintrag['titel'].'</h2>
				<br>
				'.$eintrag['posting'].'
			</div>
			
			<div class="footer">
				<i><a href="mailto:'.$eintrag['mail'].'">'.$eintrag['name'].'</a>  am '.date("d.m.Y", $eintrag['timest']).'</i>
			</div>
		</td>
	</tr>
	<tr>
		<td colspan="3">
			Hier findet Ihr weitere Einsätze:
		</td>
	</tr>
	<tr>
		<td width="92">
			Name:
		</td>
		<th width="100">
			Datum:
		</td>
		<td width="424">
			Einsatz:
		</td>
	</tr>
';

//  HIER KOMMT DIE AUFLISTUNG DER FOLGENDEN EINTRAEGE

$news_string = "SELECT * FROM ffg_repo WHERE id > $id LIMIT ".($per_page-1);
$news_query = mysql_query($news_string);

while ($row = mysql_fetch_array($news_query)) {
	
	echo '
	<tr>
		<td>
			<i><a href="mailto:'.$row['mail'].'">'.$row['name'].'</a> am: '.date("d.m.Y", $row['timest']).'</i>
		</td>
		<td>
			'.$row['datum'].'
		</td>
		<td>
			<a href="einsaetze.php?id='.$row['id'].'">'.$row['titel'].'a</a>
		</td>
	</tr>
	';
}

echo '
</table>

<div class="footer">
Blättern:<br>
';

// HIER IST DIE BLAETTERFUNKTION
$count_string = "SELECT count(*) FROM ffg_repo";
$anzahl_erg = mysql_fetch_row(mysql_query($count_string));
$anzahl = $anzahl_erg[0];

$vorher = $id - $per_page;
$nachher = $id + $per_page;

if($vorher > 0) {
	echo '<a href="einsaetze.php?id='.$vorher.'">&lt;&lt; Ältere Meldungen</a>';
}

if($nachher < $anzahl) {
	echo '<a href="einsaetze.php?id='.$nachher.'">Neuere Meldung &gt;&gt;</a>';
}

echo '
</div>
</body>
';

?>

Ich habe das komplette Konzept nochmal überarbeitet (und diese komische Variable position rausgeworfen).
Nun funktioniert es problemlos - hoffentlich ;)

Falls du dennoch Probleme hast: Fragen!
 
@Klein0r

Danke schon mal für deine Hilfe.

Zu deinen Ersten Beitrag:

Ich weiß, oder sagen wir mal so ich dachte mir schon das mein Programmier Still beschissen ist. Ich nehme dir das auch nicht Über :).
Dazu möchte ich nur sagen das ich mir das alles selber beigebracht habe, neben Beruf, Familie und andre Hobbys. Ich habe nicht studiert oder so. Das da überhaupt etwas raus kommt wundert mich auch manchmal. (Das sollte dazu reichen!)

Jetzt zu deinem zweiten Beitrag:

Ich war so frech und habe deine Script zum Test so übernommen, ich geh mal davon aus das ich zu Testen durfte ;-).
Beim ersten aufrufen hatte ich nur den neusten Beitrag stehen (keine Auflistung) und die Blätterfunktion. Nachdem ich geblättert habe erschien die Auflistung und der Beitrag der vom ID 30 Einträge älter ist. Als ich dann einen anderen Eintrag anklickte hatte ich eine Auflistung von den sieben Jüngsten (den hatte ich ach angeklickt).
Leider habe ich heute Abend keine Zeit mehr, mir dein Script genau anzupassen.

Ich danke schon mal für deine Hilfe!
 
Zurück