title: How to get all the products? MySQL, PHP
body: <p>How to get all the products? With the return, I get only one row... 
  I would like to type a loop to get all the values of the MySQL table "listaprodotti"?</p>
  
  <pre><code>     public function getProdottiByUsername($username)
  {
      $stmt = $this-&gt;conn-&gt;prepare("SELECT username, id_prodotto, nome_prodotto, categoria, quantita  FROM listaprodotti WHERE username = ?");
      $stmt-&gt;bind_param("s", $username);
      $stmt-&gt;execute();
      $stmt-&gt;bind_result($username, $id_prodotto, $nome_prodotto, $categoria, $quantita);
      $stmt-&gt;fetch();
      $prodotti = array();
  
  
      $prodotti['username'] = $username;
      $prodotti['id_prodotto'] = $id_prodotto;
      $prodotti['nome_prodotto'] = $nome_prodotto;
      $prodotti['categoria'] = $categoria;
      $prodotti['quantita'] = $quantita;
  
  
      return $prodotti;
  
     }
  
     }
  </code></pre>
  
  <p>That's what I get</p>
  
  <pre><code>     "prodotti":
     {"username":"anto","id_prodotto":57,"nome_prodotto":"xxx",
         "categoria":"xxx","quantita":"2"}}
  </code></pre>
  
  <p>All this must be called with Swift 3 as an <code>NSDictionary</code>. </p>
  
  <p>UPDATE</p>
  
  <p>How do I get the values as an <code>NSDictionary</code> in Swift 3 ?</p>
  
  <p>PHP CODE</p>
  
  <pre><code>  public function getProdottiByUsername($username)
  {
      $stmt = $this-&gt;conn-&gt;prepare("SELECT username, id_prodotto, nome_prodotto, categoria, quantita  FROM listaprodotti WHERE username = ?");
      $stmt-&gt;bind_param("s", $username);
      $stmt-&gt;execute();
      $result = $stmt-&gt;get_result();
      $i=0;
      $prodotti = array();
      while($row = $result-&gt;fetch_array(MYSQLI_ASSOC)){
          $prodotti[$i]['username'] = $row['username'];
          $prodotti[$i]['id_prodotto'] = $row['id_prodotto'];
          $prodotti[$i]['nome_prodotto'] = $row['nome_prodotto'];
          $prodotti[$i]['categoria'] = $row['categoria'];
          $prodotti[$i]['quantita'] = $row['quantita'];
          $i++;
      }
       return $prodotti;
      }
  
      }
  </code></pre>
  
  <p>SWIFT CODE</p>
  
  <pre><code>   import Alamofire
     import UIKit
      import AVFoundation
  
     class LoginController1: UIViewController {
  
  //The login script url make sure to write the ip instead of localhost
  //you can get the ip using ifconfig command in terminal
  let URL_USER_LOGIN = "http://.............../login.php"
  
  //the defaultvalues to store user data
  let defaultValues = UserDefaults.standard
  
  //the connected views
  //don't copy instead connect the views using assistant editor
  @IBOutlet weak var labelMessage: UILabel!
  @IBOutlet weak var username: UITextField!
  
  @IBOutlet weak var password: UITextField!
  
  //the button action function
  @IBAction func buttonLogin(_ sender: UIButton) {
  
      //getting the username and password
      let parameters: Parameters=[
          "username":username.text!,
          "password":password.text!
      ]
  
      //making a post request
      Alamofire.request(URL_USER_LOGIN, method: .post, parameters: parameters).responseJSON
          {
              response in
              //printing response
              print(response)
  
              //getting the json value from the server
              if let result = response.result.value {
                  let jsonData = result as! NSDictionary
  
                  //if there is no error
                  if(!(jsonData.value(forKey: "error") as! Bool)){
  
                      //getting the user from response
                      let user = jsonData.value(forKey: "user") as! NSDictionary
  
  
                      //getting user values
                      let userId = user.value(forKey: "id") as! Int
                      let userName = user.value(forKey: "username") as! String
                      let userEmail = user.value(forKey: "email") as! String
                      let userNome = user.value(forKey: "nome") as! String
                      let userCognome = user.value(forKey: "cognome") as! String
                      let userTelefono = user.value(forKey: "telefono") as! String
  
  
  
                      //saving user values to defaults
                      self.defaultValues.set(userId, forKey: "userid")
                      self.defaultValues.set(userName, forKey: "username")
                      self.defaultValues.set(userEmail, forKey: "useremail")
                      self.defaultValues.set(userNome, forKey: "usernome")
                      self.defaultValues.set(userCognome, forKey: "usercognome")
                      self.defaultValues.set(userTelefono, forKey: "usertelefono")
  
  
                      ///prende i valori dei prodotti dalla cella legata a quel username
                      let prodotti = jsonData.value(forKey: "row") as! NSDictionary 
  
  
  
                      let prodottiNome_prodotto = prodotti.value(forKey: "nome_prodotto") as! String
                      let prodottiCategoria = prodotti.value(forKey: "categoria") as! String
                      let prodottiQuantita = prodotti.value(forKey: "quantita") as! String
  
  
  
                      //saving i valori di questo username
  
  
                      self.defaultValues.set(prodottiNome_prodotto, forKey: "nome_prodotto")
                      self.defaultValues.set(prodottiCategoria, forKey: "categoria")
                      self.defaultValues.set(prodottiQuantita, forKey: "quantita")
  
  
  
                      //Go to the HomeViewController if the login is sucessful
                      let ProfiloController = self.storyboard?.instantiateViewController(withIdentifier: "Profilo") as! ProfiloController
                      self.navigationController?.pushViewController(ProfiloController, animated: true)
  
                      self.dismiss(animated: false, completion: nil)
  
                      }else{
                                              //error message in case of invalid credential
                      let alertController = UIAlertController(title: "Error", message: "Username e password sbagliati", preferredStyle: .alert)
                      let defaultAction = UIAlertAction(title: "OK", style: .cancel, handler: nil)
                      alertController.addAction(defaultAction)
  
                      self.present(alertController, animated: true, completion: nil)
                      }
              }
                  }
  }
  
  
  
  
  
  
  override func viewDidLoad() {
      super.viewDidLoad()
      if defaultValues.string(forKey: "username") != nil{
          let ProfiloController = self.storyboard?.instantiateViewController(withIdentifier: "Profilo") as! ProfiloController
          self.navigationController?.pushViewController(ProfiloController, animated: true)
  
      }
  }
  
  
      var player: AVPlayer?
      override func viewDidAppear(_ animated: Bool) {
          super.viewDidAppear(animated)
  
  
  
  
  
      let tap = UITapGestureRecognizer(target: self, action: #selector(LoginController1.dismissKeyboard))
      view.addGestureRecognizer(tap)
      let path = Bundle.main.path(forResource: "introoiphone 7 plus", ofType: "mp4")
      player = AVPlayer(url: URL(fileURLWithPath: path!))
      player!.actionAtItemEnd = AVPlayerActionAtItemEnd.none;
      let playerLayer = AVPlayerLayer(player: player)
      playerLayer.frame = self.view.frame
      playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
      self.view.layer.insertSublayer(playerLayer, at: 0)
      NotificationCenter.default.addObserver(self, selector: #selector(LoginController1.playerItemDidReachEnd), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: player!.currentItem)
      player!.seek(to: kCMTimeZero)
      player!.play()
  
  }
  
  func playerItemDidReachEnd() {
      player!.seek(to: kCMTimeZero)
  }
  
  
  
  func dismissKeyboard(tap: UITapGestureRecognizer) {
      print("Keyboard Dismiss Again")
      view.endEditing(true)
  }
  override func didReceiveMemoryWarning() {
      super.didReceiveMemoryWarning()
      // Dispose of any resources that can be recreated.
   }
  
    }
  </code></pre>