Bestimmte Zeile mit PHP - Oracle ausgeben lassen

chrislms

Grünschnabel
Hi,

ich muss gerade in meiner Praxisphase eine Pflegetool für eine Oracle-Datenbank schreiben.
Kenn mich nur mit MySQL Datenbanken aus und weiß, dass es für mein Problem bei MySQL das "LIMIT" gibt.

Bin schon soweit gekommen, dass ich mir alle Zeilen einer Tabelle inklusive deren Spaltenüberschriften anzeigen lassen kann. Hinter jede Zeile habe ich ein Bild (Bleistift) gesetzt. Wenn man auf den Bleistift klickt, geht die nächste Seite auf. Auf dieser soll nur noch die ausgewählte Zeile angezeigt werden. D.h. wenn ich auf der ersten Seite den Bleistift hinter der 5. Zeile anklicke, soll mir auf der nächsten Seite genau diese 5. Zeile angezeigt werden, damit ich die bearbeiten kann.

Ich hab schon stunden lang gegoogelt und auch einiges gefunden, aber nix klappt.

Wär schön, wenn Ihr nen Vorschlag hättet. Ich komm einfach nimmer weiter.
Falls Ihr zu meinem Plan nix findet, könnt Ihr auch gerne mal schreiben, ob Ihr das mit dem Bearbeiten vielleicht komplett anders machen würdet.

Danke schon mal.

Gruß
Chrislms
 
Hi,

Wenn du den Datensatz schon hast, warum willst du ihn nochmal von der DB abfragen?
Zudem kennst du Inhalt des Datensatzes inkl. PK, ID, .... Anhand daran kannst du den Datensatz doch eindeutig identifizieren in der Datenbank.

Zum Thema Limit in Oralce:
oracle limit - Google-Suche
 
Hi,

danke für deine schnelle Antwort.

Das Problem is, dass ich mir die Tabelle auf der ersten Seite wie folgt ausgeben lass:

[ <?php
while (OCIFetch($cursor2)) {
echo '<tr>';
//prints out row contents, col by col
for ($i=1; $i<=OCINumCols($cursor2); $i++){
echo '<td align="center" width="80">' . ociresult($cursor2, $i) . '</td>';
}
$counter++;
echo '<td>
<a href="dimColEdit.php?Zeile='.$counter.'&tableName='.$tableName.'">
<img border="0" src="Images/bleistift_klein.jpg" alt="Bearbeiten">
</a></td>';
echo '<td>
<a href="dimColDelete.php?Zeile='.$counter.'">
<img border="0" src="Images/muelleimer.jpg" alt="Löschen">
</a></td>';
} ?>]

Ich kann also nicht direkt auf jede Zeile zugreifen. Oder seh ich das falsch?
Hab mir halt gedacht, dass ich in dem Bearbeiten-Link die gewählte Zeile und den Tabellennamen mitgebe, um dann auf der nächsten Seite wieder eine Abfrage nach Tabelle und Zeile zu machen...

Hast du ne bessere Idee?

Gruß
Chris
 
Zuletzt bearbeitet:
Hi nochmal,

Die Website, die du mir gegeben hast, hatte ich gestern auch schon mal. Nur bin ich da davon ausgegangen, dass wir hier Oracle Version 8.1.6 und höher haben und hab deswegen nur dir untere kürzere Lösung ausprobiert.

Jetzt hab ichs nochmal mit der ersten langen Lösung getestet:

[<sql>
SELECT * FROM
(SELECT ROWNUM rownum2, inline_view1.* FROM
(SELECT * FROM ".$tableName.") inline_view1
) inline_view2
WHERE rownum2 BETWEEN '".$Zeile."' AND '".$Zeile."'
</sql> ]

Und das funktioniert :) Dank dir auf jeden Fall dafür.

Wie gesagt, ich mach das alles so umständlich, weil ich net direkt auf die Zeilen zugreifen kann.

Wenn du ne Idee hast, wie ich das besser machen könnte, her damit ;-)

Gruß
Chris
 
Zuletzt bearbeitet:
Für genaueres müsste ich mich erstmal in Php einarbeiten.
Aber wie bereits erwähnt: du übergibst deinem Script die Zeilennummer. Beim Anlegen des Links, kannst du ja auch die ID des Datensatzes übergeben.

PS: Bitte editier deine Post und setz deine Code in Tags ([ code ] oder [ php ] (nur ohne Leerzeichen)). So lässt sich das sehr schlecht lesen. Vorallem bei dieser grellen Farbe.
 
Das Problem dabei wär glaub ich wieder, dass ich ganz am Anfang aus allen Tabellen der Datenbank eine auswähle und nicht alle Tabellen haben ein ID-Feld...
Deswegen kann ich die ID nicht allgemein weiter geben.

Oder gibts in Oracle-Datenbanken sowas wie TABLE_ROW_ID....oder so?
 
Du musst doch irgendetwas haben, womit du einen Datensatz eindeutig identifizieren kannst. Bei deiner Bearbeitenfunktion rufst du doch sicherlich irgendwann UPDATE TABLE auf. wie identifizierst du denn da den Datensatz?
 
Gute Frage, soweit bin ich noch net *g*
Kann es sein, dass ich diese Probleme net hätte, wenn ich vorher alles konzeptioniert und gut geplant hätte?

Ich glaub, ich muss mir da mal nen neuen Weg überlegen.
Klar kann man jede der Tabellen (die schon vor meiner Arbeit vorhanden waren und wenn möglich nicht verändert werden sollen) über irgendwelche ID's eindeutig identifizieren. In der einen Tabelle heißt das Feld "Hotel_ID", in der nächsten dann "Veranstalter_ID" usw....

Auf der aller ersten Seite lass ich alle Tabellen der Datenbank in einer DropDown-Liste anzeigen, die dynamisch gefüllt wird. Dahinter hab ich einen "Anzeige"-Button, der auf die nächste Seite verlinkt. Da geb ich den Tabellennamen mit.

Auf der nächsten Seite lass ich mir dann zunächst alle Spalten-Attribute der Tabelle anzeigen und darunter dann alle Einträge mit jeweils einem "Bearbeiten"- und einem "Löschen"-Button hintendran.

Soweit bin ich...Denkst du, dass das bis dahin schon ne schlechtere Lösung is?
 
chrislms hat gesagt.:
Gute Frage, soweit bin ich noch net *g*
Kann es sein, dass ich diese Probleme net hätte, wenn ich vorher alles konzeptioniert und gut geplant hätte?

Kurz und knappe Antwort: Ja

chrislms hat gesagt.:
Klar kann man jede der Tabellen (die schon vor meiner Arbeit vorhanden waren und wenn möglich nicht verändert werden sollen) über irgendwelche ID's eindeutig identifizieren. In der einen Tabelle heißt das Feld "Hotel_ID", in der nächsten dann "Veranstalter_ID" usw....
Wenn du die ID hast, wo ist dann das Problem, diese weiterzugeben?
 
Ich versuchs dir zu erklären ;-)

Ich lass die vom User ausgewählte Tabelle wie folgt anzeigen:

SQL-Statement
[<sql>$query2 = "SELECT * FROM ".$tableName;</sql>]

PHP
[<?php
while (OCIFetch($cursor2)) {
echo '<tr>';
//prints out row contents, col by col
for ($i=1; $i<=OCINumCols($cursor2); $i++){
echo '<td align="center" width="80">'.ociresult($cursor2, $i).'
<input type="hidden" name="" value"'.ociresult($cursor2, $i).'"></td>';
}
$counter++;
echo '<td>
<a href="dimColEdit.php?Zeile='.$counter.'&tableName='.$tableName.'">
<img border="0" src="Images/bleistift_klein.jpg" alt="Bearbeiten">
</a></td>';
echo '<td>
<a href="dimColDelete.php?Zeile='.$counter.'">
<img border="0" src="Images/muelleimer.jpg" alt="Löschen">
</a></td>';
}
?>]


Da ich ja vorher nicht weiß, welche Tabelle der User auswählt, kann ich auch nicht ein bestimmtes ID-Feld (bei Tabelle 1 --> Hotel_ID, bei Tabelle 2 --> Flughafen_ID.......) abfragen. Verstehst du mein Problem?
Da ich keinesfalls ein PHP-Profi bin, könnt es natürlich sein, dass es doch irgendwie geht. Aber das weiß ich leider net. Vielleicht hast du oder jemand anderes hier ja ne Ahnung. Am einfachsten wärs natürlich, wenn jede Tabelle ein Feld namens "ID" hätte, aber das geht leider net
 

Neue Beiträge

Zurück