0251 / 590 837 15
info@a-coding-project.de
;

Validierung Datensatz bearbeiten (CMS)

Code & Blog Logo

Code & Blog Logo

In der Aktion Eigenes CMS können wir in der Tabellenansicht bereits einen Datensatz beim Datensatz Bearbeiten anzeigen. Bevor wir den Datensatz in die Datenbank eintragen, wird dieser noch validiert, da mit es zum Beispiel nicht passiert, dass man versehentlich einen zu langen String in die DB Einträgt. Der ganze Beitrag dreht sich um die /admin/includes/tableitem-edit.php.

Nebenbei zeigen wir heute noch ein Schlüssel-Icon an, wenn es sich bei der Spalte um einen PrimaryKey handelt.

Fangen wir mal mit der Validierung der Länge an. Mit dem HTML-Attribut maxlength können wir die maximale Länge des Feldes festsetzen. Mehr kann der Benutzer dann in diesem Feld nicht eingeben. Aber wir müssen erst einmal rauskriegen, wie viel Zeichen eingetragen werden dürfen. Die Größe steht im Typ mit drin, so dass die folgende Funktion die Größe ausliest:

<?php
  function getColumnSize($type){
    if(strpos($type,"(") > -1 && strpos($type,")") > -1){
      return substr($type,strpos($type,"(")+1,strpos($type,")")-strpos($type,"(")-1);
    }
    else{
      return false;
    }
  }
?>

Nun müssen wir diese Größe im HTML einbauen. Hier habe ich gleichzeitig auch schon das Icon für den PK und die Validierungs-Funktion die wir gleich schreiben reingemacht:

<table>
  <?PHP foreach($columns as $column){ ?>
    <tr>
      <td><?PHP if($column['Key']) echo "<img src="/system/images/icons/key.png" />"; ?></td>
      <td><?PHP echo $column['Field']; ?></td>
      <td><?PHP echo $column['Type']; ?></td>
      <td><input onChange="validate('<?PHP echo $column['Field']; ?>',
                   '<?PHP echo $column['Type']; ?>',this.value)"
                 name="<?PHP echo $column['Field']; ?>" 
                 value="<?PHP echo $data[$column['Field']]; ?>"
                 <?PHP if(getColumnSize($column['Type']))
                   echo " maxlength="".getColumnSize($column['Type']).""";?>></td>
    </tr>
  <?PHP } ?>
</table>

Fehlt noch die Funktion Javascript-Funktion validate. Hier wird nun erstmal nur geprüft, ob es sich bei Integer-Spalten auch um Integer handelt. Tut es das nicht, wird eine Meldung ausgegeben und der Fokus wieder auf die Integer-Spalte gesetzt. Wer Lust hat kann noch ein paar weitere MySQL-Datentypen hinzufügen und sie natürlich dann mir schicken 😉

Hier ist die Funktion:

<script language="JavaScript">
  function isInteger(s) {
    return (s.toString().search(/^-?[0-9]+$/) == 0);
  }
  function validate(name,type,value){
    if(type.substring(0,3) == 'int'){
      if(!isInteger(value)){
        alert('Das Feld ' + name + ' muss vom Typ Integer sein.');
        document.getElementsByName(name)[0].focus();
      }
    }
  }
</script>

Kommentare

Renner schrieb am 10.10.2009:

Muss den ein Java script zwischen ein Php-tag? *g

Stefan Wienströer schrieb am 11.10.2009:

Uups, da hat mein Syntax-Highlightingtool nen Fehler gemacht (oder dessen Anwender^^). Werd's ändern.

Elvis67 schrieb am 27.12.2011:

Könnte die Funktion getColumnSize($type) nicht logischer in der Klasse MySQL platziert und dann mit MySQL::getColumnSize($column['Type']) aufgerufen werden?

Stefan Wienströer schrieb am 27.12.2011:

Stimmt eigentlich, allerdings wird die in der aktuellen Version sowieso nicht mehr verwendet ;-)