Zur Navigation

Punkt statt Komma in Zahlen

1 andehrl

hallo jörg, ich habe ein feld in das der benutzer eine längenangabe in einer datenbank abfragen kann. da bei einer abrage nur zahlenwerte die mit einem punkt getrennt wurden (zb. 2.1) nicht aber zahlenwerte die ein komma beinhalten (zb 2,1) als ganzes in der abfrage zur wirkung kommen, habe ich ein pop-up erstellt, dass den benutzer darauf hinweist einen punkt zu verwenden.

<input name="laderaumlaenge" type="text" id="laderaumlaenge" onchange="MM_popupMsg('Bitte geben Sie einen Punk \&quot;.\&quot; statt einem Komma \&quot;,\&quot;  in das feld \&quot;Laderauml&auml;nge\&quot; ein.                                                                                                                                         Beispielsweise  2.1  statt  2,1')" size="6" maxlength="4" />

das popup geht in dieser art immer auf wenn ein benutzer wieder aus dem feld "herausgeht". ich hätte nun gerne das das popup nur dann aufgeht wenn der benutzer tatsächlich das falsche format, also ein komma oder semikolon statt einem punkt benutzt.
kann ich etwas entsprechendes in den obigen code einfügen oder muss ich das vollkommen anders machen?

30.09.2010 19:49

2 Jörg

Ich würde das anders lösen und im verarbeitenden Script den übermittelten Wert mithilfe von str_replace() passend konvertieren, z.B.:

$laderaumflaeche = str_replace(',', '.', $_POST['laderaumflaeche']);

Dann ist es egal, wie der Benutzer die Dezimalzahl eingibt.

30.09.2010 20:42

3 andehrl

das hört sich super an. füge ich dann

$laderaumhoehe = str_replace(',', '.', $_POST['laderaumhoehe']);

in diesen code

$colname13_R1 = "NULL";
if (isset($_POST['laderaumhoehe']) && $_POST['laderaumhoehe'] != '') {
    $query_R1 .= " (laderaumhoehe >= " . GetSQLValueString($colname13_R1, 'double') . " OR laderaumhoehe IS NULL) AND ";
}


auf diese weise ein

$colname13_R1 = "NULL";
if (isset($laderaumhoehe = str_replace(',', '.', $_POST['laderaumhoehe']) && $laderaumhoehe = str_replace(',', '.', $_POST['laderaumhoehe'] != '') {
    $query_R1 .= " (laderaumhoehe >= " . GetSQLValueString($colname13_R1, 'double') . " OR laderaumhoehe IS NULL) AND ";
}

30.09.2010 21:33

4 Jörg

So würde ich es probieren:

if (isset($_POST['laderaumhoehe']) && $_POST['laderaumhoehe'] != '') {
    $query_R1 .= " (laderaumhoehe >= " . GetSQLValueString(str_replace(',', '.', $_POST['laderaumhoehe']), 'double') . " OR laderaumhoehe IS NULL) AND ";
}

30.09.2010 21:58

5 andehrl

Zitat von Jörg
So würde ich es probieren:

if (isset($_POST['laderaumhoehe']) && $_POST['laderaumhoehe'] != '') {
    $query_R1 .= " (laderaumhoehe >= " . GetSQLValueString(str_replace(',', '.', $_POST['laderaumhoehe']), 'double') . " OR laderaumhoehe IS NULL) AND ";
}

aber so geht doch die "colname" verlohren??

30.09.2010 22:08

6 Jörg

Das schadet nicht, im Gegenteil - das $colname13_R1 ist an der Stelle nicht nur sinnlos, sondern führt in dem Fall zu einer unsinnigen Abfrage.

30.09.2010 22:16

7 andehrl

Zitat von Jörg
So würde ich es probieren:

if (isset($_POST['laderaumhoehe']) && $_POST['laderaumhoehe'] != '') {
    $query_R1 .= " (laderaumhoehe >= " . GetSQLValueString(str_replace(',', '.', $_POST['laderaumhoehe']), 'double') . " OR laderaumhoehe IS NULL) AND ";
}

funktioniert prima, danke dir :-)

01.10.2010 15:03

8 andehrl

im thema "Popup-Meldung mit Bedingung verknüpfen" hast du mir gezeigt wie ich mit "str_replace()" vor dem einlesen in die datenbank ein zeichen mit einem anderen zeichen ersetzen kann.könnte ich mit "str_replace()" auch beim einlesen in die ergebnisseite aus "00:00:00" zb. "-" machen. das wäre für den nnutzer eindeutiger, da 00:00 auch als 24:00 interpretiert werden könnte.

allerdings haben wir den "zeitcode" inzwischen so modifiziert, dass mir vollkommen unklar ist wie dieser zusatz da noch eingebaut werden muss ... falls überhaupt.

if (isset($_POST['tag'], $_POST['jahr'], $_POST['monat']) && $_POST['tag'] != '-' && $_POST['jahr'] != '-' && $_POST['monat'] != '-') {
    $query_R1 .= " datum >= '" . sprintf("%04d-%02d-%02d", $_POST['jahr'], $_POST['monat'], $_POST['tag']) . "' AND ";
}

und müsste ich falls das so geht aus

IF(Eingabe.zeit = '00:00:00', 1, 0) AS bar

IF(Eingabe.zeit = '-', 1, 0) AS bar

machen?

02.10.2010 15:44 | geändert: 02.10.2010 15:46

9 Jörg

Der obere Codeabschnitt gibt einen Teil des WHERE Abschnittes wieder und nicht die Datenfelder, die du aus der Datenbank holst - die befinden sich weiter vorne nach dem "SELECT". Ich würde das aber eh an Ort und Stelle anpassen, dass heißt direkt im HTML-Code; das könnte dann in etwa so ausschauen (den Variablennamen musst du gegebenenfalls noch anpassen):

<?php echo (($row['zeit'] == '00:00:00') ? '-' : $row['zeit']); ?>

Zu diesem Konstrukt siehe auch Erläuterungen im PHP-Manual zum "Ternary Operator":

http://php.net/manual/en/language.operators.comparison.php

02.10.2010 16:46 | geändert: 02.10.2010 16:47

10 andehrl

habe den von dir vorgeschlagenen code eingesetzt. bekomme jetzt keine ergebnisse für die zeit mehr angezeigt


<?php echo (($row['zeit_formatiert'] == '00:00:00') ? '-' : $row['zeit_formatiert']); ?>

02.10.2010 17:37