0

I have an PHP file that has an array:

$cards = array
    (
      1234=>array
                ( 
                  "type" => "Viza",
                  "owner" => "Petar Petrovic",
                  "balance" => 1000,
                ),
      5678=>array
                (

                  "type" => "Master Card",
                  "owner" => "Ivan Ivanovic",
                  "balance" => 20000,
                ),
     91011=>array
                (

                  "type" => "American Express",
                  "owner" => "Marko Markovic",
                  "balance" => 300000,
                ),
    121314=>array
                (

                  "type" => "Diners Club",
                  "owner" => "Veljko Veljkovic",
                  "balance" => 1000000,
                )

It is an example of credit card informations, the key is credit card number. So I have to go trough it and compare the values with input values from a form. My HTML form:

  <form action="cards.php" method="post">
  <table align="center">
    <tr>
      <td>Enter your name</td>
      <td><input type="text" name="name"></td>
   </tr>

   <tr>
     <td>Enter your card number</td>
     <td><input type="text" name="cardno"></td>
   </tr>

   <tr>
     <td>Enter your sum</td>
     <td><input type="text" name="sum"></td>
   </tr>

   <tr>
     <td>Select card type</td>
     <td><select name="select">
        <option value="viza">Viza</option>
        <option value="master">Master Card</option>
        <option value="american">American Express</option>
        <option value="diners">Diners Club</option>
        </select></td>
   </tr>

   <tr>
      <td></td>
      <td><input type="submit" name="submit" value="SUBMIT"></td>
   </tr>

</table>
</form>

First I need to check if the card number entered exists in my array, if it does than I need to compare the rest of entered values(name and card type ). How do I do it? I'm a beginner to all this so be kind and help me please!

I had an idea but of course it,s not working:

  $card_number=$_POST['cardno'];
  $name = $_POST['name'];
  $sum = $_POST['sum'];
  $type = $_POST['select'];

foreach($cards as $key=>$item){  
   if ($item['type']== $type){
     if($item['owner']== $name){
       if($item['balance'] > $sum){

            $newbalance= $item['balance'] - $sum;
            echo "Your new balance is:".$newbalance;
        }
         else if($item['balance'] < $sum){

            echo "You dont have enough sources on your account";

        }
       else if  ($item['owner']!== $name){

        echo "Ivalid name!";

        }
     else if($item['type']!== $type){

        echo "Invalid card type!";

      }
    else if($key !== $card_number){

        echo "Invalid card number!";

    }
     }
 }
 }

3 Answers 3

1

Try this, as @Rajdeep Paul told you, you can use array_key_exists(), I have created a function and I have added the new value to the balance.

function checkCreditCard($cards, $cardno, $name, $sum, $type) {
  $bResult = (array_key_exists($cardno, $cards)) ? true : false;
  if ($bResult) {
    if ($cards[$cardno]['owner'] == $name && $cards[$cardno]['type'] == $type) {
        if ($cards[$cardno]['balance'] >= $sum) {
            $newBalance = ($cards[$cardno]['balance'] - $sum);
            $cards[$cardno]['balance'] = $newBalance;
            return "Your new balance is:" . $newBalance;
        } else {
            "You dont have enough sources on your account";
        }
     } else {
        return "Invalid name or card type";
     }
  }
  return "Invalid card number!";
}

Output:

$cards = array
(
1234 => array
    (
    "type" => "Viza",
    "owner" => "Petar Petrovic",
    "balance" => 1000,
),

echo checkCreditCard($cards, 1234, 'Petar Petrovic', '100', 'Viza');

Your new balance is:900

echo checkCreditCard($cards, 000000, 'Petar Petrovic', '100', 'Viza');

Invalid card number!
Sign up to request clarification or add additional context in comments.

Comments

1
if(array_key_exists($card_number, $cards)){
    $cDetails = array_values($cards[$card_number]);
    list($cType, $cOwner, $cBalance) = $cDetails;

    if ($cOwner == $name) {
        if ($cBalance > $sum) {
            $newbalance = $cBalance - $sum;
            echo "Your new balance is:" . $newbalance;
        } else {
            echo "You dont have enough sources on your account";
        }
    } else {
        echo "Ivalid name!";
    }

    if ($cType != $type) {
            echo "Invalid card type!";
        }
} else {
    echo "Invalid card number!";
}

3 Comments

When I try this code everything functions but I constantly have "Invalid card type!" echoed on a page, even if it's a right one.
yes, look this: <td><select name="select"> <option value="viza">Viza</option> <option value="master">Master Card</option> <option value="american">American Express</option> <option value="diners">Diners Club</option> </select></td> this is wrong, all value has to be fixed to match for the array values.
Oh yeah, you are right, such a stupid mistake, thank you! I need to get this computer logic in my way of thinking all the time and I make mistakes so easily...Thank you once more.
0

First I need to check if the card number entered exists in my array, if it does than I need to compare the rest of entered values(name and card type ).

Use array_key_exists() function to check if the card number exists in the $cards array or not. And then refactor your entire business logic in the following way,

// First check if the card number exists or not
if(array_key_exists($_POST['cardno'], $cards)){
    // Check rest of the details
    if($cards[$_POST['cardno']]['name'] == $_POST['name']){
        if($cards[$_POST['cardno']]['type'] == $_POST['select']){
            if($cards[$_POST['cardno']]['balance'] >= $_POST['sum']){
                $newbalance= $cards[$_POST['cardno']]['balance'] - $_POST['sum'];
                echo "Your new balance is:".$newbalance;
            }else{
                echo "You dont have enough sources on your account";
            }
        }else{
            echo "Invalid card type";
        }
    }else{
        echo "Invalid name";
    }
}else{
    echo "Invalid card number";
}

2 Comments

Just a sidenote: After deducting and showing the user the balance amount, you may also want to update the balance amount in $cards array as well.
Thank you very much, i'll try this out!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.