2017-09-27 5 views
1

Je suis assez nouveau à la programmation et travaille actuellement sur une base de données de jeux vidéo. Je suis bloqué à un moment où je veux filtrer mes entrées avec la méthode "GET". Tout fonctionne bien jusqu'à ce que je veux rechercher plusieurs paramètres pour le problème principal est de passer par mon commutateur/déclaration de cas fois fois. Alors, voici le code:Comment puis-je obtenir plus d'un paramètre GET en utilisant switch/case en php?

$columnName = NULL; 
    $searchValue = NULL; 

    switch ($_GET) { 
    case isset($_GET['name']): 
     $columnName = "games.name"; 
     $searchValue = $_GET['name']; 
     break; 
    case isset($_GET['developer']): 
     $columnName = "developer.name"; 
     $searchValue = $_GET['developer']; 
     break; 
    case isset($_GET['device']): 
     $columnName = "devices.name"; 
     $searchValue = $_GET['device']; 
     break; 
    case isset($_GET['company']): 
     $columnName = "company.name"; 
     $searchValue = $_GET['company']; 
     break; 
    case isset($_GET['medium']): 
     $columnName = "medium.name"; 
     $searchValue = $_GET['medium']; 
     break; 
    default: 
     break; 
} 

if ($columnName !== null && $searchValue !== null) { 
    $selectStatement .= " WHERE " . $columnName . " LIKE '%" . $searchValue . "%'"; 
} 

La variable $ est la instructionDeSélection retournant déclaration de sélection pour mes entrées de la base de données, mais je pensais que ce ne serait pas utile de le publier dans son intégralité.

Merci d'avance.

EDIT:

Je suis surpris que je suis arrivé tant de réponses après seulement quelques minutes, je vous remercie beaucoup! Mais j'ai essayé chacune de vos réponses et aucune ne fonctionne vraiment pour moi. Par exemple, si je recherche maintenant deux paramètres, il ne reconnaît que le dernier. Dans cet exemple http://localhost/index.php?developer=ubisoft&medium=disc il me montre que le moyen, mais pas le développeur ...

+0

usage multiple 'déclarations if' au lieu de' switch' – ArtOsi

+0

Je suppose que si vous n'utilisez pas « casser », il vérifiera chaque paramètre. Mais alors vous devrez changer la valeur et la valeur des colonnes pour inclure tous les paramètres. –

+0

@MrKiwey mis à jour ma réponse s'il vous plaît vérifier –

Répondre

0

Vous devez utiliser si la déclaration de plusieurs conditions ou ne pas utiliser l'instruction break (non recommandé)

travail démo avec des valeurs statiques GET: https://eval.in/868873

if ($_GET) { 
    if(isset($_GET['name'])) 
    {  
     $columnName[] = "games.name"; 
     $searchValue[] = $_GET['name']; 
    } 
    if(isset($_GET['developer'])) 
    {  
     $columnName[] = "developer.name"; 
     $searchValue[] = $_GET['developer']; 
    } 
    if(isset($_GET['device'])) 
    {  
     $columnName[] = "devices.name"; 
     $searchValue[] = $_GET['device']; 
    } 
    if(isset($_GET['company'])) 
    {  
     $columnName[] = "company.name"; 
     $searchValue[] = $_GET['company']; 
    } 
    if(isset($_GET['medium'])) 
    {  
     $columnName[] = "medium.name"; 
     $searchValue[] = $_GET['medium']; 
    } 
} 

Parcoure columnName

$selectStatement = ''; 
if ($columnName !== null && $searchValue !== null) { 
    $length = count($columnName); 
    for ($i=0; $i < $length; $i++) { 
     if ($i == 0) 
      $selectStatement .= " WHERE " . $columnName[$i] . " LIKE '%" . $searchValue[$i] . "%'"; 
     else 
      $selectStatement .= " AND " . $columnName[$i] . " LIKE '%" . $searchValue[$i] . "%'";   
    } 
} 

echo $selectStatement; 

pour ?developer=ubisoft&medium=disc

Sortie:

WHERE developer.name LIKE '%ubisoft%' AND medium.name LIKE '%disc%' 
+0

également ajouté le lien de démonstration avec les paramètres GET statiques –

0

pourquoi utilisez-vous instruction switch/cas? Il convient à la recherche d'une occurence d'élément dans votre ensemble d'éléments. Utilisez simplement si déclaration. Cela ressemblerait à ceci:

$columns = array(); 

if(isset($_GET["column1"])) { 
    $columns []= $_GET["column1"];  
} 

if(isset($_GET["column2"])) { 
    $columns []= $_GET["column2"];  
} 

$columnsString = implode(",", $columns); 

// You will get string like "column1,column2" 
// And you can make the same thing with your WHERE statements 
0

Le commutateur n'est pas idéal à utiliser pour votre boîtier.

vous pouvez avoir une condition SINON SI

if (isset($_GET['name'])){ 
    $columnName = "games.name"; 
    $searchValue = $_GET['name']; 
} 
elseif(isset($_GET['developer'])) { 
    $columnName = "developer.name"; 
    $searchValue = $_GET['developer']; 
} 
elseif(){ 

} 
and so on.... 

Une autre façon est que vous pouvez avoir un tableau pour mapper votre paramètre nom de la colonne.

$_GET['type'] --> this can be your name, developer, medium, device, company... 
$_GET['value'] --> your value for name or developer or medium.... 

$mapping = [ 
    'name' => 'games.name', 
    'developer' => 'developer.name', 
    'device' => 'device.name', 
    'medium' => 'medium.name' 
]; 

$columnName = $mapping[$_GET['type']]; 
$searchValue = $_GET['value']; 

$selectStatement .= " WHERE " . $columnName . " LIKE '%" . $searchValue . "%'";