Variable aus URL übernehmen und in MYSQL speichern. Was tun wenn die Variable in der URL fehlt?

Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

codo

Grünschnabel
auch wenn ich wieder ein bisserl blöd dastehe aber bei imei und imsi geht sich ja int nicht aus oder weil die 15 Stellen haben. Desswegen speichere ich die als Text ab...:unsure:
 

Yaslaw

n/a
Moderator
Dann kannst du eine RegEx-Validation machen
PHP:
    $filterDef = array_fill_keys($flds, array('filter' => FILTER_VALIDATE_REGEXP, 'options'=> array('regexp'=>'/^\d+$/')));
 

codo

Grünschnabel
Danke für die Hilfe, ich habs ausprobiert und mit den [] hat er sich geweigert habe das so umgebaut.
PHP:
include('testconnection.php');
//Felder-Array definieren
    
    $flds = array ('IMEI','IMSI','TEMP','H','STA','FW','V','I','VPV','PPV','ERR','LAST','IL','H19','H20','H21','H22','H23','SWV','TS','CONY','CONT');
    
    //Array mit den Standardwerten. In diesem Fall den String 'NULL'
    $defaultValues = array_fill_keys($flds, 'NULL');

    //Den Definitionsfilter erstellen. In diesem Fall sind das alles INT
   // $filterDef = array_fill_keys($flds, FILTER_VALIDATE_INT);
    $filterDef = array_fill_keys($flds, array('filter' => FILTER_VALIDATE_REGEXP, 'options'=> array('regexp'=>'/^\d+$/')));
    
    //GET-Eingabe auslesen. Nut Integer werden ausgelesen, Strings etc. nicht
    $inValues = filter_input_array(INPUT_GET, $filterDef);
    //Null-Werte entfernen. Wenn ein Feld nicht übergeben wird oder kein Integer ist, dann setzt filter-input_array den Wert NULL
    $inValues = array_filter($inValues);
    //Standardwerte und ausgelesene Werte kombinieren
    $sqlValues = array_merge($defaultValues, $inValues);
    
    //SQL Feldliste zusammensetzen
    $sqlFields = join(', ', $flds);
    //SQL Werteliste zusammensetzen
    $sqlValueStr = join(', ', $sqlValues);
    //SQL zusammensetzen
    $insert_data = "INSERT INTO analog_data ({$sqlFields})
            VALUES ({$sqlValueStr})";
       mysql_query($insert_data, $connection) or die("3");/*3=Fehler beim Eintragen der Daten in die Datenbank!*/

und was soll ich sagen super musste halt auch in der DB Null zulassen...
ich lerne jedesmal dazu ...
 

Yaslaw

n/a
Moderator
Habe herausgefunden, dass mit dem Filter FILTER_SANITIZE_NUMBER_INT grosse Zahlen, auch negative, möglich sind.

Da array_filter() 0 als False parst, muss eine Filterfunktion her. Ich habe sie mal check() genannt. Diese wird dem array_filter mitübergeben


PHP:
    //Felder-Array definieren
    $flds = array('IMEI','IMSI','TEMP','H','STA','FW','V','I','VPV','PPV','ERR','LAST','IL','H19','H20','H21','H22','H23','SWV','TS','CONY','CONT');
    
    //Array mit den Standardwerten. In diesem Fall den String 'NULL'
    $defaultValues = array_fill_keys($flds, 'NULL');

    //Den Definitionsfilter erstellen. In diesem Fall sind das alles Ziffern
    $filterDef = array_fill_keys($flds, FILTER_SANITIZE_NUMBER_INT);
    
    //GET-Eingabe auslesen. Nut Integer werden ausgelesen, Strings etc. nicht
    $inValues = filter_input_array(INPUT_GET, $filterDef);

    //ungültige Werte entfernen
    $inValues = array_filter($inValues, 'check');

    //Standardwerte und ausgelesene Werte kombinieren
    $sqlValues = array_merge($defaultValues, $inValues);
    //SQL Feldliste zusammensetzen
    $sqlFields = join(', ', $flds);
    //SQL Werteliste zusammensetzen
    $sqlValueStr = join(', ', $sqlValues);
    //SQL zusammensetzen
    $sql = "INSERT INTO analog_data ({$sqlFields}) 
            VALUES ({$sqlValueStr})";
    print_r($sql);
    
    //Prüft ob ein Wert vorhanden ist
    function check($v) :bool{
        return !is_null($v) && $v != '';
    }
 

codo

Grünschnabel
Danke
PHP:
 //Prüft ob ein Wert vorhanden ist
    function check($v) : bool{
        return !is_null($v) && $v != '';
    }
Da wollte er nicht wegen dem fehlenden leerzeichen nach dem :
Trozdem werden 0 Werte leider nicht übertragen, was bei einigen Parametern eine Zusatnd ist.. das bleibt leider in der Datenbank leer
 

codo

Grünschnabel
ich habs folgendermaßen umschifft. in der Tabelle die ich ausgebe multipliziere ich alle wert mit 1 dann werden auch 0 angezeigt.
PHP:
    echo "<td>" . $row[ppv] * 1 . "</td>";
    echo "<td>" . $row[h21] * 1 . "<a> W</a></td>";
    echo "<td>" . $row[err] * 1 . "</td>";
    echo "<td>" . $row[ts] * 1 . "</td>";
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Neue Beiträge