2017-01-24 2 views
1

J'ai un problème inhabituel, un problème auquel je ne peux vraiment pas croire, mais il se produit et je n'arrive pas à m'en sortir. S'il vous plaît aidez-moi si quelqu'un sait ce que je fais mal.php empty() ne fonctionne pas correctement

J'ai besoin d'un tableau $EmpExists=array();, qui affiche les résultats après avoir vérifié la base de données pour toutes les entreprises auxquelles des employés sont associés ou non. J'utilise PHP pour obtenir quelques valeurs de la base de données et je vérifie si la valeur est vide ou non. Je suit les tableaux et les lignes de données dans les:

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` 

J'utilise suivant le code php pour appeler la liste des entreprises:

<?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"]; 
} 

Cela me donne un tableau de BusinessID puis-je utiliser suivant php le code pour obtenir le EmpID des employés pour la 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 = ''; 
    } 
} 

maintenant $EmpExists=array(); montre un tableau avec suivants ans wers:

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

et $EmpIDRecord=array(); montre un tableau avec les réponses suivantes:

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

et $BusinessIDforthis=array(); montre un tableau avec les réponses suivantes:

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

Le problème est que j'ai besoin de montrer le dernier élément à l'intérieur du $EmpExists=array(); être EmpNotExists parce que le dernier BusinessID de BusinessList n'en a aucun enregistrement dans EmployeeList. Comment puis-je faire cela correctement, s'il vous plaît guide moi si possible?

+0

@RiggsFolly Pouvez-vous voir ce que je fais mal dans mon code ci-dessus alors? –

+0

Je ne peux même pas lire ce code. Qu'en est-il de l'indentation ici? –

+1

** AVERTISSEMENT **: Lorsque vous utilisez 'mysqli' vous devriez utiliser [requêtes paramétrées] (http://php.net/manual/fr/mysqli.quickstart.prepared-statements.php) et [' bind_param'] (http://php.net/manual/en/mysqli-stmt.bind-param.php) pour ajouter des données utilisateur à votre requête. ** N'utilisez PAS ** l'interpolation ou la concaténation de chaîne pour y parvenir car vous avez créé un [bogue d'injection SQL] grave (http://bobby-tables.com/). ** NE JAMAIS ** mettre les données '$ _POST' ou' $ _GET' directement dans une requête, cela peut être très dangereux si quelqu'un cherche à exploiter votre erreur. – tadman

Répondre

0

Pour vérifier l'état vide de la question ci-dessus où mysqli_fetch_assoc ne donne toujours un true on peut utiliser mysqli_num_rows plutôt pour la question ci-dessus, de la manière suivante:

$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); vaudra toujours vrai, sauf si Theres une erreur de ressource qui signifie qu'il boucle autant de fois que ses vrais (3 lignes de BusinessList = 3 boucles). Vous devriez utiliser mysqli_num_rows() à la place.

Vraiment, vous devriez utiliser JOIN pour obtenir vos données en tant que tel:

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

En outre, $EmpID = $EmpID_array["EmployeeID"]; ce soit ne devrait pas $EmpID = $EmpID_array["EmpID"];?

+0

Merci mon ami, je ne le savais pas. –

+0

Pas de problème. Vous êtes les bienvenus. Heureux d'avoir pu aider. – CodeGodie