Bearbeitungs-Buttons sowie Formatierungen mit PHP?

elbino

Grünschnabel
Hallo,

ich erstelle gerade ein Konzept für eine Art Dokumentenmanagementsystem. Nun hänge ich an zwei Dingen fest:

1.)
Wenn ich mir über php eine Liste mit Datensätzen aus einer Datenbank (In meinem Fall sind es Textselektionen - kann man mit Beiträgen in einem Forum vergleichen.) ausgeben lasse, wie bekomme ich es dann hin, dass ich einen der Datensätze auswählen kann, um ihn über einen Button zu editieren oder löschen?

Ich dachte so in der Form:

Datensatz 1 EDIT-Button DELETE-Button
Datensatz 2 EDIT-Button DELETE-Button
Datensatz 3 EDIT-Button DELETE-Button
Datensatz 4 EDIT-Button DELETE-Button
...

Der Edit-Button soll den Datensatz auswählen, um dann auf eine neue Seite mit einem Formular zu springen, wo die entsprechenden Daten dieses Datensatzes vorgefüllt und zum Editieren bereit sind.


2.)
Wie lassen sich so kleine Buttons realisieren, die etwa erlauben, den Text in einem Textfeld fett, kursiv, etc. zu drucken? Ich meine das genauso, wie wenn man hier im Forum einen Beitrag erstellt und etwa auf den "B"-Button drückt. Dann werden die <b>Tags automatisch eingefügt. Sowas hätte ich gern für Schriftart, -größe, Fett-, Kursivdruck sowie unterstichenem Druck. Die Texte sollen dann ja mit diesen Formatierungen in eine Datenbank eingelesen werden.


Beide Fragen sollen mit PHP gelöst werden, sofern möglich. Einfache Beispiele (Bin in PHP nicht gerade erfahren!) würden mir genügen. Ich passe die dann entsprechend an. In meinem Konzept soll das Ganze ja auch nur mit Text umschrieben und mit einfachen Beispielen dargestellt werden. Bitte möglichst einfache Erklärungen, wenn möglich. Vielleicht kennt ja jemand einen Link mit entsprechenden Beispielen?

Ich danke euch schon mal vielmals im Voraus Ihr wärt mir wirklich eine riesige Hilfe!

Gruß,
Thomas
 
zur 2. Frage:
Das geht mit PHP nicht, PHP ist Serverseitig, und könnte das nur machen, wenn jedes mal nach einem Klick die Seite neu geladen würde. Mach es einfach mit JavaScript:
PHP:
function insert(aTag, eTag) {
  var input = document.forms['newpost'].elements['message'];
  input.focus();
  /* für Internet Explorer */
  if(typeof document.selection != 'undefined') {
    /* Einfügen des Formatierungscodes */
    var range = document.selection.createRange();
    var insText = range.text;
    range.text = aTag + insText + eTag;
    /* Anpassen der Cursorposition */
    range = document.selection.createRange();
    if (insText.length == 0) {
      range.move('character', -eTag.length);
    } else {
      range.moveStart('character', aTag.length + insText.length + eTag.length);      
    }
    range.select();
  }
  /* für neuere auf Gecko basierende Browser */
  else if(typeof input.selectionStart != 'undefined')
  {
    /* Einfügen des Formatierungscodes */
    var start = input.selectionStart;
    var end = input.selectionEnd;
    var insText = input.value.substring(start, end);
    input.value = input.value.substr(0, start) + aTag + insText + eTag + input.value.substr(end);
    /* Anpassen der Cursorposition */
    var pos;
    if (insText.length == 0) {
      pos = start + aTag.length;
    } else {
      pos = start + aTag.length + insText.length + eTag.length;
    }
    input.selectionStart = pos;
    input.selectionEnd = pos;
  }
  /* für die übrigen Browser */
  else
  {
    /* Abfrage der Einfügeposition */
    var pos;
    var re = new RegExp('^[0-9]{0,3}$');
    while(!re.test(pos)) {
      pos = prompt("Einfügen an Position (0.." + input.value.length + "):", "0");
    }
    if(pos > input.value.length) {
      pos = input.value.length;
    }
    /* Einfügen des Formatierungscodes */
    var insText = prompt("Bitte geben Sie den zu formatierenden Text ein:");
    input.value = input.value.substr(0, pos) + aTag + insText + eTag + input.value.substr(pos);
  }
}
Und dann kannst du die Buttons auf javascript:insert('<b>', '</b>') verlinken.
 
1.)
Um einen Datensatz zu ändern oder zu löschen möchtest du ja auf einen Link klicken, das heißt eine neue Datei (kann natürlich auch die gleiche nochmal sein) wird aufgerufen. Das Hauptproblem ist also, dass die nächste Datei irgendwie wissen muss, welchen Eintrag du ändern oder löschen willst. Dafür nimmt man in solchen Fällen meistens einen Link, der die entsprechende Information enthält. Fehlt also nur noch ein Merkmal um den Eintrag zu identifizieren. Wenn du deine bisherigen Versuche nach Anleitung gemacht hast, wirst du wahrscheinlich zu jedem Datensatz eine Nummer gespeichert haben, ein eindeutiger Name oder sowas geht aber natürlich auch. Der Link sieht dann etwa so aus:

Code:
index.php?do=del&id=4

index.php soll dabei der aktuelle Dateiname sein, das Löschen kann man ganz gut in der gleichen Datei wie das Anzeigen der Daten erledigen. In dem Link steht jetzt gemacht werden soll (do=del, also löschen) und welchen Datensatz das betrifft
(id=4, also den mit der Nummer 4). Diese Links erzeugst du einfach innerhalb der Schleife, die die Daten ausgibt.

PHP:
while ( ... ) {
  echo $eintrag['daten'];
  echo '<a href="'.$_SERVER['PHP_SELF'].'?do=del&id='.$eintrag['id'].'">löschen</a>';
}

Das ganze könnte man natürlich auch in einer Tabelle ausgeben oder irgendwie anders formatieren, aber zum Testen reicht das so ja erstmal. In $_SERVER['PHP_SELF'] ist immer der aktuelle Dateiname gespeichert.

Darauf reagiert jetzt dein Script, z.B. mit sowas:

PHP:
if ($_GET['do'] == 'del' && $_GET['id'] > 0) {
  $query = 'DELETE FROM tabelle '.
    'WHERE id = \''.$_GET['id'].'\'';

  $result = mysql_query($query);

  if ($result !== false) {
    echo 'Eintrag wurde gelöscht';
  } else {
    echo 'Fehler beim löschen';
  }
}

(Name der Tabelle und der Spalte, in der die Nummer steht musst du natürlich entsprechend anpassen)

Dabei wird wie du siehst mit $_GET auf die Informationen zugegriffen, die im Link übergeben werden. Diesen Teil solltest du am besten vor die Ausgabe der anderen Daten setzen, damit der eintrag auch schon gelöscht ist und du nicht die alte Tabelle mit dem gelöschten Eintrag anzeigst ;)

Das Editeren funktioniert sehr ähnlich, allerdings wirst du das wohl in einem Formular auf einer weiteren Seite machen wollen. Weil Editieren natürlich immer nur mit der Angabe einer entsprechenden Nummer funktioniert kannst du das hier schon ganz am Anfang prüfen lassen:

PHP:
if (!isset($_REQUEST['id'] || !is_numeric($_REQUEST['id'])) {
  die('ID wurde nicht übergeben');
}

Damit sollten zumindestens schon mal die gröbsten Fehler abgefangen werden. Für dein Formular lässt du die bisherigen Daten einfach beim value-Attribut der Eingabefelder ausgeben. Zusätzlich musst du wieder die Nummer / ID des Eintrags übergeben, damit alles wieder an der richtigen Stelle gespeichert wird. Für sowas gibts versteckte Felder:

Code:
<input type="hidden" name="id" value="<?php echo $eintrag['id'] ?>">

Wie man ansonsten mit Formularen umgeht solltest du ja wissen, wenn du schon Daten zum Löschen oder Editieren in der Datenbank hast ;)

Im letzten Beispiel habe ich $_REQUEST benutzt, dieses Array enthält alle Variablen die über den Link, über Formulare oder über Cookies übergeben worden sind. Das ist bei diesem Script wichtig, weil du beim ersten Aufruf die ID ja noch über den Link übergibst und danach beim Abschicken des Formulars die ID aus den Formulardaten gesucht werden muss.

Ganz wichtig bei diesen Scripts: Bevor du sowas veröffentlichst, solltest du dich auf jeden Fall über das Prüfen und Filtern von Daten informieren. Mit den richtigen Eingaben bei Lösch-Script kann man dir leicht mal die ganze Tabelle löschen. Schau dir dazu unbedingt mal die Funktionen addslashes, stripslashes, mysql_real_escape_string, die PHP-Einstellung magic_quotes_gpc und allgemein den Text über SQL-Injections auf php.net an. Das muss ja nicht erst schiefgehen und man sollte sich von Anfang an angewöhnen das ordentlich zu machen.

Bei Fragen zu einzelnen Funktion am besten direkt bei php.net nachschauen, dort gibt es ganz oben ein Suchfeld wo du nur den Funktionsnamen einzugeben brauchst. Auch wenn die Seite englisch ist, sind die meisten Einträge inzwischen übersetzt.


2.)

Mit php alleine kannst du Daten immer nur prüfen oder ändern, wenn du sie ein mal per Link oder Formular an den Server schickst und wieder zurück bekommst. Für alles innerhalb einer HTML-Seite brauchst du Javascript oder ähnliches. Speziell zum BB-Code gibt es ein Beispiel auf selfhtml.org, da kannst du auch alles weitere über Javascript lernen.


[edit]
Oha, viel zu viel und viel zu lang geantwortet... naja, immerhin wurde die erste Frage noch nicht beantwortet.. ;)
 
Zuletzt bearbeitet:
Ah, vielen lieben Dank euch Beiden! Daraus lässt sich doch gewiss was machen. Ist mir schon fast unangenehm, dass ihr euch so viel Mühe macht, so lange Antworten zu schreiben. Hat mir wirklich geholfen! Damit habt ihr mir Ostern gerettet. :) Es geht nämlich um meine Diplomarbeit. *seufz*

Tausend beste Grüße,
Thomas
 
Zurück