An edition of Learning PHP, MySQL & JavaScript (2009)

Learning PHP, MySQL & JavaScript: With jQuery, CSS & HTML5

4th Edition, with jQuery
  • 4.2 (5 ratings)
  • 113 Want to read
  • 11 Currently reading
  • 10 Have read

My Reading Lists:

Create a new list

  • 4.2 (5 ratings)
  • 113 Want to read
  • 11 Currently reading
  • 10 Have read

Buy this book

Last edited by MARC Bot
August 13, 2024 | History
An edition of Learning PHP, MySQL & JavaScript (2009)

Learning PHP, MySQL & JavaScript: With jQuery, CSS & HTML5

4th Edition, with jQuery
  • 4.2 (5 ratings)
  • 113 Want to read
  • 11 Currently reading
  • 10 Have read

Learning PHP, MySQL & JavaScript will teach you how to create responsive, data-driven websites with the three central technologies of PHP, MySQL and JavaScript - whether or not you know how to program. This simple, streamlined guide explains how the powerful combination of PHP and MySQL provides a painless way to build modern websites with dynamic data and user interaction. You'll also learn how to add JavaScript to create rich Internet websites and applications, and how to use Ajax to handle background communication with a web server. This book explains each technology separately, shows you how to combine them, and introduces valuable concepts in modern web programming, including objects, XHTML, cookies, regular expressions and session management.

Publish Date
Language
English
Pages
812

Buy this book

Previews available in: English

Edition Availability
Cover of: Learning PHP, MySQL & JavaScript
Learning PHP, MySQL & JavaScript: A Step-by-Step Guide to Creating Dynamic Websites
Aug 17, 2021, O'Reilly Media
paperback
Cover of: Learning PHP, MySQL & JavaScript
Learning PHP, MySQL & JavaScript
Jun 08, 2018, O'Reilly Media
in English - 5th Edition, with jQuery
Cover of: Learning PHP, MySQL, JavaScript, CSS & HTML5
Learning PHP, MySQL, JavaScript, CSS & HTML5
June 2014, O’Reilly Media, O'Reilly Media
in English - 3rd Edition, with HTML5
Cover of: Learning PHP, MySQL and JavaScript
Learning PHP, MySQL and JavaScript
2014, O'Reilly Media, Incorporated
in English
Cover of: Learning PHP, MySQL & JavaScript: With jQuery, CSS & HTML5
Learning PHP, MySQL & JavaScript: With jQuery, CSS & HTML5
Dec 14, 2014, O'Reilly Media, O'Reilly Media, Inc.
in English - 4th Edition, with jQuery
Cover of: Learning PHP, MySQL and JavaScript
Learning PHP, MySQL and JavaScript: With JQuery, CSS and HTML5
2014, O'Reilly Media, Incorporated
in English
Cover of: Learning PHP, MySQL & JavaScript and CSS
Cover of: Learning PHP, MySQL & JavaScript
Learning PHP, MySQL & JavaScript: A Step by Step Guide to Creating Dynamic Websites
15th July 2009, O'Reilly
- 1st Edition
Cover of: Learning PHP, MySQL, and JavaScript
Learning PHP, MySQL, and JavaScript
2009, O'Reilly Media, Incorporated
in English

Add another edition?

Book Details


Table of Contents

Preface
Page xxiii
1. Introduction to Dynamic Web Content
Page 1
HTTP and HTML: Berners-Lee's Basics
Page 2
The Request/Response Procedure
Page 2
The Benefits of PHP, MySQL, JavaScript, CSS, and HTML5
Page 5
Using PHP
Page 6
Using MySQL
Page 7
Using JavaScript
Page 8
Using CSS
Page 9
And Then There's HTML5
Page 10
The Apache Web Server
Page 11
About Open Source
Page 12
Bringing It All Together
Page 12
Questions
Page 14
2. Setting Up a Development Server
Page 15
What Is a WAMP, MAMP, or LAMP?
Page 16
Installing XAMPP on Windows
Page 16
Testing the Installation
Page 24
Installing XAMPP on Mac OS X
Page 27
Accessing the Document Root
Page 27
Installing a LAMP on Linux
Page 28
Working Remotely
Page 28
Logging In
Page 28
Using FTP
Page 29
Using a Program Editor
Page 30
Using an IDE
Page 31
Questions
Page 33
3. Introduction to PHP
Page 35
Incorporating PHP Within HTML
Page 35
This Book's Examples
Page 37
The Structure of PHP
Page 38
Using Comments
Page 38
Basic Syntax
Page 39
Variables
Page 40
Operators
Page 45
Variable Assignment
Page 48
Multiple-Line Commands
Page 50
Variable Typing
Page 52
Constants
Page 53
Predefined Constants
Page 54
The Difference Between the echo and print Commands
Page 55
Functions
Page 55
Variable Scope
Page 56
Questions
Page 62
4. Expressions and Control Flow in PHP
Page 63
Expressions
Page 63
TRUE or FALSE?
Page 63
Literals and Variables
Page 65
Operators
Page 66
Operator Precedence
Page 67
Associativity
Page 69
Relational Operators
Page 70
Conditionals
Page 74
The if Statement
Page 75
The else Statement
Page 76
The elseif Statement
Page 78
The switch Statement
Page 79
The ? Operator
Page 82
Looping
Page 83
while Loops
Page 84
do ... while Loops
Page 86
for Loops
Page 86
Breaking Out of a Loop
Page 88
The continue Statement
Page 89
Implicit and Explicit Casting
Page 90
PHP Dynamic Linking
Page 91
Dynamic Linking in Action
Page 92
Questions
Page 93
5. PHP Functions and Objects
Page 95
PHP Functions
Page 96
Defining a Function
Page 98
Returning a Value
Page 98
Returning an Array
Page 100
Do Not Pass Arguments by Reference
Page 100
Returning Global Variables
Page 102
Recap of Variable Scope
Page 103
Including and Requiring Files
Page 103
The include Statement
Page 104
Using include_once
Page 104
Using require and require_once
Page 105
PHP Version Compatibility
Page 105
PHP Objects
Page 106
Terminology
Page 106
Declaring a Class
Page 108
Creating an Object
Page 108
Accessing Objects
Page 109
Cloning Objects
Page 110
Constructors
Page 111
PHP 5 Destructors
Page 112
Writing Methods
Page 113
Static Methods in PHP 5
Page 113
Declaring Properties
Page 114
Declaring Constants
Page 115
Property and Method Scope in PHP 5
Page 116
Static Properties and Methods
Page 117
Inheritance
Page 118
Questions
Page 121
6. PHP Arrays
Page 123
Basic Access
Page 123
Numerically Indexed Arrays
Page 123
Associative Arrays
Page 125
Assignment Using the array Keyword
Page 126
The foreach ... as Loop
Page 127
Multidimensional Arrays
Page 129
Using Array Functions
Page 132
is_array
Page 132
count
Page 132
sort
Page 133
shuffle
Page 133
explode
Page 133
extract
Page 134
compact
Page 135
reset
Page 136
end
Page 136
Questions
Page 137
7. Practical PHP
Page 139
Using printf
Page 139
Precision Setting
Page 140
String Padding
Page 142
Using sprintf
Page 143
Date and Time Functions
Page 143
Date Constants
Page 146
Using checkdate
Page 146
File Handling
Page 147
Checking Whether a File Exists
Page 147
Creating a File
Page 147
Reading from Files
Page 149
Copying Files
Page 150
Moving a File
Page 150
Deleting a File
Page 151
Updating Files
Page 151
Locking Files for Multiple Accesses
Page 152
Reading an Entire File
Page 154
Uploading Files
Page 155
System Calls
Page 160
XHTML or HTML5?
Page 162
Questions
Page 162
8. Introduction to MySQL
Page 165
MySQL Basics
Page 165
Summary of Database Terms
Page 166
Accessing MySQL via the Command Line
Page 166
Starting the Command-Line Interface
Page 167
Using the Command-Line Interface
Page 171
MySQL Commands
Page 172
Data Types
Page 177
Indexes
Page 186
Creating an Index
Page 187
Querying a MySQL Database
Page 192
Joining Tables Together
Page 202
Using Logical Operators
Page 204
MySQL Functions
Page 204
Accessing MySQL via phpMyAdmin
Page 205
Questions
Page 206
9. Mastering MySQL
Page 209
Database Design
Page 209
Primary Keys: The Keys to Relational Databases
Page 210
Normalization
Page 211
First Normal Form
Page 212
Second Normal Form
Page 214
Third Normal Form
Page 217
When Not to Use Normalization
Page 219
Relationships
Page 219
One-to-One
Page 219
One-to-Many
Page 220
Many-to-Many
Page 221
Databases and Anonymity
Page 222
Transactions
Page 223
Transaction Storage Engines
Page 223
Using BEGIN
Page 224
Using COMMIT
Page 225
Using ROLLBACK
Page 225
Using EXPLAIN
Page 226
Backing Up and Restoring
Page 227
Using mysqldump
Page 227
Creating a Backup File
Page 229
Restoring from a Backup File
Page 231
Dumping Data in CSV Format
Page 231
Planning Your Backups
Page 232
Questions
Page 232
10. Accessing MySQL Using PHP
Page 233
Querying a MySQL Database with PHP
Page 233
The Process
Page 233
Creating a Login File
Page 234
Connecting to a MySQL Database
Page 235
A Practical Example
Page 240
The $_POST Array
Page 243
Deleting a Record
Page 244
Displaying the Form
Page 245
Querying the Database
Page 246
Running the Program
Page 247
Practical MySQL
Page 248
Creating a Table
Page 248
Describing a Table
Page 249
Dropping a Table
Page 250
Adding Data
Page 250
Retrieving Data
Page 251
Updating Data
Page 251
Deleting Data
Page 252
Using AUTO_INCREMENT
Page 252
Performing Additional Queries
Page 254
Preventing Hacking Attempts
Page 255
Steps You Can Take
Page 256
Using Placeholders
Page 257
Preventing HTML Injection
Page 259
Using mysqli Procedurally
Page 262
Questions
Page 263
11. Form Handling
Page 265
Building Forms
Page 265
Retrieving Submitted Data
Page 267
register_globals: An Old Solution Hangs On
Page 268
Default Values
Page 269
Input Types
Page 270
Sanitizing Input
Page 277
An Example Program
Page 279
What's New in HTML5?
Page 281
The autocomplete Attribute
Page 282
The autofocus Attribute
Page 282
The placeholder Attribute
Page 282
The required Attribute
Page 282
Override Attributes
Page 283
The width and height Attributes
Page 283
Features Awaiting Full Implementation
Page 283
The form Attribute
Page 283
The list Attribute
Page 284
The min and max Attributes
Page 284
The step Attribute
Page 284
The color Input Type
Page 285
The number and range Input Types
Page 285
Date and Time Pickers
Page 285
Questions
Page 285
12. Cookies, Sessions, and Authentication
Page 287
Using Cookies in PHP
Page 287
Setting a Cookie
Page 289
Accessing a Cookie
Page 290
Destroying a Cookie
Page 290
HTTP Authentication
Page 290
Storing Usernames and Passwords
Page 294
Salting
Page 294
Using Sessions
Page 298
Starting a Session
Page 299
Ending a Session
Page 302
Setting a Time-Out
Page 303
Session Security
Page 303
Questions
Page 307
13. Exploring JavaScript
Page 309
JavaScript and HTML Text
Page 310
Using Scripts Within a Document Head
Page 311
Older and Nonstandard Browsers
Page 311
Including JavaScript Files
Page 312
Debugging JavaScript Errors
Page 313
Using Comments
Page 315
Semicolons
Page 315
Variables
Page 316
String Variables
Page 316
Numeric Variables
Page 317
Arrays
Page 317
Operators
Page 318
Arithmetic Operators
Page 318
Assignment Operators
Page 318
Comparison Operators
Page 319
Logical Operators
Page 319
Variable Incrementing and Decrementing
Page 320
String Concatenation
Page 320
Escaping Characters
Page 320
Variable Typing
Page 321
Functions
Page 322
Global Variables
Page 322
Local Variables
Page 323
The Document Object Model
Page 324
But It's Not That Simple
Page 326
Using the DOM
Page 327
About document.write
Page 328
Using console.log
Page 328
Using alert
Page 328
Writing into Elements
Page 329
Questions
Page 329
14. Expressions and Control Flow in JavaScript
Page 331
Expressions
Page 331
Literals and Variables
Page 332
Operators
Page 333
Operator Precedence
Page 334
Associativity
Page 334
Relational Operators
Page 335
The with Statement
Page 338
Using onerror
Page 339
Using try ... catch
Page 340
Conditionals
Page 341
The if Statement
Page 341
The else Statement
Page 341
The switch Statement
Page 342
The ? Operator
Page 344
Looping
Page 344
while Loops
Page 344
do ... while Loops
Page 345
for Loops
Page 346
Breaking Out of a Loop
Page 346
The continue Statement
Page 347
Explicit Casting
Page 348
Questions
Page 348
15. JavaScript Functions, Objects, and Arrays
Page 351
JavaScript Functions
Page 351
Defining a Function
Page 351
Returning a Value
Page 353
Returning an Array
Page 355
JavaScript Objects
Page 356
Declaring a Class
Page 356
Creating an Object
Page 357
Accessing Objects
Page 358
The prototype Keyword
Page 358
JavaScript Arrays
Page 361
Numeric Arrays
Page 361
Associative Arrays
Page 362
Multidimensional Arrays
Page 363
Using Array Methods
Page 364
Questions
Page 369
16. JavaScript and PHP Validation and Error Handling
Page 371
Validating User Input with JavaScript
Page 371
The validate.html Document (Part 1)
Page 372
The validate.html Document (Part 2)
Page 374
Regular Expressions
Page 377
Matching Through Metacharacters
Page 378
Fuzzy Character Matching
Page 378
Grouping Through Parentheses
Page 379
Character Classes
Page 380
Indicating a Range
Page 380
Negation
Page 380
Some More-Complicated Examples
Page 381
Summary of Metacharacters
Page 383
General Modifiers
Page 385
Using Regular Expressions in JavaScript
Page 386
Using Regular Expressions in PHP
Page 386
Redisplaying a Form After PHP Validation
Page 387
Questions
Page 393
17. Using Ajax
Page 395
What Is Ajax?
Page 395
Using XMLHttpRequest
Page 396
Your First Ajax Program
Page 398
Using Get Instead of Post
Page 403
Sending XML Requests
Page 406
Using Frameworks for Ajax
Page 411
Questions
Page 411
18. Introduction to CSS
Page 413
Importing a Style Sheet
Page 414
Importing CSS from Within HTML
Page 414
Embedded Style Settings
Page 415
Using IDs
Page 415
Using Classes
Page 415
Using Semicolons
Page 416
CSS Rules
Page 416
Multiple Assignments
Page 416
Using Comments
Page 417
Style Types
Page 418
Default Styles
Page 418
User Styles
Page 418
External Style Sheets
Page 419
Internal Styles
Page 419
Inline Styles
Page 420
CSS Selectors
Page 420
The Type Selector
Page 420
The Descendant Selector
Page 420
The Child Selector
Page 421
The ID Selector
Page 422
The Class Selector
Page 423
The Attribute Selector
Page 423
The Universal Selector
Page 424
Selecting by Group
Page 425
The CSS Cascade
Page 425
Style Sheet Creators
Page 426
Style Sheet Methods
Page 426
Style Sheet Selectors
Page 426
Calculating Specificity
Page 427
The Difference Between div and span Elements
Page 429
Measurements
Page 431
Fonts and Typography
Page 433
font-family
Page 433
font-style
Page 434
font-size
Page 434
font-weight
Page 435
Managing Text Styles
Page 435
Decoration
Page 435
Spacing
Page 436
Alignment
Page 436
Transformation
Page 436
Indenting
Page 436
CSS Colors
Page 437
Short Color Strings
Page 438
Gradients
Page 438
Positioning Elements
Page 439
Absolute Positioning
Page 440
Relative Positioning
Page 440
Fixed Positioning
Page 440
Pseudoclasses
Page 442
Shorthand Rules
Page 444
The Box Model and Layout
Page 445
Setting Margins
Page 445
Applying Borders
Page 447
Adjusting Padding
Page 448
Object Contents
Page 450
Questions
Page 450
19. Advanced CSS with CSS3
Page 451
Attribute Selectors
Page 451
Matching Parts of Strings
Page 452
The box-sizing Property
Page 453
CSS3 Backgrounds
Page 453
The background-clip Property
Page 454
The background-origin Property
Page 456
The background-size Property
Page 456
Using the auto Value
Page 457
Multiple Backgrounds
Page 457
CSS3 Borders
Page 459
The border-color Property
Page 459
The border-radius Property
Page 459
Box Shadows
Page 462
Element Overflow
Page 463
Multicolumn Layout
Page 463
Colors and Opacity
Page 465
HSL Colors
Page 465
HSLA Colors
Page 466
RGB Colors
Page 466
RGBA Colors
Page 467
The opacity Property
Page 467
Text Effects
Page 467
The text-shadow Property
Page 467
The text-overflow Property
Page 468
The word-wrap Property
Page 469
Web Fonts
Page 469
Google Web Fonts
Page 470
Transformations
Page 472
3D Transformations
Page 473
Transitions
Page 474
Properties to Transition
Page 474
Transition Duration
Page 475
Transition Delay
Page 475
Transition Timing
Page 475
Shorthand Syntax
Page 476
Questions
Page 477
20. Accessing CSS from JavaScript
Page 479
Revisiting the getElementById Function
Page 479
The O Function
Page 479
The S Function
Page 480
The C Function
Page 481
Including the Functions
Page 482
Accessing CSS Properties from JavaScript
Page 482
Some Common Properties
Page 483
Other Properties
Page 484
Inline JavaScript
Page 486
The this Keyword
Page 486
Attaching Events to Objects in a Script
Page 487
Attaching to Other Events
Page 488
Adding New Elements
Page 489
Removing Elements
Page 490
Alternatives to Adding and Removing Elements
Page 491
Using Interrupts
Page 492
Using setTimeout
Page 492
Cancelling a Time-Out
Page 493
Using setInterval
Page 493
Using Interrupts for Animation
Page 495
Questions
Page 497
21. Introduction to jQuery
Page 499
Why jQuery?
Page 500
Including jQuery
Page 500
Choosing the Right Version
Page 500
Downloading
Page 501
Using a Content Delivery Network
Page 502
Always Using the Latest Version
Page 503
Customizing jQuery
Page 503
jQuery Syntax
Page 503
A Simple Example
Page 504
Avoiding Library Conflict
Page 505
Selectors
Page 505
The css Method
Page 506
The Element Selector
Page 506
The ID Selector
Page 507
The Class Selector
Page 507
Combining Selectors
Page 507
Handling Events
Page 508
Waiting Until the Document Is Ready
Page 509
Event Functions and Properties
Page 510
The blur and focus Events
Page 511
The this Keyword
Page 512
The click and dblclick Events
Page 512
The keypress Event
Page 513
Considerate Programming
Page 515
The mousemove Event
Page 515
Other Mouse Events
Page 518
Alternative Mouse Methods
Page 519
The submit Event
Page 520
Special Effects
Page 521
Hiding and Showing
Page 522
The toggle Method
Page 523
Fading In and Out
Page 524
Sliding Elements Up and Down
Page 525
Animations
Page 526
Stopping Animations
Page 529
Manipulating the DOM
Page 530
The Difference Between the text and html Methods
Page 531
The val and attr Methods
Page 531
Adding and Removing Elements
Page 533
Dynamically Applying Classes
Page 535
Modifying Dimensions
Page 535
The width and height Methods
Page 536
The innerWidth and innerHeight Methods
Page 538
The outerWidth and outerHeight Methods
Page 538
DOM Traversal
Page 539
Parent Elements
Page 539
Child Elements
Page 543
Sibling Elements
Page 543
Selecting the Next and Previous Elements
Page 545
Traversing jQuery Selections
Page 546
The is Method
Page 548
Using jQuery Without Selectors
Page 549
The $.each Method
Page 550
The $.map Method
Page 551
Using Ajax
Page 551
Using the post Method
Page 551
Using the get Method
Page 552
Plug-Ins
Page 553
The jQuery User Interface
Page 553
Other Plug-Ins
Page 553
jQuery Mobile
Page 554
Questions
Page 555
22. Introduction to HTML5
Page 557
The Canvas
Page 558
Geolocation
Page 559
Audio and Video
Page 560
Forms
Page 562
Local Storage
Page 563
Web Workers
Page 563
Web Applications
Page 563
Microdata
Page 564
Summary
Page 564
Questions
Page 564
23. The HTML5 Canvas
Page 565
Creating and Accessing a Canvas
Page 565
The toDataURL Function
Page 567
Specifying an Image Type
Page 569
The fillRect Method
Page 569
The clearRect Method
Page 569
The strokeRect Method
Page 570
Combining These Commands
Page 570
The createLinearGradient Method
Page 571
The addColorStop Method in Detail
Page 573
The createRadialGradient Method
Page 574
Using Patterns for Fills
Page 576
Writing Text to the Canvas
Page 578
The strokeText Method
Page 578
The textBaseline Property
Page 579
The font Property
Page 579
The textAlign Property
Page 579
The fillText Method
Page 580
The measureText Method
Page 581
Drawing Lines
Page 581
The lineWidth Property
Page 581
The lineCap and lineJoin Properties
Page 582
The miterLimit Property
Page 584
Using Paths
Page 584
The moveTo and lineTo Methods
Page 585
The stroke Method
Page 585
The rect Method
Page 585
Filling Areas
Page 586
The clip Method
Page 587
The isPointInPath Method
Page 590
Working with Curves
Page 591
The arc Method
Page 591
The arcTo Method
Page 594
The quadraticCurveTo Method
Page 595
The bezierCurveTo Method
Page 596
Manipulating Images
Page 597
The drawImage Method
Page 597
Resizing an Image
Page 598
Selecting an Image Area
Page 598
Copying from a Canvas
Page 600
Adding Shadows
Page 600
Editing at the Pixel Level
Page 602
The getImageData Method
Page 602
The data Array
Page 603
The putImageData Method
Page 605
The createImageData Method
Page 605
Advanced Graphical Effects
Page 606
The globalCompositeOperation Property
Page 606
The globalAlpha Property
Page 609
Transformations
Page 609
The scale Method
Page 609
The save and restore Methods
Page 610
The rotate Method
Page 611
The translate Method
Page 612
The transform Method
Page 613
The setTransform Method
Page 615
Summary
Page 615
Questions
Page 616
24. HTML5 Audio and Video
Page 617
About Codecs
Page 618
The <audio> Element
Page 619
Supporting Non-HTML5 Browsers
Page 621
The <video> Element
Page 623
The Video Codecs
Page 623
Supporting Older Browsers
Page 627
Summary
Page 629
Questions
Page 629
25. Other HTML5 Features
Page 631
Geolocation and the GPS Service
Page 631
Other Location Methods
Page 632
Geolocation and HTML5
Page 632
Local Storage
Page 636
Using Local Storage
Page 637
The localStorage Object
Page 637
Web Workers
Page 639
Offline Web Applications
Page 641
Drag and Drop
Page 643
Cross-Document Messaging
Page 645
Microdata
Page 648
Other HTML5 Tags
Page 651
Summary
Page 652
Questions
Page 652
26. Bringing It All Together
Page 653
Designing a Social Networking Site
Page 653
On the Website
Page 654
functions.php
Page 654
The Functions
Page 654
header.php
Page 656
setup.php
Page 658
index.php
Page 660
signup.php
Page 661
Checking for Username Availability
Page 661
Logging In
Page 662
checkuser.php
Page 665
login.php
Page 665
profile.php
Page 667
Adding the "About Me" Text
Page 668
Adding a Profile Image
Page 668
Processing the Image
Page 668
Displaying the Current Profile
Page 669
members.php
Page 672
Viewing a User's Profile
Page 672
Adding and Dropping Friends
Page 672
Listing All Members
Page 672
friends.php
Page 675
messages.php
Page 678
logout.php
Page 681
styles.css
Page 682
javascript.js
Page 686
A. Solutions to the Chapter Questions
Page 689
B. Online Resources
Page 711
C. MySQL's FULLTEXT Stopwords
Page 715
D. MySQL Functions
Page 719
E. jQuery Selectors, Objects, and Methods
Page 729
Index
Page 753

Classifications

Library of Congress
QA76.73, QA76.73.P224 N593 2014b, QA76.73.P224 N593, QA76.73.P224

Edition Identifiers

Open Library
OL26832372M
Internet Archive
learningphpmysql0000nixo_4ed
ISBN 10
1491918667
ISBN 13
9781491918661
LCCN
2016498505
OCLC/WorldCat
894307850, 898190813

Work Identifiers

Work ID
OL9559525W

Community Reviews (0)

No community reviews have been submitted for this work.

Lists

History

Download catalog record: RDF / JSON
August 13, 2024 Edited by MARC Bot import existing book
December 20, 2023 Edited by ImportBot import existing book
December 20, 2023 Edited by ImportBot import existing book
December 20, 2023 Edited by ImportBot import existing book
December 11, 2009 Created by WorkBot add works page