TY IT 22 Assignment 2 WebX
TY IT 22 Assignment 2 WebX
0 Assignment-2
Semester – 6
Year:2022-23
Group no- 8
Members name:-
Part A:
1. Design and develop small web applications using AJAX, HTML and PHP. Code:
HTML:
<!DOCTYPE html>
<html>
<head>
<title>Feedback Form</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f2f2f2;
}
h2 {
margin-top: 50px;
text-align: center;
color: #333;
}
form {
max-width: 500px;
margin: 0 auto;
background-color: #fff;
padding: 20px;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
border-radius: 5px;
}
label {
display: block;
font-size: 16px;
font-weight: bold;
margin-bottom: 5px;
color: #333;
}
input[type="text"], input[type="email"], textarea { display: block;
width: 100%;
padding: 10px;
margin-bottom: 20px;
border-radius: 5px;
border: none;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
font-size: 16px;
}
textarea {
height: 100px;
resize: none;
}
button[type="submit"] {
background-color: #333;
color: #fff;
padding: 10px 20px;
border: none;
border-radius: 5px;
font-size: 16px;
cursor: pointer;
}
#feedback-message {
max-width: 500px;
margin: 20px auto;
background-color: #e6ffe6;
padding: 20px;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
border-radius: 5px;
color: #333;
display: none;
}
</style>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script
src="script.js"></script>
</head>
<body>
<h2>Feedback Form</h2>
<form id="feedback-form" onsubmit="return false;"> <label
for="name">Name:</label>
<input type="text" name="name" required>
<label for="email">Email:</label>
<input type="email" name="email" required>
<label for="message">Message:</label>
<textarea name="message" required></textarea>
<button type="submit" onclick="showSuccess()">Submit</button>
</form>
<div id="feedback-message"></div>
<script>
function showSuccess() {
document.getElementById("feedback-message").innerHTML = "Feedback
successfully submitted!";
document.getElementById("feedback-message").style.display = "block";
document.getElementById("feedback-form").reset();
}
</script>
</body>
</html>
PHP:
<?php
// Retrieve form data
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
// Insert form data into database (replace with your own database connection code) $servername =
"localhost";
$username = "username";
$password = "password";
$dbname = "my
Ajax:
$(document).ready(function() {
$('#feedback-form').submit(function(event) {
event.preventDefault();
var formData = $(this).serialize();
$.ajax({
type: 'POST',
url: 'submit-feedback.php',
data: formData,
dataType: 'json',
encode: true
})
.done(function(data) {
if (data.success) {
$('#feedback
message').removeClass('error').addClass('success').text('Thank you for your feedback!');
$('#feedback-form')[0].reset();
} else {
$('#feedback
message').removeClass('success').addClass('error').text('Sorry, an error occurred. Please try again
later.');
}
})
.fail(function() {
$('#feedback
message').removeClass('success').addClass('error').text('Sorry, an error occurred. Please try again
later.');
});
});
});
Outputs:-
import os
import sqlite3
from flask import Flask, jsonify, make_response, redirect, render_template, request, session, url_for
import settings
app = Flask(__name__)
app.config.from_object(settings)
# Helper functions
def _get_message(id=None):
"""Return a list of message objects (as dicts)"""
with sqlite3.connect(app.config['DATABASE']) as conn:
c = conn.cursor()
if id:
id = int(id) # Ensure that we have a valid id value to query q = "SELECT * FROM messages
WHERE id=? ORDER BY dt DESC" rows = c.execute(q, (id,))
else:
q = "SELECT * FROM messages ORDER BY dt DESC" rows = c.execute(q)
return [{'id': r[0], 'dt': r[1], 'message': r[2], 'sender': r[3]} for r in rows]
def _add_message(message, sender):
with sqlite3.connect(app.config['DATABASE']) as conn: c =
conn.cursor()
q = "INSERT INTO messages VALUES (NULL, datetime('now'),?,?)" c.execute(q, (message,
sender))
conn.commit()
return c.lastrowid
def _delete_message(ids):
with sqlite3.connect(app.config['DATABASE']) as conn: c =
conn.cursor()
q = "DELETE FROM messages WHERE id=?"
conn.commit()
@app.route('/about')
def about():
return render_template('about.html')
if request.method == 'POST':
# This little hack is needed for testing due to how Python dictionary keys work _delete_message([k[6:] for k in
request.form.keys()])
redirect(url_for('admin'))
messages = _get_message()
messages.reverse()
@app.route('/logout')
def logout():
session.pop('logged_in', None)
return redirect(url_for('home'))
# RESTful routing (serves JSON to provide an external API)
@app.route('/messages/api', methods=['GET'])
@app.route('/messages/api/<int:id>', methods=['GET'])
def get_message_by_id(id=None):
messages = _get_message(id)
if not messages:
return make_response(jsonify({'error': 'Not found'}), 404) return
jsonify({'messages': messages})
@app.route('/messages/api', methods=['POST'])
def create_message():
if not request.json or not 'message' in request.json or not 'sender' in request.json: return
make_response(jsonify({'error': 'Bad request'}), 400)
get_message_by_id(id), 201
if __name__ == '__main__':
# Test whether the database exists; if not, create it and create the table if not
os.path.exists(app.config['DATABASE']):
try:
conn = sqlite3.connect(app.config['DATABASE'])
app.run()