Ich habe ein Skript mit einer MySQL-Tabelle. Um Daten in die Tabelle einzufügen wird ein zweites Skript aufgerufen (<form action="new.php"...) und es öffnet sich eine weitere Seite mit einem Formular und Textfeldern in das die Daten für die Tabelle eingetragen werden.
Ich möchte erreichen, dass sich keine zweite Seite mehr öffnet und die Texteingabefelder sich direkt unter der Tabelle befinden. Ist das möglich, wenn ich zwei Skripte habe?
Eingabe unterhalb Tabelle
-
-
Ja, klar ist das möglich.
Du musst einfach den Inhalt von new.php in deine Tabellenseite kopieren, und in die Form einfach den neuen Seitennamen stellen, oder action leer lassen.
MfG
-
In groben Zügen:
-
So wie ich es verstanden habe, muss ich auf jeden Fall die Skripte zusammenfügen, stimmt's?
Jetzt ist das Ganze noch etwas komplizierter (zumindest für mich): Es gibt nicht nur ein new.php sondern auch ein edit.php und beide sollen das gleiche Texteingabefeld verwenden. Auch die Submit-Buttons sollen zusammen neben der Tabelle angebracht werden.
Wie soll ich vorgehen? -
Den "new"-Teil kannst du, wenn du willst ja unter der Tabellenausgabe lassen (ich würde das aber nicht machen) und dann nimmst du noch ein Script zum Editieren.
Mein Vorschlag wäre:
Ein Script, dass die Daten anzeigt. Hinter jedem Datensatz gibt es einen Link, der dann z.B. so aussehen würde: <a href="edit.php?id=idAusDB&action=edit">Bearbeiten</a>. Und dann noch oberhalb/unterhalb der Tabelle einen Link <a href="edit.php?action=new">Neu</a>
In der edit.php kannst du dann anhand der Action erkennen, was zu tun ist. -
Danke für Deine Hilfe.
Wenn ich Dich richtig verstehe würdest Du edit.php separat lassen und eine neue Seite zur Bearbeitung der Daten aufrufen (vielleicht kleineres Popup-Fenster)?
ZitatHinter jedem Datensatz gibt es einen Link
: Dies habe ich statt eines Links hinter jedem Datensatz mit Radiobutton 'gelöst'.
Es sollten eigentlich für 'Neu' und Bearbeiten' Buttons neben der Tabelle sein. Ist das sehr schwierig zu realisieren? -
Kein Popup-Fenster, das ist doch immer Quatsch. Ein Popup-Blocker und schon gibts Probleme. Ansonsten hast du das schon richtig verstanden.
Jeder Radiobutton bekommt als Value die ID aus der DB, damit kommst du dann an den richtigen Datensatz.
Mit den Buttons kannst du das auch lösen, ein Submit-Button mit Value "Edit" und einen mit "New" und schon kannst du in edit.php unterscheiden. -
Ich habe new.php in meine Tabellenseite integriert. Nach dem Eingeben neuer Daten werden diese aber erst nach betätigen des Akualisierungs-Buttons in der Tabelle angezeigt.
Wie kann ich die Aktualisierung automatisch durchführen lassen?
Danke. -
Keine Ahnung, wie man dir so helfen soll. Ohne den Quellcode zu kennen, kann man nur raten und das ist nicht Sinn der Sache. Aber ich tippe mal, dass irgendetwas an der Reihenfolge des Scriptablaufes nicht stimmt.
-
Hier ist mein etwas komprimiertes Skript. Ich habe versucht, dass Skript so umzustellen wie Du (bandit600) mir es gestern mitgeteilt hast. Aber es hat nicht funktioniert. Auch öffnet sich noch eine Bestätigungsseite ("New info added").
Was muss ich ändern?
PHP
Alles anzeigen<?php // The basic SELECT statement of Info $select = 'SELECT *'; $from = 'FROM Info'; $where = ' WHERE active = 1'; $orderby = ' ORDER BY id DESC'; $searchtext = $_POST['searchtext']; if ($searchtext != '') { $where .= " AND Anfang LIKE '%$searchtext%'"; } $houses = @mysql_query( $select . $from . $where . $orderby ); if (!$houses) { echo '</table>'; exit('<p>Error retrieving from database!<br />'. 'Error: ' . mysql_error() . '</p>'); } while ($house = mysql_fetch_array($houses)) { $id = $house['id']; $Anfang = htmlspecialchars($house['Anfang']); echo "<tr><td><input type=\"radio\" name=\"id\" value=\"".$id."\" onClick=\"idFormTop=this.value\"></td>"; echo "<td>$Anfang</td>"; echo "</tr>\n"; } ?> . . . <?php if (isset($_POST['Anfang'])): $Anfang = $_POST['Anfang']; $sql = "INSERT INTO Info SET Anfang='$Anfang', if (@mysql_query($sql)) { echo '<p>New info added</p>'; } else { exit('<p>Error adding new info: ' . mysql_error() . '</p>'); } else: // Allow the user to enter a new Info ?>
HTML<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" style="width: 910px; height: 75px;"> . . <input type="submit" name="submit" value="Hinzufügen" style="width: 130px; float: right; " /> </form>
Danke. -
Leute, bitte!!
ZitatAber es hat nicht funktioniert.
Das ist definitv keine Problembeschreibung, damit kann man nichts anfangen. Und aus den Codeschnipseln kann man auch nicht viel erkennen. Trotzdem ein Tipp, der in vielen Fällen ungemein weiterhilft:
Richtig debuggen
1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(E_ALL); und ini_set("display_errors", true);
3. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
4. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde (oder auch nicht).
5. Schritt 3 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
6. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
7. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
8. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
Weiterhin solltest du dich bzgl. den Funktionen mysql_error und mysql_real_escape_string schlau machen. -
Ungetestet und dient nur zur Anschauung einer möglichen Problemlösung!
PHP
Alles anzeigen<?php if (! empty($_POST['searchtext'])) $condition = "active=1 and Anfang like '%" . mysql_real_escape_string($_POST['searchtext']) . "%' "; else $condition = "active=1 "; @mysql_connect("host", "user", "passwort") or die ("Connection failed"); @mysql_select_db("dbname") or die ("Database not exists.)"; $query = "Select id, Anfang from Info where " . $condition . " ORDER BY id DESC"; $result = mysql_query($query) or die("MySQL-Fehler: " . mysql_error()); echo "<table> <form action='edit.php' method='post'>\n"; while ($row = mysql_fetch_array($result)) { echo "<tr> <td>" . $row['Anfang'] . "</td> <td><input type='radio' name='id' value='" . $row['id'] . "'></td> </tr>\n"; } echo "<tr> <td colspan='2'> <input type='submit' name='edit' value='Edit'> <input type='submit' name='new' value='New'> </td> </tr> </form> </table>\n"; ?>
PHP
Alles anzeigen<?php // edit.php @mysql_connect("host", "user", "passwort") or die ("Connection failed"); @mysql_select_db("dbname") or die ("Database not exists.)"; if (isset($_POST['Anfang'])) { // Daten speichern // und mit header auf das erste Script weiterleiten if ($_POST['action'] == "new") { // Insert } else { // Update } header("Location: script1.php"); } else { $action = (isset($_POST['edit'])) ? "edit" . "new"; if ($action == "edit") { $id = $_POST['edit']; // Daten aus DB lesen $query = "Select Anfang from Info where id=$id"; $result = mysql_query($query) or die("MySQL-Fehler: " . mysql_error()); $anfang = mysql_result($result,0); } else { $id = 0; $anfang = ""; } echo "<form action='" . $_SERVER['SCRIPT_NAME'] . "' method='POST'> <input type='hidden' name='action' value='$action'> <input type='hidden' name='id' value='$id'> <input type='text' name='Anfang' value='$anfang'> <input type='submit' name='submit' value='Speichern' </form>"; } ?>
-
Sorry, mein
ZitatAber es hat nicht funktioniert.
hat sich auf meine vorherigen Antworten bezogen. Das war natürlich etwas zu allgemein ausgedrückt.
Das Skript funktioniert. Edit.php muss nur noch mit Tabelleskript verbunden werden (Submit-Button ohne Funktion).
Was nicht 'funktioniert' ist, dass die Tabelle nach dem Hinzufügen der Daten nicht automatisch upgedated wird. Dafür hatte ich auch das Skript gepostet. Ich hoffe für diesen Zweck ist es ausreichend.
Für die Anleitung die Du mir geschrieben hast möchte ich mich bedanken und ich werde mich so bald wie möglich damit beschäftigen.
Danke für Deine Zeit!