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

codo

Grünschnabel
Hallo
mit folgendem Code übernehme ich Messwerte von einer Teststation
PHP:
<?php
include('testconnection.php');
isset($_GET['IMEI']) ? $imei=$_GET['IMEI'] : $imei='';
isset($_GET['IMSI']) ? $imsi=$_GET['IMSI'] : $imsi='';
isset($_GET['TEMP']) ? $temp=$_GET['TEMP'] : $temp='';
isset($_GET['H']) ? $h=$_GET['H'] : $h='';
isset($_GET['STA']) ? $sta=$_GET['STA'] : $sta='';
isset($_GET['FW']) ? $fw=$_GET['FW'] : $fw='';
isset($_GET['V']) ? $v=$_GET['V'] : $v='';
isset($_GET['I']) ? $i=$_GET['I'] : $i='';
isset($_GET['VPV']) ? $vpv=$_GET['VPV'] : $vpv='';
isset($_GET['PPV']) ? $ppv=$_GET['PPV'] : $ppv='';
isset($_GET['ERR']) ? $err=$_GET['ERR'] : $err='';
isset($_GET['LAST']) ? $last=$_GET['LAST'] : $last='';
isset($_GET['IL']) ? $il=$_GET['IL'] : $il='';
isset($_GET['H19']) ? $h19=$_GET['H19'] : $h19='';
isset($_GET['H20']) ? $h20=$_GET['H20'] : $h20='';
isset($_GET['H21']) ? $h21=$_GET['H21'] : $h21='';
isset($_GET['H22']) ? $h22=$_GET['H22'] : $h22='';
isset($_GET['H23']) ? $h23=$_GET['H23'] : $h23='';
isset($_GET['SWV']) ? $swv=$_GET['SWV'] : $swv='';
isset($_GET['TS']) ? $ts=$_GET['TS'] : $ts='';
isset($_GET['CONY']) ? $cony=$_GET['CONY'] : $cony='';
isset($_GET['CONT']) ? $cont=$_GET['CONT'] : $cont='';
$connection = mysql_connect($mysql_host, $mysql_user, $mysql_pw) or die("1");/*1=Verbindung zur Datenbank fehlgeschlagen*/
mysql_select_db($mysql_db, $connection) or die("2");/*2=Datenbank konnte nicht ausgewaehlt werden.*/
$insert_data = "INSERT INTO analog_data (IMEI, IMSI, TEMP, H, STA, FW, V, I, VPV, PPV, ERR, LAST, IL, H19, H20, H21, H22, H23, SWV, TS, CONY, CONT ) VALUES ($imei, $imsi, $temp, $h, $sta, $fw, $v, $i, $vpv, $ppv, $err, $last, $il, $h19, $h20, $h21, $h22, $h23, $swv, $ts, $cony, $cont )";
mysql_query($insert_data, $connection) or die("3");/*3=Fehler beim Eintragen der Daten in die Datenbank!*/

?>
Soweit alles gut nur wenn eine der Variablen nicht geschickt wird wird gleich der ganze Eintrag mit dem Fehlercode 3 "Fehler beim Eintragen der Daten in die Datenbank" quintiert. Gäbe es eine Möglichkeit trotz fehlender Variabelen z.B. "Cony" fehlt die restlichen Variablen zu übernehmen und einfach z.b eine NUll in der Db zu haben?
Danke
 
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:
 
Dann kannst du eine RegEx-Validation machen
PHP:
    $filterDef = array_fill_keys($flds, array('filter' => FILTER_VALIDATE_REGEXP, 'options'=> array('regexp'=>'/^\d+$/')));
 
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 ...
 
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 != '';
    }
 
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
 
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>";
 
Zurück