유튜브 플레이어1



podfile



target 'YoutubeVideo' do


use_frameworks!


pod 'YouTubePlayer-Swift','~> 1.0'


end





viewcontroller

//

//  ViewController.swift

//  YoutubeVideo

//

//  Created by MacBookPro on 2018. 1. 22..

//  Copyright © 2018년 MacBookPro. All rights reserved.

//


import UIKit

//유튜브 플레이어 모듈 임포트 - podfile에 작성

import YouTubePlayer_Swift


class ViewController: UIViewController {


    //유튜브나올 view 아웃렛 변수 지정

    @IBOutlet var videoView: YouTubePlayerView!

    

    override func viewDidLoad() {

        super.viewDidLoad()

   

    }


    //이전 파일 재생

    @IBAction func pre(_ sender: UIButton) {

        videoView.previousVideo()

    }

    

    //다음 파일 재생

    @IBAction func next(_ sender: UIButton) {

        videoView.nextVideo()

    }

    

    //재생 버튼

    @IBAction func play(_ sender: UIButton) {

        

        //선택이 되었으면

        if sender.isSelected{

            //해당버튼을 pause로 바꾼다.

            sender.setTitle("Pause", for: UIControlState.selected)

            //멈춤

            videoView.pause()

        }else{

            //아니면 play로 바꾼다.

            sender.setTitle("Play", for: UIControlState.normal)

            //시작

            videoView.play()

        }

        //bool값을 돌려준다.

        sender.isSelected = !sender.isSelected

    }

   

    //비디오를 로드를 해야 play가 가능하다.

    //관련 설정 변수 딕셔너리로 설정

    @IBAction func loadVieo(_ sender: UIButton) {

        videoView.playerVars = ["playsinline": 1 as AnyObject,

                                "showinfo": 0 as AnyObject,

                                "controls" : 0 as AnyObject]

        //가져올 아이디 실정

        videoView.loadVideoID("4BCxqrhsjOw")

        

    }

    

    //해당 리스트 id를 가져 온다.

    @IBAction func loadPlayList(_ sender: UIButton) {

        videoView.loadPlaylistID("PLrL-Vo0sawkCnrzvUfbZGaPc9cuLY4fYd")

    }

    

    

}








네비게이션 


//

//  ViewController.swift

//  navi

//

//  Created by MacBookPro on 2017. 12. 26..

//  Copyright © 2017년 MacBookPro. All rights reserved.

//


import UIKit


class ViewController: UIViewController,EditDelegate {


    @IBOutlet weak var imgView: UIImageView!

    @IBOutlet weak var mainTextMessage: UITextField!

    let imgOn = UIImage(named:"on.jpg")

    let imgOff = UIImage(named:"off.jpg")

    var isOn = true

    @IBOutlet weak var imageView: UIImageView!

    

    

    override func viewDidLoad() {

        super.viewDidLoad()


        imageView.image = imgOn

    }


    //세그먼트전환: 즉 새로운 화면을 전환 할때

     override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        

        //도착 세그먼트를 EditViewController로 설정

        let editViewController = segue.destination as! EditViewController

        

        //버튼을 눌렀는지 바 버튼을 눌렀는지 수정화면에 전달해주기

        if segue.identifier == "EditButton"{

            editViewController.textWayValue = "버튼"

        }else if segue.identifier == "EditBarButton" {

             editViewController.textWayValue = "바버튼"

       }

        //수정화면의 텍스트 필드에 데이터 값 넘겨주기

        editViewController.varTextMessage = mainTextMessage.text!

        //수정화면의 isOn변수에 값넘겨주기

        editViewController.isOn = isOn

        editViewController.delegate = self

     }

  

    //수정화면에서 구현한 프로토콜 메서드: 수정화면의 텍스트를 메인화면에 보여주기

    func didMessageEditDone(_ controller: EditViewController, message: String) {

            mainTextMessage.text = message

    }

    

    //수정화면에서 구현한 프로토콜 메서드: 수정화면의 스위치 데이터를 전달해주기

    func didImageOnOffDone(_ controller: EditViewController, isOn: Bool) {

    

        if isOn{

            imgView.image = imgOn

        }else{

            imgView.image = imgOff

            self.isOn = false

        }

        

    }

    

    

    

}




//

//  EditViewController.swift

//  navi

//

//  Created by MacBookPro on 2017. 12. 26..

//  Copyright © 2017년 MacBookPro. All rights reserved.

//


import UIKit


//프로토콜 : 클래스의 기능을 정의, 담당한다.

protocol EditDelegate {

    //메인화면으로 텍스트 메시지 전달해주는 함수

    func didMessageEditDone(_ controller: EditViewController, message: String)

    //메인화면으로 스위치 값 전달해주는 녀석

    func didImageOnOffDone(_ controller: EditViewController, isOn: Bool)

}



class EditViewController: UIViewController {


    @IBOutlet weak var UISwitch: UISwitch!

    @IBOutlet weak var editTextMessage: UITextField!

    @IBOutlet weak var lbWay: UILabel!

    

    var textWayValue: String = "" // 버튼 or 바버튼 관련 변수

    var varTextMessage: String = "" //텍스트 필드 값 관련 변수

    var isOn = false                // 스위치 관련 변수

    

    

    var delegate: EditDelegate?

    

   

    override func viewDidLoad() {

        super.viewDidLoad()

        

        //버튼인지 바버튼인지를 메인화면으로 부터 받아서 표시

        lbWay.text = textWayValue

        

        //메인화면에서 텍스트 필드 데이터를 받아옴

        editTextMessage.text = varTextMessage

        

        //전구가

        UISwitch.isOn = isOn

    }



    //완료버튼 눌렀을 때

    @IBAction func btnDone(_ sender: UIButton) {

        

        //이 메서드가 호출되면, 메인화면으로 텍스트필드 데이터 값이 전달됨

        if delegate != nil{

            delegate?.didMessageEditDone(self, message: editTextMessage.text!)

            

            //메인화면으로 스위치 값 전달

            delegate?.didImageOnOffDone(self, isOn: isOn)

        }

        

        _ = navigationController?.popViewController(animated: true)

    }

    

    

    //전구 키고 끄기

    @IBAction func swImageOnOff(_ sender: UISwitch) {

        //켜져있으면

        if sender.isOn {

            isOn = true

        }else{

            isOn = false

        }

        

    }

}    






전구 확대 축소 기능 추가하기


메인화면


//  ViewController.swift

//  navi

//

//  Created by MacBookPro on 2017. 12. 26..

//  Copyright © 2017년 MacBookPro. All rights reserved.

//


import UIKit


class ViewController: UIViewController,EditDelegate {


    @IBOutlet weak var imgView: UIImageView!

    @IBOutlet weak var mainTextMessage: UITextField!

    let imgOn = UIImage(named:"on.jpg")

    let imgOff = UIImage(named:"off.jpg")

    var isOn = true

    var isZooms = false

    @IBOutlet weak var imageView: UIImageView!

    

    override func viewDidLoad() {

        super.viewDidLoad()


        imageView.image = imgOn

    }


    //세그먼트전환: 즉 새로운 화면을 전환 할때 수정화면으로 값 넘겨주기

     override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        

        //도착 세그먼트를 EditViewController로 설정

        let editViewController = segue.destination as! EditViewController

        

        //버튼을 눌렀는지 바 버튼을 눌렀는지 수정화면에 전달해주기

        if segue.identifier == "EditButton"{

            editViewController.textWayValue = "버튼"

        }else if segue.identifier == "EditBarButton" {

             editViewController.textWayValue = "바버튼"

       }

        //수정화면의 텍스트 필드에 데이터 값 넘겨주기

        editViewController.varTextMessage = mainTextMessage.text!

        //수정화면의 isOn변수에 값넘겨주기

        editViewController.isOn = isOn

        //새로운 화면이 전환 될때 수정화면으로 값을 넘겨준다.

        editViewController.isZoom = isZooms

        editViewController.delegate = self


     }

  

    

    //수정화면에서 btnDone메서드가 실행될때 실행

    //수정화면에서 구현한 프로토콜 메서드: 수정화면의 텍스트를 메인화면에 보여주기

    func didMessageEditDone(_ controller: EditViewController, message: String) {

            mainTextMessage.text = message

    }

    

    //수정화면에서 btnDone메서드가 실행될때 실행

    //수정화면에서 구현한 프로토콜 메서드: 수정화면의 스위치 데이터를 전달해주기

    func didImageOnOffDone(_ controller: EditViewController, isOn: Bool) {

    

        if isOn{

            imgView.image = imgOn

        }else{

            imgView.image = imgOff

            self.isOn = false

        }

    }

    

    //수정화면에서 btnDone메서드가 실행될때 실행

    //수정화면에서 구현한 프로토콜 메서드: 수정화면에서 확대or 축소 데이터를 받아온다.

    func didSmallOrBig(_ controller: EditViewController, isZoom: Bool) {

        

        let scale:CGFloat = 2.0         //확대할 배율값

        var newWidth:CGFloat, newHeight:CGFloat //확대할 크기의 계산 값을 보관할 변수

  

        //false 상태면 축소

        if !isZoom {

            newWidth = imageView.frame.width/scale //이미지뷰의 프레임 너빗값을 scale로 나눔

            newHeight = imageView.frame.height/scale

            imageView.frame.size = CGSize(width: newWidth, height: newHeight)

            

        //true 면 확대

        }else{

            newWidth = imageView.frame.width*scale

            newHeight = imageView.frame.height*scale

            imageView.frame.size = CGSize(width: newWidth, height: newHeight)

        }

        

        isZooms = isZoom

    }

    

}




수정화면

//

//  EditViewController.swift

//  navi

//

//  Created by MacBookPro on 2017. 12. 26..

//  Copyright © 2017년 MacBookPro. All rights reserved.

//


import UIKit


//프로토콜 : 클래스의 기능을 정의, 담당한다.

protocol EditDelegate {

    //메인화면으로 텍스트 메시지 전달해주는 함수

    func didMessageEditDone(_ controller: EditViewController, message: String)

    //메인화면으로 스위치 값 전달해주는 녀석

    func didImageOnOffDone(_ controller: EditViewController, isOn: Bool)

    //전구 확대 축소

    func didSmallOrBig(_ controller: EditViewController, isZoom:Bool)

    

}



class EditViewController: UIViewController {


    @IBOutlet weak var smallOrBig: UIButton!

    @IBOutlet weak var UISwitch: UISwitch!

    @IBOutlet weak var editTextMessage: UITextField!

    @IBOutlet weak var lbWay: UILabel!

    

    var textWayValue: String = "" // 버튼 or 바버튼 관련 변수

    var varTextMessage: String = "" //텍스트 필드 값 관련 변수

    var isOn = false                // 스위치 관련 변수

    var isZoom = false

    

    var delegate: EditDelegate?

    

   

    override func viewDidLoad() {

        super.viewDidLoad()

        

        //버튼인지 바버튼인지를 메인화면으로 부터 받아서 표시

        lbWay.text = textWayValue

        

        //메인화면에서 텍스트 필드 데이터를 받아옴

        editTextMessage.text = varTextMessage

        

        //전구가

        UISwitch.isOn = isOn

        

        //true켜져있으면

        if isZoom {

            smallOrBig.setTitle("확대상태", for: .normal)

        }else{

            smallOrBig.setTitle("축소상태", for: .normal)

        }

    }



    //완료버튼 눌렀을 때

    @IBAction func btnDone(_ sender: UIButton) {

        

        //이 메서드가 호출되면, 메인화면으로 텍스트필드 데이터 값이 전달됨

        if delegate != nil{

            delegate?.didMessageEditDone(self, message: editTextMessage.text!)

            

            //메인화면으로 스위치 값 전달

            delegate?.didImageOnOffDone(self, isOn: isOn)

            

            //완료 버튼을 누르면 메인화면으로 전구 데이터 값 전달.

            delegate?.didSmallOrBig(self, isZoom: isZoom)

        }

        

        // 세그먼트 닫기

        _ = navigationController?.popViewController(animated: true)

    }

    

    

    //전구 키고 끄기

    @IBAction func swImageOnOff(_ sender: UISwitch) {

        //켜져있으면

        if sender.isOn {

            isOn = true

        }else{

            isOn = false

        }

        

    }

    

    //확대 or 축소

    @IBAction func smallOrBig(_ sender: UIButton) {

        //버튼을 눌렀는데 변수가 참(확대)이라면 축소

        if isZoom {

              smallOrBig.setTitle("축소상태", for: .normal)

              isZoom = false

         //버튼을 눌렀는데 변수가 거짓(축소)이라면 확대로 만들기

        }else{

            smallOrBig.setTitle("확대상태", for: .normal)

            isZoom = true

        }


}

}





//

//  ViewController.swift

//  DigitalFrame

//

//  Created by JinYoung Choi on 11/29/17.

//  Copyright © 2017 fapeng. All rights reserved.

//


import UIKit


class ViewController: UIViewController {

    

    @IBOutlet weak var imgView: UIImageView!

    @IBOutlet weak var toggleButton: UIButton!

    @IBOutlet weak var speedSlider: UISlider!

    @IBOutlet weak var speedLabel: UILabel!


    override func viewDidLoad() {

        super.viewDidLoad()

        let cuteImages = [UIImage(named:"1.jpg")!,

                          UIImage(named:"2.jpg")!,

                          UIImage(named:"3.jpg")!,

                          UIImage(named:"4.jpg")!,

                          UIImage(named:"5.jpg")!,

                          UIImage(named:"6.jpg")!,

                          UIImage(named:"7.jpg")!,

                          UIImage(named:"8.jpg")!,

                          UIImage(named:"9.jpg")!,

                          UIImage(named:"10.jpg")!,

                          UIImage(named:"11.jpg")!,

                          UIImage(named:"12.jpg")!,

                          UIImage(named:"13.jpg")!,

                          UIImage(named:"14.jpg")!,

                          UIImage(named:"15.jpg")!

                          ]

        

        imgView.animationImages = cuteImages

        imgView.animationDuration = 15

        speedLabel.text = String(format: "%.2f", speedSlider.value)

        

    }

    

    //시작 / 멈춤

    @IBAction func toggleButton(_ sender: Any){        

        if imgView.isAnimating{

            imgView.stopAnimating()

            toggleButton.setTitle("Start", for: UIControlState.normal)

        }else{

            imgView.animationDuration = Double(speedSlider.value)

            imgView.startAnimating()

            toggleButton.setTitle("Stop", for: UIControlState.normal)

        }

    }

    //var i=0

    

    //슬라이더

    @IBAction func speedSliderAction(_ sender:Any){

        imgView.animationDuration = Double(speedSlider.value)

        imgView.startAnimating()

        toggleButton.setTitle("Stop", for: UIControlState.normal)

        speedLabel.text = String(format: "%.2f", speedSlider.value)

        //print("speedSliderAction : \(i)")

        //i += 1

    }





}




간단한 책관리 어플


책 struct

//

//  BookStruct.swift

//  BookManager

//

//  Created by MacBookPro on 2017. 12. 20..

//  Copyright © 2017년 MacBookPro. All rights reserved.


import Foundation


//책 정보를 담을 구조체 선언!

struct Book {

    var name:String

    var genre:String

    var author:String

    

    func bookPrint(){

        print("이름: \(name)")

        print("장르: \(genre)")

        print("저자: \(author)")

        print("----------------------")

    }

    }



메인

//

//  main.swift

//  BookManager

//

//  Created by MacBookPro on 2017. 12. 20..

//  Copyright © 2017년 MacBookPro. All rights reserved.

//


import Foundation


//구조체 객체 만들어서 데이터 넣기

var book1 = Book(name: "o hamlit", genre: "noval", author: "o hanli")

//print(book1.name)

var book2 = Book(name: "Bible", genre: "real", author: "God")

//print(book2)

var book3 = Book(name: "swift4", genre: "it", author: "steven jobs")

//print(book3)


//클래스 인스턴스 만들기

var myBookManger = BookManager()

myBookManger.registerBook(bookObject: book1)

myBookManger.registerBook(bookObject: book2)

myBookManger.registerBook(bookObject: book3)


//모든 책 불러오기

var showAllMyBook = myBookManger.showAllBooks()

print(showAllMyBook)


//책 개수 구하기

var howManyBooks = myBookManger.countBooks()

print(howManyBooks)



//책찾기 - 옵셔널

if let searchBook = myBookManger.searchBook(name: "swift4"){

    print(searchBook)

    

}else{

    print("찾는 책이 없습니다.")

}


//책 삭제

if let deleteBook = myBookManger.removeBook(name: "swift4"){

    

        print(deleteBook)

}else{

        print("삭제할 책이 없습니다.")

}


print("\n")

print("=========갱신 했습니다.=============")

print("\n")

showAllMyBook = myBookManger.showAllBooks()

print(showAllMyBook)


howManyBooks = myBookManger.countBooks()

print(howManyBooks)




북메니져 class

//

//  BookManager.swift

//  BookManager

//

//  Created by MacBookPro on 2017. 12. 20..

//  Copyright © 2017년 MacBookPro. All rights reserved.

//


import Foundation


class BookManager{

    

    var bookList = [Book]()

    

    //등록 - main에서 구조체를 넘겨 받아서 배열에 넣어준다.

    func registerBook(bookObject:Book){

        bookList += [bookObject]

    }

    

    //모든책 보여주기: 배열에 들어 있는 요소 꺼내서 문자열에 할당 후 리턴

    func showAllBooks() -> String {

        var str = ""

        for book in bookList {

            str += "책이름:" + book.name + "\n"

            str += "장르:" + book.genre + "\n"

            str += "저자:" + book.author + "\n"

            str += "=============" + "\n"

        }

        return str

    }

    

    //몇개 인지 확인

    func countBooks() -> Int {

        return bookList.count

    }

    

    //찾기 - main에서 이름 받아서 배열의 요소와 확인 후 리턴

    func searchBook(name: String) ->String?{

        var str = ""

        for book in bookList {

            if name == book.name{

                str += "책이름:" + book.name + "\n"

                str += "장르:" + book.genre + "\n"

                str += "저자:" + book.author + "\n"

                str += "=============" + "\n"

                return str

            }

        }

        return nil

    }

    

    //삭제 -

    func removeBook(name: String) ->String?{

       //배열안의 값과 인덱스 값구하기

        for(index,value) in bookList.enumerated(){

            if value.name == name {

                bookList.remove(at: index)

                return "삭제 되었습니다."

            }

        }

            return nil

    }

}


https://stackoverflow.com/questions/35026553/mysql-error-the-server-quit-without-updating-pid-file

https://serverfault.com/questions/459316/error-2002-mysql-socket-tmp-mysql-sock

https://stackoverflow.com/questions/9420701/mysqli-connect-not-working-on-mamp

http://faq.hostway.co.kr/Linux_DB/8085

https://ssumer.com/qa-%EB%A7%A5%EB%B6%81-mysql-%EA%B5%AC%EB%8F%99%EC%9D%B4-%EC%95%88%EB%90%98%EC%9A%94/

'ios 뽀개기 > ios 응용해보기' 카테고리의 다른 글

이미지 슬라이더 애니메이션  (0) 2017.12.21
간단한 책관리 어플  (0) 2017.12.20
mysql.sock 오류 해결  (0) 2017.12.19
mac에서 php를 통해서 mysql에 삽입하기  (0) 2017.12.19
php에서 myql파일 json으로 가져오기  (0) 2017.12.19
json parser  (0) 2017.12.18


mac에서 php를 통해서 mysql에 삽입하기



//

//  ViewController.swift

//  Relax2

//

//  Created by MacBookPro on 2017. 12. 19..

//  Copyright © 2017년 MacBookPro. All rights reserved.

//


import UIKit


class ViewController: UIViewController {

    @IBOutlet weak var firstName: UITextField!

    

    @IBOutlet weak var lastName: UITextField!

    

    @IBAction func button(_ sender: UIButton) {

        

        

        let request = NSMutableURLRequest(url: NSURL(string: "http://localhost/wow3.php")! as URL)

        request.httpMethod = "POST"

        

        let postString = "a=\(firstName.text!)&b=\(lastName.text!)"

        request.httpBody = postString.data(using: String.Encoding.utf8)

        

        let task = URLSession.shared.dataTask(with: request as URLRequest) {

            data, response, error in

            

            if error != nil {

                print("error=\(String(describing: error))")

                return

            }

            print("response = \(String(describing: response))")

            

            let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)

            

            print("responseString = \(String(describing: responseString))")

        }

        task.resume()

    }

    

    

    override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.

    }


    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }



}




php mysql_connect() 이용!


<?php
$host='localhost';
$user='root';
$password='비번';
$connection = mysql_connect($host,$user,$password);
$name = $_REQUEST['a'];
$age = $_REQUEST['b'];
if(!$connection){
die('Connection Failed');
}
else{
$dbconnect = @mysql_select_db('wow', $connection);
if(!$dbconnect){
die('Could not connect to Database');
}
else{
$query = "INSERT INTO test (name, age)
VALUES ('$name','$age');";
mysql_query("set session character_set_connection=utf8;") ;
mysql_query("set session character_set_result=utf8;");

mysql_query("set session character_set_client=utf8;");

mysql_query($query, $connection) or die(mysql_error());
echo 'Successfully added.';
echo $query;
}
}
?>



php mysqli_connect() 이용!


<?php

$connect = mysqli_connect("localhost", "root", "1111","wow");
mysqli_set_charset($connect, 'utf8');

$name = $_REQUEST['a'];
$age = $_REQUEST['b'];


$query = "INSERT INTO test (name, age)
VALUES ('$name','$age');";

mysqli_query($connect, $query);
echo '성공적으로 입력 되었습니다.';
?>



한글문제는



결과





이번에는 php화면단, 즉 웹에서 mysql 로 삽입하기

php 화면단 소스~!

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<title>crud</title>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="https://code.jquery.com/jquery-3.1.1.min.js"> </script>
<!-- Bootstrap -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" integrity="sha384-PsH8R72JQ3SOdhVi3uxftmaW6Vc51MKb0q5P2rRUpPvrszuE4W1povHYgTpBfshb" crossorigin="anonymous">

<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->

<style>
body{
margin:0;
padding:0;
background-color:#f1f1f1;
}

.box{
width:750px;
padding:20px;
background-color:#fff;
border:1px solid #ccc;
border-radius:5px;
margin-top:100px;


}

</style>
</head>
<body>


<div class="container box">
<h3 align="center">php Ajax Crud</h3>

<br/><br/>
<br/><br/>
<label>성을 입력하세요</label>
<input type="text" name="first_name" id="first_name" class="form-control" />

<br/>
<label>이름을 입력하세요</label>
<input type="text" name="last_name" id="last_name" class="form-control" />

<br/><br/>

<div align="center">
<!-- 클릭했을 때 user id를 알 수 있게 숨겨 둔다.-->
<input type="hidden" name="id" id="user_id" />
<button type="button" name="action" id="action" class="btn btn-warning">추가</button>
</div>

<br/><br/>


<!-- ++++++++++++++++++결과 리스트 출력 테이블++++++++++++++++++++++++ -->
<!-- select.php에서 받아온 데이터를 이곳에다가 붙인다. -->
<div id="result" class="table-responsive">
</div>

</div>

</body>


<script>

$(document).ready(function(){


//[2] 추가 버튼 클릭했을 때 작동되는 함수
$('#action').click(function(){

//각 엘리먼트들의 데이터 값을 받아온다.
var a = $('#first_name').val();
var b = $('#last_name').val();

//성과 이름이 올바르게 입력이 되면
if(a !='' && b != ''){

$.ajax({
//insert page로 위에서 받은 데이터를 넣어준다.
url:"wow4.php",
method:"POST",
data:{a:a,b:b},
success:function(data){

//성공하면 action.php 에서 출력된 데이터가 넘어온다.
alert(data);
}
});

}else
{

alert('빈칸을 입력해 주세요');
}
});

});

</script>

<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js" integrity="sha384-vFJXuSJphROIrBnz7yo7oB41mKfc8JzQZiCq4NCceLEaO4IHwicKwpJf9c9IpFgh" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js" integrity="sha384-alpBpkh1PFOepccYVYDB4do5UnbKysX5WZXm3XxPqe5iKTfUKjNkCk9SaVuEZflJ" crossorigin="anonymous"></script>
</body>
</html>


'ios 뽀개기 > ios 응용해보기' 카테고리의 다른 글

간단한 책관리 어플  (0) 2017.12.20
mysql.sock 오류 해결  (0) 2017.12.19
mac에서 php를 통해서 mysql에 삽입하기  (0) 2017.12.19
php에서 myql파일 json으로 가져오기  (0) 2017.12.19
json parser  (0) 2017.12.18
xml parser  (0) 2017.12.18





<?php

$link=mysqli_connect("localhost","root","비번", "wow" );

if (!$link)
{
echo "MySQL 접속 에러 : ";
echo mysqli_connect_error();
exit();
}

mysqli_set_charset($link,"utf8");


$sql="select * from test";

$result=mysqli_query($link,$sql);

$data = array();

if($result){
while($row=mysqli_fetch_array($result)){
array_push($data,
array('name'=>$row[1],
'age'=>$row[2]
));
}

//echo "<pre>"; print_r($data); echo '</pre>';
header('Content-Type: application/json; charset=utf8');
$json = json_encode($data, JSON_PRETTY_PRINT+JSON_UNESCAPED_UNICODE);
echo $json;
//echo json_encode($data);
}
else{
echo "SQL문 처리중 에러 발생 : ";
echo mysqli_error($link);
}


mysqli_close($link);
?>




import UIKit


struct Info:Decodable {

    let name: String

    let age: String

    

}


class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {

    

    @IBOutlet weak var aa: UITableView!

    

    var datalist = [Info]()

    

    

    override func viewDidLoad() {

        super.viewDidLoad()

        let jsonUrlString = "http://127.0.0.1/wow.php"

        

        guard let jsonURL = URL(string:jsonUrlString) else {

            return

        }

        URLSession.shared.dataTask(with: jsonURL, completionHandler: {(

            data,response,error) -> Void in

            guard let data = data else{return}

            

            do{

                

                //백그라운드 스레드에서 작동하는 코드

                self.datalist = try JSONDecoder().decode([Info].self, from: data)

                print(self.datalist)

                

                //백그라운드에서 메인(뷰)으로 접근할 수 없다.

                //self.mainTableView.reloadData()

                DispatchQueue.main.async(execute: {

                    self.aa.reloadData()

                })

            }catch{

                print("parsing error\(error)")

            }

        }).resume()

    }

    

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        

        return datalist.count

        

    }

    

    

    

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        

        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! MyTableViewCell

        

        let structTemp = datalist[indexPath.row]

        cell.name.text = structTemp.name

        

        cell.age.text = structTemp.age

        

        return cell

        

    }

    

}






//

//  MyTableViewCell.swift

//  Relax

//

//  Created by MacBookPro on 2017. 12. 19..

//  Copyright © 2017년 MacBookPro. All rights reserved.

//


import UIKit


class MyTableViewCell: UITableViewCell {


    @IBOutlet weak var name: UILabel!

    @IBOutlet weak var age: UILabel!

    override func awakeFromNib() {

        super.awakeFromNib()

        // Initialization code

    }


    override func setSelected(_ selected: Bool, animated: Bool) {

        super.setSelected(selected, animated: animated)


        // Configure the view for the selected state

    }


}



// 20171219104719

// http://localhost/wow.php


[

  {

    "name": "kang",

    "age": "12"

  },

  {

    "name": "kim",

    "age": "40"

  },

  {

    "name": "hong",

    "age": "80"

  },

  {

    "name": "sung",

    "age": "30"

  }

]





php에서 화면단으로 가져오기

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<title>crud</title>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="https://code.jquery.com/jquery-3.1.1.min.js"> </script>
<!-- Bootstrap -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" integrity="sha384-PsH8R72JQ3SOdhVi3uxftmaW6Vc51MKb0q5P2rRUpPvrszuE4W1povHYgTpBfshb" crossorigin="anonymous">

<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->

<style>
body{
margin:0;
padding:0;
background-color:#f1f1f1;
}

.box{
width:750px;
padding:20px;
background-color:#fff;
border:1px solid #ccc;
border-radius:5px;
margin-top:100px;


}

</style>
</head>
<body>


<div class="container box">
<h3 align="center">php Ajax Crud</h3>

<br/><br/>
<br/><br/>
<label>성을 입력하세요</label>
<input type="text" name="first_name" id="first_name" class="form-control" />

<br/>
<label>이름을 입력하세요</label>
<input type="text" name="last_name" id="last_name" class="form-control" />

<br/><br/>

<div align="center">
<!-- 클릭했을 때 user id를 알 수 있게 숨겨 둔다.-->
<input type="hidden" name="id" id="user_id" />
<button type="button" name="action" id="action" class="btn btn-warning">추가</button>
</div>

<br/><br/>


<!-- ++++++++++++++++++결과 리스트 출력 테이블++++++++++++++++++++++++ -->
<!-- select.php에서 받아온 데이터를 이곳에다가 붙인다. -->
<div id="result" class="table-responsive">
</div>

</div>

</body>


<script>

$(document).ready(function(){
fetchUser();

function fetchUser()
{
//[1] users 리스트를 select.php 에서 받아온다.
$.ajax({
url:"wow.php",
method:"POST",
dataType:"json",
success:function(data){

//$('#first_name').val('');
//$('#last_name').val('');
//$('#action').text("추가");
//$('#result').html(data);

//alert(data[0].name)
//var jsonstr = JSON.stringify(data) //객체를 문자열로
//var contact = JSON.parse(jsonstr); //문자열을 객체로
//alert(typeof data); //object
//alert(typeof(JSON.stringify(data)));//string
var str = "";
$.each(data,function(idx, json){
str+= json.name+ ":" + json.age+"</br>"
})
document.write(str)
},
error: function(request, status, error){
alert(request);
alert(status);
alert(error);
}
})
}

//[2] 추가 버튼 클릭했을 때 작동되는 함수
$('#action').click(function(){

//각 엘리먼트들의 데이터 값을 받아온다.
var a = $('#first_name').val();
var b = $('#last_name').val();

//성과 이름이 올바르게 입력이 되면
if(a !='' && b != ''){

$.ajax({
//insert page로 위에서 받은 데이터를 넣어준다.
url:"wow4.php",
method:"POST",
data:{a:a,b:b},
success:function(data){

//성공하면 action.php 에서 출력된 데이터가 넘어온다.
alert(data);
}
});

}else
{

alert('빈칸을 입력해 주세요');
}
});

});

</script>

<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js" integrity="sha384-vFJXuSJphROIrBnz7yo7oB41mKfc8JzQZiCq4NCceLEaO4IHwicKwpJf9c9IpFgh" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js" integrity="sha384-alpBpkh1PFOepccYVYDB4do5UnbKysX5WZXm3XxPqe5iKTfUKjNkCk9SaVuEZflJ" crossorigin="anonymous"></script>
</body>
</html>




'ios 뽀개기 > ios 응용해보기' 카테고리의 다른 글

mysql.sock 오류 해결  (0) 2017.12.19
mac에서 php를 통해서 mysql에 삽입하기  (0) 2017.12.19
php에서 myql파일 json으로 가져오기  (0) 2017.12.19
json parser  (0) 2017.12.18
xml parser  (0) 2017.12.18
페이지 뷰  (0) 2017.12.15

json parser


//찾아볼것

//1. 구조체

//2. json 파서

//3. de catch

//4 JSONDecoder

//5. DispatchQueue


import UIKit

//구조체 만들기


struct Weather:Decodable {

    let country: String

    let weather: String

    let temperature:String

}


class ViewController: UIViewController,UITableViewDataSource{


    

    var datalist = [Weather]()

    

    @IBOutlet weak var mainTableView: UITableView!

    override func viewDidLoad() {

        super.viewDidLoad()

        

        let jsonUrlString = "https://raw.githubusercontent.com/ChoiJinYoung/iphonewithswift2/master/swift4weather.json"

        

        guard let jsonURL = URL(string:jsonUrlString) else {

            return

        }

        

        //

        URLSession.shared.dataTask(with: jsonURL, completionHandler: {(

            data,response,error) -> Void in

            guard let data = data else{return}

            

            do{

                //백그라운드 스레드에서 작동하는 코드

                    self.datalist = try JSONDecoder().decode([Weather].self, from: data)

                    print(self.datalist)

                

                    //백그라운드에서 메인(뷰)으로 접근할 수 없다.

                    //self.mainTableView.reloadData()

                DispatchQueue.main.async(execute: {

                    self.mainTableView.reloadData()

                })

            }catch{

                print("parsing error\(error)")

            }

            

        }).resume()

        

    }

   


   


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return datalist.count

    }


    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! WeatherViewCell

    

        let structTemp = datalist[indexPath.row]

        

        cell.contryLable.text = structTemp.country

        let weatherStr = structTemp.weather

        

        

        cell.weatherLable.text = weatherStr

        cell.temLable.text = structTemp.temperature

        

        if weatherStr == "맑음" {

            cell.imgView.image = UIImage(named:"sunny.png")

        }else if weatherStr == "비" {

            cell.imgView.image = UIImage(named:"rainy.png")

        }else if weatherStr == "흐림" {

            cell.imgView.image = UIImage(named:"cloudy.png")

        }else if weatherStr == "눈" {

            cell.imgView.image = UIImage(named:"snow.png")

        }else {

            cell.imgView.image = UIImage(named:"blizzard.png")

        }

        

        return cell

    }

}







//

//  WeatherViewCell.swift

//  XML

//

//  Created by MacBookPro on 2017. 12. 18..

//  Copyright © 2017년 MacBookPro. All rights reserved.

//


import UIKit


class WeatherViewCell: UITableViewCell {

    @IBOutlet weak var contryLable: UILabel!

    @IBOutlet weak var weatherLable: UILabel!

    @IBOutlet weak var temLable: UILabel!

    @IBOutlet weak var imgView: UIImageView!

    

    override func awakeFromNib() {

        super.awakeFromNib()

        // Initialization code

    }


    override func setSelected(_ selected: Bool, animated: Bool) {

        super.setSelected(selected, animated: animated)


        // Configure the view for the selected state

    }


}







[
    {
    "country": "한국",
    "weather": "비",
    "temperature": "20"
    },
    {
    "country": "일본",
    "weather": "맑음",
    "temperature": "19"
    },
    {
    "country": "중국",
    "weather": "눈",
    "temperature": "14"
    },
    {
    "country": "스페인",
    "weather": "우박",
    "temperature": "13"
    },
    {
    "country": "미국",
    "weather": "흐림",
    "temperature": "2"
    },
    {
    "country": "영국",
    "weather": "비",
    "temperature": "10"
    },
    {
    "country": "프랑스",
    "weather": "흐림",
    "temperature": "15"
    },
    {
    "country": "브라질",
    "weather": "흐림",
    "temperature": "35"
    },
    {
    "country": "스위스",
    "weather": "맑음",
    "temperature": "13"
    },
    {
    "country": "덴마크",
    "weather": "비",
    "temperature": "2"
    },
    {
    "country": "스웨덴",
    "weather": "눈",
    "temperature": "0"
    },
    {
    "country": "네덜란드",
    "weather": "비",
    "temperature": "12"
    },
    {
    "country": "크로아티아",
    "weather": "맑음",
    "temperature": "30"
    },
    {
    "country": "필리핀",
    "weather": "맑음",
    "temperature": "28"
    },
    {
    "country": "독일",
    "weather": "눈",
    "temperature": "3"
    },
    {
    "country": "헝가리",
    "weather": "비",
    "temperature": "13"
    },
    {
    "country": "벨기에",
    "weather": "흐림",
    "temperature": "8"
    },
    {
    "country": "핀란드",
    "weather": "우박",
    "temperature": "15"
    },
    {
    "country": "이탈리아",
    "weather": "맑음",
    "temperature": "23"
    }
]


'ios 뽀개기 > ios 응용해보기' 카테고리의 다른 글

mac에서 php를 통해서 mysql에 삽입하기  (0) 2017.12.19
php에서 myql파일 json으로 가져오기  (0) 2017.12.19
json parser  (0) 2017.12.18
xml parser  (0) 2017.12.18
페이지 뷰  (0) 2017.12.15
탭뷰  (0) 2017.12.15



//찾아볼것

//1. 배열, 딕셔너리

//2. xml 파서

//3. guard


import UIKit


class ViewController: UIViewController,UITableViewDataSource,XMLParserDelegate {

    //배열에 딕셔너리를 넣었다.

    var datalist = [[String:String]]()

    var detaildata = [String:String]()

    var elementTemp:String = ""

    var blank = true

    override func viewDidLoad() {

        super.viewDidLoad()

       

        let urlString = "https://raw.githubusercontent.com/ChoiJinYoung/iphonewithswift2/master/weather.xml"

        

        //print(URL(string: urlString)!)

        

        guard let baseURL = URL(string: urlString) else {

            print("url error")

            return

        }

        

        guard let parser = XMLParser(contentsOf: baseURL) else {

            print("cant read data")

            return

        }

        

        parser.delegate = self

        if !parser.parse(){

            print("parser failure")

        }

    }

    /*

     

     //로컬부터 로컬까지 하나의 딕셔너리에 들어간다.

    didstartelement:weatherinfo

    foundCharacters:

    

    didstartelement:local

    foundCharacters:

    

    didstartelement:country

    foundCharacters:한국

     

    didEndElement:country

    foundCharacters:

    

    didstartelement:weather

    foundCharacters:비

    didEndElement:weather

    foundCharacters:

    

    didstartelement:temperature

    foundCharacters:20

    didEndElement:temperature

    foundCharacters:

    

    didEndElement:local

    foundCharacters:

*/


    //parser가 시작 태그를 만나면 호출된다.

    func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {

        //print("didstartelement:"+elementName)  //local

        

        elementTemp = elementName

        blank = true

        print("start:\(elementName)")

    }

    

    //현재 태그에 담겨있는 string값이 전달된다.

    func parser(_ parser: XMLParser, foundCharacters string: String) {

        //print("foundCharacters:"+string)

        

        if blank == true && elementTemp != "local" && elementTemp != "weatherinfo"{

            detaildata[elementTemp] = string.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)

        }

        

    }

    

    //parser가 닫는 태그를 만나면 호출된다.

    func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {

        //print("didEndElement:"+elementName)

        

        if elementName == "local"{

            datalist += [detaildata]

        }

        blank = false

        print("end:\(elementName)")

    }


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return datalist.count

    }


    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! WeatherViewCell

    

        var dicTemp = datalist[indexPath.row]

        

        cell.contryLable.text = dicTemp["country"]

        let weatherStr = dicTemp["weather"]

        

        

        cell.weatherLable.text = weatherStr

        cell.temLable.text = dicTemp["temperatur"]

        

        if weatherStr == "맑음" {

            cell.imgView.image = UIImage(named:"sunny.png")

        }else if weatherStr == "비" {

            cell.imgView.image = UIImage(named:"rainy.png")

        }else if weatherStr == "흐림" {

            cell.imgView.image = UIImage(named:"cloudy.png")

        }else if weatherStr == "눈" {

            cell.imgView.image = UIImage(named:"snow.png")

        }else {

            cell.imgView.image = UIImage(named:"blizzard.png")

        }

        

        return cell

    }

}






////  WeatherViewCell.swift

//

//  WeatherViewCell.swift

//  XML

//

//  Created by MacBookPro on 2017. 12. 18..

//  Copyright © 2017년 MacBookPro. All rights reserved.

//


import UIKit


class WeatherViewCell: UITableViewCell {

    @IBOutlet weak var contryLable: UILabel!

    @IBOutlet weak var weatherLable: UILabel!

    @IBOutlet weak var temLable: UILabel!

    @IBOutlet weak var imgView: UIImageView!

    

    override func awakeFromNib() {

        super.awakeFromNib()

        // Initialization code

    }


    override func setSelected(_ selected: Bool, animated: Bool) {

        super.setSelected(selected, animated: animated)


        // Configure the view for the selected state

    }


}





/*


//로컬부터 로컬까지 하나의 딕셔너리에 들어간다.

didstartelement:weatherinfo

foundCharacters:


didstartelement:local

foundCharacters:


didstartelement:country

foundCharacters:한국


didEndElement:country

foundCharacters:


didstartelement:weather

foundCharacters:비

didEndElement:weather

foundCharacters:


didstartelement:temperature

foundCharacters:20

didEndElement:temperature

foundCharacters:


didEndElement:local

foundCharacters:

*/

'ios 뽀개기 > ios 응용해보기' 카테고리의 다른 글

php에서 myql파일 json으로 가져오기  (0) 2017.12.19
json parser  (0) 2017.12.18
xml parser  (0) 2017.12.18
페이지 뷰  (0) 2017.12.15
탭뷰  (0) 2017.12.15
맵뷰 map view  (0) 2017.12.14

페이지 뷰


//

//  ViewController.swift

//  PageView2

//

//  Created by MacBookPro on 2017. 12. 14..

//  Copyright © 2017년 MacBookPro. All rights reserved.

//


import UIKit


class ViewController: UIViewController {

    @IBOutlet weak var imageView: UIImageView!

    @IBOutlet weak var pageController: UIPageControl!

    

    var images = ["aaa.jpg","bbb.jpg","ccc.jpg","ddd.jpg"]

    

    

    

    override func viewDidLoad() {

        super.viewDidLoad()

        

        pageController.numberOfPages = images.count

        pageController.currentPage = 0

        pageController.pageIndicatorTintColor = UIColor.green

        pageController.currentPageIndicatorTintColor = UIColor.red

        imageView.image = UIImage(named:images[0])

        

    }


    @IBAction func pageChanged(_ sender: UIPageControl) {

        

        imageView.image = UIImage(named: images[pageController.currentPage])

        

    }

}


'ios 뽀개기 > ios 응용해보기' 카테고리의 다른 글

json parser  (0) 2017.12.18
xml parser  (0) 2017.12.18
페이지 뷰  (0) 2017.12.15
탭뷰  (0) 2017.12.15
맵뷰 map view  (0) 2017.12.14
웹뷰 webview  (0) 2017.12.14

+ Recent posts

티스토리 툴바