Probleme mit IDs übertragung und Auslesen
droom
- php
Bitte um Hilfe. Hab schon alles probiert aber nichts klappt. :-(
Also ich erkläre nochmal was ich vorhabe:
---------------------
<<-| <- | 3 | -> |->>
---------------------
Das mittlere Feld gibt uns die ID, welche aus der Datenbank gelesen wird.
Wenn man nun den Pfeil nach Rechts (->) klickt, dann soll die nächste ID
(aufsteigend) ausgelesen werden und in dem Mittleren Feld ausgegeben werden.
Hat man aber
den 2ten Pfeil nach Rechts (->>) geklickt, dann wird die letzte ID aus der
DB
ausgelesen. Genau das gleiche soll für die 2 anderen Pfeile die nach links
zeigen gelten.
Die Seite mit der oberen Abbildung befindet sich in einen oberen Frame. Das
untere Frame enthält die Seite, die aufgerufen wird, wenn man ein ID wählt.
1.Problem: Wenn man die ID 3 nimmt, wird unten die Daten für ID 3
angezeigt. Das klappt. Nun geht man einmal nach rechts (->) werden die Daten
für ID 4
angezeigt. Das klappt auch. Nun sind wir aber bei ID 4 und ein klick auf dem
rechten Pfeil (->) sollte uns zu 5 führen. Diese ist aber nicht der Fall.
Der Link auf den Pfeilen bleibt ungeändert. wie löse ich denn das?
2. Problem: Wie wähle ich die letzte sowie die erste ID aus der DB?
Hab es so probiert:
<?php
$sql= "select ID from Nummer";
$result = mysql_query($sql,$dbconnection);
$row= mysql_fetch_row($result);
$long= mysql_num_rows($result);
for($i=0;$i<$long;$i++){
if ($row[$i]==$id){
$up=$row[$i+1];
$up2=$row[$long -1];
$down=$row[$i-1];
$down2=$row[0];
}
}
if ($action=='senden')
{
?>
<script language="javascript">
<!--
parent.eingabe.location.href="formularauswertung.php?id=<?php echo $id; ?>";
-->
</script>
<?php
}
?>
und dann die Abbildung von oben so:
<a href="formularauswertung.php?id=<?php echo $down2; ?>"><<-</a>
<a href="formularauswertung.php?id=<?php echo $down; ?>"><-</a>
<form action= "<?=$php_self?>" method="post" name=spez><input type="hidden" name="action" value="senden"><input type=text size=5 name='id' value=''></form>
<a href="Patent_formularauswertung.php?id=<?php echo $up; ?>">-></a>
<a href="Patent_formularauswertung.php?id=<?php echo $up2; ?>">->></a>
Allerdings funktionniert (<-) und (->) nur wenn ich statt id=<?php echo $down; ?> bzw. id=<?php echo $up; ?>, id=<? echo $id-1 ?> oder id=<?php echo $id+1; ?>
Hallo.
1.Problem: Der Link auf den Pfeilen bleibt ungeändert. wie löse ich denn das?
Indem Du die Seite im frame neu lädst und mit richtigem Parameter füllt. Wie man mehrere Frames gleichzeitig ändert, das erfährst Du zu genüge imA rchiv. Einfach "zwei" "Frames" suchen.
- Problem: Wie wähle ich die letzte sowie die erste ID aus der DB?
Da dürfte Dir min() bzw. max() in einer Abfrage weiterhelfen (http://www.mysql.de/doc/de/Group_by_functions.html#IDX1321).
Grüße aus Würzburg
Julian
Moin!
<<-| <- | 3 | -> |->>
Das mittlere Feld gibt uns die ID, welche aus der Datenbank gelesen wird.
Wenn man nun den Pfeil nach Rechts (->) klickt, dann soll die nächste ID
(aufsteigend) ausgelesen werden und in dem Mittleren Feld ausgegeben werden.
Hat man aber
den 2ten Pfeil nach Rechts (->>) geklickt, dann wird die letzte ID aus der
DB
ausgelesen. Genau das gleiche soll für die 2 anderen Pfeile die nach links
zeigen gelten.
Dein Hauptproblem ist folgendes: Die nächste ID nach 3 muß nicht 4 heißen, die vorhergehende ID muß nicht 2 heißen, die erste ID muß nicht 1 heißen - und die letzte ID kannst du logischerweise auch nicht bestimmen, sie ist aber ebenfalls garantiert nicht identisch mit "Zahl der Datensätze", sondern eher größer. Das gilt jedenfalls, wenn du die Datensatz-IDs "vernünftig" anlegst, nämlich sie einmal beim erstellen des Datensatzes vergibst und dann nie wieder änderst, bis der Datensatz gelöscht wird - und sie dann auch nicht neu vergibst.
Dein Problem läßt sich wohl nur mit mehreren Datenbankzugriffen lösen.
Die Problematik "Nächste/Vorhergehende ID" ist recht simpel mit nur einem Zugriff lösbar: Du selektierst einfach immer drei Datensätze aus deiner Sortierung, verwirfst außer der ID alles vom ersten und letzten Datensatz (die IDs sind die vom vorhergehenden und nächsten Datensatz) und gibst den mittleren Datensatz aus:
SELECT felder FROM tabelle ORDER BY id LIMIT 3,offset
Für Offset mußt du dir merken, welchen Datensatz gerade ausgelesen hast, und ihn bei "nächste ID" um eins erhöhen, bei "vorige ID" um eins erniedrigen. Startwert ist "-1" - was etwas zu Problemen führt, wenn du den ersten Datensatz, der keinen Vorgänger hat, auslesen willst.
Um festzustellen, welche ID die erste ist, und welche die letzte, benötigst du zwei weitere Zugriffe, wie Julian schon erwähnt hat.
Insgesamt sehe ich deine Vorgehensweise nicht unbedingt als ideal an. In Datenbanken gibt es eigentlich keinen "nächsten" oder "vorigen" Datensatz. Die Datenbank ist so gebaut, dass man schnell auf jeden beliebigen Datensatz zugreifen kann. Und es ist beim Bearbeiten von Datensätzen auch eher ungewöhnlich, wenn man jeden Datensatz einzeln durchklicken muß, nur um den zu finden, den man ändern möchte. Mach das mal bei 100.000 Datensätzen - da geht eher die Maustaste kaputt, außerdem dauert es viel zu lange.
Was du wirklich brauchst, ist ein System, das dem Benutzer schnell und zielgerichtet zum gewünschten Datensatz führt, indem eine effektive Suchfunktion eingebaut ist.
Und wenn du vom Listen-Ansatz nicht abkommen willst, dann benutze wirklich echte Listendarstellung mit mehreren Datensätzen auf einer Seite. Außerdem mußt du dir dann noch überlegen, nach welchem Feld die Datenbanktabelle sortiert werden soll - denn nur aufgrund der Sortierung gibt es ein sinnvolles "nächstes" und "voriges" Element. Und bedenke auch, dass der Benutzer die Sortierung vielleicht ändern möchte.
- Sven Rautenberg