String Eingabe in Webfront (mehrfache Leerzeichen löschen)

Hallo,

ich habe mir für die Eingabe der Energiepreise eine Stringvariable ins WF verlinkt.

grafik

Hier gebe ich für die Jahre den Tarif in Cent ein.

So verwende ich das in den Skripten

//Tarife holen
$StPreisaktuell = GetValueString(44170);
$StPreis1Jahr = GetValueString(38508);
$StPreis2Jahre = GetValueString(21551);
$StPreis3Jahre = GetValueString(27387);
$StPreis4Jahre = GetValueString(22077);


// Tarif aktuell verarbeiten 
$arPreisaktuell=(explode(" ",$StPreisaktuell));

foreach($arPreisaktuell as $arPreisaktuell_end){
    ($arPreisaktuell_float[] = floatval($arPreisaktuell_end)/100);
}

var_dump($arPreisaktuell_float);

$ar_preisaktuell = $arPreisaktuell_float;

Mein Problem.
Wenn jetzt die Eingabe im WF mit z.B. einem Leerzeichen zuviel eingeben wird, habe ich einen weiteren Key im array mit 0.
Das ist schlecht.
Kann ich solche Dinge irgendwie abfangen?

Einfache Antwort JA :slight_smile:

In deiner hinterlegten Aktion einfach vorher prüfen ob Eingabe den Vorgaben entspricht und nur dann das SetValue aufrufen!

Gruß Heiko

vielleicht so (gerade nicht getestet)

$arPreisaktuell  = array_filter($arPreisaktuell , function($v) {
    return !empty(trim($v));
});
foreach($arPreisaktuell as $arPreisaktuell_end){
    ($arPreisaktuell_float[] = floatval($arPreisaktuell_end)/100);
}

Michael

@Nall-chan

Also deine Variante funktioniert,danke.

@pitti

Deine Lösung würde mir in Kombi mit einem Popupd besser gefallen, jedoch scheitert es noch an ner Kleinigkeit.

<?php

if ( $_IPS['SENDER'] == 'WebFront')
{

    $str = GetValueString(44170);

    $zeichen = strlen($str);

    if ($zeichen == 35) {
        SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
    }
    else
    {
    WFC_SendNotification(10045, 'Warnung', 'Eingabeformat <br> Fehlerhaft', 'Speaker', 4);
    }
}

Das ist mein Aktionsskript.
Warum funktioniert das nicht?

Tip:
Benutze statt WFC_SendNotification einfach echo 'Länge ist falsch';

Tip:
Benutze statt WFC_SendNotification einfach echo 'Länge ist falsch';

welchen Grund hat das?

Ich sperre mich mit meinem Aktionsskript anscheinend selbst aus.
Wenn mein String 35 Zeichen hat, kommt trotzdem die Meldung.

Ich kapiers nicht.

Klar, weil ich das

 SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);

erst ausführen kann wenn ich == 35 bin und somit kann ich keinen neuen String setzen.

Deine Prüfung ist ja eh ‚quatsch‘, da du nicht auf doppelte Leerzeichen, sondern einfach eine fixe Länge prüfst.
Darum ging es mir nicht.
Sondern einfach darum wie man beim Bedienen (=also Aktions-Skript) eine Fehlermeldung zum User transportiert.
Weil WFC_SendNotification geht an alle welche das WF anzeigen. Und echo nur dan den aktuellen Bediener, welcher Versucht einen falschen Wert einzugeben.

1 „Gefällt mir“

Achso, dass wusste ich nicht.
Danke.
Jetzt verstehe ich den Unterschied zu (echo)

Brauchst Du noch hilfe oder haste durch Michaels Unterstützung jetzt alles hinbekommen?

Generell zu Deinem Skript, warum holst Du mit $str = GetValueString(44170); überhaupt den alten gesetzten Wert? Du willst doch nur den neuen $_IPS['VALUE'] überprüfen???

Gruß Heiko

1 „Gefällt mir“

Ich würde das ganz anders machen, und einfach beim Eingeben die Leerzeichen entfernen. (Ja das geht auch anders mit Regex und Replace…)

<?php

if ( $_IPS['SENDER'] == 'WebFront')
{
    $Values= array_filter(explode(' ', $_IPS['VALUE']) , function($v) {
        return !empty(trim($v));
    });
    SetValue($_IPS['VARIABLE'], implode(' ', $Values));
}
2 „Gefällt mir“

@pitti

if ( $_IPS['SENDER'] == 'WebFront') 
{

    $str = $_IPS['VALUE'];

    $zeichen = strlen($str);

    if ($zeichen == 35) {
        SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
    }
    else
    {
        echo 'Länge der Eingabe ist falsch  Bitte Wert + Leerzeichen + Wert + Leerzeichen usw eingeben max. 12 Monate';
    }
}

Klar ich muss mir ja Value holen, manchmal braucht man einen Schubser.

@Nall-chan

Du hast recht, jedoch bin ich kein PHP Profi, ich profitiere jedoch von solchen Unterhaltungen, wie jetzt gerade enorm und kann dazu lernen.
Mein String wird immer 35 Zeichen haben, weil das Jahr ja immer 12 Monate hat und bis die Kwh 100 Cent kostet, brauchen wir noch mindestens 3 Jahre :wink:
Aber du hast recht, eine bessere Prüfung wäre gut.

<?php

if ( $_IPS['SENDER'] == 'WebFront')
{
    $Values= array_filter(explode(' ', $_IPS['VALUE']) , function($v) {
        return !empty(trim($v));
    });
    SetValue($_IPS['VARIABLE'], implode(' ', $Values));
}

Das teste ich noch.

Besten Dank an euch beide…

1 „Gefällt mir“

Kleiner Tipp für alle „nicht-PHP-Profils“ , euch kann die (kostenlose) Version von ChatGPT sehr gut helfen. Frage ChatGPT z.B. einfach: „Wie kann ich wiederholende Leerzeichen in einem String entfernen“ und du wirst ein funktionierendes Beispiel bekommen. Dann baust du das in dein Script ein. Genauso kannst du einen Code rein kopieren und nach Fehlern oder Erweiterungen fragen, so bekommst du schnell funktionierende Beispiele und kannst daran lernen.

1 „Gefällt mir“

@Hagbard235

Habs mit ChatGPT mal probiert.
Das war ein guter Tip.
Danke.