├── figures ├── README.md ├── DatabaseDesignSchema.jpg └── DataFlowDiagramOfKickfounder.jpg ├── .gitignore ├── php ├── TODO.txt ├── logout.php ├── index.php ├── signup.php ├── likeprocess.php ├── unlikeprocess.php ├── useredit.php ├── follownow.php ├── new_tag.php ├── unfollow.php ├── editcomplete.php ├── newproject.php ├── rate_process.php ├── taglist.php ├── new_pledge.php ├── checktime.php ├── pledgeprocess.php ├── charge.php ├── newcomment.php ├── new_upload_file.php ├── signupprocess.php ├── acthistory.php ├── loged.php ├── createproject.php ├── userpage.php ├── browse.php ├── home.php └── displayproject.php ├── README.md └── SQL Files ├── part1_query.sql ├── createTables.sql └── part1_dataset.sql /figures/README.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | -------------------------------------------------------------------------------- /php/TODO.txt: -------------------------------------------------------------------------------- 1 | 1. Recommend system base on user act and Tag 2 | 2. Automate check Charge record. -------------------------------------------------------------------------------- /figures/DatabaseDesignSchema.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlr/KickFounder/HEAD/figures/DatabaseDesignSchema.jpg -------------------------------------------------------------------------------- /figures/DataFlowDiagramOfKickfounder.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/googlr/KickFounder/HEAD/figures/DataFlowDiagramOfKickfounder.jpg -------------------------------------------------------------------------------- /php/logout.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Successfully logout

5 |

"; 10 | ?> 11 | 12 | -------------------------------------------------------------------------------- /php/index.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Kickfounder

5 | 11 |
12 |

User name:

13 |

password:

14 |

15 |
16 |

17 | 18 | 19 | -------------------------------------------------------------------------------- /php/signup.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

New User Registration

5 | 12 |
13 |

Your name:

14 |

Login name:

15 |

password:

16 |

17 |
18 | 19 | 20 | -------------------------------------------------------------------------------- /php/likeprocess.php: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | 10 | connect_error) { 17 | die("Database connect_error: " . $con->connect_error); 18 | } 19 | $like_sql = "INSERT INTO `LIKE` VALUES('".$_SESSION['loginname']."', '".$_GET['projectname']."');"; 20 | mysqli_query($con, $like_sql); 21 | echo "

Back To Project!

"; 22 | 23 | ?> 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /php/unlikeprocess.php: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | 10 | connect_error) { 17 | die("Database connect_error: " . $con->connect_error); 18 | } 19 | $like_sql = "DELETE FROM `LIKE` WHERE loginname='".$_SESSION['loginname']."' AND projectname='".$_GET['projectname']."'"; 20 | //echo $like_sql; 21 | mysqli_query($con, $like_sql); 22 | echo "

Back To Project!

"; 23 | 24 | ?> 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /php/useredit.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

User Profile

5 | Your name:".$curr_login."

"; 9 | if(!empty($_POST['uedit'])){ 10 | echo $_POST['say']; 11 | echo $_POST['hometown']; 12 | echo $_POST['interests']; 13 | echo $_POST['creditcard']; 14 | } 15 | echo "

"; 16 | ?> 17 |
18 |

Description:

19 |

Hometown:

20 |

Interests:

21 |

Credit Card:

22 |

23 |
24 | 25 | -------------------------------------------------------------------------------- /php/follownow.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

User Home

5 | connect_error) { 13 | die("Database connect_error: " . $con->connect_error); 14 | } 15 | //check if user already followed 16 | $follow_sql = "INSERT INTO `FOLLOW` VALUES ('".$_SESSION["loginname"]."','".$_GET['uloginname']."')"; 17 | $follow_result = $con->query($follow_sql); 18 | echo "

"; 19 | //echo $_GET['uloginname']; 20 | 21 | 22 | ?> 23 | 24 | -------------------------------------------------------------------------------- /php/new_tag.php: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | 10 | connect_error) { 18 | die("Database connect_error: " . $con->connect_error); 19 | } 20 | 21 | $projectname = mysqli_real_escape_string($con, $_GET["projectname"]); 22 | $tagname = mysqli_real_escape_string($con, $_POST["tag"]); 23 | 24 | 25 | $sql_new_tag = "INSERT INTO TAG VALUES('$projectname', '$tagname');"; 26 | 27 | mysqli_query($con, $sql_new_tag); 28 | echo "

Back To Project!

"; 29 | 30 | ?> 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /php/unfollow.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

User Home

5 | connect_error) { 13 | die("Database connect_error: " . $con->connect_error); 14 | } 15 | //check if user already followed 16 | $unfollow_sql = "DELETE FROM FOLLOW WHERE bfname=\"".$_GET['uloginname']."\" AND fname=\"".$_SESSION["loginname"]."\""; 17 | $unfollow_result = $con->query($unfollow_sql); 18 | echo "

"; 19 | //echo $_GET['uloginname']; 20 | 21 | 22 | ?> 23 | 24 | -------------------------------------------------------------------------------- /php/editcomplete.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Edit Success

5 | connect_error) { 14 | die("Database connect_error: " . $con->connect_error); 15 | } 16 | $update_user_sql = "UPDATE USER SET say = \"".$_POST['say']."\", 17 | hometown=\"".$_POST['hometown']."\", interests=\"".$_POST['interests']."\", 18 | creditcard=\"".$_POST['creditcard']."\" WHERE loginname=\"".$curr_login."\""; 19 | mysqli_query($con, $update_user_sql); 20 | echo "

"; 21 | ?> 22 | 23 | -------------------------------------------------------------------------------- /php/newproject.php: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | 10 | Welcome
11 | Start your new project here.

12 | 13 |
14 |
15 | Project information: 16 | 17 | Project Name:
18 | Description:
19 | Expected Fund:
20 | Minimum: 21 | Maximum:
22 | Time Schedule:
23 | Pledge Endtime:
24 | Project Endtime:
25 |
26 | 27 |
28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /php/rate_process.php: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 8 | 9 | connect_error) { 18 | die("Database connect_error: " . $con->connect_error); 19 | } 20 | 21 | //$projectname = mysqli_real_escape_string($con, $_POST["projectname"]); 22 | $projectname = $_POST["projectname"]; 23 | 24 | $loginname = $_SESSION['loginname']; 25 | $score = $_POST["star"]; 26 | 27 | $sql_insert_rate = "INSERT INTO RATE VALUES('$projectname', '$loginname', Now(), '$score');"; 28 | 29 | $con->query($sql_insert_rate); 30 | echo "

Back To Project!

"; 31 | ?> 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /php/taglist.php: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 8 | 9 | connect_error) { 18 | die("Database connect_error: " . $con->connect_error); 19 | } 20 | $tagname = mysqli_real_escape_string($con, $_GET['tagname']); 21 | 22 | $tag_sql = "select * from TAG WHERE tagname = '".$tagname."';"; 23 | $tag_result = $con->query($tag_sql); 24 | echo "

Project related to this tag:

"; 25 | if ($tag_result->num_rows > 0) { 26 | while($row = $tag_result->fetch_assoc()) { 27 | echo "

".$row["projectname"]."

"; 28 | 29 | } 30 | } 31 | echo ""; 32 | echo "

"; 33 | ?> 34 | 35 | 36 | -------------------------------------------------------------------------------- /php/new_pledge.php: -------------------------------------------------------------------------------- 1 | "; 4 | ?> 5 | 6 | 7 | 8 | 9 | 10 | connect_error) { 22 | die("Database connect_error: " . $con->connect_error); 23 | } 24 | 25 | $sql_new_pledge = "INSERT INTO PLEDGE VALUES('$projectname', '$loginname', Now(), '$amount')"; 26 | $result_new_pledge = $con->query($sql_new_pledge); 27 | 28 | echo "You have Pledged successfully with ".$amount." $ for ".$projectname."
"; 29 | 30 | ?> 31 | 32 |
33 | 34 | 35 |
36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /php/checktime.php: -------------------------------------------------------------------------------- 1 | connect_error) { 11 | die("Database connect_error: " . $con->connect_error); 12 | } 13 | $sql_pledge_check1 = "UPDATE PROJECT SET projectstatus = 'succeed' 14 | WHERE projectstatus='ongoing' AND 15 | NOW()>=endtime AND 16 | (SELECT SUM(amount) FROM PLEDGE WHERE PLEDGE.projectname=Project.projectname) >= Project.minfund"; 17 | $sql_pledge_check2 = "UPDATE PROJECT SET projectstatus = 'failed' 18 | WHERE projectstatus='ongoing' AND 19 | NOW()>=endtime AND 20 | (SELECT SUM(amount) FROM PLEDGE WHERE PLEDGE.projectname=Project.projectname) < Project.minfund"; 21 | 22 | do{ 23 | mysqli_query($con, $sql_pledge_check1); 24 | mysqli_query($con, $sql_pledge_check2); 25 | sleep($interval); 26 | }while(true); 27 | 28 | ?> -------------------------------------------------------------------------------- /php/pledgeprocess.php: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | 10 | connect_error) { 17 | die("Database connect_error: " . $con->connect_error); 18 | } 19 | 20 | $credit_card_check = "SELECT * FROM USER WHERE loginname='".$_SESSION['loginname']."'"; 21 | $credit_result = $con->query($credit_card_check); 22 | while ($row = mysqli_fetch_array($credit_result)) { 23 | if ($row["creditcard"] == NULL) { 24 | echo "

pledge fail add your credit card first---->>

"; 25 | } 26 | else { 27 | $pledge_sql = "INSERT INTO PLEDGE VALUES('".$_SESSION['loginname']."', '".$_GET['projectname']."', NOW(), '".$_POST["pledge"]."');"; 28 | echo "

pledge success

"; 29 | mysqli_query($con, $pledge_sql); 30 | } 31 | 32 | } 33 | 34 | echo "

Back To Project!

"; 35 | 36 | ?> 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /php/charge.php: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 8 | 9 | connect_error) { 20 | die("Database connect_error: " . $con->connect_error); 21 | } 22 | 23 | $charge_sql = "select * from CHARGE WHERE loginname = '$loginname';"; 24 | $charge_result = $con->query($charge_sql); 25 | echo "

My Charge:

"; 26 | echo ""; 27 | if ($charge_result->num_rows > 0) { 28 | while($row = $charge_result->fetch_assoc()) { 29 | echo ""; 30 | echo ""; 31 | echo ""; 32 | echo ""; 33 | echo ""; 34 | } 35 | } 36 | echo "
ProjectCharge TimeAmount

".$row["projectname"]."

".$row["chargetime"]."

".$row["totalamount"]."

"; 37 | echo "

"; 38 | ?> 39 | 40 | 41 | -------------------------------------------------------------------------------- /php/newcomment.php: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | 11 | connect_error) { 23 | die("Database connect_error: " . $con->connect_error); 24 | } 25 | 26 | $sql_display_project = "INSERT INTO DISCUSS VALUES('".$projectname."','".$loginname."', Now(), ? )"; 27 | 28 | 29 | 30 | /* Prepared statement, stage 1: prepare */ 31 | if (!($stmt = $con->prepare($sql_display_project))) { 32 | echo "Prepare failed: (" . $con->errno . ") " . $con->error; 33 | } 34 | 35 | //bind the variables to the stmt 36 | $stmt -> bind_param("s", $content); 37 | //execute 38 | $stmt ->execute(); 39 | 40 | 41 | echo "Comment successfully."."
"; 42 | echo "

Back To Project!

"; 43 | ?> 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /php/new_upload_file.php: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | 10 | "; 12 | $projectname=$_GET["projectname"]; 13 | if (isset($_FILES['file']) && !empty($_FILES['file']['tmp_name'])) { 14 | 15 | // record the upload into the database 16 | 17 | $loginname = $_SESSION['loginname']; 18 | $matdes = $_POST["matdes"]; 19 | $file = addslashes(file_get_contents($_FILES['file']['tmp_name'])); 20 | $mysql_server_name="127.0.0.1:3306"; //server name 21 | $mysql_username="root"; // username 22 | $mysql_password="root"; // password 23 | $mysql_database="kickfounder"; // database name 24 | $con = new mysqli($mysql_server_name, $mysql_username, $mysql_password, $mysql_database); 25 | if ($con->connect_error) { 26 | die("Database connect_error: " . $con->connect_error); 27 | } 28 | 29 | $sql_new_upload_file = "INSERT INTO MATERIAL VALUES('$projectname', Now(), ?, '$file' );"; 30 | /* Prepared statement, stage 1: prepare */ 31 | if (!($stmt = $con->prepare($sql_new_upload_file))) { 32 | echo "Prepare failed: (" . $con->errno . ") " . $con->error; 33 | } 34 | 35 | //bind the variables to the stmt 36 | $stmt -> bind_param("s", $matdes); 37 | //execute 38 | $stmt ->execute(); 39 | } 40 | else 41 | {echo "Not set";} 42 | 43 | 44 | 45 | echo "

"; 46 | 47 | 48 | ?> 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /php/signupprocess.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Online Shopping System

5 | connect_error) { 27 | die("Database connect_error: " . $con->connect_error); 28 | } 29 | //check if user exist 30 | $user_check_sql = "SELECT loginname FROM user WHERE loginname=\"".$loginname."\""; 31 | $user_result = $con->query($user_check_sql); 32 | if ($user_result->num_rows > 0) { 33 | echo "User already exist!"; 34 | } 35 | else { 36 | echo $password; 37 | $insert_user_sql = "INSERT INTO `USER`(`loginname`, `username`, `password`) VALUES('".$loginname."','".$username."','".$password."')"; 38 | mysqli_query($con, $insert_user_sql); 39 | echo "Sign Up Success!"; 40 | } 41 | echo "

"; 42 | ?> 43 | 44 | -------------------------------------------------------------------------------- /php/acthistory.php: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 8 | 9 | connect_error) { 20 | die("Database connect_error: " . $con->connect_error); 21 | } 22 | 23 | $act_sql = "select * from USERACT WHERE loginname = '$loginname' ORDER BY acttime DESC;"; 24 | $act_result = $con->query($act_sql); 25 | echo "

My History:

"; 26 | if ($act_result->num_rows > 0) { 27 | while($row = $act_result->fetch_assoc()) { 28 | if ($row["acttype"] == "search") { 29 | if ($row["actvalue"] != "ALL*") { 30 | echo "

Search keyword: ".$row["actvalue"]."

"; 31 | } 32 | 33 | } 34 | else if ($row["acttype"] == "visusr" && $row["actvalue"] != $loginname) { 35 | $name_sql = "select * from USER WHERE loginname = '".$row["actvalue"]."'"; 36 | $name_result = $con->query($name_sql); 37 | while($row1 = $name_result->fetch_assoc()) { 38 | echo "

Visit ".$row1["username"]." home page.

"; 39 | } 40 | 41 | } 42 | else if ($row["acttype"] == "vispro") { 43 | echo "

Browse Project: ".$row["actvalue"].".

"; 44 | } 45 | } 46 | } 47 | echo ""; 48 | echo "

"; 49 | ?> 50 | 51 | 52 | 60 | 61 | -------------------------------------------------------------------------------- /php/loged.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Loged

5 | connect_error) { 12 | die("Database connect_error: " . $con->connect_error); 13 | } 14 | 15 | $loginname = $_POST["loginname"]; 16 | $password = $_POST["password"]; 17 | /* Prepared statement, stage 1: prepare */ 18 | if (!($stmt = $con->prepare("SELECT * FROM USER WHERE loginname=?"))) { 19 | echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error; 20 | } 21 | 22 | //bind the variables to the stmt 23 | $stmt -> bind_param("s",$loginname); 24 | //execute 25 | $stmt ->execute(); 26 | $res = $stmt->get_result(); 27 | 28 | 29 | /* 30 | //check if user exist 31 | $user_check_sql = "SELECT loginname FROM USER WHERE loginname=\"".$_POST["loginname"]."\" AND password=\"".$_POST["password"]."\""; 32 | $user_result = $con->query($user_check_sql); 33 | */ 34 | //if ($user_result->num_rows < 1) { 35 | if ($res->num_rows > 0) { 36 | while($row = $res->fetch_assoc()) { 37 | if(password_verify($password, $row["password"])) { 38 | echo "Login Success!"; 39 | // store customer name as session value 40 | session_start(); 41 | $_SESSION['loginname'] = $_POST["loginname"]; 42 | setcookie("user", $_SESSION['loginname'], time()+3600); 43 | echo "

"; 44 | } 45 | else { 46 | echo "Your password or username is incorrect"; 47 | echo "

"; 48 | } 49 | } 50 | 51 | } 52 | else { 53 | 54 | echo "Your password or username is incorrect"; 55 | echo "

"; 56 | 57 | } 58 | 59 | //close 60 | $stmt -> close(); 61 | ?> 62 | 63 | -------------------------------------------------------------------------------- /php/createproject.php: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | 11 | 12 | connect_error) { 30 | die("Database connect_error: " . $con->connect_error); 31 | } 32 | 33 | $loginname = $_SESSION['loginname']; 34 | $projectname = test_input($_POST["projectname"]); 35 | $description = $_POST["description"]; 36 | $projectstatus = "ongoing"; 37 | $minfund = $_POST["minfund"]; 38 | $maxfund = $_POST["maxfund"]; 39 | $posttime; 40 | $endtime = $_POST["pledgetime"]." 00:00:00"; 41 | $plantime = $_POST["plantime"]." 00:00:00"; 42 | 43 | $sql_validate_projectname = "select * from PROJECT WHERE projectname = '".$projectname."'"; 44 | $result_validate_projectname = $con->query($sql_validate_projectname); 45 | $number_of_rows = $result_validate_projectname->num_rows; 46 | 47 | if($number_of_rows > 0){ 48 | echo "Projectname is duplicated"."
"; 49 | require("newproject.php"); 50 | } else { 51 | 52 | $sql_insert_new_project = 53 | "INSERT INTO PROJECT VALUES( 54 | '$projectname', 55 | '$loginname', 56 | '$description', 57 | '$projectstatus', 58 | '$minfund', 59 | '$maxfund', 60 | Now(), 61 | '$endtime', 62 | '$plantime'); 63 | "; 64 | $sql_insert_new_project = 65 | "INSERT INTO PROJECT VALUES(?, ?, ?, ?, ?, ?, Now(),?,?)"; 66 | 67 | 68 | 69 | 70 | /* Prepared statement, stage 1: prepare */ 71 | if (!($stmt = $con->prepare($sql_insert_new_project))) { 72 | echo "Prepare failed: (" . $con->errno . ") " . $con->error; 73 | } 74 | 75 | //bind the variables to the stmt 76 | $stmt -> bind_param("ssssssss", $projectname, $loginname, $description, $projectstatus, $minfund, $maxfund, $endtime, $plantime); 77 | //execute 78 | $stmt ->execute(); 79 | 80 | 81 | 82 | } 83 | ?> 84 | 85 |
86 | 87 | 88 |
89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Welcome to KickFounder 2 | ## Description 3 | [Kickfounder](https://github.com/googlr/KickFounder), a new database-backed website for crowdfunding aim to help people raise money for various activities. In this platform, users can either create projects or pledge money toward any projects they like. When a project is funded and completed, users who pledge the project can rate the project. 4 | 5 | In addition, the platform provide attractive social features, users can leave their comment and discuss projects, like a project, and follow other people. Moverover, based on user activity logs and project tags, etc., our recommendation algorithm will recommend relevant projects that users might be interested in. 6 | 7 | ## Main Features 8 | - Designed the relational schema and implemented a web-based user interface with PHP and mySQL. 9 | - Integrated the service with a recommendation system based on tags and user activity logs. 10 | - Leveraged multiple defensive techniques to mitigate SQL injection and cross-site scripting(XSS) threats, including but not limited to 11 | 1. PHP prepared statements 12 | 2. HTML input attribute(type, pattern, maxlength) 13 | 3. Manual test of input 14 | 15 | ## Database Design Schema 16 | Database Design Schema 17 | 18 | 19 | 20 | ## Data Flow Diagram 21 | Data Flow Diagram of Kickfounder 22 | 23 | 24 | ## A few words from the co-founders and future work 25 | > In this project, we have designed the schema from scratch and implemented a functional website for crowdfunding. Instead of making a toy model, we think from the perspective of various real-world situations and aim to make the website practical and robust. 26 | 27 | > As previously shown, we have implemented the fundamental features for a crowdfunding website, where users are free to create, pledge, rate and comment on a project. If we could bring real payment methods into our system, our system will run like any other similar service. 28 | 29 | > Frankly speaking, as the co-founder of KickFounder, we still have a long way to go if we’d like to make it available to the public, especially when compared with existing competitors like `KickStarter` or `Indiegogo`. Though we have taken proactive measures to block out potential hackers, for instance, prevention on `SQL injection` and `cross-site scripting`, store the hash value of passwords instead of plain text, etc, the security of our system is far from perfect. The future work include but not limited to end-to-end encryption, anti-brute-force-password-guessing policy. By the way, A user experience designer position is opening to the public and anyone who has previous experience is welcomed to apply. Join now and make a difference with us in **KickFouder**. 30 | -------------------------------------------------------------------------------- /php/userpage.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

User Home

5 | connect_error) { 13 | die("Database connect_error: " . $con->connect_error); 14 | } 15 | // add to user act 16 | $useract_sql = "INSERT INTO `USERACT` VALUES('".$_SESSION['loginname']."',now(), 'visusr', '".$_GET['uloginname']."')"; 17 | mysqli_query($con, $useract_sql); 18 | 19 | // User Information 20 | $user_sql = "SELECT * FROM USER WHERE loginname=\"".$_GET['uloginname']."\""; 21 | $user_result = $con->query($user_sql); 22 | if ($user_result->num_rows > 0) { 23 | while($row = $user_result->fetch_assoc()) { 24 | 25 | echo "

Username: ".$row["username"]."

"; 26 | echo "

".$row["say"]."

"; 27 | } 28 | } 29 | //check if user already followed 30 | $follow_check_sql = "SELECT * FROM FOLLOW WHERE bfname=\"".$_GET['uloginname']."\" AND fname=\"".$_SESSION["loginname"]."\""; 31 | $follow_result = $con->query($follow_check_sql); 32 | if ($follow_result->num_rows < 1) { 33 | echo "

"; 34 | } 35 | else { 36 | echo "

"; 37 | 38 | } 39 | 40 | // Follow action 41 | $act_sql1 = "SELECT * 42 | FROM DISCUSS, `USER` WHERE USER.loginname=DISCUSS.loginname AND USER.loginname='".$_GET['uloginname']."'"; 43 | $act_sql2 = "SELECT * 44 | FROM PROJECT, `USER` WHERE USER.loginname=PROJECT.loginname AND USER.loginname='".$_GET['uloginname']."'"; 45 | $act_sql3 = "SELECT * 46 | FROM PLEDGE, `USER` WHERE USER.loginname=PLEDGE.loginname AND USER.loginname='".$_GET['uloginname']."'"; 47 | $act_result1 = $con->query($act_sql1); 48 | $act_result2 = $con->query($act_sql2); 49 | $act_result3 = $con->query($act_sql3); 50 | echo "

Recent activity

"; 51 | if ($act_result1->num_rows > 0) { 52 | while($row = $act_result1->fetch_assoc()) { 53 | echo "

".$row["username"]." comment ".$row["projectname"]."

"; 54 | } 55 | } 56 | if ($act_result2->num_rows > 0) { 57 | while($row = $act_result2->fetch_assoc()) { 58 | echo "

".$row["username"]." create Project: ".$row["projectname"]."

"; 59 | } 60 | } 61 | if ($act_result3->num_rows > 0) { 62 | while($row = $act_result3->fetch_assoc()) { 63 | echo "

".$row["username"]." pledge ".$row["projectname"]."

"; 64 | } 65 | } 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | echo "

"; 74 | ?> 75 | 76 | 88 | -------------------------------------------------------------------------------- /php/browse.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Browse

5 | connect_error) { 17 | die("Database connect_error: " . $con->connect_error); 18 | } 19 | echo "

Projects:

"; 20 | // Project list 21 | if ($keyw == "" ) { 22 | $project_sql = "SELECT * FROM PROJECT"; 23 | $useract_sql = "INSERT INTO `USERACT` VALUES('".$_SESSION['loginname']."',now(), 'search', 'ALL*')"; 24 | $project_result = $con->query($project_sql); 25 | if ($project_result->num_rows > 0) { 26 | while($row = $project_result->fetch_assoc()) { 27 | echo "

".$row["projectname"]."

"; 28 | } 29 | } 30 | 31 | } 32 | else { 33 | //$project_sql = "SELECT * FROM PROJECT WHERE projectname LIKE "."\"%".$keyw."%\""; 34 | 35 | /* Prepared statement, stage 1: prepare */ 36 | if (!($stmt = $con->prepare("SELECT * FROM PROJECT WHERE projectname LIKE ? OR description LIKE ?"))) { 37 | echo "Prepare failed: (" . $con->errno . ") " . $con->error; 38 | } 39 | 40 | 41 | //bind the variables to the stmt 42 | $keywords = "%".$keyw."%"; 43 | $stmt -> bind_param("ss",$keywords, $keywords); 44 | 45 | //execute 46 | $stmt ->execute(); 47 | 48 | $project_result = $stmt->get_result(); 49 | 50 | $projarr = array(); 51 | if ($project_result->num_rows > 0) { 52 | 53 | while($row = $project_result->fetch_assoc()) { 54 | 55 | $projarr[]=$row["projectname"]; 56 | //echo "

".$row["projectname"]."

"; 57 | } 58 | } 59 | $stmt -> close(); 60 | if (!($stmt2 = $con->prepare("SELECT * FROM TAG WHERE tagname= ?"))) { 61 | echo "Prepare failed: (" . $con->errno . ") " . $con->error; 62 | } 63 | $stmt2 -> bind_param("s",$keyw); 64 | $stmt2 ->execute(); 65 | $project_result2 = $stmt2->get_result(); 66 | if ($project_result2->num_rows > 0) { 67 | 68 | while($row = $project_result2->fetch_assoc()) { 69 | 70 | $projarr[]=$row["projectname"]; 71 | //echo "

".$row["projectname"]."

"; 72 | } 73 | } 74 | $stmt2 -> close(); 75 | $projarr = array_flip(array_flip($projarr)); 76 | echo ""; 77 | foreach ($projarr as $recom_proj){ 78 | echo ""; 79 | } 80 | echo "
Recommed this project to you:
".$recom_proj."
"; 81 | 82 | 83 | //$useract_sql = "INSERT INTO `USERACT` VALUES('".$_SESSION['loginname']."',now(), 'search', '".$keyw."')"; 84 | /* Prepared statement, stage 1: prepare */ 85 | if (!($ureract_stmt = $con->prepare("INSERT INTO `USERACT` VALUES('".$_SESSION['loginname']."',now(), 'search', ?)"))) { 86 | echo "Prepare failed: (" . $con->errno . ") " . $con->error; 87 | } 88 | 89 | //bind the variables to the ureract_stmt 90 | $ureract_keyw = $keyw; 91 | $ureract_stmt -> bind_param("s", $ureract_keyw ); 92 | //execute 93 | $ureract_stmt ->execute(); 94 | 95 | 96 | 97 | } 98 | 99 | 100 | 101 | echo "

"; 102 | 103 | ?> 104 | 105 | -------------------------------------------------------------------------------- /SQL Files/part1_query.sql: -------------------------------------------------------------------------------- 1 | # proj1 c 2 | USE kickfounder; 3 | # 1 4 | INSERT INTO `USER`(`loginname`, `username`, `password`) 5 | VALUES ('johnth1@gmail.com', 'John Wu', '12345678'); 6 | # SELECT * FROM USER; 7 | # 2 8 | SELECT projectname FROM PROJECT 9 | WHERE projectstatus="ongoing" 10 | AND description LIKE "%jazz%" 11 | ORDER BY posttime DESC; 12 | # 3 13 | SELECT pl.loginname, SUM(amount) 14 | FROM PLEDGE AS pl JOIN TAG AS tag 15 | ON pl.projectname = tag.projectname 16 | GROUP BY pl.loginname 17 | HAVING pl.chargestatus = 'succeed' AND tag.tagname = 'jazz'; 18 | # 4 19 | SELECT loginname FROM PROJECT 20 | WHERE projectname IN ( 21 | SELECT PROJECT.projectname 22 | FROM RATE, PROJECT 23 | WHERE projectstatus="complete" AND 24 | PROJECT.projectname=RATE.projectname 25 | GROUP BY PROJECT.projectname 26 | HAVING AVG(score) >= 4 27 | ) 28 | GROUP BY loginname 29 | HAVING COUNT(loginname) >=3; 30 | # 5 31 | SELECT content 32 | FROM DISCUSS AS dis 33 | WHERE dis.loginname IN ( 34 | SELECT bfname FROM FOLLOW AS fol 35 | WHERE fname = 'BobInBrooklyn'); 36 | # 6 37 | INSERT INTO `PROJECT`(`projectname`, `loginname`, `description`, `projectstatus`, `minfund`, `maxfund`, `posttime`, `endtime`, `plantime`) 38 | VALUES ('Great song', 'John Wu', 'I want produce a song, do you like that?', 'ongoing', 200, 300, '2017-03-11 12:10:29', '2017-05-11 12:10:29', '2017-09-12 12:10:29'); 39 | SELECT * FROM PROJECT; 40 | 41 | # 7 42 | INSERT INTO PLEDGE(`loginname`, `projectname`, `amount`, `pledgetime`, chargestatus) 43 | VALUES ('BobInBrooklyn', 'KickFounder', 10000, '2017-04-13 18:30:59', 'ongoing'); 44 | 45 | # 8 46 | delimiter // 47 | CREATE TRIGGER charge_trigger AFTER INSERT ON PLEDGE 48 | FOR EACH ROW BEGIN 49 | IF (SELECT SUM(amount) FROM PLEDGE WHERE PLEDGE.projectname=NEW.projectname) >= (SELECT maxfund FROM PROJECT WHERE PROJECT.projectname=NEW.projectname) THEN 50 | UPDATE PROJECT SET projectstatus='successed' WHERE PROJECT.projectname=NEW.projectname; 51 | INSERT INTO `CHARGE` VALUE (NEW.loginname, NEW.projectname, NOW(), 52 | (SELECT SUM(amount) FROM PLEDGE WHERE PLEDGE.projectname=NEW.projectname), (SELECT creditcard FROM USER WHERE USER.loginname=NEW.loginname)); 53 | END IF; 54 | END; // 55 | delimiter ; 56 | 57 | DELIMITER | 58 | 59 | DROP PROCEDURE IF EXISTS e_test | 60 | CREATE PROCEDURE e_test() 61 | 62 | BEGIN 63 | DECLARE i INT DEFAULT 1;# can not be 0 64 | WHILE i <= (SELECT COUNT(*) FROM PROJECT WHERE NOW() > endtime ORDER BY projectname) 65 | DO 66 | 67 | IF (SELECT SUM(amount) FROM PLEDGE WHERE projectname=(SELECT projectname FROM PROJECT WHERE NOW() > endtime ORDER BY projectname LIMIT i-1, 1)) >= (SELECT minfund FROM PROJECT WHERE PROJECT.projectname=(SELECT projectname FROM PROJECT WHERE NOW() > endtime ORDER BY projectname LIMIT i-1, 1)) THEN 68 | UPDATE PROJECT SET projectstatus='successed' WHERE projectname=(SELECT projectname FROM PROJECT WHERE NOW() > endtime ORDER BY projectname LIMIT i-1, 1); 69 | INSERT INTO `CHARGE` VALUE ((SELECT loginname FROM PROJECT WHERE NOW() > endtime ORDER BY projectname LIMIT i-1, 1), 70 | (SELECT projectname FROM PROJECT WHERE NOW() > endtime ORDER BY projectname LIMIT i-1, 1), NOW(), 71 | (SELECT SUM(amount) FROM PLEDGE WHERE PLEDGE.projectname=SELECT projectname FROM PROJECT WHERE NOW() > endtime ORDER BY projectname LIMIT i-1, 1)), (SELECT creditcard FROM USER WHERE USER.loginname=(SELECT loginname FROM PROJECT WHERE NOW() > endtime ORDER BY projectname LIMIT i-1, 1))); 72 | 73 | ELSE 74 | UPDATE PROJECT SET projectstatus='failed' WHERE PLEDGE.projectname=SELECT projectname FROM PROJECT WHERE NOW() > endtime ORDER BY projectname LIMIT i-1, 1); 75 | END IF; 76 | SET i=i+1; 77 | END WHILE ; 78 | END 79 | 80 | | 81 | 82 | SET GLOBAL event_scheduler = 1; | 83 | CREATE EVENT IF NOT EXISTS event_test 84 | 85 | ON SCHEDULE EVERY 1 SECOND 86 | 87 | ON COMPLETION PRESERVE 88 | 89 | DO CALL e_test(); 90 | | 91 | ALTER EVENT event_test ON 92 | 93 | COMPLETION PRESERVE ENABLE; 94 | | 95 | 96 | # NEW 97 | UPDATE PROJECT SET projectstatus = 'succeed' 98 | WHERE projectstatus="ongoing" AND 99 | NOW()>=endtime AND 100 | (SELECT SUM(amount) FROM PLEDGE WHERE PLEDGE.projectname=Project.projectname) >= Project.minfund 101 | ; 102 | 103 | UPDATE PROJECT SET projectstatus = 'failed' 104 | WHERE projectstatus="ongoing" AND 105 | NOW()>=endtime AND 106 | (SELECT SUM(amount) FROM PLEDGE WHERE PLEDGE.projectname=Project.projectname) < Project.minfund 107 | ; 108 | 109 | delimiter // 110 | CREATE TRIGGER charge_trigger AFTER UPDATE ON PROJECT 111 | FOR EACH ROW BEGIN 112 | IF (SELECT projectstatus FROM PROJECT WHERE PROJECT.projectname=NEW.projectname) = 'succeed' THEN 113 | INSERT INTO `CHARGE` VALUE (NEW.loginname, NEW.projectname, NOW(), 114 | (SELECT SUM(amount) FROM PLEDGE WHERE PLEDGE.projectname=NEW.projectname), (SELECT creditcard FROM USER WHERE USER.loginname=NEW.loginname)); 115 | END IF; 116 | END; // 117 | delimiter ; 118 | -------------------------------------------------------------------------------- /SQL Files/createTables.sql: -------------------------------------------------------------------------------- 1 | USE kickfounder; 2 | SET FOREIGN_KEY_CHECKS=0; 3 | 4 | # USER: loginname, username, password, say, hometown, interests, creditcard 5 | DROP TABLE IF EXISTS `USER`; 6 | 7 | CREATE TABLE `USER` ( 8 | `loginname` varchar(40) NOT NULL, 9 | `username` varchar(40) NOT NULL, 10 | `password` varchar(100) NOT NULL, 11 | `say` varchar(255) DEFAULT NULL, 12 | `hometown` varchar(40) DEFAULT NULL, 13 | `interests` varchar(40) DEFAULT NULL, 14 | `creditcard` varchar(40) DEFAULT NULL, 15 | PRIMARY KEY (`loginname`) 16 | ); 17 | 18 | 19 | # PROJECT: projectname, loginname, description, status, posttime, minfund, maxfund, endtime, plantime 20 | DROP TABLE IF EXISTS `PROJECT`; 21 | 22 | CREATE TABLE `PROJECT` ( 23 | `projectname` varchar(100) NOT NULL, 24 | `loginname` varchar(40) NOT NULL, 25 | `description` varchar(4096) NOT NULL, 26 | `projectstatus` varchar(20) NOT NULL, #ongoing, succeed, failed, complete 27 | `minfund` decimal(10,2) DEFAULT NULL, 28 | `maxfund` decimal(10,2) DEFAULT NULL, 29 | `posttime` DATETIME DEFAULT NULL, 30 | `endtime` DATETIME DEFAULT NULL, 31 | `plantime` DATETIME DEFAULT NULL, 32 | PRIMARY KEY (`projectname`), 33 | FOREIGN KEY (`loginname`) REFERENCES `USER` (`loginname`) 34 | ); 35 | 36 | # TAG: projectname, tagname 37 | DROP TABLE IF EXISTS `TAG`; 38 | 39 | CREATE TABLE `TAG` ( 40 | `projectname` varchar(100) NOT NULL, 41 | `tagname` varchar(40) NOT NULL, 42 | PRIMARY KEY (`projectname`, `tagname`), 43 | FOREIGN KEY (`projectname`) REFERENCES `PROJECT` (`projectname`) 44 | ); 45 | 46 | # DISCUSS: loginname, projectname, commmenttime, content 47 | DROP TABLE IF EXISTS `DISCUSS`; 48 | 49 | CREATE TABLE `DISCUSS` ( 50 | `projectname` varchar(100) NOT NULL, 51 | `loginname` varchar(40) NOT NULL, 52 | `commenttime` DATETIME NOT NULL, 53 | `content` varchar(4096) DEFAULT NULL, 54 | PRIMARY KEY (`projectname`, `loginname`, `commenttime`), 55 | FOREIGN KEY (`projectname`) REFERENCES `PROJECT` (`projectname`), 56 | FOREIGN KEY (`loginname`) REFERENCES `USER` (`loginname`) 57 | ); 58 | 59 | # MATERIAL: projectname, uploadtime, matdes, file 60 | DROP TABLE IF EXISTS `MATERIAL`; 61 | 62 | CREATE TABLE `MATERIAL` ( 63 | `projectname` varchar(100) NOT NULL, 64 | `uploadtime` DATETIME NOT NULL, 65 | `matdes` varchar(4096) DEFAULT NULL, 66 | `file` mediumblob DEFAULT NULL, 67 | PRIMARY KEY (`projectname`, `uploadtime`), 68 | FOREIGN KEY (`projectname`) REFERENCES `PROJECT` (`projectname`) 69 | ); 70 | 71 | # RATE: projectname, loginname, score, ratetime 72 | DROP TABLE IF EXISTS `RATE`; 73 | CREATE TABLE `RATE` ( 74 | `projectname` varchar(100) NOT NULL, 75 | `loginname` varchar(40) NOT NULL, 76 | `ratetime` DATETIME NOT NULL, 77 | `score` float DEFAULT 0, 78 | PRIMARY KEY (`projectname`, `loginname`), 79 | FOREIGN KEY (`projectname`) REFERENCES `PROJECT` (`projectname`), 80 | FOREIGN KEY (`loginname`) REFERENCES `USER` (`loginname`) 81 | ); 82 | 83 | # PLEDGE: loginname, projectname, amount, pledgetime 84 | DROP TABLE IF EXISTS `PLEDGE`; 85 | CREATE TABLE `PLEDGE` ( 86 | `loginname` varchar(40) NOT NULL, 87 | `projectname` varchar(100) NOT NULL, 88 | `pledgetime` DATETIME NOT NULL, 89 | `amount` decimal(10,2) DEFAULT NULL, 90 | #`chargestatus` varchar(20) NOT NULL, #ongoing, succeed, failed 91 | PRIMARY KEY (`projectname`, `loginname`,`pledgetime`), 92 | FOREIGN KEY (`projectname`) REFERENCES `PROJECT` (`projectname`), 93 | FOREIGN KEY (`loginname`) REFERENCES `USER` (`loginname`) 94 | ); 95 | 96 | # CHARGE: loginname, projectname, chargetime, totalamount, creditcard 97 | DROP TABLE IF EXISTS `CHARGE`; 98 | CREATE TABLE `CHARGE` ( 99 | `loginname` varchar(40) NOT NULL, 100 | `projectname` varchar(100) NOT NULL, 101 | `chargetime` DATETIME NOT NULL, 102 | `totalamount` decimal(10,2) DEFAULT NULL, 103 | `creditcard` varchar(40) NOT NULL, 104 | PRIMARY KEY (`projectname`, `loginname`), 105 | FOREIGN KEY (`projectname`) REFERENCES `PROJECT` (`projectname`), 106 | FOREIGN KEY (`loginname`) REFERENCES `USER` (`loginname`) 107 | ); 108 | 109 | # LIKE: loginname, projectname 110 | DROP TABLE IF EXISTS `LIKE`; 111 | CREATE TABLE `LIKE` ( 112 | `loginname` varchar(40) NOT NULL, 113 | `projectname` varchar(100) NOT NULL, 114 | PRIMARY KEY (`projectname`, `loginname`), 115 | FOREIGN KEY (`projectname`) REFERENCES `PROJECT` (`projectname`), 116 | FOREIGN KEY (`loginname`) REFERENCES `USER` (`loginname`) 117 | ); 118 | # FOLLOW: fname, bfname 119 | DROP TABLE IF EXISTS `FOLLOW`; 120 | CREATE TABLE `FOLLOW` ( 121 | `fname` varchar(40) NOT NULL, 122 | `bfname` varchar(40) NOT NULL, 123 | PRIMARY KEY (`fname`, `bfname`), 124 | FOREIGN KEY (`fname`) REFERENCES `USER` (`loginname`), 125 | FOREIGN KEY (`bfname`) REFERENCES `USER` (`loginname`) 126 | ); 127 | 128 | # USERACT: loginname, acttime, acttype, actvalue 129 | DROP TABLE IF EXISTS `USERACT`; 130 | CREATE TABLE `USERACT` ( 131 | `loginname` varchar(40) NOT NULL, 132 | `acttime` DATETIME NOT NULL, 133 | `acttype` varchar(40) NOT NULL, # search, vispro, visusr 134 | `actvalue` varchar(60) NOT NULL, 135 | PRIMARY KEY (`loginname`, `acttime`), 136 | FOREIGN KEY (`loginname`) REFERENCES `USER` (`loginname`) 137 | ); 138 | -------------------------------------------------------------------------------- /SQL Files/part1_dataset.sql: -------------------------------------------------------------------------------- 1 | # USER 2 | INSERT INTO `USER` VALUES('BobInBrooklyn','Bob Stark','qwert123','Change the world','Brooklyn','Skiing','8888 8888 8888 8888'); 3 | INSERT INTO `USER` VALUES('johnth1@gmail.com','John Wu','12345678','To be or not to be','Manhattan','Money','2222 2222 2222 2222'); 4 | INSERT INTO `USER` VALUES('AllenShow','Allen Degenerous','hi5allen','Gay pride, LGBT go','Queens','TV shows','7777 7777 7777 7777'); 5 | INSERT INTO `USER` VALUES('CaptainAmerican','Steve Rogers','lovepeggy','I can do this all day','Brooklyn','Dancing','6666 6666 6666 6666'); 6 | INSERT INTO `USER` VALUES('DeadPool','Wade Wilson','deadpool','Screw the heros','Canada','Porn','3333 3333 3333 3333'); 7 | 8 | # PROJECT 9 | INSERT INTO `PROJECT`(`projectname`, `loginname`, `description`, `projectstatus`, `minfund`, `maxfund`, `posttime`, `endtime`, `plantime`) VALUES ('Great song', 'johnth1@gmail.com', 'I want produce a jazz, do you like that?', 'ongoing', 500, 800, '2017-03-12 12:10:29', '2017-05-12 12:10:29', '2017-09-13 12:10:29'); 10 | INSERT INTO `PROJECT`(`projectname`, `loginname`, `description`, `projectstatus`, `minfund`, `maxfund`, `posttime`, `endtime`, `plantime`) VALUES ('Good Music', 'BobInBrooklyn', 'Jazz is my life! Come on, let dance.', 'ongoing', 300, 400, '2017-03-11 12:10:29', '2017-05-11 12:10:29', '2017-10-13 12:10:29'); 11 | INSERT INTO `PROJECT`(`projectname`, `loginname`, `description`, `projectstatus`, `minfund`, `maxfund`, `posttime`, `endtime`, `plantime`) VALUES ('Good Music2', 'DeadPool', 'Jazz is my life! Come on, let dance.', 'ongoing', 304, 4060, '2017-03-15 12:10:29', '2017-04-11 12:16:29', '2017-11-13 12:10:29'); 12 | INSERT INTO `PROJECT`(`projectname`, `loginname`, `description`, `projectstatus`, `minfund`, `maxfund`, `posttime`, `endtime`, `plantime`) VALUES ('Music part1', 'BobInBrooklyn', 'Jazz is my life! Come on, let dance.', 'complete', 340, 440, '2017-03-13 12:10:29', '2017-05-13 12:10:29', '2017-10-14 12:10:29'); 13 | INSERT INTO `PROJECT`(`projectname`, `loginname`, `description`, `projectstatus`, `minfund`, `maxfund`, `posttime`, `endtime`, `plantime`) VALUES ('Music part2', 'BobInBrooklyn', 'Jazz is my life! Come on, let dance.', 'complete', 400, 500, '2017-03-14 12:10:29', '2017-05-14 12:10:29', '2017-10-15 12:10:29'); 14 | INSERT INTO `PROJECT`(`projectname`, `loginname`, `description`, `projectstatus`, `minfund`, `maxfund`, `posttime`, `endtime`, `plantime`) VALUES ('Music part3', 'BobInBrooklyn', 'Jazz is my life! Come on, let dance.', 'complete', 500, 600, '2017-04-15 12:10:29', '2017-05-15 12:10:29', '2017-10-16 12:10:29'); 15 | # RATE 16 | INSERT INTO `RATE` VALUES ('Music part1', 'DeadPool','2017-03-16 12:10:29', 5); 17 | INSERT INTO `RATE` VALUES ('Music part2', 'DeadPool','2017-03-16 12:10:39', 5); 18 | INSERT INTO `RATE` VALUES ('Music part3', 'DeadPool','2017-03-16 12:10:49', 5); 19 | 20 | # TAG 21 | INSERT INTO `TAG` VALUES('Great song','jazz'); 22 | INSERT INTO `TAG` VALUES('Great song','vocal'); 23 | INSERT INTO `TAG` VALUES('Great song','music'); 24 | INSERT INTO `TAG` VALUES('Good Music','jazz'); 25 | INSERT INTO `TAG` VALUES('Good Music','music'); 26 | INSERT INTO `TAG` VALUES('Music part1','jazz'); 27 | INSERT INTO `TAG` VALUES('Music part1','music'); 28 | INSERT INTO `TAG` VALUES('Music part2','jazz'); 29 | INSERT INTO `TAG` VALUES('Music part2','music'); 30 | INSERT INTO `TAG` VALUES('Music part3','jazz'); 31 | INSERT INTO `TAG` VALUES('Music part3','music'); 32 | 33 | # DISCUSS 34 | INSERT INTO `DISCUSS` VALUES('Great song','johnth1@gmail.com','2017-03-12 12:11:00','Voice from heaven, thank you for your support'); 35 | INSERT INTO `DISCUSS` VALUES('Great song','AllenShow','2017-03-12 12:12:12','First one to comment LOL'); 36 | INSERT INTO `DISCUSS` VALUES('Great song','DeadPool','2017-03-15 17:12:00','I hate loud music'); 37 | INSERT INTO `DISCUSS` VALUES('Good Music','BobInBrooklyn','2017-03-11 13:10:45','Jazz you have never heard before, you can not miss it'); 38 | INSERT INTO `DISCUSS` VALUES('Good Music','CaptainAmerican','2017-03-15 17:10:45','Yo~ bro, we are brooklyn boys'); 39 | INSERT INTO `DISCUSS` VALUES('Music part1','BobInBrooklyn','2017-03-13 13:10:29','Here comes BobInBrooklyn, Let us rock together'); 40 | INSERT INTO `DISCUSS` VALUES('Music part1','AllenShow','2017-04-13 14:10:29','It is gona to be HUGE'); 41 | INSERT INTO `DISCUSS` VALUES('Music part1','DeadPool','2017-04-17 13:13:29','Why kate perry is still single? soooo sad'); 42 | INSERT INTO `DISCUSS` VALUES('Music part2','CaptainAmerican','2017-03-14 12:15:37','Go, Brooklyn boys, go'); 43 | INSERT INTO `DISCUSS` VALUES('Music part2','AllenShow','2017-03-18 19:35:00','Master Piece, like always'); 44 | 45 | #PLEDGE 46 | SET SQL_SAFE_UPDATES=0; 47 | INSERT INTO `PLEDGE` VALUES ('johnth1@gmail.com', 'Great song', '2017-04-01 12:10:29', 100); 48 | INSERT INTO `PLEDGE` VALUES ('johnth1@gmail.com', 'Great song', '2017-04-01 13:10:29', 200); 49 | INSERT INTO `PLEDGE` VALUES ('johnth1@gmail.com', 'Great song', '2017-04-01 14:10:29', 800); 50 | INSERT INTO `PLEDGE` VALUES ('johnth1@gmail.com', 'Good Music', '2017-04-01 15:10:29', 700); 51 | INSERT INTO `PLEDGE` VALUES ('johnth1@gmail.com', 'Music part1', '2017-04-01 16:10:29', 100); 52 | INSERT INTO `PLEDGE` VALUES ('johnth1@gmail.com', 'Music part2', '2017-04-01 17:10:29', 100); 53 | INSERT INTO `PLEDGE` VALUES ('johnth1@gmail.com', 'Music part3', '2017-04-01 18:10:29', 100); 54 | 55 | # FOLLOW 56 | # FOLLOW 57 | INSERT INTO `FOLLOW` VALUES('BobInBrooklyn', 'AllenShow'); 58 | INSERT INTO `FOLLOW` VALUES('BobInBrooklyn', 'CaptainAmerican'); 59 | INSERT INTO `FOLLOW` VALUES('BobInBrooklyn', 'DeadPool'); 60 | INSERT INTO `FOLLOW` VALUES('BobInBrooklyn', 'johnth1@gmail.com'); 61 | INSERT INTO `FOLLOW` VALUES('AllenShow','BobInBrooklyn'); 62 | INSERT INTO `FOLLOW` VALUES('AllenShow', 'DeadPool'); 63 | INSERT INTO `FOLLOW` VALUES('AllenShow', 'CaptainAmerican'); 64 | INSERT INTO `FOLLOW` VALUES('CaptainAmerican', 'AllenShow'); 65 | INSERT INTO `FOLLOW` VALUES('CaptainAmerican', 'DeadPool'); 66 | INSERT INTO `FOLLOW` VALUES('DeadPool', 'AllenShow'); 67 | -------------------------------------------------------------------------------- /php/home.php: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 |

"; 20 | die("Session or Cookie Error!"); 21 | exit(); 22 | } 23 | 24 | } 25 | 26 | echo "

User Home: ".$_SESSION['loginname']."

"; 27 | $mysql_server_name="127.0.0.1:3306"; //server name 28 | $mysql_username="root"; // username 29 | $mysql_password="root"; // password 30 | $mysql_database="kickfounder"; // database name 31 | $con = new mysqli($mysql_server_name, $mysql_username, $mysql_password, $mysql_database); 32 | if ($con->connect_error) { 33 | die("Database connect_error: " . $con->connect_error); 34 | } 35 | 36 | 37 | 38 | echo "

"; 39 | echo "

"; 40 | echo "

"; 41 | echo "

"; 42 | echo "

"; 43 | 44 | echo "
"; 45 | echo "

Keyword: "; 46 | echo "

"; 47 | echo "
"; 48 | 49 | 50 | if(!empty($_POST['find'])){ 51 | echo $_POST['keyword']; 52 | } 53 | 54 | // Project list 55 | 56 | $project_sql = "SELECT projectname FROM PROJECT WHERE loginname=\"".$_SESSION['loginname']."\""; 57 | $project_result = $con->query($project_sql); 58 | echo ""; 59 | if ($project_result->num_rows > 0) { 60 | 61 | while($row = $project_result->fetch_assoc()) { 62 | echo ""; 63 | } 64 | } 65 | echo "
My Projects:

".$row["projectname"]."

"; 66 | // Like list 67 | 68 | $like_sql = "SELECT projectname FROM `LIKE` WHERE loginname=\"".$_SESSION['loginname']."\""; 69 | $like_result = $con->query($like_sql); 70 | echo ""; 71 | if ($like_result->num_rows > 0) { 72 | while($row = $like_result->fetch_assoc()) { 73 | echo ""; 74 | } 75 | } 76 | 77 | echo "
My LIKES:

".$row["projectname"]."

"; 78 | // Pledge List 79 | $pledge_sql = "SELECT * FROM PLEDGE WHERE loginname=\"".$_SESSION['loginname']."\""; 80 | $pledge_result = $con->query($pledge_sql); 81 | echo "My PLEDGE:"; 82 | echo ""; 83 | if ($pledge_result->num_rows > 0) { 84 | while($row = $pledge_result->fetch_assoc()) { 85 | echo ""; 86 | echo ""; 87 | echo ""; 88 | echo ""; 89 | echo ""; 90 | } 91 | } 92 | echo "
ProjectPledge TimeAmount

".$row["projectname"]."

".$row["pledgetime"]."

".$row["amount"]."

"; 93 | 94 | // Follow List 95 | $follow_sql = "SELECT * FROM FOLLOW, USER WHERE USER.loginname=FOLLOW.bfname AND fname=\"".$_SESSION['loginname']."\""; 96 | $follow_result = $con->query($follow_sql); 97 | echo ""; 98 | if ($follow_result->num_rows > 0) { 99 | while($row = $follow_result->fetch_assoc()) { 100 | echo ""; 101 | } 102 | } 103 | echo "
My FOLLOWS:

".$row["username"]."

"; 104 | 105 | // Follow action 106 | $act_sql1 = "SELECT * 107 | FROM DISCUSS, `USER` WHERE USER.loginname=DISCUSS.loginname AND USER.loginname IN ( 108 | SELECT bfname FROM FOLLOW WHERE fname=\"".$_SESSION['loginname']."\") ORDER BY commenttime DESC"; 109 | $act_sql2 = "SELECT * 110 | FROM PROJECT, `USER` WHERE USER.loginname=PROJECT.loginname AND USER.loginname IN ( 111 | SELECT bfname FROM FOLLOW WHERE fname=\"".$_SESSION['loginname']."\") ORDER BY posttime DESC"; 112 | $act_sql3 = "SELECT * 113 | FROM PLEDGE, `USER` WHERE USER.loginname=PLEDGE.loginname AND USER.loginname IN ( 114 | SELECT bfname FROM FOLLOW WHERE fname=\"".$_SESSION['loginname']."\") ORDER BY pledgetime DESC"; 115 | $act_result1 = $con->query($act_sql1); 116 | $act_result2 = $con->query($act_sql2); 117 | $act_result3 = $con->query($act_sql3); 118 | echo "My Follow News"; 119 | 120 | if ($act_result1->num_rows > 0) { 121 | $count=0; 122 | while($row = $act_result1->fetch_assoc()) { 123 | $count=$count + 1; 124 | if ($count > 3) {break;} 125 | echo "

".$row["username"]." comment ".$row["projectname"]."

"; 126 | } 127 | } 128 | if ($act_result2->num_rows > 0) { 129 | $count=0; 130 | while($row = $act_result2->fetch_assoc()) { 131 | $count=$count + 1; 132 | if ($count > 3) {break;} 133 | echo "

".$row["username"]." create Project: ".$row["projectname"]."

"; 134 | } 135 | } 136 | if ($act_result3->num_rows > 0) { 137 | $count=0; 138 | while($row = $act_result3->fetch_assoc()) { 139 | $count=$count + 1; 140 | if ($count > 3) {break;} 141 | echo "

".$row["username"]." pledge ".$row["projectname"]."

"; 142 | } 143 | } 144 | 145 | // recommendation system 146 | 147 | 148 | $rec_sql="SELECT tagname, COUNT(tagname) AS tag_num 149 | FROM tag WHERE projectname in 150 | (SELECT distinct actvalue FROM USERACT WHERE loginname='".$_SESSION['loginname']."' AND acttype='vispro') 151 | GROUP BY tagname ORDER BY tag_num DESC LIMIT 0,2"; 152 | $rec_result = $con->query($rec_sql); 153 | $projarr = array(); 154 | if ($rec_result->num_rows > 0) { 155 | 156 | while($row = $rec_result->fetch_assoc()) { 157 | 158 | $rec_proj_sql="SELECT projectname FROM tag where tagname='".$row["tagname"]."' AND projectname not in 159 | (SELECT projectname FROM `LIKE` where `LIKE`.loginname='".$_SESSION['loginname']."')"; 160 | $rec_proj_result=$con->query($rec_proj_sql); 161 | if ($rec_proj_result->num_rows > 0) { 162 | while($row_proj = $rec_proj_result->fetch_assoc()) { 163 | $projarr[]=$row_proj["projectname"]; 164 | } 165 | } 166 | 167 | } 168 | } 169 | $projarr = array_flip(array_flip($projarr)); 170 | echo ""; 171 | foreach ($projarr as $recom_proj){ 172 | echo ""; 173 | } 174 | echo "
Recommed projects
".$recom_proj."
"; 175 | // end recommendation system 176 | ?> 177 | 178 | 179 | 180 | 181 | 243 | -------------------------------------------------------------------------------- /php/displayproject.php: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 8 | 9 | connect_error) { 18 | die("Database connect_error: " . $con->connect_error); 19 | } 20 | 21 | $projectname = mysqli_real_escape_string($con, $_GET["projectname"]); 22 | $loginname = $_SESSION['loginname']; 23 | 24 | $sql_display_project = "select * from PROJECT WHERE projectname = '$projectname';"; 25 | $result_display_project = $con->query($sql_display_project); 26 | $number_of_rows = mysqli_num_rows($result_display_project); 27 | 28 | // add to user act 29 | $useract_sql = "INSERT INTO `USERACT` VALUES('".$_SESSION['loginname']."',now(), 'vispro', '".$projectname."')"; 30 | 31 | mysqli_query($con, $useract_sql); 32 | 33 | // display proj information 34 | if($number_of_rows > 1){ 35 | echo "Database compromised, Projectname is duplicated"."
"; 36 | } else { 37 | echo "

Here is the information of the project:

"; 38 | while ($row = mysqli_fetch_array($result_display_project)) { 39 | $founder_sql = "SELECT * FROM PROJECT,USER WHERE project.loginname=user.loginname AND PROJECT.projectname=\"".$projectname."\""; 40 | $founder_result = $con->query($founder_sql); 41 | while($row_foun = $founder_result->fetch_assoc()) { 42 | echo "

The founder of this project is: ".$row_foun["username"]."

"; 43 | } 44 | 45 | 46 | echo "

Project name: ".$row["projectname"]."

"; 47 | echo "

Project description: ".$row["description"]."

"; 48 | echo "

Project status: '".$row["projectstatus"]."'

"; 49 | if ($row["projectstatus"]=='successed' && $_SESSION['loginname']==$row["loginname"]) { 50 | $update_sql="UPDATE PROJECT SET projectstatus='complete' WHERE projectname='".$projectname."'"; 51 | mysqli_query($con, $update_sql); 52 | echo "

Change status to complete? Click me!

"; 53 | } 54 | echo "

Project minimum fund: ".$row["minfund"]."$

"; 55 | echo "

Project maximum fund: ".$row["maxfund"]."$

"; 56 | $current_ple_sql="SELECT SUM(amount) AS sumple FROM PLEDGE WHERE projectname='".$projectname."'"; 57 | $current_ple_result = $con->query($current_ple_sql); 58 | while($row_ple = $current_ple_result->fetch_assoc()) { 59 | echo "

Project Now Have: ".$row_ple["sumple"]."$

"; 60 | } 61 | 62 | 63 | echo "

End for funding date: '".$row["endtime"]."'

"; 64 | echo "

Finish project date: '".$row["plantime"]."'

"; 65 | //TAG 66 | //display tags of project 67 | $sql_get_project_tag = "SELECT * from TAG WHERE projectname = '$projectname';"; 68 | $result_get_project_tag = $con->query($sql_get_project_tag); 69 | echo "

Tags: "; 70 | while( $row_tag = mysqli_fetch_array($result_get_project_tag) ){ 71 | echo "[".$row_tag["tagname"]."] "; 72 | } 73 | echo "

"; 74 | //user could also add tag of project 75 | $tag_button = "
76 | 77 | 78 |
"; 79 | echo $tag_button."
"; 80 | 81 | //if user is owner of project, display upload option 82 | if($loginname == $row['loginname']){ 83 | $upload_button = "
84 | 85 | 86 |
87 | Material Description:
88 | 89 | 90 |
"; 91 | echo $upload_button."
"; 92 | } 93 | 94 | //RATE 95 | //if project is completed and user has pledged, ask user to rate it 96 | if( $row["projectstatus"] == "complete" ){ 97 | // display rate 98 | $all_rate_check_sql = "SELECT * FROM RATE WHERE loginname = '$loginname' AND projectname = '$projectname';"; 99 | $rate_check_result = $con->query($all_rate_check_sql); 100 | $number_of_rate = mysqli_num_rows($rate_check_result); 101 | if( $number_of_rate > 0 ){ 102 | $ave_sql = "SELECT avg(score) AS ave_value FROM RATE WHERE loginname = '$loginname' AND projectname = '$projectname';"; 103 | $ave_result = $con->query($ave_sql); 104 | while($row_ave = $ave_result->fetch_assoc()) { 105 | echo "

Average score of this project is: ".$row_ave["ave_value"]."

"; 106 | } 107 | } 108 | 109 | 110 | // rating 111 | $rate_check_sql = "SELECT * FROM RATE WHERE loginname = '$loginname' AND projectname = '$projectname';"; 112 | $rate_check_result2 = $con->query($rate_check_sql); 113 | $already_rated = mysqli_num_rows($rate_check_result2); 114 | if( $already_rated < 1 ){ 115 | $sql_check_if_pledged = "SELECT * FROM PLEDGE WHERE loginname = '$loginname' AND projectname = '$projectname';"; 116 | $result_check_if_pledged = $con->query($sql_check_if_pledged); 117 | $number_of_rows_check_if_pledged = mysqli_num_rows($result_check_if_pledged); 118 | if( $number_of_rows_check_if_pledged > 0 ){ 119 | $project_rate_button= 120 | " 121 |
122 |

Please Rate This Project:

123 |
124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 |
137 |
138 | "; 139 | echo $project_rate_button; 140 | } 141 | } 142 | 143 | 144 | } 145 | 146 | } 147 | } 148 | // Pledge 149 | //check if user create this project? if so cannot pledge his own project 150 | $status_check_sql = "select * from PROJECT WHERE projectname = '$projectname';"; 151 | $status_result = $con->query($status_check_sql); 152 | while ($row = mysqli_fetch_array($status_result)) { 153 | if ($row["projectstatus"] == "ongoing") { 154 | $project_check_sql = "SELECT * FROM PROJECT WHERE projectname=\"".$_GET['projectname']."\" AND loginname=\"".$_SESSION["loginname"]."\""; 155 | $pro_result = $con->query($project_check_sql); 156 | if ($pro_result->num_rows < 1) { 157 | echo "
"; 158 | echo "Pledge This Project"; 159 | echo "

Pledge Amount:

"; 160 | echo "

"; 161 | echo "
"; 162 | } 163 | } 164 | } 165 | 166 | 167 | 168 | 169 | 170 | 171 | // Like this project 172 | //check if user already likeed 173 | $like_check_sql = "SELECT * FROM `LIKE` WHERE projectname=\"".$projectname."\" AND loginname=\"".$_SESSION["loginname"]."\""; 174 | $like_result = $con->query($like_check_sql); 175 | if ($like_result->num_rows < 1) { 176 | echo "

"; 177 | } 178 | else { 179 | echo "

"; 180 | 181 | } 182 | 183 | //List all comments 184 | echo "Comment:"; 185 | $sql_display_comment = "select * from DISCUSS,USER WHERE DISCUSS.loginname=USER.loginname AND DISCUSS.projectname = '$projectname'; "; 186 | $result_display_comment = $con->query($sql_display_comment); 187 | while ($row_comment = mysqli_fetch_array($result_display_comment)) { 188 | //echo $row_comment["content"]."
"; 189 | //TO_DO add button to lick to user 190 | echo "

".$row_comment["username"].": ".$row_comment["content"]."

"; 191 | } 192 | echo "

"; 193 | 194 | $fig_sql = "SELECT * FROM MATERIAL WHERE projectname='".$projectname."'"; 195 | $fig_result = $con->query($fig_sql); 196 | if ($fig_result->num_rows > 0) { 197 | echo "Project material"; 198 | while($row = $fig_result->fetch_assoc()) { 199 | 200 | echo '

'; 201 | echo "

Figure Description: ".$row['matdes']."

"; 202 | } 203 | } 204 | ?> 205 | 206 | 207 |

208 | 211 | 212 | 213 | 214 |
215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 269 | 270 | 271 | --------------------------------------------------------------------------------