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
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
 

Sempervivum

Erfahrenes Mitglied
Selbstverständlich, Du brauchst nur als Defaultwert NULL anzugeben:
isset($_GET['CONY']) ? $cony=$_GET['CONY'] : $cony=NULL;
Außerdem solltest Du auf mysqli umstellen.
 

Yaslaw

n/a
Moderator
Und ganz nebenbei. Niemals Werte ungetestet in ein SQL einfügen!
Entweder mit mysqli_real_escape_string() (für mysqli_x, da mysql_x abgelaufen ist und irgendwann entfernt wird).

In deinem Fall, wo du nur Zahlen erwartest, kannst du auch mit filter_input() oder filter_input_array() arbetein.

Ich würde dann gleich die Werte in ein Array quetschen.
PHP:
    //Felder-Array definieren
    $flds = ['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);
    
    //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
    $sql = "INSERT INTO analog_data ({$sqlFields}) 
            VALUES ({$sqlValueStr})";
    print_r($sql);

Test mit Fehleingabe (String anstelle von Zahl und ein Feld Leer definiert
SQL:
-- Test-URL
-- test.php?IMSI=123&TEMP=567&STA=abc&LAST=

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 (NULL, 123, 567, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
 

codo

Grünschnabel
@Yaslaw Danke wie man unschwer merkt bin ich ja blutiger Anfänger und lerne ja gerade bei dem Projekt. Leider bin ich was php 7 betrifft nicht in der Lage das zu ändern... aber der Input filter ist super werde ich auch gleich implementieren.
Danke (y) :coffee:
 

codo

Grünschnabel
du hast recht aber da läuft eine veraltete Homepage auf dem Server die ich nicht angreife... und die hat eben php 5.3. Ich müsste das ganze Projekt auf einen neuen Webspace umsiedeln dann gings... nur die Zeit fehlt mir grad ein bisserl....
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Neue Beiträge