简体   繁体   中英

How can I write a lot of similar if-statements in a shorter way?

Is there a way to write this bunch of if statements shorter?

if($data==name){
    $sql1 = "UPDATE people set firstname = ? WHERE id = '$id'";
    $q = $pdo->prepare($sql1);
    $q->execute(array($name));
}
if($data==age){
    $sql2 = "UPDATE people set age = ? WHERE id = '$id'";
    $q = $pdo->prepare($sql2);
    $q->execute(array($age));
}
if($data==color1){
    $sql3 = "UPDATE people set paint1 = ? WHERE id = '$id'";
    $q = $pdo->prepare($sql3);
    $q->execute(array($color));
}
if($data==color2){
    $sql4 = "UPDATE people set paint2 = ? WHERE id = '$id'";
    $q = $pdo->prepare($sql4);
    $q->execute(array($color));
}
if($data==color3){
    $sql5 = "UPDATE people set paint3 = ? WHERE id = '$id'";
    $q = $pdo->prepare($sql5);
    $q->execute(array($color));
}

I tried to make a function

function data($info, $information, $name){
        if($data==$info){
             $sql = "UPDATE people set $information = ? WHERE id = '$id'";
             $q = $pdo->prepare($sql);
             $q->execute(array($name));
        }
}

data(name, firstname, $name);

But it is not working like this, I do not get a result. Maybe because of the variable inside the sql request?

Php switch, from the docs:

if ($i == 0) {
    echo "i equals 0";
} elseif ($i == 1) {
    echo "i equals 1";
} elseif ($i == 2) {
    echo "i equals 2";
}
// same as
switch ($i) {
    case 0:
        echo "i equals 0";
        break;
    case 1:
        echo "i equals 1";
        break;
    case 2:
        echo "i equals 2";
        break;
}

Should be what you are looking for. http://php.net/manual/en/control-structures.switch.php

  <?php

      switch($data){
          case "name":
              $field = "firstName";
          break;
          case "age":
              $field = "age";
          break;
          case "color1":
              $field = "paint1";
          break;
          case "color2":
              $field = "paint2";
          break;
          case "color3":
              $field = "paint3";
          break;
          default:
             echo 'Invalid selection';
             exit;
          break;
      }
      $sql = "UPDATE people set $field = ? WHERE id = '$id'";
      $q = $pdo->prepare($sql);
      $q->execute(array($name));

try to use if elseif because if you use if statement for each one it taking long time. so when first condition true means no need to check another if condition so use if elseif statement. or use switch case

        if($data==name){
            $sql1 = "UPDATE people set firstname = ? WHERE id = '$id'";
            $q = $pdo->prepare($sql1);
            $q->execute(array($name));
        }
        else if($data==age){
            $sql2 = "UPDATE people set age = ? WHERE id = '$id'";
            $q = $pdo->prepare($sql2);
            $q->execute(array($age));
        }
        else if($data==color1){
            $sql3 = "UPDATE people set paint1 = ? WHERE id = '$id'";
            $q = $pdo->prepare($sql3);
            $q->execute(array($color));
        }
        else if($data==color2){
            $sql4 = "UPDATE people set paint2 = ? WHERE id = '$id'";
            $q = $pdo->prepare($sql4);
            $q->execute(array($color));
        }
        else if($data==color3){
            $sql5 = "UPDATE people set paint3 = ? WHERE id = '$id'";
            $q = $pdo->prepare($sql5);
            $q->execute(array($color));
        }
        else
        {

          echo "nothing";
        }


      (OR)


        switch ($data) {
            case name:
                $sql1 = "UPDATE people set firstname = ? WHERE id = '$id'";
                $q = $pdo->prepare($sql1);
                $q->execute(array($name));
                break;
            case age:
               $sql2 = "UPDATE people set age = ? WHERE id = '$id'";
               $q = $pdo->prepare($sql2);
               $q->execute(array($age));
                break;
            case color1:
                $sql3 = "UPDATE people set paint1 = ? WHERE id = '$id'";
                $q = $pdo->prepare($sql3);
                $q->execute(array($color));
                break;
            case color2:
                $sql4 = "UPDATE people set paint2 = ? WHERE id = '$id'";
               $q = $pdo->prepare($sql4);
               $q->execute(array($color));
                break;  
            case color3:
                $sql5 = "UPDATE people set paint3 = ? WHERE id = '$id'";
               $q = $pdo->prepare($sql5);
              $q->execute(array($color));
                break;  
        }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM