Ich habe 4 Auswahlfeld, aus dem der Benutzer Länder auswählen kann. Jede dieser AuswahlfelderLaden eines Datensatzes in ein Array, wenn eines der Felder null ist. PHP
werden dynamisch aus einer Datenbank erstellt. Dies bedeutet, dass jede Option über die Datenbank erworben wird.
Die Werte für jedes dieser 4 Felder werden mit GET in eine PHP-Datei gebracht.
$country1 = $_GET['country1'];
$country2 = $_GET['country2'];
$country3 = $_GET['country3'];
$country4 = $_GET['country4'];
Wenn diese Felder gepflückt, eine SQL-Anweisung für das gewählte Land gesucht wird
ausgeführt$sql="SELECT Country.*, COUNT(Cyclist.name) as noOfAthlete
FROM Country
LEFT JOIN Cyclist ON Cyclist.ISO_id = Country.ISO_id
WHERE Country.ISO_id = '$country1'
UNION
SELECT Country.*, COUNT(Cyclist.name) as noOfAthlete
FROM Country
LEFT JOIN Cyclist ON Cyclist.ISO_id = Country.ISO_id
WHERE Country.ISO_id = '$country2'
UNION
SELECT Country.*, COUNT(Cyclist.name) as noOfAthlete
FROM Country
LEFT JOIN Cyclist ON Cyclist.ISO_id = Country.ISO_id
WHERE Country.ISO_id = '$country3'
UNION
SELECT Country.*, COUNT(Cyclist.name) as noOfAthlete
FROM Country
LEFT JOIN Cyclist ON Cyclist.ISO_id = Country.ISO_id
WHERE Country.ISO_id = '$country4'
";
Die ersten beiden Felder erforderlich sind, und die zweiten zwei sind optional.
Wenn der Benutzer für Land eine leere Wahl wählt 1 und 2, und Fehlermeldung erscheint. Wenn er eine gültige Auswahl für 1 und 2 eingibt, aber eine leere Auswahl für Land 3 oder 4 eingibt, sollten nur Felder ausgewählt werden, die nicht leer gelassen wurden (dh wenn der Benutzer Land 1, 2 und 4 auswählt, Land 3 sollte nicht zum Array hinzugefügt werden).
Das Problem ist, dass derzeit alle Länder hinzugefügt werden, unabhängig davon, ob sie leer ausgewählt oder gelassen wurden, die Datensätze mit Null-Felder erzeugt. Diese
ist, wo mein Problem liegt. Ich muss das Array, das die Informationen enthält, nur ausfüllen, wenn die Felder eines Datensatzes nicht null sind.
Ich habe versucht, die folgenden zu tun, aber es immer noch leere Datensätze in dem Array geladen.
while($row = mysql_fetch_assoc($result)){ //going through each row in the db
if(is_null($row) == 0){ //i have tried empty as well
array_push($rowsArr, $row)
}
else
echo "I wont fill the array with this record";
}
So sieht ein typisches Array beim Drucken aus. Ich würde den dritten Datensatz nicht in mein Array laden müssen, da alle Felder NULL sind, und dies erzeugt eine zusätzliche unerwünschte Tabellenzeile beim Laden der Daten in eine HTML-Tabelle.
JSON ARRAY
[{"ISO_id":"BEL","gdp":"511533000000","population":"10896000","country_name":"Belgium","gold":"0","silver":"1","bronze":"2","total":"3","noOfAthlete":"14"},
{"ISO_id":"ARM","gdp":"10247788877","population":"3092000","country_name":"Armenia","gold":"0","silver":"1","bronze":"2","total":"3","noOfAthlete":"0"},
{"ISO_id":null,"gdp":null,"population":null,"country_name":null,"gold":null,"silver":null,"bronze":null,"total":null,"noOfAthlete":"0"}].
PHP ARRAY
Array ([0] => Array ([ISO_id] => BEL [gdp] => 511533000000 [population] => 10896000 [country_name] => Belgium [gold] => 0 [silver] => 1 [bronze] => 2 [total] => 3 [noOfAthlete] => 14) [1] => Array ([ISO_id] => ARM [gdp] => 10247788877 [population] => 3092000 [country_name] => Armenia [gold] => 0 [silver] => 1 [bronze] => 2 [total] => 3 [noOfAthlete] => 0) [2] => Array ([ISO_id] => [gdp] => [population] => [country_name] => [gold] => [silver] => [bronze] => [total] => [noOfAthlete] => 0))
Hoffentlich habe ich mich klar ausgedrückt. Jede Hilfe wäre willkommen!
Ich habe das Problem erkannt. Es liegt in der SQL-Anweisung. Wenn es in einem Land keine Athleten gibt, ist die zurückgegebene Zahl 0, also ist es nicht null, wodurch der gesamte Datensatz nicht leer ist. Ich bin mir nicht sicher, wie ich das beheben kann. – Pete
Wenn COUNT (Cyclist.name) als noOfAthlete entfernt wird, funktioniert die if-Bedingung einwandfrei. Wie kann ich COUNT (Cyclist.name) aus der SQL-Anweisung importieren, ohne meine Array-Struktur zu zerstören? – Pete
Auch Ihr Code ist unglaublich anfällig für SQL-Injection. Sie sollten niemals _GET-Daten nehmen und zu SQL weiterleiten. – Trent