CMS:USER_INPUT
Erzeugt oder aktualisiert einen Datensatz aus Daten, die ein Frontend-User angegeben hat.
(CMS:USER_INPUT [parameter=wert …])
Methode: Modules\Record\RecordUser::cmsInput()
PHP-Schnipsel: include_and_stop (danach)
Parameter
| Parameter | Wert | Standard | Pflicht | Beschreibung |
|---|---|---|---|---|
successtemplate |
Templatename |
– | Template, das eingebunden wird, wenn der Eintrag erfolgreich gespeichert wurde. | |
data |
PHP-Variablenname |
data |
Name des PHP-Arrays, das die zu speichernden Daten enthält. | |
overwrite[…] |
Schlüssel-Wert-Paare |
– | Explizites Überschreiben der Eingaben des Frontend-Users (auch Metafelder, außer record_id, area_id, instance_id, tmp, deleted, origin_id, owner_id, created_by, changed_by). Hier keine Eingaben des Frontend-Users weiterreichen! | |
container |
Container-ID oder -Name |
– | ja | ID oder Name des Content-Containers, in dem der neue Datensatz gespeichert werden soll. |
message[…] |
Text |
Standardtext |
Fehlermeldung abhängig vom Index (siehe Tabelle). | |
submit |
Textwert |
– | ja | Der Befehl wird nur ausgeführt, wenn in diesem Feld ein Text enthalten ist. |
fields |
kommaseparierte Liste |
– | Namen der Eingabefelder, die geschrieben werden dürfen. Leer = alle definierten Felder des Containers. | |
id |
Datensatz-ID |
– | Falls angegeben, wird versucht diesen Datensatz zu aktualisieren (UPDATE). Andernfalls wird ein neuer erstellt (CREATE). | |
ignoreuser |
true / false |
false |
true: Der anzupassende Datensatz muss nicht dem angemeldeten Frontend-User gehören (Achtung: Sicherheitshinweise beachten!). | |
forceupdate |
true / false |
false |
true: Es wird erzwungen, den über Parameter "id" angegebenen Datensatz zu aktualisieren. Wirft im Fehlerfall eine Meldung. | |
masterid |
Datensatz-ID |
– | Nur beim Anlegen in Bereichen mit Baumstruktur: Elternknoten des neuen Datensatzes (parent_id). | |
owner |
Benutzer-ID |
– | Nur beim Anlegen: admin_id des Backend-Owners (record.owner_id, created_by). Ohne Angabe gilt user.default_owner_id. | |
removefiles |
kommaseparierte Liste |
– | Namen der Upload-Felder, deren Inhalt gelöscht werden soll. | |
currentfield |
Feldname |
current_password |
Nur Profil-Container: Name des Formularfeldes data[…] mit dem bisherigen Passwort. Ein neues Passwort wird nur mit dem bisherigen gespeichert – außer direkt nach der Anmeldung über den Reset-Link. Meldung current. |
|
csrf |
true / false |
true |
true: Der Request muss ein gültiges Token aus CMS:USER_TOKEN enthalten (Schutz gegen CSRF). false schaltet die Prüfung für diesen Befehl ab – nur mit gutem Grund. |
[…] – der Parameter nimmt Unterschlüssel an, z. B. name[schlüssel]=wert.
Anwendung
Speichert Formulareingaben als Datensatz - neu anlegen oder (mit id) einen eigenen
Datensatz ändern. Die Felder heißen data[feldname], genau wie in der
Backend-Eingabemaske; Uploads laufen über dasselbe Formular. Nach Erfolg steht
$set['record_id'], das successtemplate wird eingebunden und die Seite beendet:
<?php $submit = $_POST['submit'] ?? ''; ?>
(CMS:USER_INPUT container=comments submit="$submit" successtemplate=u_saved)
(CMS:USER_AUTH)
<p class="error">(CMS:MESSAGE)</p>
<form method="post" enctype="multipart/form-data">
(CMS:USER_TOKEN)
<textarea name="data[comment]">(CMS:TEXT useval="{$_POST['data']['comment']}" specialchars=true lbrconvert=false)</textarea>
<input type="file" name="data[photo]">
<button name="submit" value="1">Speichern</button>
</form>
Eigenen Datensatz ändern:
<?php $submit = $_POST['submit'] ?? ''; $id = (int)($_POST['id'] ?? 0); ?>
(CMS:USER_INPUT container=comments id="$id" forceupdate=true submit="$submit" successtemplate=u_saved)
Kontaktformular ohne Anmeldung (ignoreuser), Absender-IP in ein eigenes Feld
remote_ip des Bereichs schreiben:
(CMS:USER_INPUT container=anfragen ignoreuser=true submit="$submit" fields="name,email,message"
overwrite[remote_ip]="{$_SERVER['REMOTE_ADDR']}" successtemplate=anfrage_danke)
Wer schreiben darf: In ugc-Bereichen angemeldete Frontend-User, deren Profil-Bereich beim
Bereich freigeschaltet ist; in profile-Bereichen nur das eigene Profil (mit id, ein
neues Profil legt nur CMS:USER_REGISTER an); in gewöhnliche Datensatzbereiche nur mit
ignoreuser=true. Alle Prüfungen
des Bereichs (Pflichtfelder, eindeutige Werte, Dateitypen) gelten wie im Backend;
Fehler erscheinen über CMS:MESSAGE. Meldungs-Indizes für message[…]: container,
access, notfound, save, current, blocked, owner (kein gültiger Owner beim
Anlegen), token.
Passwort ändern
Ein neues Passwort im eigenen Profil speichert der Befehl nur zusammen mit dem
bisherigen Passwort im Feld data[current_password] – eine fremde Person, die an
eine offene Sitzung gelangt, kann das Konto so nicht übernehmen. Ausnahme: direkt nach
der Anmeldung über den Link aus CMS:USER_PW; dann steht
$set['password_reset'] auf 1, und das Feld entfällt (eine Stunde lang, bis das neue
Passwort gespeichert ist). Nach dem Speichern werden alle anderen Anmeldungen des
Profils beendet, und $set['password_changed'] ist 1 – das successtemplate kann den
Inhaber per CMS:EMAIL benachrichtigen.
(CMS:USER_PROTECT errortemplate=u_denied)
<?php $submit = $_POST['submit'] ?? ''; ?>
(CMS:USER_INPUT container=members id="{$set['user_id']}" forceupdate=true fields=password
submit="$submit" successtemplate=u_pw_saved)
<p class="error">(CMS:MESSAGE)</p>
<form method="post">
(CMS:USER_TOKEN)
<?php if (empty($set['password_reset'])) { ?>
<input type="password" name="data[current_password]" autocomplete="current-password">
<?php } ?>
<input type="password" name="data[password]" autocomplete="new-password"
data-c9-password="(CMS:USER_PASSWORD_RULES container=members)">
<button name="submit" value="1">Speichern</button>
</form>
Trägt das Passwort-Feld im Bereich die Extension Passwort-Richtlinie, prüft der Server Mindestlänge und Zeichenklassen; mit CMS:USER_PASSWORD_RULES zeigt das Formular dieselben Regeln schon beim Tippen an.
Parameter im Einzelnen
successtemplate
Nach dem Speichern eingebunden; darin ist der gespeicherte Datensatz der laufende ($cms), $set['record_id'] seine Id:
(CMS:USER_INPUT container=comments submit="$submit" successtemplate=u_saved)
Ohne successtemplate läuft das Template nach dem Speichern normal weiter.
data
Name des Request-Arrays (Standard data):
<input name="form[comment]">
(CMS:USER_INPUT container=comments data=form submit="$submit")
overwrite
Werte fest vorgeben - auch Metafelder - unabhängig davon, was der Frontend-User schickt. Keine Eingaben des Frontend-Users hier einsetzen. Ausgenommen sind record_id, area_id, instance_id, tmp, deleted, origin_id, owner_id, created_by und changed_by; ohne Angabe setzt der Befehl needs_review auf 1:
(CMS:USER_INPUT container=comments submit="$submit"
overwrite[article_id]="{$cms['record_id']}"
overwrite[status_id]=2
)
container
Bereich (Name oder Id), in dem gespeichert wird - Typ ugc oder profile, mit
ignoreuser=true auch ein gewöhnlicher Datensatzbereich:
(CMS:USER_INPUT container=comments …)
(CMS:USER_INPUT container=58 …)
message
Eigene Meldungstexte:
(CMS:USER_INPUT container=comments submit="$submit"
message[access]="Bitte melden Sie sich an, um zu kommentieren."
message[save]="Der Kommentar konnte nicht gespeichert werden."
)
submit
Der Befehl läuft nur, wenn submit einen Wert hat - beim ersten Aufruf des Formulars also nicht:
<?php $submit = $_POST['submit'] ?? ''; ?>
(CMS:USER_INPUT container=comments submit="$submit" …)
<button name="submit" value="1">Speichern</button>
fields
Nur diese Felder aus den Eingaben übernehmen - alles andere im Formular wird ignoriert:
(CMS:USER_INPUT container=members id="{$set['user_id']}" fields="nickname,avatar" submit="$submit")
id
Vorhandenen Datensatz ändern; ohne forceupdate wird bei unbekannter/fremder Id ein neuer angelegt:
(CMS:USER_INPUT container=comments id="{$_POST['id']}" submit="$submit")
ignoreuser
Keine Anmeldung und keine Besitzprüfung - für Kontakt- und Gästebuchformulare. Das Template trägt die Verantwortung (Spam-Schutz, Feldliste per fields):
(CMS:USER_INPUT container=gaestebuch ignoreuser=true fields="name,message" submit="$submit" successtemplate=gb_danke)
forceupdate
Mit id: Statt bei fremder/unbekannter Id einen neuen Datensatz anzulegen, Meldung notfound ausgeben:
(CMS:USER_INPUT container=comments id="$id" forceupdate=true submit="$submit")
masterid
Elternknoten in einem Bereich mit Baumstruktur (wird zu parent_id):
(CMS:USER_INPUT container=forum masterid="{$cms['record_id']}" submit="$submit") Antwort unter dem aktuellen Beitrag
currentfield
Anderer Name für das Feld mit dem bisherigen Passwort (siehe Passwort ändern):
(CMS:USER_INPUT container=members id="{$set['user_id']}" fields=password currentfield=old_pw …)
<input type="password" name="data[old_pw]">
removefiles
Upload-Felder leeren - z. B. über eine Checkbox „Foto entfernen“:
<label><input type="checkbox" name="remove_photo" value="photo"> Foto entfernen</label>
(CMS:USER_INPUT container=comments id="$id" removefiles="{$_POST['remove_photo']}" submit="$submit")
Stand: camindo CMS 9.1.3