2017-01-24 3 views
1

Ich habe ein ungewöhnliches Problem, eines, das ich wirklich nicht glauben kann, ist tatsächlich passiert, aber es passiert und ich bin nicht in der Lage, den Ausweg zu finden. Bitte hilf mir, wenn jemand weiß, was ich falsch mache.php empty() funktioniert nicht richtig

Ich brauche ein Array $EmpExists=array();, die Ergebnisse nach der Überprüfung der Datenbank für alle Unternehmen zeigt, denen sie Mitarbeiter zugeordnet haben oder nicht. Ich verwende PHP, um ein paar Werte aus der Datenbank zu bekommen und überprüfe, ob der Wert leer ist oder nicht. Ich habe folgende Tabellen und Zeilen von Daten in ihnen:

Table `EmployeeList` 
Columns EmpID  BusinessID 
Row 1 `emp-000001`,`business-000001` 
Row 2 `emp-000002`,`business-000002` 



Table `BusinessList` 
Columns BusinessID 
Row 1 `business-000001` 
Row 2 `business-000002` 
Row 3 `business-000003` 

ich folgenden PHP-Code verwende Liste von Unternehmen zu nennen:

<?php 
$BusinessIDforthis = array(); 
$select_BusinessIDs = "SELECT BusinessID FROM BusinessList ORDER BY BusinessID ASC;"; 
$select_BusinessIDs_query = mysqli_query($connection, $select_BusinessIDs); 
if (!$select_BusinessIDs_query) { 
    die ("Database query for searching BusinessID failed."); 
} 
while ($BusinessIDs_array = mysqli_fetch_assoc($select_BusinessIDs_query)) { 
    $BusinessIDforthis[] = $BusinessIDs_array["BusinessID"]; 
} 

Das gibt mir eine Reihe von BusinessID und dann verwende ich folgende php Code die EmpID der Mitarbeiter für die BusinessID

$EmpID = ''; 
$EmpExists = array(); 
$EmpIDRecord = array(); 
foreach ($BusinessIDforthis as $x) { 
    $select_EmpID = "SELECT EmpID FROM EmployeeList WHERE BusinessID='{$x}';"; 
    $select_EmpID_query = mysqli_query($connection, $select_EmpID); 
    if (!$select_EmpID_query) { 
     die ("Database query for searching EmpID failed."); 
    } 
    while ($EmpID_array = mysqli_fetch_assoc($select_EmpID_query)) { 
     $EmpID = $EmpID_array["EmpID"]; 
     if (empty($EmpID)) { 
      array_push($EmpExists, 'EmpNotExists'); 
      array_push($EmpIDRecord, 'Employee does not exist.'); 
     } else { 
      array_push($EmpExists, 'EmpExists'); 
      array_push($EmpIDRecord, $EmpID); 
     } 
     $EmpID = ''; 
    } 
} 

Jetzt $EmpExists=array(); bekommen zeigt ein Array mit folgenden ans wers:

Array 
(
[0]=> EmpExists 
[1]=> EmpExists 
[2]=> EmpExists 
) 

und $EmpIDRecord=array(); zeigt ein Array mit folgenden Antworten:

Array 
(
[0]=> emp-000001 
[1]=> emp-000002 
) 

und $BusinessIDforthis=array(); zeigt ein Array mit folgenden Antworten:

Array 
(
[0]=> business-000001 
[1]=> business-000002 
[2]=> business-000003 
) 

Das Problem ist, dass ich es brauchen zeigen Sie den letzten Artikel innerhalb der $EmpExists=array(); zu EmpNotExists weil die letzte BusinessID von BusinessList hat keine Aufzeichnung davon in EmployeeList. Wie kann ich das richtig machen, bitte führe mich wenn möglich.

+0

@RiggsFolly ich sehen, was ich falsch mache Könnten Sie in meinem Code über dann? –

+0

Ich kann diesen Code sogar nicht lesen. Was ist mit einer Einrückung hier? –

+1

** WARNUNG **: Wenn Sie 'mysqli' verwenden, sollten Sie [parametrisierte Abfragen] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) und [' bind_param'] (http://php.net/manual/en/mysqli-stmt.bind-param.php), um Benutzerdaten zu Ihrer Abfrage hinzuzufügen. ** Verwenden Sie NICHT ** String-Interpolation oder Verkettung, um dies zu erreichen, weil Sie einen schwerwiegenden [SQL injection bug] erstellt haben (http://bobby-tables.com/). ** NIEMALS ** $ _POST 'oder' $ _GET' Daten direkt in eine Abfrage einfügen, es kann sehr schädlich sein, wenn jemand versucht, Ihren Fehler auszunutzen. – tadman

Antwort

0

den leeren Status obiger Frage zu prüfen, wo mysqli_fetch_assoc immer ein true ein mysqli_num_rows stattdessen hat ergeben für die obige Frage, auf folgende Weise verwenden:

$EmpID = ''; 
$EmpExists = array(); 
$EmpIDRecord = array(); 
foreach ($BusinessIDforthis as $x) { 
    $select_EmpID = "SELECT EmpID FROM EmployeeList WHERE BusinessID='{$x}';"; 
    $select_EmpID_query = mysqli_query($connection, $select_EmpID); 
    if (!$select_EmpID_query) {die ("Database query for searching EmpID failed.");} 
else 
{$EmpIDrows = mysqli_num_rows($select_EmpID_query); 
    if ($EmpIDrows===0) { 
    array_push($EmpExists, 'EmpNotExists'); 
    array_push($EmpIDRecord, 'Employee does not exist.'); 
    } else { 
    array_push($EmpExists, 'EmpExists'); 
    array_push($EmpIDRecord, $EmpID); 
    } 
    $EmpIDrows= ''; 
    } 
    } 
1

$select_EmpID_query = mysqli_query($connection, $select_EmpID); wird immer true zurückgeben, es sei denn, es gibt einen Ressourcenfehler, was bedeutet, dass es so viele Schleifen wie es wahr ist (3 Zeilen von BusinessList = 3 Schleifen). Sie sollten stattdessen mysqli_num_rows() verwenden.

Wirklich, sollten Sie verwenden JOIN Ihre Daten als solche zu erhalten:

SELECT * FROM BusinessList AS BL 
LEFT JOIN EmployeeList as EL ON BL.BusinessID = EL.BusinessID 
ORDER BY BL.BusinessID ASC 

Auch shouldnt $EmpID = $EmpID_array["EmployeeID"]; diese $EmpID = $EmpID_array["EmpID"]; sein?

+0

Danke Freund, das wusste ich nicht. –

+0

Kein Problem. Bitte. Froh, dass ich helfen konnte. – CodeGodie