Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

13513017 - Miftahul Mahfuzh #72

Open
wants to merge 16 commits into
base: master
Choose a base branch
from
12 changes: 9 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,9 +88,15 @@ Validasi **wajib** dilakukan pada *client-side*, dengan menggunakan **javascript
Pengguna dapat mencari pertanyaan dengan melakukan search ke `judul` maupun `isi pertanyaan`.

### Penjelasan Teknis

`Silakan isi bagian ini dengan penjelasan anda, sesuai Petunjuk Pengerjaan di atas.`

- Melakukan validasi pada client-side
validasi dilakukan melalui javascript, dengan mengecek masing2 konten pada form (name, email, topic, content)
email di validasi dengan regex yang sesuai dengan format email standar. selain itu dicek apakah konten dari masing2 form tidak kosong
validasi ini dilakukan secara terpisah pada direktori script/validation.js
- Melakukan AJAX (mulai dari pengguna melakukan klik pada tombol vote sampai angka vote berubah).
pada saat user mengklik tombol up/down vote, akan dijalankan fungsi vote() pada js yang memanggil XMLHttpRequest() dengan melakukan pengecekan window.XMLHttpRequest terlebih dahulu
lalu pada saat(xmlhttp.readyState==4 && xmlhttp.status==200) akan dpanggil elemen vote melalui document.getElementById(), yang akan memperbarui nilai vote sesuai pilihan user <up/down>
terakhir, akan dikirim link dengan method GET ke vote.php yang akan mengupdate nilai vote ke database

### Knowledge

Untuk meringankan beban tugas ini, ada berberapa keyword yang bisa anda cari untuk menyelesaikan tugas ini.
Expand Down
73 changes: 73 additions & 0 deletions answers/answers.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="../style/qstyle.css">
<title>Answers</title>
</head>
<body>
<div id="big">Simple StackExchange</div>
<div class="mediumbaru">
<?php $conn = mysqli_connect("localhost", "root", "", "stackoverflow");
if(!$conn)
die("connection failed : " . $conn->connect_error);
$sql = "SELECT * FROM questions WHERE no=".$_GET['id'];
$result = mysqli_query($conn,$sql);
while($row = mysqli_fetch_assoc($result)) {
echo "<div id=\"m1\">".$row['question']."</div>
<div class=\"div1\">
<div class=\"ans2\" id=\"voting\">
<div class=\"ans4\">
<span onclick=\"vote('question',".$row['no'].",0,'up')\">▲</span>
<span id=\"qvote\">".$row['vote']."</span>
<span onclick=\"vote('question',".$row['no'].",0,'down')\")>▼</span>
</div>
</div>
<div class=\"ans3\">
<div class=\"div6\">".$row['content']."</div>
<div class=\"div7\">asked by ".$row['name']." at ".$row['time']." | <a href=\"../questions/editquestions.php?id=".$row['no']."\">edit</a> | <a href=\"../questions/deletequestions.php?id=".$row['no']."\">delete</a></div>
</div>
</div>
";
}
$sql = "SELECT COUNT(*) AS SHIT FROM answers WHERE question_no=".$_GET['id'];
$result = mysqli_query($conn,$sql);
while($row = mysqli_fetch_assoc($result)) {
echo "<div id=\"m1\">".$row['SHIT']. " Answers</div>";
}
echo "<div> ";
$sql = "SELECT * FROM answers WHERE question_no=".$_GET['id'];
$result = mysqli_query($conn,$sql);
while($row = mysqli_fetch_assoc($result)) {
echo "
<div class=\"div1\">
<div class=\"ans2\" id=\"voting\">
<div class=\"ans4\">
<span onclick=\"vote('answer',".$row['question_no'].",".$row['no'].",'up')\">▲</span>
<span id=\"avote".$row['no']."\">".$row['vote']."</span>
<span onclick=\"vote('answer',".$row['question_no'].",".$row['no'].",'down')\">▼</span>
</div>
</div>
<div class=\"ans3\">
<div class=\"div6\">".$row['content']."</div>
<div class=\"div7\">answered by ".$row['name']." at ".$row['time']."</div>
</div>
</div>
";
}
if($conn->query($sql) == FALSE) {
echo "error : ". $sql . "<br>". $conn->error;
}
$conn -> close(); ?>
</div>
<div id="m2">Your Answer</div>
<form name="makeanswer" method="post" action="sendanswers.php" onsubmit="return validateFormAnswer(this);">
<input type="text" name="name" placeholder="Name" class="medium">
<input type="email" name="email" placeholder="Email" class="medium">
<textarea type="text" name="content" placeholder="Content" class="medium" id="content"></textarea>
<input type="hidden" name="id" value="<?php echo $_GET['id'] ?>">
<input type="submit" value="Post" id="button">
</form>
</div>
</body>
<script src="../script/validation.js"></script>
</html>
20 changes: 20 additions & 0 deletions answers/sendanswers.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "stackoverflow";
$conn = new mysqli($servername, $username, $password, $dbname);
if($conn->connect_error) {
die("connection failed : " . $conn->connect_error);
}
$sql = "INSERT INTO answers(email, name, content, question_no)
VALUES ('".$_POST['email']."','".$_POST['name']."','".$_POST['content']."','".$_POST['id']."')";
if($conn->query($sql) == TRUE) {
header('Location: answers.php?id='.$_POST['id']);
}
else {
echo "error : ". $sql . "<br>". $conn->error;
}

$conn -> close();
?>
34 changes: 34 additions & 0 deletions answers/vote.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?php
$conn = mysqli_connect("localhost","root","","stackoverflow");
if(!$conn)
die("Connection failed: " .mysqli_connect_error());

$type = $_GET['type'];
$question_no = intval($_GET['question_no']);
$answer_no = intval($_GET['answer_no']);
$updown = $_GET['updown'];

if ($type == "question")
$sql = "SELECT * FROM questions WHERE no=$question_no";
else if($type == "answer")
$sql = "SELECT * FROM answers WHERE no=$answer_no AND question_no=$question_no";
$result = mysqli_query($conn,$sql);
$row = mysqli_fetch_assoc($result);
$vote = $row['vote'];

if($updown == "up") $vote++;
else if($updown == "down") $vote--;

if($type == "question") {
$sql = "UPDATE questions SET vote=$vote WHERE no=$question_no";
}
else if($type == "answer") {
$sql = "UPDATE answers SET vote=$vote WHERE no=$answer_no AND question_no=$question_no";
}

if(mysqli_query($conn,$sql))
echo "$vote";
else
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
mysqli_close($conn);
?>
49 changes: 49 additions & 0 deletions home/homepage.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="../style/qstyle.css">
<title>Home</title>
</head>
<body>
<div class="mediumbaru">
<div id="big">Simple StackExchange</div>
<div class="input">
<input class="input1" type="text">
<input class="input2" type="submit" value="Search" id="search">
</div>
<strong> <div id="m4">Cannot find what you're looking for?
<a href="../questions/questions.php"> Ask here</a></div> </strong>
<div id="m1">Recently Asked Questions</div>
<div> <?php $conn = new mysqli("localhost","root","","stackoverflow");
if($conn->connect_error)
die("Connection failed : ". $conn->connect_error);
$sql = "SELECT * FROM questions";
$ans = mysqli_query($conn, $sql);
while($row=$ans->fetch_assoc()) {
echo "<div class=\"div1\">
<div class=\"div2\">
<div class=\"div4\">
<span>".$row['vote']."</span>
<span>Vote</span>";
echo "</div>";
echo "<div class=\"div5\">";
$sql2 = "SELECT COUNT(*) AS SHIT FROM answers WHERE question_no=".$row['no'];
$ans2 = mysqli_query($conn, $sql2);
$row2 = $ans2->fetch_assoc();
echo "<span>".$row2['SHIT']."</span>";
echo "<span>Answer</span>";
echo "</div>";
echo "</div>";
echo "<div class=\"div3\">";
$content = strlen($row['content'])>150 ? (substr($row['content'], 0 , 150)."...") : ($row['content']);
echo "<div class=\"div6\"> <a href=\"../answers/answers.php?id=".$row['no']."\">".$row['question']."</a></div>
<div class=\"div65\">".$content."</div>";
echo "<div class=\"div7\">Asked by ".$row['name']." at ".$row['time']." | <a href=\"../questions/editquestions.php?id=".$row['no']."\">edit</a> | <a href=\"../questions/deletequestions.php?id=".$row['no']."\">delete</a></div>";
echo "</div>";
echo "</div>";
} $conn->close();
?>
</div>
</div>
</body>
</html>
85 changes: 85 additions & 0 deletions home/stackoverflow.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
-- MySQL dump 10.13 Distrib 5.6.25, for debian-linux-gnu (i686)
--
-- Host: 127.0.0.1 Database: stackoverflow
-- ------------------------------------------------------
-- Server version 5.6.21

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `answers`
--

DROP TABLE IF EXISTS `answers`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `answers` (
`no` int(11) NOT NULL AUTO_INCREMENT,
`name` text NOT NULL,
`email` text NOT NULL,
`content` text NOT NULL,
`vote` int(11) NOT NULL,
`time` datetime DEFAULT CURRENT_TIMESTAMP,
`question_no` int(11) NOT NULL,
PRIMARY KEY (`no`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `answers`
--

LOCK TABLES `answers` WRITE;
/*!40000 ALTER TABLE `answers` DISABLE KEYS */;
INSERT INTO `answers` VALUES (1,'jojon','[email protected]','i wanna sleep',3,'2015-10-07 20:55:03',0),(2,'mabul','[email protected]','i wanna go home',3,'2015-10-07 21:02:25',0),(3,'budi','[email protected]','aku kentut.',0,'2015-10-07 21:12:28',0),(5,'wiwit','[email protected]','ini jawaban yang bener',0,'2015-10-13 14:53:05',0),(6,'wiwit','[email protected]','ini jawaban yang bener',0,'2015-10-13 14:53:51',0),(7,'wawan','[email protected]','buy it first',0,'2015-10-13 14:59:45',11),(8,'aody','[email protected]','play it then',0,'2015-10-13 15:01:00',11),(9,'wiwit','[email protected]','dont be stupid',0,'2015-10-13 15:04:07',11),(10,'wiwit','[email protected]','dont be stupid',0,'2015-10-13 15:09:22',11),(12,'dadan','[email protected]','you can contact me',3,'2015-10-13 17:26:55',16),(13,'efge','[email protected]','up up',0,'2015-10-13 17:46:51',17);
/*!40000 ALTER TABLE `answers` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `questions`
--

DROP TABLE IF EXISTS `questions`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `questions` (
`no` int(11) NOT NULL AUTO_INCREMENT,
`email` text,
`name` text,
`question` text,
`content` text,
`time` datetime DEFAULT CURRENT_TIMESTAMP,
`vote` int(11) NOT NULL,
PRIMARY KEY (`no`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `questions`
--

LOCK TABLES `questions` WRITE;
/*!40000 ALTER TABLE `questions` DISABLE KEYS */;
INSERT INTO `questions` VALUES (16,'[email protected]','syamsi','email','what if i forget my email password??','2015-10-13 17:24:44',3),(17,'[email protected]','eefganteng','who?','who are you?','2015-10-13 17:40:58',0),(18,'[email protected]','miftah','kambing','ini kambing siapa?','2015-10-16 16:29:38',2);
/*!40000 ALTER TABLE `questions` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2015-10-16 20:57:41
Binary file removed mocks/create.jpg
Binary file not shown.
Binary file removed mocks/detail.jpg
Binary file not shown.
Binary file removed mocks/list.jpg
Binary file not shown.
17 changes: 17 additions & 0 deletions questions/deletequestions.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "stackoverflow";
$conn = new mysqli($servername, $username, $password, $dbname);
if($conn->connect_error) {
die("connection failed : " . $conn->connect_error);
}
$sql1 = "DELETE FROM questions WHERE no=".$_GET['id'];
$sql2 = "DELETE FROM answers WHERE question_no=".$_GET['id'];
if($conn->query($sql1) == TRUE and $conn->query($sql2) == TRUE)
header('Location: ../home/homepage.php');
else
echo "error : ". $sql . "<br>". $conn->error;
$conn -> close();
?>
50 changes: 50 additions & 0 deletions questions/editquestions.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="../style/qstyle.css"/>
<title>Questions</title>

</head>
<body>
<?php
if(isset($_POST['update'])) {
$conn = new mysqli("localhost","root","","stackoverflow");
if($conn->connect_error)
die("Connection failed : ".$conn->connect_error);
$sql = "UPDATE questions
SET
name = '".$_POST['name']."',
email = '".$_POST['email']."',
question = '".$_POST['question']."',
content = '".$_POST['content']."'
WHERE no=".
$_GET['id'];
if($conn->query($sql)==TRUE) {
header('Location: ../home/homepage.php');
}
else {
echo "error : ".$sql."<br>".$conn->error;
}
}
else { ?>
<div id="big">Simple StackExchange</div>
<div class="mediumbaru">
<div id="m1">Edit your question</div>
<form method="post" name="editQuestion" action="<?php $_PHP_SELF?>" onsubmit="return validateFormQuestion(this);">
<?php $conn = new mysqli("localhost","root","","stackoverflow");
if($conn->connect_error)
die("Connection failed : ".$conn->connect_error);
$sql = "SELECT * FROM questions WHERE no=".$_GET['id'];
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($result);
echo "<input type=\"text\" name=\"name\" value=\"".$row["name"]."\" placeholder=\"Name\" class=\"medium\">
<input type=\"email\" name=\"email\" value=\"".$row["email"]."\" placeholder=\"Email\" class=\"medium\">
<input type=\"text\" name=\"question\" value=\"".$row["question"]."\" placeholder=\"Question Topic\" class=\"medium\">
<textarea type=\"text\" name=\"content\" placeholder=\"Content\" class=\"medium\" id=\"content\">".$row["content"]."</textarea>";
$conn->close();
} ?> <input type="submit" name="update" value="Edit" id="button">
</form>
</div>
</body>
<script src="../script/validation.js"></script>
</html>
21 changes: 21 additions & 0 deletions questions/questions.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="../style/qstyle.css"/>
<title>Questions</title>
</head>
<body>
<div id="big">Simple StackExchange</div>
<div class="mediumbaru">
<div id="m1">What's your question?</div>
<form name="makequestion" method="post" action="sendquestions.php" onsubmit="return validateFormQuestion(this);">
<script type="text/javascript" src="../script/validation.js"></script>
<input type="text" name="name" placeholder="Name" class="medium">
<input type="email" name="email" placeholder="Email" class="medium">
<input type="text" name="question" placeholder="Question Topic" class="medium">
<textarea type="text" name="content" placeholder="Content" class="medium" id="content"></textarea>
<input type="submit" value="Post" id="button">
</form></div>
<script src="../script/validation.js"></script>
</body>
</html>
Loading