R.J.アキーノは:ちょうど始めましょう。 だから、これはクイズ1です。 ここではいくつかの高レベルの情報です。 クイズの案内ページはこの時点である URLは、そのものの、もはやCS50.net、 まだ動作します。 それはCS50.harvard.edu/quizzes/2013/1です。 それはあなたに言って、ページについて大きいです どこで、いつ、すなわち次水曜日 部屋の束中。 そして来週の水曜日、私 今から2日間を意味する。 このすべての情報があります。 しかし、それは累積されます。 年前半からので、すべて 今年は、クイズに潜在的にある あなたは本当に先進行うことはできませんので、 もし条件なしのC言語でのものと ループなどのため。 しかし、に重点があるでしょう クイズ0以来カバー材料、 構造体とファイルで始まる I / Oそれは、典型的には、より多くのだ クイズ0よりも厳しい。 平均スコアは、一般的に低い。 一生懸命勉強。 あなたが勉強している間に、必ず使用してください あなたの質問を投稿するCS50/discuss そして他の人の質問をお読みください。 ですから、ご質問がない場合、 ログインし読む 友達の質問。 おそらく彼らは良い質問だ。 と実践クイズを取る。 私達はのためのクイズを与えてきました 今7〜8年。 彼らはすべてのオンラインだ。 今後の問題は似ています 古い質問へ。 それは我々がそれらを作る方法を説明します。 クイズはまだ存在しません。 私達のどれもそれを見ていない。 しかし、それは次のようになります 前回のクイズ。 このレビューセッションでは、これはありません トピックの完全なリスト。 あなただけのこれに出席した後、することはできません クイズに完全に準備ができている。 それ以外の場合は、ではないでしょう クイズのそれくらい。 そして、これは必然的ではありません 何かについて知る必要があるすべて 特定のトピック。 それは、物事にさらされることを意図しているの 我々はカバーしてきた、私たちを思い出させる 覆い、方法で、 その我々はそれをカバーした。 しかし、あなたはさらに行くとする必要があります あなたは二重チェックするために勉強したとき、より深い あなたは、任意のについてのすべてを知っていることを あなたが記入したトピックとその たすべてのコーナー 講義でカバー。 クイズノートには、に行くことを教えてくれ スクノートは、講義ビデオを見る。 それはあなたがしたようにする良い方法です すべての拠点をカバーした。 私はこれらを作ったときので、入門 スライドは、私が見つけた場所入れてみました 情報。 例えばそのようにファイルのI / Oを、週7、 月曜日の講演、および投稿 第6節と問題設定されているすべてのき ファイルI / Oに関する情報私はやった すべてのトピックについては、この。 だから、それらのタイトルスライド月 あなたに役立つこと。 そこでここでは、ファイルI / Oを持っているで、覚えている 問題は、5を設定し、我々は、fcloseを、関数fopenを使用 fwriteの、関数fread、およびfseek関数。 30ish JPEGを回収した サイズ変更を台無しにした ビットマップは、あなたはかなり精通している必要があります これらの機能を持つ そしてどのように動作する。 あなたはもはやご存知ない場合は、 確かにそれらを確認してください。 そして、あなたは何を理解していることを確認 異なる引数は、 それらが使用しているとき。 しかし、一般的なファイル関連のバグ あなたは約求められることがあります - さて、あなたはどうかを確認するのを忘れてしまった場合 あなたがに行く前に、fopenを実際に働いていた ファイルを変更します。 それは悪いかもしれません。 あなたは、ファイルをfcloseはし忘れてしまった場合 あなたはfopenedたので、それは次のようにだ メモリリーク。 これはかなり悪いです。 そして、あなたがしたかどうかをチェックし忘れる あなたの前にファイルの終わりに達した それへの書き込みを開始。 あなたが言うのであれば、ちょっと、私は、私 ファイルの終わり。 私に5バイト以上を与える。 まあ、それはおそらく、するつもりはない あなたが期待どおりにうまく。 それは、ファイルI / Oのために実際にそれだ 我々はそれをあまりなかったので 問題が設定されている。 だから、何が起こっていたか理解している場合 問題セット5で、bitmatsを覚えている およびJPEGファイルは、あなたはおそらく、すべてのだ I / Oファイルに設定それは少しだ場合 ファジー、間違いなくその問題を検討 設定および関連材料。 構造体は、上にあっ​​たトピックだった クイズ0とクイズ1の間の線。 かなりクイズ0のカットをしなかった。 そこで、彼らは間違いなく上だろう クイズ1、週7日月曜日。 構造体とは何ですか? ここでは、構造体を示している。 これは、新しいタイプのようなものだ。 これは、コンテナのようなものだ 複数のフィールドのため。 このケースでは、構造体を宣言した 2つのフィールドを持つ学生 - 我々は呼んでいる列の名前と 我々は年齢を呼んでいるint型。 だから私は、学生や私の周りを通過するとき 学生を変更、私のことができるようになります 自分の名前と自分の年齢にアクセスします。 そのためのいくつかのコードを見てみましょう。 ここでは、私が宣言したことを確認 学生の、同じよう 私はすべての変数を宣言 - int型のX、int型のY、エトセトラ。 ここで学生のSです。 彼はフィールドに何も始まります。 それでは、それらを設定してみましょう。 あなたはドット構造体のフィールドを設定します。 だから私はここでそのs.name = RJを言った。 そしてs.age = 21。 また、フィールドを更新することができます あなたが更新していたものと同じ方法で 変数の値。 だから私は、RJとから私の名前を変更したい R.J.にピリオドんスペルト 正しい方法。 それは= RJ、同じs.nameれます 我々はもともとそれを言ったように。 そして、あなたはそれらにアクセスすることができます。 だから我々はそれらを設定しました。 我々はそれらを更新しました。 また、それらにアクセスすることができます 非常に同じように。 だからここに、私はプリントアウトしています R.J. 21歳。 そして、私はこれらの値にアクセスしています s.nameとs.ageと。 だから、構造体へのアクセスだ ドット表記で。 うん、質問? 観客:上の理由がある あなたは入れていない前のスライド typedefのようなトップラインでの学生、 その後、構造体​​の学生と 最後に学生? R.J.アキノ:そこで質問にあった このスライドは、一般的に見てきました その後、構造体​​のノードをtypedefをし、 構造体のフィールドと その後、単語ノード。 そして、どのようにtypedefを、私は言っていないここに来て その後、構造体​​の学生と 構造体のフィールドとし、学生? その理由は、私はする必要がないことです 構造体の内側にアクセスする。 だから、名前なしでそれを残してもOKです。 私は同じようにしておくことができ 匿名の構造体。 我々はリンクリストのためにそれを行うと理由 内部のあなたが必要とするためのものです 構造ノードのスターを参照する。 だから、構造体は名前を持っている必要があり、 だから、後でそれにアクセスすることができます。 それはマイナーなディテールです。 しかし、あなたは、通常のtypedef構造が表示されます 中括弧は、必要がない場合は、 いくつかの名前の構造体の名前と型定義 言うなれば、中括弧が続く 名前が必要です。 だから、それは良い質問ですね。 その点で、私たちは変更する傾向がある 構造体とすることによって構造体を周囲に渡す 値ではなく、参照します。 だから我々はちょうどへのポインタを周りに渡すよ 構造体の代わりにものを渡す 自らを構造体。 だから、非常に頻繁にあることになるだろう 使用して、この場合には、学生の*または 構造体ノード*またはノード*代わりに 学生またはノードが不足しています。 だからここに、私が言った、[OK]を、変数ptr Sのアドレスであることを行っている。 それがポインタになるだろう 学生R.J.へ だから我々は、これらのフィールドで取得することができます 我々は何かを得ると同じ。 まず、IDは、ポインタを参照する 構造体を取得します。 それはそれから* PTRだし ドット、その後時代。 だから、フィールドにアクセスするには、と私は更新しました それは今22に、みましょう、なぜなら それは私の誕生日だった、と言う。 ショートカット構文があります ここで、矢印を使用して。 そうPTR矢印年齢はちょうどです * ptr.ageと同じ。 今、それはあなたが持っているだろう何か 暗記で覚え。 あなたは、それをpset6に多く使用される スペルチェックPSET。 しかし、これは何が起こっているのか、実際に ボンネットの下に。 これは、ポインタを逆参照だ し、それをアクセスする。 質問? 観客:[聞こえない]。 R.J.アキノ:では、なぜ我々が使用している 代わりに、構造体としてのポインタ 自らを構造体? あなたが渡している場合は、その理由は次のようになります 関数への構造体、おそらく わずか4かそこらの周りに渡したい ポインタを表すバイト、など 潜在的に30とは対照的に、または 構造体である40バイト。 ので、関数に何かを渡す 簡単ですときの事 要するに小さい。 質問? 読者:あなたはこれを言及しているかもしれない 初めに、しかしそこにある [聞こえない]上の他のスライドアップ? R.J.アキノ:これらのスライドにはなります レビューセッションの後まで。 私たちは、ウェブサイト上でそれらを投稿します。 というように移動し、少し先に進む より速く、我々は、データについて話をするつもりだ 構造。 たくさんあり​​ます。 我々はそれらの束をカバーした。 ここでは、理解する必要がありますものです データ構造に関する。 あなたは本当に高いで理解しておく必要があります 各構造がどのようなレベル。 あなたに英語で説明することができます CS50を取っていない友人か 我々は我々のデータを整理していて、なぜ我々は思います このように何かを使用している? それは事一つだ。 事2は、理解して 実装。 したがって、これらの事を使用する方法を理解する Cで我々はこの上で行くことがあります。 してからの事3を知っていることだろう 実行時間との限界 あなたが使用している様々な構造。 あなたが使用することになり、なぜそのように理解して テーブル代わ​​りの配列をハッシュ。 どれだけ速く、平均して、理解して ハッシュテーブルにアクセスすることである。 操作は高速でオンになっているかを理解 リンクリストが、アレイ上に遅く、 その逆も。 だから、それを理解するには、する必要があります ただ知っているビッグO記法を理解する これらについて話をする方法 物事の種類。 そして、我々はそれについて話をしましょう​​。 だから、まず最初に、リストのリンク。 ここで、高レベルのピクチャである リンクリストの。 私たちは、クラスでこれを示す。 我々は、一般的に10人を持っている ステージに立って。 しかし、我々は、各ノードのシリーズを持っている ノードは、いくつかの値とポインタを持っている その次の値に設定します。 だから、次の1ノードから取得する ちょうど私に次のノードを与える、と言う。 あなたは、そのノードを持っている。 私に次のノードを与える。 あなたは、そのノードを持っている。 というように私に次のノードを与え、 どのノードの左はありませんまで。 そうについて話し続ける ハイレベルで。 それは、物事を挿入するのは非常に簡単です リンクされたリストに変換する。 あなたは順序を気にしない場合は、 あなたはそれをドロップすることができます 初めに右。 それは、一定の時間です。 しかし、それは価値を見つけるのは難しい。 あなたが求めるしようとしている場合、 私のリストにある7ですか? あなたが通過する必要があります すべての単一の値。 これは7ですか? これは7ですか? これは7ですか? これは7ですか? 何度も何度も。 そして、それはO(N)です。 だから、クイズの勉強するとき、 配列とこれを比較します。 それは大丈夫でしょうか? ライトが薄暗い行きました。 [OK]をクリックします。 するとリンクされたリストが良いですか? ときは、配列が良いですか? それでは、いくつかのコードを見てみましょう。 ここに潜在的なノードである。 それが構造体です。 これは、整数nを有している 私たちの値になります。 そして、それは、次の構造体ノード*を有している 次のノードへの私たちのポインタである。 だからここに、我々は何が起こっていることがわかります 私たちのノードのintを入れたのは。 しかし、これは、charのリンク​​リストならば 星や山車のリンクリスト、我々 完全にあまりにもそれを行うことができます。 pset6に覚えて、あなたはおそらく持っていた リンクされた文字の星のリストか、単に 静的char配列。 の操作でここに見てみましょう。 だから我々は、新たに挿入する 当社の連結リスト内にN。 私たちは、あるヘッドポインタでスタート 持って、このノードへのポインタ nの値と、そのポインタの次の このノードへのポイントの値です。 Nとヌルの次の、理由 それが最後のノードです。 だから、時間の都合で、私は意志 画面上のすべてのコードを置く。 そして我々はそれを歩くよ 一度に数行。 だからここにコードを示します。 私はそれが読みやすい願っています。 私たちが最初にすることです 私たちは、新しいノードをのmalloc。 だから、新しいノードを指すポインタを作ること 全く何も設定されていない まだそれは最大。 私たちは、ことを確認してください 新しいノードがNULLではありません。 そうでなければ、私たちはあきらめなければならない。 だから今、私たち、ことを確認した ノードの値を設定します。 だから我々は我々のNフィールドに新しいNを置く。 そして、我々はを指すように次のポインタを設定する オリジナルヘッドカバー、我々はできるように、 今、これを挿入した 私たちのリストにノード。 最後に、グローバル·ヘッド·ポイントを持っている 私たちの新しいノードに、その結​​果、我々はした場合 頭から始まり、我々はこの時になります 新しい最初のノードの代わりに、 古い最初のノード。 そしてこの関数が終了したときに、 可変新しいノードは、もはや存在しない それは関数に対してローカルであったため。 だから、これは世界の状態である。 私たちの新しいのグローバルヘッドのポイント 私たちを指すの最初のノード、 指して、元の最初のノード、 その後ノードへ。 それは、挿入した。 私は比較的でし願っ 従うことは簡単。 疑問がある場合、絵を描く。 だから私は、話をしていることを発見 リンクされたリストと見 コー​​ドは非常に有用ではありません。 リンクの絵を見ているのに対し、 リストには、ああ、私は考えることができますので、 私はここで、このノードを持っている。 しかし、私はそのポインタを更新した場合、 それは切断してしまう。 そして、私は忘れてしまった場合、 ノードが行く。 そしてコードは終了します。 そして、あなたは複数のノードを持っている それが切断されています。 そして、あなたはで終わらない 希望リスト。 ですから、絵を描き、それを行う場合は、 ステップバイステップで、うまくいけば、あなたが表示されます の観点から物事の正しい順序 確認するためのポインタを更新する リストには、一緒に来ている。 インサートは比較的簡単です。 より複雑な1は次のようになります。 ソートされたリストへの挿入。 より複雑な機能が削除され などのリストを見て、見つける 何かがあるかどうかを確認。 おそらく、あなたはpset6でこれをやったときに、 あなたのハッシュテーブルに乗ってあなたが言った、 さて、単語のリンゴです 私のリンクリスト内の? だから、あなたはすでにこれを行っている可能性があります。 しかし、間違いなく、あなたの記憶をリフレッシュ 、検索を再実装しようとすると、 リンクされたリストについては、削除し再実装。 楽しいサイドノートもあり、二重リンク あなたが持っているリスト、 順方向を指すポインタと あなたがに行くことができるように、後方 次のノードと前のノードへ。 昨年のについての質問がありました その型のクイズ、話す 約二重リンクリスト。 今、それはあなたがしている構造体の なぜなら、ほとんどの、比較的馴染みの あなたのことを、おそらくpset6にそれらを使用していました。 ここで少しあまりなじみの1です。 注意点として、私はクイズ1だと思います 主に、クイズ0よりも硬いため、 あなたがやっているものに、 同じくらい行っていない。 クイズ0のために、その別の言い方をすると、 あなたはCの多くを書かれていた、我々 C.についてお聞か クイズ1のために、我々はについてお聞きするつもりだ PHPとJavaScriptの、どのあなた をできるだけ多く書いていない。 我々は、Cコードについてお聞きするつもりだ あなたは、の多くを書いていません この高度なC言語のもの。 だから間違いなく、スタッフたちの練習 講演での話があること 必ずしもしませんでした 問題に設定してください。 そういえば、あなたは書いていません 問題のあるセットでスタック。 しかし、それは講義であった。 ここでの高レベルの画像です 我々は毎年示すことがスタックします。 それは中のトレーのスタックだ メイザーの食堂。 高レベルでは、スタックが、最後である 最初にデータ構造である。 それはあなたが行っていることを意味 で物事を置くために - 1、3、7、12、14、マイナス0。 私が持っていることができなかった一つのこと 言った - 3、0負。 あなたはこれらすべてのことをインチ置く そして、あなたは入れ最後の1は、最初です 出てくるだろう1。 だから、2つの操作を持っている - PUSHおよびPOP。 私がいたという点で置くことのすべて このようなジェスチャーは、プッシュです。 そして私はつかむために到達したとき 何かまたはつかむために上に到達 何かが、それはポップだ。 だから我々はスタックを実装するつもりだ。 そして、我々は講義でそれらを示した アレイを使用して。 しかし、あなたはそれを行うことができます リンクリストを使用して。 スタックは、概念的なデータであり、 構造、好きではない 実装固有の1。 それでは、それは次のようになります? それはちょっとのようになります。 あなたは、整数サイズがあるんだけど。 そして、あなたはその値の配列があるんだけど それだから、我々は、トレイを呼んでいる 写真は、何のために作成したか 問い合わせ - トレイをint型 - した後、いくつかの最大容量。 それでは、次のようになりプッシュするだろうか? まあ、我々はスタックSを持っている場合、次にpush Sに何か、私たちはなるだろう Sのサイズ。 そして、それは次のだろう 私たちの配列のオープンスポット。 だから我々は我々のスタック内の3つのことを持っている場合、 その後、トレイ3が次だろう オープンスポット、なぜなら0、1、および 2はすでに満たされている。 だから我々はに価値を置く s.trays [s.size]、第三のスポット。 そして、我々は、言ってs.sizeをインクリメント ねえ、私たちは前に3つのことを持っていた。 今、我々は4を持っている。 あなたがプッシュするので、次回、あなたがしている 4に何かを置くつもり。 それとも、ポップアップ次回、あなたが行っている 3の代わりに、4または何を見ている。 そして、我々にtrueを返します ねえ、言って、我々は成功しました。 これは働いていた。 経験則として、の機能があれば trueを返すことになってか 偽常にあなたが、trueを返す 何か間違ったことを行っている。 したがって、この仕事はしますか? まあ、それは1のために正常に動作し、 2、3、4、5。 しかし、ここで私は自分の容量に達するとしましょう​​。 私は、あるため、問題に遭遇してきた 大きさは容量と同じであれば、私は今 今に何かを入れしようとしている 私はスペースがない配列。 これを修正するので、短いチェック。 もしs.size ==容量、falseを返します。 そうでなければ、行くと、私たちがやったん。 だから我々は他に何を求めることができる スタックのでしょうか? あなたは他に何を勉強すべき? あなたは他に何を練習してください? さて、ポップを実装する。 我々はすでにプッシュしました。 私はそれを修正します。 非配列の実装、どこ あなたはおそらく、リンクされたリストを使用しています。 非整数の実装。 ここではint型をした。 しかし、それはフロートされている可能性が。 私は、文字列だったかもしれない。 それは、char星だったかもしれない。 種類のための過去のクイズを見てください 我々は、スタックについて尋ねてきた質問。 私は、私たちの周りのスタックをカバーしていることを言うよ 我々はそれらを紹介してきたのと同じ 経年。 だから、クイズの質問はすべき 良い兆候であること。 さらに高速今後は、キューに入れます。 彼らは、スタックのようにしている。 しかし、彼らは最初に出て、最初のだ。 あなたが英国であれば、単語キュー おそらくあなたに多くの意味をした。 そうでない場合は、次のものがあります ラインとしてそれを聞いた。 彼らはラインのように働く アップルストアで。 3:00に現れた最初の人物 朝一である 彼のiPadを購入する人。 だから我々は2つ​​の操作を持っている - エンキューおよびデキュー。 エンキューは、ラインの誰かを置きます。 デキューは、最初に引っ張る オフラインの人。 ここでも、実装することができます 配列を持つこの。 だから、構造体、我々は何ですか 講演で示した? これは1だった。 もう一度、数字。 繰り返しますが、大きさや、この新しいもののフロント。 なぜ、フロントと呼ばれるものがあるのでしょうか? それは、次のインデックスです デキューする要素。 それはちょうど内部を追跡することだ 表示する最初の男、その結果、私たち 我々がする必要があるときにそれを引き出すことができる。 確かに講義ノートを見てみてください エンキューおよびデキューを実装する クイズの勉強するとき。 考えるべき重要な事柄。 折り返した場合、フロントプラス サイズは、容量よりも大きいとしてしまう。 もう一度、あなたの構造が一杯になった場合には、 あなたが問題を抱えているとしている。 あなたが前に見てきたハッシュテーブル。 あなたのほとんどはおそらく実装 これらpset6上。 それは、O(1)を目指して、構造体の 一定時間挿入およびO(1) 一定の時間ルックアップ。 CS50では、としてこれを実装 リンクされたリストの配列。 ハッシュテーブルのキーコンポーネント ハッシュ関数である。 だから、それはあなたの入力を変換し、のは言わせて、 番号辞書の単語、、 そのGoogleのインデックスになるだろう。 そして、我々は、そのインデックスを使用します 私たちの配列に。 だからここにかわいい絵です study.50.netから。 我々は、すべての単語にを投げる 当社のハッシュ関数。 ハッシュ関数は、教えてくれる これらの単語をどこに置くか。 これは、土地内のすべての大きい場合 スロットごとに1つだけの単語があります。 しかし、あなたはそこに、pset6から覚えている スロットよりも多くの言葉がある。 ときに何が起こる 衝突が発生した? 代わりに、1つの値を記憶する、 それでは言わせて、ハッシュテーブル3に、 リンクされたリストを格納します。 だから代わりに、マスクメロンを持っていることの ここでは、リンクされたリストを持っているでしょう、 最初のノードは、マスクメロンです。 次のノードは、猫です。 そして第3のノードはせの衝突である すべての言葉が起動しているため、と言う Cと だから、あなたのほとんどはpset6のためにこれをやった。 あなたはpset6にハッシュテーブルをしなかった場合 あなたのような何かをしようとしました トライは、間違いなく、ハッシュ·テーブルを確認してください。 あなたは間違いなく、pset6でそれをやった場合 ハッシュテーブルを確認します。 そして、あなたはpset6でそれを行なったし、それがなかった場合 ピタッとしワークアウト 間違いなく、それを多くのトラブルがあった ハッシュテーブルを確認します。 だから、授業は本当に間違いなく ハッシュテーブルを確認します。 しようとしたあなたの広大な少数派 うちpset6にしようとします。 高レベルの画像。 それは次のように、それぞれの ここで、各ノードは、子供たちのセットを持っています 子供が文字に対応する。 そして、すべてのノードは、述べています ねえ、私は言葉です。 だから、この場合には、単語マクスウェル、 あなたがするAにMに従うならば その後、X-W-E-L-Lとはそれに1をフォロー。 そして、あなたはこのシンボル、デルタ、これを取得する これは言葉であることを意味する意味している。 だから、Maxwellは言葉です。 これらのデルタは意味全体である その事は言葉で、どの 物事はそうではありません。 そうpset6では、データは、我々は保存され 私たちのいずれかのノードがあったと一緒に「私は 言葉。 "そして、トライのクールなところ 彼らは挿入を実証している O(単語の長さ)内のルックアップ。 だからマクスウェルを介して取得することです M-A-X-W-E-L-L。だから、7または8 - 私は数えることができない - 最後に到達するためのステップ 物事をチェックアウト。 ここで非常に速く実装。 ロブはリンクを経て 彼の死後に一覧。 だから、それをチェックしてください。 申し訳ありません。 彼の死後におけるトライを通り抜けた。 だから、それをチェックしてください。 しかし、あなたは基本的には、各ノードが27を持っている 次のノードと1へのポインタ 私は言葉だブール。 方法については、ロブの死後をチェックしてください これは、実際に実装されています。 私たちの最終的な構造は、当社の木 と二分探索木。 したがって、これらを見て、これらが覆われていた 最近で8週、月曜日。 木はあなたを除いて、トライに似ています 必ずしも27ノードではありません 各ポイント。 そして、あなたはそれぞれに、このデータを持っていない かどうかを示しステップ - パスは問題ではありません。 上からのパスにトライのに対し、 ボトム、マックスウェルは、私たちにとって重要だった。 しかし、各ノードは、複数あります 子供、多分。 我々はいくつかのより多くの語彙を持っている。 木の根 最上部にある。 そして、我々はまさにその一番下の言う 無を持つノード 子どもたちが葉である。 そうトライのように、木がある ノードの構造。 我々は行っている木の一般的なタイプ について話をすることは、二分木であり、ここで 各ノードは子を持たないか、 1子供や二人の子供。 だからここにこの絵ではありません なぜなら、二分木、 ノード3は、3人の子供がいる。 しかし、我々はそれらの、残りの部分を無視した場合 それをそのためのバイナリツリーです 各ノードのプロパティを示しています ゼロ、1、または2人の子供がいる。 では、どのようにコードでこれを表現するだろうか? 私たちは、各ノードが持つノードを持つことができ その中の整数だけでなく、 左側のツリーへのポインタとして ツリーへのポインタ 右、二人の子供そう。 これはどのように役立ちましたか? さて、私たちはここで、我々についてのルールを作れば ノードを置く、我々はより高速に検索を行うことができます。 だから、二分探索の概念があります 木、上のすべてのノード 左部分木より小さな値を持つ ノードよりも、我々は見ている。 そして右の部分木のすべてのノード より大きな値を有する ルートノードよりも。 今、それは言葉の多くのように見えます。 私は二重の中に置くつもりだ 引用符とあなたの写真を示している。 ので、ここでの例です。 二分探索木。 我々は10で始まることがわかります。 の左側にあるすべてのもの 図10は、それよりも小さい。 右にすべてのもの それよりも大きい。 しかし、より多くのようにそれよりも、内の各ノード ツリーは、このプロパティを表現しています。 ので、ノード7は3を持っている 左から右へと9。 ので、これらのすべてが10よりも小さい。 しかし、単にそれらを見て、7があります その右側に、その左に3,9。 同様に、右側に、15は14を有している その左に、その右に50。 だから、あそこ3ノード、15、14、 および50は、また、有効なバイナリツリーである または有効な二分探索木。 そして、彼らはすべて10より大きくしている。 そこで、彼らは、あることが許可されている そこに右の。 質問がありますか? 観客:どのように対処しない場合 あなたは2セブンズがありますか? R.J.アキノ:うん。 どのようにして、2つの値を扱うか それは同じですか? いくつかの二分探索木を使用していることを言う 目標であるため、重複を無視 ただ言って、私が見てきた これまでのところ、これらの事。 あなたが言うことができるいくつかの二分探索木 ノードの内部カウントを持っている。 他の人にそのすべてを言うかもしれない 左は以下に等しい。 右にすべてのもの よりも大きい。 それだけで何に依存します 問題は、解決しようとしているです。 あなたは、例えば、辞書にあるので、 重複を気にしないだろう。 あなたがそれらをスローします。 しかし、いくつかの他の問題は、あなたが気に可能性があります。 観客:それは置くことは可能です 15の左側に1、その 10未満である? R.J.アキノ:いいえ。 ここで14は1であった場合、これはだろ 有効な二分探索木ではない、 の右側にあるすべてのもののため 10はそれよりも大きくなければなりません。 そして、我々は、なぜ表示されます。 検索の地で私の目標である場合、 14を見つけるために、私はルートから始まる。 だから私は見てください。 [OK]をクリックします。 私たちは、ルートから始まるとしている。 10を見てください。 さて、14、目標、 10よりも大きい。 だから、右の上にある必要があります。 これは、全体の携帯電話と非常によく似ています 我々が行った書籍の事、バイナリ そこに検索します。 しかし、その代わりに、バイナリサーチの アレイにおいて、我々は、バイナリだ このツリーで検索。 だから我々はまだ14を探しています。 さて、14は15よりも小さい。 それが私たちのツリーにですので、もし、それがなければなりません ここで、この領域にある。 これは、の右にある必要があります 10と15の左側にある。 そして私たちは、このノードをチェックしてください。 そしてYAY、我々は14を発見した。 私はそれを歩くつもりはありません。 しかし、ここでのコードです。 それは、比較的実際の 簡単で、 これは再帰的であるため。 我々はあなたがクイズに何をすべきかを求めることができる? 我々は、このコードを記述することを求めることができる。 我々は、このコードを見てするように依頼することができ このコードを変更して、何を説明 それはやっている。 うん。 質問? 観客:これらのスライドは、しようとしている 彼らは最後の時間だったように利用できるように? R.J.アキノ:はい。 したがって、これらのスライドは間違いでしょう 掲載される。 読者:彼らが実際に掲載しています 今ウェブサイトで。 ダビデはまさにそれをやった。 R.J.アキノ:スライドはある 今ウェブサイトで。 私はおそらくいくつかのアップパッチを適用します タイプミスは私が指摘して修正。 しかし、現在があります サイト上のバージョン。 その他、私たちがしなければ、あなたを求めることができるもの - 挿入を記述します。 の反復バージョンを書く 先ほどお見せした再帰関数 またはのように、これらのことについて話す つまり、文章内の段落、。 実行時間を比較して説明する あなたがバイナリを使用したいと思う 代わりのための探索木 たとえば、表をハッシュ。 だから、これらの構造を理解する かなり深いレベルで。 それらを書く方法を理解、どのように それらについて話をどのように、それらを使用しています。 そして、あなたはすべての設定されます。 質問? 読者:あなたが書いている あなたはどのように二分探索木、 どのような値にするかを決定 ルートとしてそれを作る? R.J.アキノ:そこで問題は、何であったか 値は、rootとして作るのですか? あなたのコードに応じて、 グローバルなルートを持つことができる。 だから、そうで持っていたかもしれない グローバルハッシュテーブルをpset6。 または、ルートを渡すかもしれません 引数として。 ここので、この検索機能 引数ノード*を取ります。 だから、あなたはどのようなことが起こるのノード 見すると、治療しているものです ルートとして、あなたがそれをインチ渡すとき そして、私はすべてのセットです。 それらは私のスライドです。 次の人はスワップを来ることができる ラップトップとマイク入力。 ROBボーデン:私は私が持っているかもしれないと思う 別々にその質問を解釈した。 しかし、私はあなたが持っている場合、としてそれを解釈 我々はどのように番号1,2、および3、 2ルートを作るために知っている 1または3とは対照的に? 我々は2ルートを作る場合、それはうまくだ 左右に1および3。 1がルートの場合しかし、それはへの1だ 右、上、右2、3。 そうデフォルトでは、知らない 何ルートを作る。 そして任意のアルゴリズムのために我々はに期待している あなたは、単に最初のものをあなたに与える インサートは、ルートになります。 または私たちはあなたのバイナリツリーを与えるだろうと それはルートがすでに存在しています。 しかし、他のアルゴリズムは、そのような存在 ルートは、IFますように、更新されます それは1、2の状況で終わる、 3、それは自動的に更新してしまう ように、新しいルート2にする それはまだうまくバランスです。 ANGELA LI:クール。 ねえ、みんな。 私はアンジェラだ。 と私はC言語を仕上げるつもりだ して、当社のウェブの一部に入る 技術 - HTTP、HTML、およびCSS。 だから、最初にバッファであり、 オーバーフロー攻撃。 それでは、このコードを見てみましょう。 それは非常に簡単です。 関数fooがあります。 そして、それは何も返しません。 しかし、それはポインタを取り込み バーと呼ばれる文字列へ。 そして、それは、これを宣言するだろう 文字のバッファ、 12スロットを持つ配列。 それだけである、memcpyをを使用しています 1アドレスからのコピー機能 別のものに。 だから、これはにコピーしようとしている 何からの私達のバッファー バーは、を指している。 何が間違っているので、任意のアイデア このコードでは? 観客:バーはより長い場合 Cは、それらは上書きされます。 ANGELA LI:ええ、その通りです。 私たちは、そのバー保証はありません 12よりも小さいことになるだろう。 私達はちょうどいくつかの任意の数の12を作った。 そして、我々のような、のことを期待しましょう​​し、 我々のユーザ入力は、以下である 12文字の長さ。 理想的な世界には、私たちの入力がある場合 常に期待どおり、その後、我々は買ってあげる こんにちは、のようなもの。 つまり、12文字未満です。 これは、char型のCに読み込まれます。 そして、我々はそれに何かをする。 それは本当に問題ではありません。 しかし、悪意のある人が行うことができます もっとこのようなものは、それら バーがポイントしているどのような私たちを与える、 それは、この巨大な配列を指すようになるだろう ちょうどAの。 そして、これは12よりもずっと長い。 だから、すべての道を行くために起こっている ダウンここにどこに戻る アドレスは、れていました。 それでは、この関数を言わせて fooのと呼ばれています。 たぶんfooが他のいくつかで呼ばれていた 主によって呼び出された関数で、。 fooが実行されているときので、それが必要である 場所に戻るために知っておく。 fooが名前のいくつかの関数から呼び出された場合 バズ、それはだということを知っている必要があります 戻っバズに行くようになった。 そして、それはどのようなこのリターンアドレスです ダウンここに私たちを語っている。 しかし、我々はいくつかの他のとそれを上書きした場合 アドレスは、この場合、これは のアドレスの表現 このバッファの最初の方は、 実際に何が起こるだろうことになる 代わりに戻ってバズに戻る、 私たちの関数を呼び出している、それだけだ このコードの前に行くつもり。 そして、これがあった場合、以下の原因 悪質なハッカーの男が来て、 これを注射し、多分この量 Aの実際にA社ではありません。 そして、それは実際には、コードのその休憩 お使いのコンピュータか何か。 したがって、この種の約守備すべき 事、あなたはそれを前提としたことがないしなければならない ユーザ入力が確実である 文字の量。 たとえば、あなたは何をしていた スペルチェック、あなたは言葉があったことを言われていた わずか40文字になるだろう 長い最大。 そして、それは良かった。 しかし、そうでない場合、あなたはしなければならない わずか45に読んでください 当時の文字。 そうしないと、上書きされることがあります あなたのバッファ。 その上の任意の質問。 うん。 読者:あなただけ話すことができた これらについて、もう少し? ANGELA LI:申し訳ありません。 はい。 観客:MICはちょうどビデオ用です。 私が試してみて、投影します。 みんな、こんにちは。 SUP? それではでいくつかのことを見ていきましょう あなたが使用してきたCS50ライブラリ、 主に、すべての学期、 ユーザー入力を取得します。 ご存知のように、あなたはCS50を含む ただCS50.hを実行して、ライブラリ、どの すべてのプロトタイプが含まれています のようなときに使用できる機能、 GetStringメソッドとGetIntであり、 GetFloat指定、エトセトラ。 そして、この1行は、CS50にあります 文字列を定義するライブラリ、どの あなたたちは、すべて今では知っている *単なる文字です。 しかし、ここでは覗いてみましょう GetStringメソッドがどのように機能する。 これは非常に簡略版です。 あなたはCS50ライブラリファイルをプルアップすることができます manuals.CS50.net、私は思うから。 そして、あなたはを通して読むことができます 実際の関数。 しかし、これはいくつかをカバー 重要な部分。 だから我々は、いくつかのバッファを作成しました いくつかの能力を持つ。 そして、私たちがやっていることは、我々は1文字を取得されている 標準Nから一度に。 ここでユーザが入力するわけです コンソール内のテキスト。 そして私たちが読み込まするつもりだ それは新しいものではないのものであれば、文字 ラインと、それはそのファイルの終わりではない 標準入力の終わりである。 そして我々が読んですべての文字に、 その文字は追加してしまう場合は、 私たちが読んだ文字数 で、それが私たちの能力を超えている、 それから、私たちがやっていることは我々だけで私たちのサイズを変更している バッファには、倍の長だように。 そこで再度、これは、バッファから守る オーバーフロー攻撃、あなたが読んでいるので 当時の文字。 そしてどの時点であなたも読み込また場合 多くの、あなたは自分のバッファを展開します。 あなたは2を掛け。 そして、あなたはより多くの部屋を持っています。 そうでなければ、あなただけの追加 バッファするキャラクター。 そして、あなたはすべての中で読んだ後に 文字は、バッファを縮小する 戻って通常のサイズに至るまで、追加 ヌル終端し、Return。 それでは、GetIntで見てみましょう。 皆さんは、これを読むことができます? 私は少しでズームすることができます。 私は、コンピュータがどのように動作するか分からない。 気にしないで。 私は適切にズームインすることができません。 これは本当に難しいです。 ごめんなさい。 ちょうどこれを見てみましょう。 それでは、GetIntではないと、最初の読み込みで GetStringメソッドから文字列を、その 我々は以前に実装しました。 そして重要なのは、ここで注意すべき ある場合、それは結局、この共有 読書ではなく、実際には文字列のようなものです その後、我々はちょうどにINT_MAXを返す 失敗を表す。 なぜ我々は代わりにINT_MAXを返します 負の1または1の? 任意のアイデア? 観客:[聞こえない] 1にマイナス1。 ANGELA LI:ええ、その通りです。 だから、あなただけの必要への道になりそうだ 入力1または負の1を求めるメッセージが表示されたら n番目とn番目の何maxesため。 それは巨大だ。 あなたは、おそらくそれを使用するつもりはない。 だから、これはに設計上の決定のようです あなたが誤っていないことを確認してください エラーを返すか、返さない 解析された可能性があります1、 正しい答えとして。 だから、ラインが存在しない場合は、 我々は、INT-MAXを返す。 そうでなければ、我々は、sscanf関数を使う これscanfのようなものです。 しかし、それは文字列から読み取ります。 そして、我々は、このフォーマットさを持っている %I%cである文字列。 そして、我々がしようとするとそれと一致 どのようなユーザーは、私たちに与えた。 私たちは、一致したものの数が欲しい 我々は唯一のことを意味し1であることが 本当に整数を一致させたい 多分白に囲まれて スペース、そうでないかもしれない。 この場合は、あなたが何かを入れている場合 バーのように、バーは、まったく一致していません が存在する必要があるので、 開始時に整数。 そうSSCANが0になったことがない。 だから、それを返しません。 あるいは、何かを入れている場合 様1、2、3、A、B、C、その収め 両方の整数だけでなく、 それの後の文字。 だから、sscanf関数は、2を返します 理想的ではないこともある。 あなたはしたくない1、2、3、A、 A、B、Cの有効なint型であると。 また、動作しないようにします。 しかし、あなたは50のようなものに入れと言う。 それはつまり、%iを一致します それがn個に読み込ま取得します。 そして今、nは番号50を含んでいます。 そして、あなたはそれを返すことができます。 そうしないと、再試行を押してください。 そしてそれはちょうどまで何度も行く あなたは、ユーザからの適切な入力を得る。 その上の任意の質問? 観客:だからだったかどうかを印刷する [聞こえない]にGetIntでの値 それだけで、整数値と最大値でしょうか? ANGELA LI:うん。 あなたはGetIntでの使用であれば、あなたが想定する必要があります あなたがするn番目の最大値を望んでいないことを あなたが行っているので、有効な入力であること それが悪かったことを前提としています。 観客:我々は、char cを持っていなかった場合 1、2、3、サムに入れて誰かがそれだろ まだ1、2、3のために働く? ANGELA LI:私はそれが仕事だと思う。 しかし、あなたは123Samはしたくない 利用者が有効な入力であること。 それは本当にint型ではありません。 だから、公正いないようです int型としてそれを解析します。 [OK]をクリックします。 その場合は、の動きを聞かせて インターネットに。 だから、HTTPは言語ではありません。 HTTPはのための基準のセットだけです どのようにして、クライアントから物事を送り、 つまり、サーバーに、あなたです。 それは、ウェブ上の他の人の。 だから、HTTPはハイパーテキストの略 プロトコルを転送します。 それは、心と魂だ Web全体の。 ハイパーテキストの一部だけ HTMLを指します。 転送のようなクライアントである あなたがに要求を送信します 回答を与えるサーバー。 およびプロトコルが行う方法だけである サーバーが動作するように期待する? そして、どのように振る舞うことになっている あなたがこれを合理化することができるように 通信プロセス? だから、HTTP要求は、このような多くのことを見てください。 GETリクエストのタイプです。 君たちはGETリクエストを見てきました およびPOST要求。 そこに、その2つ目は、/私は、それはです URIまたはどこのURLだけ ホスト内で行ってみたい。 したがって、この要求が求めている www.facebook.com /私のようなページを、。 そして、それはGETリクエストです。 [このHTTP/1.1は、それだけだ 使用しているHTTPのバージョン。 それは、ほとんどの場合1.1です。 した後、束があります あまりにも他のものの。 もしあれば、実際には、これらを見ることができます あなたがしているときにコンソールを開く Webブラウジング。 応答が何かを見て このシリーズをもっと。 上部は、再び、である HTTPの種類、使用している ステータスコードが続く。 だから、200 OKがすべてが働いている。 ここにあなたのコンテンツがある。 あなたのコンテンツが続くとしている。 そして、それはあなたを教えてくれますどのような種類 あまりにも内容や他のものの。 ステータスコードは、いくつかあります あなたが知っておくべき重要なもの。 200 OKがすべての黄金のようなものです。 すべてが動作します。 403禁止。 あなたが忘れてしまった場合は、おそらく見てきたこの 適切に何かします。chmodする。 それはあなたが持っていないことを意味します への適切なアクセス権 サーバー上のことにアクセスします。 それはようなものだ、いや、あなたはそれを見ることはできません。 404は物が存在しないことを意味します。 見つかりません。 おそらく、多くのことを見てきました。 500内部サーバーエラーは、通常、 何かが側に間違っていたような サーバーの。 だから、pset7を実装したところ、 あなたは、PHPのエラーが発生した場合は、可能性 実際にページに移動し、参照してください。 PHPのエラーのものの全体の束。 しかし、それは通常は発生しません、 ウェブサイトは本当にしたくないので、 自分のサイトが壊れている理由を教えてくれ。 彼らはおそらく戻ります 500内部サーバーエラー。 そして私はティーポットだ418があります。 約全体的な話があります だからこそことだ。 しかし、あなたはそれについて読むことができます あなた自身の時間に。 の全体の束があります あまりにも他のステータスコード。 しかし、これらはものです あなたが知っている必要があります。 それでは、HTMLについて話しましょう​​。 HTML、覚えて、ではありません プログラミング言語。 これは、マークアップ言語です。 すなわち、コンテンツを記述する意味する。 これはHTML文書がどのようなものかを説明します それがどのように見えるかのようにか しかし、それがどのように構造化されています。 だから、構造を定義し、 ウェブページの意味。 これは段落です、のようなものだ。 これは、順序付けられたリストである。 これは私のページのセクションのようなものです。 ここではタイトルです。 それはそのようなものを行います。 それは、そのいずれかののスタイルを設定していないため それは、CSSで行うものです。 そして、それはシリーズのように見える ネストされたタグの。 だから、本当に基本的な例を使用するには HTMLページには、DOCTYPEを持っている そこまで宣言。 このDOCTYPE宣言がある 我々はHTML5を使用している、と述べた。 その後、大きなHTMLタグを持っている。 それは、頭と体が含まれています。 頭の中には、タイトルを持っている。 つまり、タイトルに行くものだ お使いのブラウザのバー。 当社は、リンクリンクタグを持っている 外部スタイルシートで。 そして、我々は、プルスクリプトがある 外部のJavaScriptからも同様。 して、私たちの体の中に実際にある ページに表示される内容。 私たちは、段落を持って、それからだ その段落内の画像。 こちらは、子猫の写真です。 注目し、そのイメージ タグは、それ自体を閉じます。 だからではなく、画像を開く そして、あなたは、別/画像をしている ちょうどこの少しスラッシュを持っている ここでは、それを閉じている。 とイメージタグも、この鍵を持っている value属性は、ALTと呼ばれる。 つまり、その代替テキストです あなたはその上に置くと発生します。 ほとんどのHTML要素には、いくつかの重要な価値を持っている あなたはそれを与えることができるもの、様々な カスタマイズ。 うん。 観客:[聞こえない]。 ANGELA LI:まあ、だから、だ タグの属性。 あなたはjQueryを使用していたのであれば、あなたは可能性 選択image.getAttributeを行う。 そして、あなたは検索することができ alt属性を取得します。 そして、それはあなたの子猫を与えるだろう。 あなたは、HTML、入力中のフォームを覚えていれば 要素は、name属性を持つことになります。 そして、それはPHPが送信するために使用するものだ フォームが送信されたリクエスト。 読者:あなたは何かを言及しました あなたはkittens.jpgを使用した場合、または方法について 不足しているが持っているもの ファイルフォルダ、またはその他のファイル? ANGELA LI:はい。 だから、これは相対的と呼ばれるものです。 パス、私は与えていないだから あなたの完全なパス。 あなたはfopenを行う場合、これは時にC言語でのようなものです いくつかのファイルを、あなたのfopen hi.txtている場合は、その hi.txtは、同じであると予想される ディレクトリ、あなたはそれをより多くを与えない限り、 複雑なパス。 読者:あなたは指定することができます どのフォルダ[聞こえない]? ANGELA LI:うん。 そして、あなたはそれを行う方法を調べることができます。 しかし、私はkittens.jpgを取得したい場合は、 親ディレクトリの、私はどうなる 。。/ kittens.jpg。 うん。 申し訳ありません。 うん。 男ああ、私は質問を忘れてしまった。 質問は何でしたか? ああ、質問は、kittens.jpgた 同じディレクトリにあると予想される? そしてこの場合には、である。 しかし、あなたはまた、それを特定のパスを与えることができます それはである必要はありませんように。 いい? CSS。 だからCSSは、HTMLのような、ではありません プログラミング言語。 CSSは、スタイリング·ルールのほんのシリーズです。 これは、カスケードスタイルシートの略です。 そして、あなたは一緒にそれを使用 スタイルページへのHTMLと。 だから、3つの方法があります それを含むことができる。 あなたがそれを行うことができる一つの方法は、頭の中にある あなたのHTMLの部分は、あなただけのことができます styleタグを開き、スティック そこにいくつかのCSSルール。 それはかなりOKです。 うん。 読者:あなたはそれらを置くことができ みましょう、その間のスタイルタグ たとえば、身体および/ボディ。 そして、あなたはスタイリングになります 体内で唯一。 ANGELA LI:あなたは可能性があります。 それがうまくいく。 スタイリングなのでしかし、あなたは、いけない に行く必要があり、メタデータの種類 あなたのドキュメントのhead。 ボディは実際には含まれている必要があります 何が実際に起こっている ページ上に表示されます。 観客:だから、スタイルを置くところ あなたの頭の中でスタイルに Webページ全体、右? ANGELA LI:うん。 したがって、これらのCSSルールは、ここにスタイルを入れて に基づいて、ページ全体に適用されます そのセレクタ。 ので、それを行うには良い方法ではなく、ある あなたの頭の中でスタイルタグを持っていることの、 あなたは外部のスタイルには、このリンクを持っている 私はあなたを示したシート状 前の例。 これが何をするかは、それがしようとし、見つけたです style.cssにファイルし、それを引っ張る 中や使用していますと ページのスタイル。 そして、あなたのstyle.cssだろう ちょうどこのように見えます。 それだけで、CSSの束になります。 そして最後に、もう一つの方法は、あなたがあります 本当にあなたのCSSを含むことができ、 今までにすべきではない。 それはコールのインラインスタイリングです。 だから、任意のHTML要素には、することもできます style属性を取る。 して、そのスタイル属性において、 あなたはそれをCSSルールを与えることができます。 この場合、どのようなDIVアイム 右ここで定義し、それがために起こっている 黒の背景を持っており、 白いテキストの色。 しかし、あなたは、これを行うべきではありませんので、どのような これはそれがあなたのスタイリングを入れているん あなたのHTMLの内側。 そして私たちは、HTMLについての話をしてきた知っている 構造であり、CSSはスタイルです。 これを行う場合は、ミックス 一緒に。 そして、それは非常にきれいではありません。 ですからそういうことをしてはいけません。 我々は、そこまでは、CSSの例を使用して 単なるHTMLの本文を選択 ドキュメンタリー。 そして、我々はすべてのものの、のようにしている コミックサンズになるだろう。 私もそれはお勧めしません。 しかし、あなたはそれを行うことができます。 右ここ番目のルールは、それが起こっている 上の要素を選択する IDの主を持つページ。 だから、どのようなHTML要素、私はIDは言った =主、私はAを与えるつもりだ 20ピクセルのマージンと、すべてを揃え、 中心部へのすべてのテキスト、。 最後には、CSSクラスによって選択されます。 だから私が与えた、ページ上の任意の要素 セクションクラスは、私はそれをするつもりだ ライトブルーの背景色。 うん。 それは私が得たすべてです。 質問? 観客:どういうハッシュタグ メイン前に行う? ANGELA LI:質問が何をするか、ある 主行う前にハッシュタグ? この場合、ハッシュで CSSは、IDによる選択を意味します。 だから私は次のように、いくつかのHTML要素を持っていた場合 divIDは=主に、このCSSはルールを選択 IDのメイン​​との事。 と同様に、目の前にピリオド セクションでは、CSSクラスをセレクト、または HTMLのクラスによって選択します。 観客:なぜ前にそこに持ってい 背景色が6? ANGELA LI:うん。 そこで問題は、なぜ存在している 6前ハッシュ? これは、そのハッシュは異なる。 これはあなたが与えていることを意味します 進数の色。 そう六角色、これは単なる 色を表す。 そして、あなたは、RGBトリプルを覚えているとき あなたはフォレンジックPSETをした? これは似ています。 最初の2桁が表す どのくらいの赤い色である。 第2は表す どのくらいの緑。 そして三つ目は表し どのくらいの青。 ハッシュは、この起こっているされている 色を表現する。 そう0、0、0、0、0、0から何か F、F、F、F、F、Fまで有効です。 これは、することができますいくつかの有効な色だ お使いのブラウザで表示される。 質問? 観客:違いは何ですか IDでクラスで使用して? ANGELA LI:質問は何です 違い IDとクラスで使用して? あなただけの1つの要素を持つことができます 指定されたIDを持つHTMLドキュメント。 だから私のページ上に一つだけの事は IDの主を持つことが許可されています。 だから、このためにそれを使用するヘッダーです。 これは、ナビゲーションです。 これはフッターです。 あなたは可能性があるためクラスは、異なっている できるだけ多くのHTML要素にクラスを適用 あなたが望むように。 したがって、たとえば、私は、クラスのセクションをしました 複数のは、おそらくありますので、 私のページのセクション。 あなたは同じように、多くを持つことが許されている 同じでページ上の要素 クラスが、特定のIDを持つ唯一の1。 観客:だからドットが表現する クラス? ANGELA LI:うん。 ドットは、クラスを表しています。 涼しい。 それは、みんな私が持っているすべてです。 ありがとう。 [拍手] ZAMYLA CHAN:こんにちは、誰もが。 私はZamylaよ。 私は、PHPをカバーするつもりだ、 MVC、およびSQL今日。 私はできるでしょう素材がたくさん カバーは​​かなりになるだろう 右pset7が不足しています。 わかりました。 だから、PHPは何ですか? PHPは、PHPハイパーテキストの略 プリプロセッサ。 そう、それは、それ自体が、再帰的である かなりクールである、名前を付けます。 PHPはサーバサイドのスクリプト言語です、 そしてそれは、バックエンドを提供する と論理基盤 当社のウェブサイトの。 だから、アンジェラは、HTMLについて多くのことを語った とCSSの構造を行うことを ウェブサイトの。 しかし、あなたがそれを変更したい場合はどう コンテンツを動的またはそれが変化する場合 ユーザーに基づいて、または 一定の条件? PHPは出番です さて、一般的に、PHPは、いくつかのかかることがあります 同じことを実現するためのより少ない行 PHPはメモリを処理するため、Cでいるからです プログラマのための管理、 malloc関数を有する私たちとは対照的に、 無料で、そのようなこと。 しかし、PHPは解釈であるため、 言語、典型的には、それが実行されるかもしれない もう少しゆっくりCより、どの コンパイルされた言語である。 我々はプログラミングを移動しているので、 言語は、の方法を見てみましょう 構文は異なります。 のではないと非常に注意しましょう これで混乱する。 あなたがいるかどうか、PHPの構文を持つので、 HTMLの中にPHPを埋め込む ファイルや。phpファイル自体の中に、 オープンでコードを囲む​​必要があり PHPとのような閉じたPHPタグ 画面上と同じように、次の。 PHPの変数。 一つ一つの変数が始まります の名前が​​続き$記号 あなたの変数。 今、PHPの変数が緩く型付けされ、 これはあなたが必要としないことを意味します どのようなデータ型を示すために あなたがそれを宣言しているときである。 しかし、これは彼らことを意味するものではありません 全くタイプがありません。 だから私は、変数を宣言し、ちょうど設定した場合 それは1に等しく、その後、私は宣言します 別の変数には、等しく設定 "1" し、別の1 1.0、まあ、 平等の種類に応じて、 私が使用する演算子を、私は比較したい場合は、 次いで、すべてのタイプ、両端 それらは等しくなるでしょう。 しかし、私は確信していることを確認したい場合 種類が同じである、PHPはまだやることができます つまり、我々は示していないにもかかわらず、 ときに我々それが何であるかのタイプ 最初のファイルを作成します。 今、PHPで、我々はあるにもかかわらず プログラミングから切り替え Cからの言語は、我々はまだ私たちを持っている ちょうどこのような条件であれば信頼できる。 我々はまだちょうど、私たちのwhileループを持っている このように、どこで、あなたの中に置く その後、条件と ループの本体。 そして、我々はまた、ループのための私達を持っている 通常、このようになりますどの。 私はすべての反復処理したかったそうであれば 9のpsetと提出およびコール 機能submitPset、私はそれを行うことができます ここでは、あなたたちはすべて持っている この時点で行わ。 ところでおめでとう。 カメラのための、人々 言った、ありがとうございます。 さて、あなたはこれを使用することを望んでいない場合は、 forループは、PHP実際にも 物事はforeachのループを呼びかけている。 だから私は、整数の配列、0を持っていた場合 8を介して、アレイのPsetに記憶され、 私はforeachループを持つことができること psetを内のすべての番号を反復。 そして私は同じことを呼び出すことができます 機能8回、 私は前にやったように。 したがって、各ループのこれは、いいです あなたが持っていないあなたがわからない場合に 配列の正確な長さがあること 有し、このforeachループを使用して あなたのためにそれを世話をします。 だから私は、配列としてのpsetを作った。 それでは、その見てみましょう。 PHPの配列は、通常と同じです 我々はC言語で持っていたものを、どこに あなたは配列を宣言することができます。 そしてここで、私は空の配列を宣言することができます してから使用して動的に構築 整数としての指標。 インデックス0だから、私は店に行くんだ 整数が1と命名。 私のリストのインデックス1に、私は行くよ 値2を格納する。 そして第三のインデックスにあるが、 番目の数字は、私はするつもりだ 数12を格納します。 さて、これはその中で結構です それがうまく機能し動作します。 しかし、それは私にとって重要と言う 各インデックスは保持しているものを。 私にとっては、インデックス0は、どのように意味 多くの猫は私が持っている。 そしてインデックス1は、どのように意味 多くのフクロウは私が持っている。 そして次はどのように多くの犬のことである。 さて、それは代わりに、それを指定するには 0であって覚えておくことの 猫とフクロウ1に、私は使用することができます ことを意味し、連想配列、 代わりに、私の指標としての整数の、 私は実際に文字列を使用することができます。 だから、これは非常に便利です。 そして、あなたは基本的に交換してきた 文字列と整数。 そしてそこにあなたが持っている 連想配列。 うん。 観客:そこ理由がありますか 秒アンダースコア 一部、私のリストには、配列を有しているからである。 ZAMYLAちゃん質問があったことになります そこにあります理由 私とリストの間でアンダースコア? いいえ。 それは私が命名てるだけでどのようだ 私の変数。 読者:最初に ラインは、それが一つの単語だ。 ZAMYLA CHAN:私の謝罪。 私はそれを修正します。 うん。 彼らは、同じ変数名でなければなりません。 大漁。 [OK]をクリックします。 それでは、文字列に移りましょう 連結。 私は、二つの文字列を取りたいと思った場合は、 その後、私はそれらを連結することができます ドット演算子を持つ。 だから私は、最初の名前としてミロを持っている場合 氏名などのバナナは、 ドット演算子で連結し、 その後、間にスペースを入れて ミロを含む文字列を作成します 私は次にエコーまたはCANバナナ、、 むしろ、プリントアウト。 エコーといえば、の話をしましょう いくつかの便利について - おっと。 ごめんなさい。 いくつかの有用なPHP関数。 だから我々は持っている - 技術的な問題。 一秒。 私はそれを送った。 PowerPointの問題。 そして、我々は、PHPの関数で戻ってきた。 そして、我々は、PHPの関数で戻ってきた。 だから我々は、機能を必要としているところ あなたがファイルを渡すと、ここだけですそれは そのファイルの例 私はインチに渡すかもしれません そして、それがPHPのコードが含まれています 私は示して、そのファイルから。 そして、それはインチそれを評価します その後、我々はまた、エコー持っている printf関数と平行である。 出口が壊れると平行である、 それらのブロックを出る あなたはインチているコード [空のチェックが与えられたかどうか 変数がNULLまたはゼロのようなものです 何が空の状態と同一視されている。 うん。 読者:文字列の連結のために ドット演算1は、PHPで、ある それが使っているJavaScriptのと同じ 連結用のドットはプラスを意味? だから、正式名称は、あなたがドルを持っている可能性が 最初の+に署名してから+ラスト? ZAMYLA CHAN:うん。 そこで問題は、PHPの我々にあるかどうかであった 同じ文字列の連結を使用することができます プラスではJavaScriptのように。 ヨセフは、後でその中に取得します。 私は彼がその上のスライドを持っていると思う。 実際に、それは違う。 そうJavaScriptでは、使用する必要があります 文字列を連結するプラス。 そしてPHPで、その必要はあり ドット演算子を使用しています。 そこで、彼らは異なっている。 [OK]をクリックします。 だから今我々はすべてカバーしてきたこと このPHP、それがない 本当に便利になる? まあ、それは便利になるときに我々 私たちのHTMLでそれを組み合わせることができます。 だから私たちのPHPはに私たちに力を与える ページのHTMLコンテンツを変更する前に その中。 だから、さまざまな条件に基づいて、 だ、通常、特定のユーザ ログインし、我々は表示することができます 異なる情報。 リンダは、あなたが疑問を持っていたのですか? 読者:あなたが連結することができます また、整数? ZAMYLA CHAN:はい、できます。 できればそこで質問だった 整数または他を連結 今、我々は、MVCに移動variable.sいる 私たちが使用パラダイムである pset7やWebデザイナーの多くは、使用 ファイル内のコードを整理する 彼らのウェブサイトにある。 Mはモデルの略です。 そして基本的には、モデルファイルを取り扱います データベースとの相互作用を有する。 ファイルを表示、それらはに関連して ウェブサイトの美学。 とコントローラハンドル ユーザー要求、構文解析 データは、他のロジックを実行します。 pset7では、モデルを組み合わせる とコントローラ。 そして、私たちはただのコントローラにそれらを呼び、 パブリックディレクトリに入れて。 そして我々はそれらを使用するビューファイルは、 templatesディレクトリ内のテンプレート。 だからここに、この図には表し と部門のそれと同じ種類 モデルと紫のコントローラ ここに左のと 右のビュー。 これはあなた方のうちの何人かいることを示す説明図である オフィス·アワーで見たか、 私たちはあなたのように描いた図 あなたのPSETを把握された。 だからここに、指定したコントローラでは、モデル コントローラは、機能を有する SQLをクエリに関連するもの データベース、PHPのロジックを実行する。 たぶん、あなたは最高になります ヤフーの株式 ファイナンス。 それとも、あなただけにチェックする 利用者が提出したかどうかを確認 持つ前にすでに形成 あなたのページを訪問した。 そして、あなたはレンダリングされます こっちフォーム。 そのフォームが送信された後 ユーザーによって、アクションがあったこと フォームのHTMLタグで指定された ページを示しているだろうと、それ そのデータに戻ります。 だから、その情報のすべては次のようになります お使いのコントローラに送り返さ。 あなたはおそらく、もう少しするだろう その上で、ロジックと、おそらくいくつかを実行する 複数のSQLデータベース内のクエリと そして、最後に、きれいに思い付く 情報のパックのセットがあることだろう 他のいくつかのテンプレートに渡す それは、その情報を表示した。 今、どのように我々は、実際にパッケージ化します その情報をバックアップ? まあ、我々はレンダリングと呼ばれる機能を持っている つまり、内のfunctions.phpファイルにあった あなたが名前を渡しpse​​t7、 ファイル、テンプレートの名前。 そして、あなたも渡す 連想配列。 だから連想配列が表す 異なる情報 もし25.40渡したいこと 今、何が一定になるだろう これらの例は、あるキーまたは、 むしろ、連想のキー 配列は、それらのことになるだろう何ですか テンプレートによって一定であると予想さ それが必要と知っているので メッセージと呼ばれるもの または名前と呼ばれる。 そして、右側のもの、 この場合に、実際の値、、だ いい子やミロ、しようとしているもの 変化している値であると コントローラは毎回変化すること または特定の条件に基づいており、 インチそれを通過します だからここのテンプレートでは、その私たちを参照してください。 HTMLの特殊文字を使用している、 これだけで、基本的に私たちが望むことを意味します そのピアの文字列を取得する ユーザは25.40置く そして、我々は代用したい そこにメッセージ。 それでは、私たちが実際に表示するときに ファイル、特定の 情報が渡され どのような作品をレンダリングキーであることに注意してください その連想のキー 配列変数になるもの ここに名前。 そしてそうでそのキーの値 連想配列はその後になります 変数の値。 それでは、SQLに移りましょう。 これは、構造化の略 クエリ言語。 そしてこれは単なるプログラミングで 設計された言語 データベースを管理するため。 そして、それは私たちのために便利になった 私たちのpset7ファイナンスのウェブサイト。 基本的に、それはちょうど簡単な方法です オブジェクトとテーブルを追跡および管理 そして、相互にリンクします。 今、あなたのSQLデータベースを考える 基本的にはExcelファイルとして、おそらく、 複数のタブ付きのシートで。 だから、複数のテーブルを持つことができ、 おそらく、それは相互に連結された。 やExcelのような多くは、私たちはたくさんある 私たちが望む機能を提供します。 例えば、我々が選択することができます 特定の行。 私たちは、情報を挿入することができます。 我々は、行を更新することができます。 そして、我々はまた、物事を削除することもできます。 SQLは、行を選択することで、作品を選択する またはから、指定された列の列 特定の一致するデータベース あなたが示している基準。 *から、私が選択表示されたら、こっちにそう 家= Ravenclaw、その後のウィザード 私は、私は意味し、*選択するよ その中の一つ一つの列を選択する ウィザードのテーブルからではなく、ない場合にのみ行 家の列には、Ravenclawに等しい。 さて、これは純粋なまたはSQLです。 だから私はphpMyAdminは、入った場合は、 我々は管理に使用する特定の方法 私たちのSQLデータベースは、私は挿入することができます phpMyAdminのウェブサイトにその。 そして、それが実行されます。 しかし、我々は実際にやってみたい PHP側と。 だから我々はそれをどのように行うのですか? さて、私たちは、クエリ機能を使用している 基本的にSQLクエリが実行されます。 使用して? プレースホルダとして、我々は、あるに渡すことができます その私たち私たちの列に値 交換したい。 ので、おそらく私は別の保存してい curr_houseの値、どの 現在の家を表す 私が通って行くよという。 だから私は、プレースホルダとしてそれを渡すことができます 疑問符の付いた。 そして私は、基本的に実行します 私は除いて、以前と同じこと 今、私はPHPでね。 クエリが返されます 連想配列。 そして、私は、行に格納するつもりです。 今、クエリは常に失敗することがあります。 おそらく、SQLクエリは実行できませんでした テーブルが存在していなかったため。 それとも、列には存在しませんでした。 何かが間違っていた。 まあ、その場合には、確認したいと思う あなたがいるかどうか確認することを確認してください クエリからfalseが返されました。 そして、それは、トリプルを使用してい 操作が等しくなります。 そして私は別である、謝罪 メッセージを渡しCS50機能。 そして、あなたは謝罪、すべてそこに見れば 本当にないapology.phpレンダリングです。 うん。 読者:あなたはどのようなことを説明してもらえます 星は選択してからの間でしょうか? ZAMYLA CHAN:ええ、絶対に。 だから、選択してから、間にスター 私は、全体を選択することを意味します 私のテーブルから行全体。 私が選択指示さたかもしれない 名前、年、家。 そして私はそれらの3になるだろう 私のテーブルの列。 私はSELECT *を言うなら、私はよ その列のすべてを取得。 私はあなたに行くつもりです 最初に後ろに。 観客:だから、これはまだある SQLで、右か? このクエリはあるか、このPHPがある? ZAMYLA CHAN:我々は、クエリにいる。 だから、これはPHPである。 だから、PHPの関数のクエリを使用して、 我々は、SQLクエリを実行している。 観客は:SQLで何か 大文字と小文字を区別し、選択のような または、ウィザードや家? ZAMYLAチャンは:何か のSQLは、大文字と小文字が区別中? 私ははい、そう信じています。 私は信じているSELECTとFROM とWHERE大文字と小文字が区別されます。 なし? ROBボーデン:だから、それは反対だ。 列名とテーブル手段、 それらのすべては、大文字と小文字が区別されます。 しかし、MySQLのキー·ワードのいずれかのような SELECT、FROM、およびWHERE、それらはそうではありません 大文字と小文字が区別されます。 [OK]をクリックします。 だから私が言ったことの反対。 だから、MySQLの全てのキーワード - 選択して、どこから - これらの 大文字と小文字を区別しません。 しかし、他のすべてはある。 [OK]をクリックします。 前のあなた。 読者:私はの面で行を$している場合 複数の行は、平均であることを行う ただ連想配列となります? ZAMYLA CHAN:だから質問があったかの行 、その中に複数の行がありません それは連想配列になる? だから、連想の配列です すでに配列。 1行のみがありますので、たとえ 返さ、あなたはに行かなければならないと思います その結果のインデックス0とする。 そして、あなたはその最初の行を持っていると思います。 はい、ベリンダ? 読者:あなたは===を使用する場合は、 これが唯一のインスタンスである? 等はありますか? ZAMYLA CHAN:この場合には、=== タイプ間で比較したものである。 申し訳ありません。 ===比較です つまり、型を比較。 して、==は、すべての種類の間で比較します。 読者:あなたは何を説明することができます 行は、このような状況にあり? それはデータの行ですか? ZAMYLA CHAN:次のスライドでは、私は 何であるかの行説明するつもり。 だから、あなたが保持して気にしない場合は、 その上でオフ。 それから、あなた後ろに? 観客:クエリのような関数の場合、 [聞こえない]をレンダリングし、謝罪? ZAMYLAちゃんの質問はどうだった これらの機能 - クエリは、謝罪、 レンダリング - PHPの間で共通している。 これらはものであることCS50 pset7のために書いた。 とジェイ? 読者:あなたが言う必要がある $ _SESSIONは、そのIDのみのためにある? または、そのここに言っていませんか? ZAMYLAちゃんそこで問題であった 私たちは、それが特異的であった、$ _SESSIONを使う 我々は使用しているグローバル変数。 ここでは、この変数には、しようとしている 私たちの関数に対してローカルであること。 だから我々は、単に宣言しています 新しい変数。 観客:どのように謝罪さ 実装? ZAMYLAちゃん質問があった、 どのように実装されて謝罪? そして、私は、これは実際にはかなりあると思います 君たちが入るようにするには良い方法 のfunctions.phpセクションと見 謝罪とあなたが持っている可能性がどのように参照してください。 それを自分で行うこと。 だから私はあなたに残しておきますが、ただ可能性 あなたが見れば謝罪と言う、 それはあなたのメッセージを受け取り 謝罪に提出し、それ そのメッセージをレンダリングします。 これ以上の質問? 私は質問が大好きです。 だから、これからそれらを保つ。 観客:[聞こえない] エコーやそこに印刷? ZAMYLAちゃん質問があった、 私達はちょうど置くことができなかった エコーやそこにプリント。 だから何かをしただろう わずかに異なる。 つまり、クエリを印刷したであろう それに失敗しました - さて、今、私たちは実際にしている 私たちのコントローラ。 だから我々は実際にはありません HTMLはここで設定。 apologize.phpレンダリングすることで謝罪 実際apology.phpにリダイレクトされます。 [OK]をクリックします。 だから今、のは対処する上で行ってみよう かについて、以前からの質問 実際にローである。 さて、質問に戻ります 行の配列。 そして、すべての行が表現されている 連想配列による。 だから私はいくつかのSQLクエリを実行した場合 私はその後、列に結果を格納しました foreachループを使用して、その配列 行 - 名前がある最初のものです。 そして私は呼ぶつもりだ そこ$行のすべての行。 だから私は、その後、その上ですることができます繰り返し処理 指定した行の[名前]列にアクセスする、 年間の列、および家のコラム。 私がすることができなかったであろうことに注意してください 行インデックスので、行でこれを行う 名前が存在しません。 行の単なる配列です 連想配列。 だから、そこに2つのレベルがあります。 あなたが行の配列を取得したら、 あなたはそれに取得する必要があります。 そして、あなたは列にアクセスすることができます。 つまり、それを明確にしましたか? ええ、前に? 観客:[聞こえない]開く [聞こえない]用のブラケット? ZAMYLA CHAN:すみません! 観客:オープンかっこ。 ZAMYLAちゃんここにこれらの? それは私にはできるようだ その変数。 うん。 読者:あなたが印刷すると、あなたは HTMLコードに印刷? ZAMYLA CHAN:はい。 私は印刷すると、ここで、この内側です 私のテンプレートになりましたので、 MVC方式の私の見解。 だから私はHTMLに印刷しています。 観客:だから我々は、開発者に入った場合は、 これを実行した後、ツール、我々は可能性が 実際にコードでその? ZAMYLA CHAN:それは素晴らしいことだ 質問、うん。 ですから、開発者ツールに入った場合は、 FirefoxでFirebugのを使用するか、 クロムは、ええ、あなたは可能性 特定のHTMLを参照してください。 だから、$行["名前"]表示されませんでした。 これは、どちらかを示すであろう 名前は、その行にある。 観客:単に一般的な問題、 と定義され、TRおよびTDは何ですか? なぜ我々は[聞こえない]でしょうか? ZAMYLA CHAN:テーブル行TR、 テーブルには、[列のtdと。 [OK]をクリックします。 観客:ええ、それは表データです。 ZAMYLA CHAN:テーブルデータ。 うん。 観客:それは中の行の 行は列のように扱われている? ZAMYLA CHAN:申し訳ありません。 あなたはそれを繰り返すことはできますか? 観客:どのようにしてでしょう 行を視覚化? ZAMYLA CHAN:どのように視覚化するだろう 方法はどのような行? これらについて話している ここに行またはTR行? 観客:行。 ZAMYLAちゃんここにこれらの行? 私はこれを視覚化したい 私は自分のクエリを実行します。 そして、それは[OK]を、私はnに0のどちらかを持っている、と言う 条件に一致する行の量 あなたが照会したこと。 だから私は、行をいくつか持っています。 だから行、$行、店舗ごと 配列内のこれらの行の1。 それはちょうどそれらの1であったとしてもそう、それはだ まだそれに一致する行の配列。 さて、例えば、これは あなたがフェッチされたときに似て ユーザーからのキャッシュ。 そして基準がどこにあった IDは、セッションIDと同じ。 実際には1行があります それはそれと一致する可能性が。 しかし、まだ行が1行のみが返されました。 ですから、行に行かなければならないだろう、 インデックス0、インデックスキャッシュに 実際にあなたのキャッシュを取得する。 観客は:印刷機能です 同じことをエコーでの? ZAMYLA CHAN:はい。 はい。 同じのエコーを印刷します。 観客は:foreachのループである 行へのインデックスへの唯一の方法は? ZAMYLAチャンは:foreachのループである あなたができる唯一の​​方法 行を反復? いいえ。 また、提供、forループを使用することができます あなたは長さを知っていることを 行の配列の。 読者:あなたがそれにアクセスすることができました [聞こえない]として行を使用して? ZAMYLA CHAN:だから、それにアクセスすることはできません あなたが持っていない場合だけで行を使用して foreachループであることを提供 あなたが行を宣言していない。 はい。 うん、白。 観客:TRおよびTDはだから何をしますか? ZAMYLA CHAN:だからTRと TDはHTMLタグである。 trは始まりを示し テーブル行の。 そして、それぞれのTDを示し 新しいテーブルのデータ列。 観客:どのような行のVisualの のような、単にSQLを想像され、どのように 彼らは、行を持っている。 [聞こえない]。 ZAMYLA CHAN:うん。 それは素晴らしい点だ。 あなただけのように行を可視化することができます Excelのテーブルのような、ちょうど 行のリスト。 [OK]をクリックします。 わかりました。 だから今我々は、次の場合には、[上で行ってきたこと これ以上の質問は、私たちがよ、そこではありません 挿入に渡る。 私はいくつかに挿入したかったので、もし 表および特定の列を挿入する 値は、私は自分自身を挿入することができ 今年7 Ravenclawへ。 しかし、時には重複があるかもしれない 値、我々我々はpset7で見たように 当社のポートフォリオを更新しました。 したがって、このケースでは、上で使用する 我々はしないように、鍵更新を複製 同じで複数の行を格納する 値ではなく、むしろそれを更新します。 その後、我々は、実際に更新しました、 これは、挿入ではありません。 それは、更新だけの更新です 指定されたと、あるテーブル内の 基準次いで、最終的に、削除 その非常によく似たことを行います。 観客:簡単にあなたでした 重複したキー上に行く? ZAMYLA CHAN:うん。 基本的にここで、私は、INSERT INTOを持っている gringotts、ガレオンは、これらの値である。 しかしIDは、おそらく、一意のキーです 値は、MySQLのテーブルに設定します。 だから私はすでにそのIDを設定している場合は、 私は、新しい行を挿入することはできません。 だから、まだ存在していない場合、 私はそれを更新する必要があります。 白の中間にある。 観客:そう、削除、挿入、更新、 と選択し、それらのすべての利用可能です ローカルに[聞き取れない]? ZAMYLA CHAN:だから挿入し、 更新、削除、および 選択されたすべてのSQLクエリです。 だから、SQLを使用しているときはいつでも、 あなたが利用可能なものがあるでしょう。 観客:過去のクイズへ戻る - 扱っ質問がありました あなたは、テーブルを持っていたし、したい場合 1にテストの点数を挿入し、挿入 自分の名前、それはあなたをさせませんので、 [聞こえない]友達のテストのスコア。 [挿入でそれをどのように行うのでしょうか? ZAMYLAちゃんそこで質問していました 前回の中期質問。 私はこれを認識していないよ 1それは今です。 そのため、おそらくその後、あなたがしたい場合は、 出てくると私を見ると、私ができる 確かにあなたにヒントを与える。 しかし、同じように、物事を挿入すると言えば ときに誰かの得点を取って 、の話をさせてはならない SQLインジェクション攻撃。 だから、SQLインジェクション攻撃は、本質的に どこで誰が取る 低セキュリティの利点 あなたは、データに取っている方法です。 だからここでは、単にCS50金融と同様に、 私たちがログインしたとき、我々は中に入ることができる ログインフォームにユーザー名、 最初のテキストボックス、および その後、パスワードを入力してください。 おそらく、私たちのPHPコードは、見えるかもしれません このようなものは、$ユーザ名 ポストデータ·ユーザ名とパスワードは ポストデータ·パスワードです。 そして、我々は、ちょうど私たちのクエリを実行し、言う、 [OK]を、よく、私たちのクエリでは、しようとしている ここで、ユーザーの皆様からの選択 ユーザ名です 彼らが提出した1。 とパスワードはpasswordです、 パスワードが一致していることを意味します。 今、どのような場合ではなく、実際に のように、実際のパスワードを提出 12345と言うこと熊手を推測 パスワードとハックしようとしている彼らの アカウント、どのような場合は、代わりに 彼らはこれを提出した。 彼らは多分にあると入力することができ パスワードを推測。 そして彼らが終了になる 引用して入力したり= 1 1。 つまり、SQLに直接ペースだろう このようなものを見て問い合わせる。 ユーザー名のユーザーから選択します =突起とパスワード ユリまたは1 = 1に相当します。 だから、どちらかのパスワードがあります 正しいまたは1 = 1になることは、 常に真である。 できるユーザは、基本的に、この場合のように これを利用し、ちょうどログイン それ自体とハック 誰かのアカウント。 私たちが避けたいだから、なぜです これを実行する必要が誰か。 しかし、幸いなことに、クエリ機能による プレースホルダに渡すとなります あなたのためにこれの世話。 また、通常は望むことは決してないだろう 実際にパスワードを提出する 自分自身。 我々はハッシュ化されたまたは暗号化された理由です CS50ファイナンスでそれら。 観客:過去のクイズ話 約MySQLのエスケープ文字列。 我々はそのことについて心配する必要はありますか? ZAMYLA CHAN:それは良い質問です。 MySQLのエスケープ文字列は、間違いなく 私たちのクエリで使用された機能。 しかし、間違いなくそのに見て。 私は知っている公正なゲームだと言うだろう あなたはそれを呼び出すために必要があるだろうことを 文字列に対して機能します。 ええ、ベリンダ? 観客:それはだ時にどのように知っていますか 単一引用符または二重引用符? そしてまた、私は講演で、あなたのように感じる 持っていないについて何かを言及 [聞こえない]か何かか 端部に第2単一引用符。 私は彼が講演で指摘したと思う あなたは、アポストロフィ1を持っていることになっている して、アポストロフィを持っていない か何か。 観客:[聞こえない]。 観客:ものは最後のシングルである その第二のボックスにそこに引用 があってはならない。 [聞こえない] そのためには、その最後のシングルを取るとき 出引用したコンテンツのためにこれらと一致 あなたがそれを持っている場合、パスワードは、ここで クエリは、単一引用符であります すでに終了。 あなたは、その単一引用符を使用する 1に直面しているものと [聞こえない]。 それでは、そのテキストに実際の ボックスには、それを持つべきではない。 ZAMYLA CHAN:私はそれを変更します。 [OK]をクリックします。 ご不明な点が存在しない場合は、私がよ 話をヨセフにそれを渡す JavaScriptの約、エトセトラ。 [拍手] JOSEPH ONG:だから我々が実行されている 少し背後にある。 あなたが残しているのであれば、それはOKです。 しかし、我々はあなたがダウンして、あなたの頭を維持することをお願い あなたが途中であれば、あなたはそう カメラをブロックし、あなたが使用していない あなたがしなければならない場合、バック終了。 私は途中でジョセフです。 こんにちは。 テスト、テスト。 ダン、それは良いでしょうか? 涼しい。 だから、ビデオも掲載されます その人のためのオンライン 今残している。 ぎこちない。 [OK]をクリックします。 そうクイズレビュー。 これは猫です。 そうでないかもしれないです、今は、JavaScript、 君たちのいくつかについてAWWとして。 [OK]をクリックします。 だから、最初Zamylaからのリコールです。 PHPがあることを覚えている サーバー上で実行されます。 と時間の多くは、あなたたちはループを書きました PHPで右、HTMLをプリントアウトするか? だから、そのコードが実行されると、その あなたがプリントアウトHTML出力 ユーザーに送信されます。 一度それが起こると、もはやPHPができます あなたがページをリロードしない限りに、実行することが PHPを再実行はもちろん、。 しかし、あなたはそのHTMLを印刷した後、 あなたはどこにも行くことができない。 だからHTMLは、ユーザーに介して送信される こっちは、ブラウザである場合、 ミロは、コンピュータを使用しています。 と非常によく、いくつかあります 私たちは、ユーザーにHTMLを送信した後。 時々、のような何かをしたい あなたが何かをクリックしたとき、我々は欲しい 警告ボックスは、のそれらの種類をポップアップする を押したときのような相互作用は、 あなたが何かをクリックし、キー、 ページは、私が起こるために何かをしたい。 さて、あなたは、PHPを再実行することはできません そのHTML一度コードが設定されます。 それでは、どのようにこれを行うのですか? 我々はと呼ばれる新しい言語を導入 ブラウザで実行するJavaScript、 それはあなたが物事を行うことができます HTMLにあなたが受け取った後 サーバーから。 我々は、クライアント側と呼ぶ理由、これはある プログラミング言語。 それはあなたのコンピュータ上で動作します - クライアント。 これまでのところ、そのについてのご質問? そのパラダイムは、人々に理にかなっている? [OK]をクリックします。 グッド。 わかりました。 だから、最初に注意する JavaScriptは、PHPではありません。 彼らはいくつかの異なる構文を持っている、 その我々が入るよ。 彼らは非常さまざまな用途を持っている。 あなたのために再度のJavaScript、、 クライアントのブラウザ、。 サーバーは、他の誰かの上のどこかに実行されます 情報を送信するコンピュータ あなたには、正しい? だから我々は、PHPコードを記述するように依頼した場合 試験問題には、書いてはいけません JavaScriptとその逆。 あなただけのポイントを失うことになる、 それは右ではありません。 それでは、いくつかに取得させ 構文の違い - 左のJavaScriptを 右側のPHP。 あなたが気づく最初の事 JavaScriptを、我々はして変数を宣言 varキーワード - V-A-R。 PHPは、ドル記号を使用し、 Zamylaは、先に述べたように。 あなたが連想を宣言する場合 配列は、上でおなじみの構文を参照してください PHPで右側。 左側には、代わりに あなたは中括弧を使用しています。 してから、キーが左側にあります。 次に、コロンを持っている。 そして、あなたは値を持っている あなたが望むこと。 だから、これは、PHPでそれを行うだろうかです 、第2に、右側に ミロで始まる行。 そして、それはあなたがそれを行うだろうかです 必要に応じてJavaScriptで左側 我々は、オブジェクトと呼ばれるもの。 JavaScriptでのオブジェクトがある ただ連想配列。 だから、中に、フィールドにアクセスする場合 PHPは、この括弧構文を使用しています。 そして、このようにして、再割り当てすることができます ローレンは、この所有者フィールド。 さて、JavaScriptで、1がしたい場合は、 あなたができる、フィールドにアクセスし、それを変更する ドット構文を使用します。 また、ブラケットの構文を使用することができます。 しかし、あなたは使用できません。 PHPのドット構文。 それは動作しません。 それが唯一のPHPで動作します。 そして最後に、に物事を印刷する コンソールには、コンソールログを使用し、その あなたたちはpset8にたくさん使う。 あなたはそれをCONSOLE.LOGすることができます。 あなたは、アレイを印刷したい場合は PHPは、あなたが印字Rを使用する必要があります。 右側に、あなたは、私は、ハッシュ参照 あそこ文字列連結。 誰かが先に尋ねた。 私はJavaScriptでプラスを使用しています。 私は何かを連結する場合 PHPで、私は、ドットを使用しています。 これらは異なっている。 あなたは、PHPのコードを書いている場合、 プラスを使用しないでください。 あなたは、JavaScriptを書いている場合 コー​​ドは、ドットを書かない。 それが間違っている可能性がします。 そして、あなたは悲しいよ。 そうな構文の違い。 あなたがする必要がある場合ので、あなたの構文を知る 質問を書いて、次の構文を使用 誤った言語から、 それは動作しません。 そして、それは間違っているでしょう。 それでは、いくつかのコントロールについて話しましょう あなたがどの​​ように使用するか、の違いを流れ それらのそれぞれのループ。 Zamyla右側の上を越えて行った。 右側にあるもの 精通している必要があります。 の左側に見てみましょう。 あなたはJavaScriptで、N個のforループを使用すると、 あなたのループ変数、VARあそこI、 配列のキーをループ。 だから、名前、家、および役割を参照してください。 私は私をCONSOLE.LOG場合は、私が取得 名前、家、および役割。 これらのキーである。 JavaScriptでは、foreachループが行く この配列の値以上。 だから、彼らは両方のIだ気づく。 しかし、ここで、PHP側では、出力します ミロ、CS50、およびマスコット出。 それらは、PHPでの値です。 したがって、これらは、これらの2が異なる方法である 異なる言語で。 だから、foreachの使用している場合 ループは、そのことを負うものではありません。 あなたの鍵を提供します。 あなたはn個のforループを使用している場合と、しない それはあなたに値を与えるものとします。 これは、これまで理にかなっていますか? 次のスライドは、お見せしようとしている あなたは反対にアクセスする方法 それらの各。 さて、あなたはJavaScriptで鍵を持っている場合 あなたは、値をしたい にあなただけのインデックス それを持つ配列。 だから私のミロはあなたに何が表示されます あなたが欲しい - 値。 PHPでこの別の構文があります。 あなたが本当にそれを知りたい場合は、私はしないでください 我々はまだあなたにそれを示したしたと思う。 もし興味があるなら、あなたは使用することができます 右側のこの追加構文 実際にあなたが得るようになる側 PHP内のキー使用している foreachループ。 トリビアのそのように少しだけ もし興味があるなら。 だから、実証することだけです これらの二つのループの間の差。 あなたがしているときにそれらを混同しないでください 質問をプログラミング。 それについての質問。 涼しい。 わかりました。 JavaScriptのオブジェクト。 私はそれらについて話しました。 彼らは、連想配列のようにしている。 私はあなたが注意したい一つのこと ここで、その連想の値 配列には、JavaScriptで何もすることができます。 それも、機能することができ、 あそこのような。 Iは、機能を有すること キーの値です。 そして私は、その関数を呼び出したい場合には、 私は樹皮にアクセスします。 そして私は、括弧を入れる この後。 そして、それは動作します。 そうか質問? なし? [OK]をクリックします。 グッド。 PHPのようなJavaScriptや、 弱い型付けされている。 どういう意味ですか? それは、型を持っています。 しかし、あなたはJavaScriptを宣言するとき 変数には、私は、varを言う。 あなたはそれを言うことはありません。 それはものではありません。 あなたはそれが変数だと言う。 して、JavaScriptは処理します あなたのためのフードの下のタイプ。 我々は自由との間で変換することができます このため種類。 だから私は数として開始 この場合は。 そして私は、文字列を持っている。 そして、私はそれに私を追加してください。 そして、私は私に戻ってそれを再割り当てする。 だから最初の行に、 私は数値です。 二行目に、私は今になっ 私は再割り当てを行った後の文字列。 そしてここで、私はちょうど連結よ 文字列の上にその数。 だから、見ている私がいたにもかかわらず、 整数の最初の部分では、ソートの のAに変換されるように 文字列として追加されている そのハロー文字列の上に。 だから、それは私が何を意味するかだ 緩い次のように入力して、。 つまり、間に変換することです 非常に簡単なタイプ。 そして、それは警告をスローしません あなたに、Cのように行います。 だから、私は今こんにちは含まれています 文字列への123。 次へ。 我々はまた、自由に比較することができます 型の間。 だから、あなただけの==を使用する場合、非常に多くの PHPは、JavaScriptのよう 同じようなことをします。 文字列123は、番号と同じである 123あなたは二重の等号を使用しています。 三重等号を使用する場合、それはまた、 ていることを確認したい 型は同じです。 だから文字列であり、それがあるため、 彼らは両方の方にもかかわらず、数、 123、あなたは、トリプルを使用 あなたが偽の取得に等しい。 二重の場合と等しくなり、あなたは真の取得、 ダブル等号はないので、 型を気に。 トリプル等号は、型を気にしない。 質問? [OK]をクリックします。 とJavaScriptについてのもう一つは、ある あなたがない限りスコープはグローバルの一種である 関数内。 そして、それは同じように動作します 実際にPHPの道。 それでは、この例を手放す。 私は、999 iに設定してください。 そして私は、forループを、このに入る。 だから私はこの中で私をプリントアウトしていた場合 ループは、I 0、1、2、3、4を期待する。 私は、I = 4に到達する。 それは、5に今私をインクリメント ループの終わり。 そしてそれは、ループから抜け出し、 それが満たしていないため、 条件はもう。 あなたはそれをどう思いますか、次の のconsole.logを出力します? だから、それがCではCでどうするかだ あなたが外VARように私を持っている場合、以下の原因 あなたは次のように、ループ内のvar Iを持っている ループのために、それはそのようなことを行う それがスコープだと2 私のは異なっている。 JavaScriptでは、それだけであろう 同じIのように扱う。 それは価値だったので、私は、5を得る それは、ループの外に出た後に。 ので、これらのiのは、同じIである。 それは理にかなっていますか? まあ、それはから理にかなっている JavaScriptの立場。 しかし、同じパラダイムはない 彼らが持っているCに引き継が 異なるスコープ規則。 はい。 観客:[聞こえない] [聞こえない]関数の外? JOSEPH ONG:だからその関数の外? だから、僕は第二のものに得られます。 だから我々は、(i)のfooを呼び出します。 これは私がインクリメントし、fooの中に入る それ、それをログに記録します。 だから、5だった。 だから、6となります。 しかし、私が話していることである その関数でそのI。 それは、パラメータなので、それはだ その関数にスコープ。 だから、かつて私は、実際にそのから抜け出す 機能、それが今行くために起こっている 昔からi。 私は、理由だけでスコープされていること それは関数内だ。 そして、我々は適用範囲と機能を持っている。 しかし、我々は外のスコープを持っていない JavaScriptでの関数の。 それは理にかなっていますか? はい。 質問。 観客:[聞こえない]は同じ? JOSEPH ONG:そうそう。 PHPでは、それはものと同じタイプです。 実際に若干の微妙があります。 しかし、あなたはについて私に尋ねることができます レビュー後のこと。 あなたは本当に知っている必要はありません クイズのその繊細。 すべての意図や目的のために、様 変数、グローバルおよびPHPない限り、 彼らは、関数内で同じだ JavaScriptでの事。 はい。 観客:なぜこれが許可されている JavaScriptと他にどこがない? JOSEPH ONG:だから、なぜそれが許可されている JavaScriptでなくC言語で? それはちょうど思い付いたのは誰 JavaScriptはこれがOKであると判断しました JavaScriptを。 だから、単にプログラミング言語のようなものだ 私たちが言うように、条約。 はい。 観客:なぜやった それが6から5に行く? JOSEPH ONG:だからそれは6から5行ってきました、 私がfooに私が渡された場合、その理由 私のfooの内部は今のfooにスコープされている、 スコープは、内の関数に存在するため JavaScriptを。 しかし、私はここから出たら、それのため 関数にスコープし、私はちょうどよ 中にあった通常のIを使用して 制御フローの残りの部分。 理にかなって? 私は上に移動することはできますか? わかりました。 涼しい。 これの受け入れは、オブジェクトである 参照によって渡されます。 渡すときに、方法を知っている あなたはできる、Cに配列 実際には配列を変更する? これは、JavaScriptで同じことだ。 私は、この場合、オブジェクトを渡すと、私 このcatify関数にミロを可決した。 ミロは始まります。 彼の名前はマイロバナナです。 私は関数に、そのオブジェクトを渡します なぜならそれは、オブジェクトの連想 JavaScriptで配列。 Iは、操作を実行する その関数では、意志 実際にオブジェクトを変更します。 だから、これはオブジェクトのみのために起こるのだろう JavaScriptで、ちょうどそれが起こるような C.だからミロの名前の内部配列の場合 実際に今の猫になります。 それは理にかなっていますか? だから、これはオブジェクトのみで動作します。 オブジェクトは参照によって渡されます。 はい。 観客:だから、言っていること 変数iとは対照的である。 JOSEPH ONG:うん。 どの変数私だけだった 数、右? あなたが通過するときには、C言語でのようなものだ INTEGER、それがコピーを作成します。 そして、あなたは配列を渡すとき、それは実際に の実際の配列を変更する C.同じことがで発生 この場合のJavaScript。 わかりました。 そして次に、ミロは悲しいですので、 彼は今、猫です。 つまり、後に実際にミロた 獣医にいくつかの旅。 では、どのようにJavaScriptを使用しない Webページ内の? 我々はそれを含むことができる。 これは、ストリップタグを使用してHTMLコードである。 だから私はそこにストリップのタグを持っています。 そして私は、いくつかのJavaScriptを置く スクリプトタグ内のコード。 次いで、これを実行する。 私はちょうどこのようにそれを行うと、それはだ インラインJavaScriptを呼んだ。 それは、厄介なのようなものだから JavaScriptは、HTMLに実際にある。 これを行うには良い方法、非常に良く、 中にJavaScriptを書くことです 外部ファイルとして提供する ソースとスクリプトタグ。 そして、これは、そのJavaScriptファイルに移動します からJavaScriptコードを読み取る 代わりに、そのファイル。 そして、この方法では、あなたは多くを持っていない あなたの最初にはJavaScript になり、HTMLファイル、 それは本当に厄介な。 あなただけのどこか別の場所に置く。 そしてそれはそこからそれを読み取ります。 それは理にかなっていましたか? 配置の問題。 この特定の場合において、 スクリプトは、本体の前にある。 私はそれを実行したときにそう、そこ まだ体内には何もありません。 多分これは少しになります 私はこの次の部分を示している感覚。 この場合、スクリプト DIVの後に来る。 だから、DIVは、実際に表示されます 最初のページに。 右こここの小さな赤い円の中に、 テキストが表示されます参照してください。 して、アラートが表示されます。 最初のケースでは、スクリプトのため、 DIVの前にあった、 アラートが最初に表示されます。 して、divが後に現れる あなたがボックスを閉じます。 だから、実行が問題になります。 だから我々は、この点に注意しておこう。 これは重要になります 少し中。 [OK]をクリックします。 とてもよく、どのようになるまで待つか ページ全体があなたの前にそれからロードされている いくつかのコードを実行する? 私たちは、この小さな入るよ 少し後すぎ。 しかし、ちょうどこの位置をキープ ときに我々のために念頭に置い事項 別のスライドに来る。 だから我々は今、DOMを取得する。 とDOMとは何でしょうか? あなたは、HTMLコードを見ればそう、それだけだ 画面上のテキストの束。 それでは、どのJavaScriptがいることを知っていますか これはHTML要素です? だから我々は、いくつかのメモリを持っている必要があります この表現 我々が持っている構造。 そして、我々は、メモリにこれを持っているときはいつでも JavaScriptで表現、我々は呼ん DOMのこと。 そして、それは人々が決めただけの方法だ 我々はこれを表すべきであること などのHTML構造。 そして、何このDOMは、次のようになりません? さて、メモリ表現では、 私たちは、このテキストを取る。 そして、我々はメモリにそれを回す 表現。 だから、これはHTMLです。 だから我々は最初にすべてのことを見つける DOMツリーは、文書を有している。 それは、木のように見えます。 およびドキュメントは、HTMLが含まれています タグ、実際にすべてのもの 今、この内部。 HTMLタグは、2人の子供がいる。 それは、頭を持っています。 その頭には、インデントを見れば あそこそれが構造化されている方法で、 終了タグの間に、 頭は、子供を持っています。 子供がタイトルです。 その通りです。 今、私たちは、体の子供を持っている。 して、その本体が持つ 子供は家族を呼んだ。 そして、その家族は3人の子供がいる - 最も古い、中間、最年少。 だから、図を描画する方法を知っている必要があります このように、我々はどのようにお聞きするとき 我々は与えるときの図を描く もし左の上のHTML。 DOMツリーを生成する方法を知っている。 そして、これらのものの中に、ちょうどそこ 私が表現したいくつかのテキスト、 小さな箱のよう。 このDOMツリー構造を作るん 感覚とDOMとは何でしょうか? だから、Pは何の略ですか? あそこP、こっち そのタグで表す HTMLで段落タグ。 だから、それを調べることができます。 しかし、それはそれはいくつかの意味 いくつかのテキストのためのスペース。 そして、それはいくつかのデフォルトCSSスタイルを持っている、 それは段落タグだから。 しかし、本当に心配しないでください その部分が多すぎる。 ちょうどそれがプレースホルダと知っている いくつかのテキストの。 はい。 質問? はい。 読者:あなただけのCSSを述べた。 ハッシュ家族とハッシュ すべてのものは、基本的には CSSのIDを表す? JOSEPH ONG:ええ、その通りです。 私は何をこれらのハッシュを取得します 第二の平均。 アンジェラは、CSSを介して行った時、彼女は CSSセレクタについて話しました。 これらは、CSSセレクタであることを 彼女が話していた。 はい、ロブ? ROBボーデン:私もコメントだろう タイトルタグの内側に、そのDOM また、テキストノードである。 JOSEPH ONG:右。 だから、タイトルタグ内、 私はいくつかのテキストのDOMを持っている。 だから本当に、このタイトルは次のように持っている必要があります 小さなボックスには、同様にそれをオフに来て。 しかし、それは本当に問題ではありません この場合はあまり。 私たちは本当にテキストノードを気にしない、 我々はあまりにも多く、それらを呼び出すように。 [OK]を、私たちはやる。 どうやら、私たちはやる。 と私はときに修正されます 私は再びそれをアップロードしてください。 それは理にかなっていますか? では、どのように、DOMを操作するのですか? あなたはで、DOMを扱うときはいつでも JavaScriptの、2つのステップがあります。 あなたは、DOM要素を選択します。 それから、あなたはそれに物事を行う。 この場合には、抽象的に、私がしました 中央の要素を選択した。 して、ものを行うの一例 それにテキストを変更することになる。 それはボブれていました。 今、私はそれにやったことは、私が変わった この場合は、ミロのボブ。 では、どのように実際にこれを行うのですか? 我々は選択をどのように行うのですか? そして、我々はにやってものをどのように行うのですか 事はかつて我々はそれを撮影した? さて、あなたたちの方法は、それを学んだ このクラスの何か我々を使用することによるものである jQueryのと呼ばれる。 だから、jQueryは何ですか? jQueryはなりライブラリです 書き込むには、WebブラウザでJavaScriptが容易。 だから、誰かが時間がかかった とjQueryを書いた。 jQueryのは、実際に書き込まれる JavaScriptで。 そして彼らは、我々は今、これをしなかったので、 その機能の全体の束を持っている 私たちは、それが私たちを作る使用することができます 本当に簡単に住んでいます。 だから、いくつかは何ですか それがないもの? それは簡単に要素を選択します。 これはHTMLの変更になり、 簡単にクラスを追加する。 これは、Ajaxが簡単になります。 我々は、第二​​のものに得られます。 そして、それはCライブラリに類似します。 だから、string.hのがあります あなたは、strlenを取得します。 あなたは、strcpyのこれらの事のすべてを取得。 あなたはjQueryをインクルードするときには、素敵な取得 変更の要素を選択する方法 物事、エトセトラ。 あなたは、余分な機能を取得 JavaScriptは、あなたを与えるものではありません。 だから、jQueryはJavaScriptのではありません。 jQueryはで書かれているライブラリです JavaScriptをするJavaScript 書きやすい。 だから、jQueryは、プログラミングではありません 言語。 しかし、JavaScriptはある。 作る。 あなたの用語の権利を得ることを確認。 ご質問? はい。 それが問題だ? わかりました。 それでは、どのようにjQueryを使っていますか? さて、あなたは、いくつかを書いているとき あなたは、JavaScriptのコードと jQueryのファイルの先頭にあるとして、 スクリプトファイルには、ドル記号を使用する 今jQueryのへのアクセスを取得します。 そして、これは異なっている PHPのドル記号。 それはあなたと同じ記号です お使いのキーボードのタイプ。 しかし、彼らは非常に異なるものを意味する。 PHPのドル記号は、これを意味します 私は変数を宣言する方法です。 あなたが用意しましたJavaScriptを、中 jQueryは、それはjQueryのを意味します。 だから覚えておく。 では、どのようにDOM要素を選択するのでしょうか? さて、あなたはそれを行う醜いのJavaScript 方法は、Access グローバル変数を文書化します。 それから、あなたは、ID·ファミリーによって要素を取得します。 これは本当に長いと長ったらしいです そして非常に素晴らしいではない。 または、すべての要素を取得することができます つまり、pタグである。 つまり、JavaScriptであまりにも動作します。 しかし、我々は、本当にあったことはありません もしあまりにも多くの構文。 私たちはあなたを示したことはjQueryのだった。 そのそこに全体のセレクターのように、 JavaScriptでちょうど得る発現させた この非常に素晴らしいドルに凝縮 ハッシュタグファミリに署名する。 および$ Pは、単にどこにそれはそのようなものだ。 あなたはすべてのPタグを選択します 家族の中に、我々はスペースを入れて 2間。 そして今、我々はすべてのPを取得する 家族の内側のタグ。 そして見覚え? さて、アンジェラの話 CSSセレクタ。 私に1秒を与える。 だから要素を選択するためには、 あなただけのあなたと同じものを使用しています CSSセレクタを行うだろう。 あなたが先頭にシャープを置く場合 それを、それはIDに​​よって選択されます。 ドットは、クラスによって選択されます。 あなただけがないものを持っている場合 ハッシュやドット、それはこれらのタグを選択します。 質問。 はい? 観客:我々は我々のドットを使用する HTMLは、jQueryのではないということです? JOSEPH ONG:私たちのHTMLのドット JavaScriptのものです。 これは、jQueryのことではありません。 あなたたちはそれを学んだ方法 jQueryは。HTMLを使用することです。 それから、あなたはそれをどのような合格 HTMLはなるだろう。 だから、僕はのものに買ってあげる 実際に第二。 では、どのように要素にものを行うのですか 我々はそれを選択したら? だから、の例です 要素を選択する。 だから今、我々はそれにものをやってみたい。 この場合、私は戻ってみましょう 前のスライドに。 それは前にボブだった。 そして、私はそれを変更したい ミロへのHTMLの内側。 だから私は、HTMLの機能を呼び出す 要素から。 すなわち、HTML関数である 素子の製造方法。 そして私はそれに何を与える 私は、HTMLになりたい。 そして、それはただの中身を置き換え 私はそれを与える何とそのタグ。 はい。 質問? 観客:ハッシュタグが使用されている 唯一のjQueryのための。 [聞こえない] 我々はそれを使用することはありません。 JOSEPH ONG:ええ、その通りです。 しかし、あまり心配しないでください 純粋なJavaScriptの約。 私はあなたたちがどのようにに集中したい ので、jQueryを使ってそれを行うだろう それが重要になるだろう クイズに一部。 右。 その通りです。 ですから、そのハッシュタグを参照してください、その結果、 を持つ要素を選択するように対応している そのためハッシュタグのID真ん中。 ハッシュタグは、IDを意味します。 この要素は、中央のIDを持っています。 だから、我々は選択の要素です。 観客:[聞こえない]。 ドル記号ハッシュタグ[聞こえない]? JOSEPH ONG:だからNO。 質問は、あなたが使用することができている。値。 と。値は、要素のみで動作します それは入力です。 jQueryのでは、それは次のようになります。 。ヴァル、ではない。値。 だから私は小さな例に買ってあげること 組み合わせてこのすべてを示しています 第二にある。 しかし、私はこれは少しスニペットを提供していますと思います これまで人々には意味があります。 HTMLを変更したい、 HTMLのメソッドを呼び出します。 はい。 読者:あなたは説明することができます この方法は、再び? JOSEPH ONG:だから方法があるだけ この中のいずれかに属し、関数、 場合、これらのDOM要素のいずれか、 あなたは、私を見るので、 最初の要素を選択した。 実際に、私は、マウスを使ってみましょう。 私は最初の要素を選択した。 そして私はこのHTMLと呼ばれる それが持っていた機能。 この関数が属しているため このことは、我々はメソッドを呼び出します。 それはそれのためだけの派手な名前です。 もう一度言う。 だから我々は選択した、覚えて 今の要素。 そして、我々は内部にそれを入れてきた 要素変数。 正しいですか? だから我々は上のHTMLを変更したいとき 内部では、それはあなたが、前にボブだったので、 ミロにそのテキストを変更したい。 だから我々は、HTMLを呼び出します。 そして、我々はそれを伝えるものを内側のHTML その要素は今でなければなりません。 そしてそれは、ミロに変更し 私はそれをミロを与えたので。 観客:そう、彼らは一緒に作業している。 [聞こえない] JOSEPH ONG:ええ、ええ。 彼らは一緒に作業している。 だから、そのうちの一つは、選択 要素最初。 そして二つ目はない それに何か。 はい。 観客:[聞こえない]。 この方法は、HTMLのと異なっている場合 あなたは、実際の同等の方法を持っている。 JOSEPH ONG:うん。 つまり、別の方法である。 つまり、別の方法である。 そして、我々はちょうど第二にそれをカバーすることができます ここでは、例に到達したとき。 私は確かに私達がスピードアップすることにしたい 我々は時間が不足しているため。 しかし、我々は現在、時間をかけて道を実行しました。 [OK]をクリックします。 涼しい。 あなたがクラスを追加したいのであれば、そこ また、クラスメソッドを追加します。 これは何のほんの一例です。 あなたはjQueryを使って行うことができます。 それはちょうど、クラスが追加されます。 あなたはそれを削除したい場合は、 あなたは、removeを呼び出すことができます。 それはあなたがすることができるだけで、別のことだ。 あなたができることのそう多くの例。 だから、僕は時にそれを置くことができます このようなトップ? 最年少削除します。 私はちょうどで、そのJavaScriptを実行する場合 私のファイルの先頭には、その動作には問題でしょうか? 右。 真ん中はまだ存在しないため。 だから、これは仕事に行くのではありません。 実行順序。 これは、最初のトップに移動します。 何が? 観客:最年少はまだ存在していない? JOSEPH ONG:うん。 最年少はまだ存在しません。 その通りです。 読者:あなたはミドルと述べた。 JOSEPH ONG:申し訳ありません。 最年少はまだ存在しません。 そして、他のことは、私がいないです jQueryを含め ファイルには、スクリプトのsrcを依頼してください。 だから、仕事に行くのではない。 実際に、私はその中でもしませんでした で次のスライド、 どちらかそれを修正することになって。 しかし、我々はこれを行う方法は、JavaScriptのです イベントが駆動される。 それでは、私たちがやっていることは我々がイベントを使用している これを実現するためのハンドラ。 だから、私は文書を選択 最初に設定してください。 私は文書がある場合には、[OK]を言う 準備ができて、私は機能を実行してみましょう。 だから、すべてその構文手段です。 私は、ドキュメントを選択した。 ここで、文書がある場合に 準備ができて、機能を実行します。 だからこっち文書であるとき 準備ができ、すべてのHTMLが持つことを意味する ロードされた後、私は関数を実行 つまり、その要素を削除します。 だから今、私はこの機能を実行すると 私は準備ができに合格したことを、私は今 上のすべてのHTMLが保証 ページが最初に存在しようとしている。 はい。 質問? 読者:eventキーワードとは何ですか 関数内? JOSEPH ONG:そこらでそのイベントのキーワード 機能は単にパラメータであることを 関数に渡されます いずれにしてください。 それはちょうどその何か あなたが無料でゲット。 あなたは内のキーハンドラを使用している場合 pset8、そのイベントがために、あなたに言うことができる たとえば、あなたが押されたキー。 この場合、readyイベントのため、 それは実際に超便利ではありません。 しかし、キーダウンイベントのために、それはより多くの 便利な、あなたは知ってもらうため、どの あなたは、キーにアクセスすることで、押されたキー そのイベントオブジェクトオフコード。 正しいですか? それは理にかなっていますか? [OK]をクリックします。 はい。 質問? 観客:だから、置くことができます ダウンスクリプトタグ低い? JOSEPH ONG:そうそう。 スクリプトを入れることができます 下の方にタグを付ける。 しかし、それは本当に厄介ななります。 そして、我々はすべてを集中したいと 1場所で私たちのコードの。 そしてこれは、私たちはそれを行うことができます。 覚えている以前の私は、よりよいがあると言った 要素があることを確認するための方法 あなたがコードを実行する前に、ページ上の? そして、これはまさに良い方法である あなたはそれを達成するでしょう。 観客:[聞こえない]。 JOSEPH ONG:うん。 あなたはまだ右に持っているのでしょうか? 覚えて、あなたが含まれているため ページの上部にあるファイル。 だから、前に最初に実行するために起こっている あなたはページの一番下に着く。 [OK]をクリックします。 だから、また別のを追加することができます イベントハンドラのタイプ。 この1は、単にクリックを処理します。 私はその後、最年少をクリックすると それがアラートにポップアップ表示されます。 これはただ異なっている イベントのタイプ。 readyイベントとは対照的に、あなたは今、 あなたが受信したときのクリックイベントを使用 要素をクリック。 そしてこの場合に、クリックを覚えて ハンドラは最年少に取り付けられている。 だから、場合にのみ発生 私最年少をクリックしてください。 そして、他の1、準備ができた場合に 文書に添付された。 だから、ドキュメントを待ち 準備ができて。 理にかなって? 私は私が上に移動することができると思います。 はい。 質問? 観客:[聞こえない]。 このケースでは、[聞こえない]を使用しています。 JOSEPH ONG:ああ、うん、そのためにある 場合、私は最年少のを待つ必要が 最初の画面に表示する要素 私はをクリックしてハンドラをアタッチする前に、 私は内側に入れてなぜそれが、 文書の準備の。 [OK]をクリックします。 そして次に、これは大きな一例です あなたはすべてを結合する方法。 これはただのフォーム検証例です あなたは、講義で見てきた。 だから、として一歩ずつ取る あなたはこのを通過します。 そして、それは完全にOKになります。 ただ上から下にそれを読む。 私は、下部にあるフォームを持っている。 文書が準備されると、Iはアタッチ このようなことを、フォームにハンドラを提出 私は、フォームを送信すると、私は値を取得する これらの入力の各々の内部。 それが空白の場合には、私は確認してください。 それが空白の場合、私は、falseを返すので、 私は、フォームを送信したくない場合は、 フォームが間違っているからです。 パスワードは空白になっていますか、それはあまりだ場合 8文字以上、私が提出していない 形、それはまた間違っているからです。 と戻り偽だけ防ぎ 提出からの形 新しいページに移動。 うまくいけば、これは理にかなっています。 私はあなたたちは歩くべきだと思う 自分で一歩一このコードのステップ。 そして、あなたが選択した内容を理解すれば 要素とそれにものを行う 実際に、これは作るだろう、伴う あなたに多くの意味。 はい? 観客:どういう 名=ユーザー名の意味は? JOSEPH ONG:だから名前=ユーザー名と 名=パスワードだけを見て意味 どのような属性 あなたが選択している。 して、それが一致する必要があります。 だから我々は、登録に入る。 そして、我々はすべての入力を見る と登録。 そして、我々は1場所の名前を選ぶ 属性には、ユーザー名と同じである。 ように、第1のセレクタのみを選択 ユーザ名を入力。 そして第2のセレクタのみ選択する それらが持っているので、パスワード1、 どのように設定され、そのname属性 それらがすることになっています。 質問? 観客は:送信時に、どのように 下部は上部を解決する? JOSEPH ONG:だからそれはだから イベントハンドラの。 だから我々はSubmitイベントを待っている それはフォームから発射されます。 そして、それは提出していることがすべてです。 なぜそこまで提出呼ぶのですか? これは、フォームの送信時に、言う、 私が提出したイベントを取得します。 だから私はちょうどそれを傍受してみましょう その後、代わりにこのコードを実行します。 はい? 観客:なぜあなたはありますか 機能イベントがありますか? 理由だけではなく、[聞こえない]あなたことができないのですか? JOSEPH ONG:JavaScriptでは、そのため 関数を宣言する必要があります。 つまり、それが動作するだけの方法です JavaScriptで。 あなたはそれが起こっていると言っている 機能を実行します。 だからあなたがしていること、それを言っている ここに機能を期待しての代わりに、 ただ、中括弧。 観客:AND関数 に続くものである? JOSEPH ONG:うん。 この関数は内部では何でもあり 中括弧の後 その関数キーワード。 はい? 観客:[聞こえない]。 JOSEPH ONG:に関して提出? 観客:いいえ、関数の イベントなしで。 JOSEPH ONG:うん。 イベントのないので、 あなたはそれを持つことができます。 イベントを必要としない場合は、 その後、あなたはそれを省略することができます。 しかし、これを行うと、その後 ただそこにそれを置く。 はい。 簡単な質問? 観客:[聞こえない]。 JOSEPH ONG:うん。 あなたは何をする必要があるかなので、 document.readyだけのすべてのを待つと言う ページのHTMLが最初にロードします。 通常は、あなたの要素が欲しい 所定の位置に任意のコードを実行する前に。 わかりました。 我々は、Ajaxを取得する必要があります。 私たちは多くの時間を持っていない。 だから、賛否両論。 JavaScriptは簡単に試してみるです jQueryを使って記述します。 しかし、jQueryはちょっと遅い。 PHPは、Cよりも遅いようなものだ、 それは解釈だから。 とjQueryよりも少し遅くなります JavaScriptを、それがたくさんのをするので フードの下の事。 あなたはjQueryを使用している場合とそう、それはだ より少し遅く JavaScriptを、たとえそれ あなたに素敵な優雅さを提供します。 そして最後に、Ajaxを。 これまでのところAjaxを使用すると、Ajaxのを見ていない まだpset7の面で、理由 あなたが行うと、提出 引用にフォーム。 それは、新しいページをロードします。 だから、この大きな白い閃光を得る その一方、ページ上の 第2のページをロード、正しいですか? もしあれば、それは本当にいいだろう このフラッシュを持っていませんでした。 Facebookのような、場合、あなただけへスクロール 底部には、新たなコンテンツが追加され ページ全体を更新せず。 したがって、このようなものがよいでしょう。 これはJavaScriptのコードです 左側にある。 あなたは、その入力の内側にあるものを手に入れる。 あなたはヤフーからの株式情報を取得 そして、あなたは、大きな文字列を作成しておくこと [OK]を、これは私が欲しいメッセージである、と言う 画面上に表示されます。 そして、あなたは内部にそのメッセージを入れて 取得するいくつかのHTML要素の 画面に表示される。 だから、ここで起こっていることがすべてです。 そこで、基本的に、これが全てですので、 JavaScriptとあなたが実行する必要はありません もうPHPは、これは確認します ページが更新されないこと。 だから、これは単なる抽象的アイデアです 私は今ここに言っていること。 抽象的アイデアは、あなたがそれを行う場合、すなわち すべてJavaScriptで、あなたは持っていない ページの更新。 しかし、どのように実際にこれを行うのですか? さて、実際に、の話をしましょう この最初の問題点。 問題は、JavaScriptである 実行は同期しています。 だから、1を待たなければならない あなたの前に終了する行 次の行を実行します。 そして私はヤフーに引き継がつもりならば、 とそのサーバが本当に遅く、 それは、それらを3秒かかる 株価情報と私に恩返し? 場合、私は、その価格ラインをヒットした場合 それがであるように実行が、同期している デフォルトでは、どのようなそれだけでどうするつもりなのはある お使いのブラウザが稼ぎしようとしている 3秒。 そして、あなたは行うことができるようにするつもりはない 何でもそれはそのデータを取得している間。 それが凍結になるだろう。 そして、それは残念だ。 あなたがユーザーをしたくない 凍結されたWebページを持っている。 正しいですか? それはちょうど悪いです。 誰もが同意する? あなたは、Facebookやそれを閲覧している場合 フリーズして、何もできない、あなたは 本当にイライラする。 だから、解決策は、我々が何かを作るである 代わりに非同期。 だから、このすべての非同期なことは述べています 私はこれを聞いてんだ、である 一部のデータのURL。 そして私は続けるつもりです。 私はちょうど実行維持するつもりだ どのようなことをした後にされたコード。 して、そのデータが準備ができているときはいつでも、 私はそれを処理します。 つまり、言っているだけです。 観客:Ajaxがちょうどになり コー​​ド非同期? JOSEPH ONG:それは非同期だ データをフェッチする方法。 アヤックスそんなに最初にすること それは私がデータを取得することができますです 外部サイトから。 そして2つ目は、それが確認しますです 私はながら、私のページは停止しないこと そのデータをフェッチする。 つまり、非同期一部だ。 それはどこか別の場所に消灯しますので、 私が言うので、私はしばらくの間に続ける それは、そのデータを取得することだ それが非同期になります。 私が実行してください。 だから、非同期に保つ 念頭に置いて考え。 そして、私はあなたに何を紹介 差である。 同期したもの 左側にあります。 非同期バージョン 右側にあります。 見に数字を見ている ステップは何に対応 各ラインで実行されます。 あそこ、アラートが最初に表示されます。 ヤフーから株式情報を取得しているため 3秒かかり、それが失速 3秒間。 そしてそれは価格に警告 これらの3秒後。 だから今、そのアラートショー その時点での最高 - インチ3秒 そして、それはその後のことで警告します。 だから、それだけで一歩一歩を行く。 それは何をあなたたちのようなものだ 正しい受け入れるだろう? 非同期実行の場合、 あなたが最初の警告。 その後、次のURLに消灯します。 そして、あなたは私がするつもりだ、と言う データだけを求める。 そして私はするつもりだ 後でそれを処理する。 だから、すぐに実行されます 私がいることを確認した後に次の行 非同期要求。 だから、0.001秒、アラートハイテクを参照してください。 その機能は、アラートBYEを実行します。 と私は約束をしたので、 、後でデータを処理なるか データが戻ったときに発生される 3秒後、私は実行することを 私はあそこがある機能。 はい? 観客:指定またはでした Ajaxは何を意味するのか明確にする? JOSEPH ONG:だからAjaxは方法であることであれば、私 私はウェブサイト上でだと私ときにデータを必要とする それから、ページをリフレッシュする必要はありません 私は、Ajaxと呼ばれるこの技術を使用しています。 それは本質的には意味し、フェッチ行く 別のWebサイトからのデータ。 とだけの方法でそれを行う 私のWebページをストールしない。 観客:だから、固有のものである JavaScriptやjQu​​eryのの一部? JOSEPH ONG:だから誰かが行う方法を書きました この長い時間前にJavaScriptで。 ある時点で、それは存在しませんでした。 だから誰かがこの技術を発明した 人が、このデータを要求できるようにする このようにして。 そして、彼らはいくつかのものを書きました あなたのためにそれをすることができません。 とjQueryは単にあなたにこれを提供します それを行うには非常に良い方法 この$で。機能を取得します。 質問? 私はについての質問に答えることができる その後アヤックスすぎ。 私はここにいるよ。 だから、私たちがすることなく、データをフェッチしてみましょう ページを更新。 そして、それは私たちがこれを行うのを聞かせて その非同期方法 ページを凍結しない。 長すぎ、読んでいない場合は、その 説明は、あなたのために長すぎます。 最後に、クロスサイト スクリプト攻撃。 我々はZamylaでこれを見ました。 私のデータベース内の誰かがこの名前を持っている場合、 これは、このスクリプトタグであり、私 マイページ上でいくつかのコードを持っている印刷物 人々の行の名前、または私が持って出 挿入するJavaScriptコード ページにこの名前、 どのようなHTMLが生成されれます? まあ、私は、HTMLタグを出力します。 私はこれらすべてのタグを出力します。 私は印刷だ部分に到達 私の友達と。 私はローレンをプリントアウト。 それはミロをプリントアウト。 して、データベース内の自分の名前 スクリプトの投稿です おもねらないFacebookのステータス。 私はページにこれを挿入しているため とき、それはJavaScriptのように見えるので、 このページは、ユーザーに送信されます、 それはJavaScriptのように実行されます。 だからこれは我々が呼んでいるものである クロスサイトスクリプティング攻撃。 誰かが悪意のある情報を入れます に対応することが、データベース いくつかの追加の文字列または いくつかのJavaScriptの文字列。 それがにプリントアウトされるときに このようにしてページを表示して、どのような どうなる悪いコードが実行されることをである 私が意図していなかったことを それが実行され得るためにのために。 そして、それはすべてのクロスサイトの スクリプティング攻撃がある。 そして、あなたが周りを取得する方法 Zamylaが言ったようにこれがある。 あなただけで物事をラップする HTMLの特殊文字。 このHTMLの特殊文字は、PHPで この種のを防ぐことができます機能 あなたに起こってからの事の あなたが悪質なを持っている場合 データベース内の文字列。 そうでないように、それだけで、それをエスケープ HTMLとして解釈ます。 それは少しかっこを置き換え 我々は事業体と呼んでいるもので。 そして、我々はあまりにも講義でこれの上を越えて行った。 だから私はあなたたちが持っているべきだと思う その上で十分に把握。 質問? はい。 観客:それでは、どのようだろう [聞こえない]? JOSEPH ONG:もう一度言う。 観客:どのようにモニターだろう - JOSEPH ONG:右。 だから、言って何かを持っている 私は、私の名前を入力して登録します。 私はちょうど私の名前は、そのフィールドに入力する stripの過去·過去分詞形ポストおもねらないフェイスブック 状況に近いスクリプトタグ。 そして、ちょうど入れれることを データベース、私は誰かを言うことができないため、 世界に名を持っていません 左それに矢印やで その中の単語のスクリプト。 それは本当に意味がありません。 だから、僕は必ず私がいることを確認する必要があり 私は、それを印刷する前のものをサニタイズ ページへの出。 観客:だからHTMLの特殊カード スクリプトタグを防ぎます? JOSEPH ONG:うん。 だから、スクリプトタグを防ぐことはできません。 それはちょうどことを確認します スクリプトタグを得ることはありません HTMLとして解釈か - うん。 それはちょうど何として登場 それは実際にある。 わかりました。 だから、クイズのレビューでした。 涼しい。 [拍手]