php formulier met database
het is bedoeld voor een aanwezighijdslijst voor evenementen. bijvoorbeeld:
evenement 1: ben je aanwezig? Ja/Nee
evenement 2: ben je aanwezig? Ja/Nee
enz....
resultaatpagina:
evenement 1: 100 man aanwezig...
evenement 2: 120 man aanwezig...
het liefst met een database waar op e-mail adress van de invuller word opgeslagen welke andwoorden zijn gegeven, zodat deze indien nodig gewijzigd kunnen worden...
een beetje het idee van facebook events, wel/niet misschien aanwezig. alleen is het geen optie om dit daadwerkelijk via facebook te doen.
Een kant en klaar script is nooit helemaal precies wat je zoekt. Zelf maken is dat een optie?
Je hebt nodig: PHP HTML en een (mysql-)database.
Frank Nietbelangrijk op 27/10/2012 22:37:44:
Sander,
Een kant en klaar script is nooit helemaal precies wat je zoekt. Zelf maken is dat een optie?
Je hebt nodig: PHP HTML en een (mysql-)database.
Een kant en klaar script is nooit helemaal precies wat je zoekt. Zelf maken is dat een optie?
Je hebt nodig: PHP HTML en een (mysql-)database.
een server met php en mysql heb ik thuis staan, maar het prograeren is helaas niet voor mij weg gelecht... ik kan wel scriptjes samen voegen en klijnne dingen aanpassen maar dat is het dan ook...
Kun je wel een formulier maken met HTML? Kun je de opmaak verzorgen met CSS? Dan begin je daarmee en plaats je daarna een post.
user_accounts
- user_id
- user_name
- user_email
events
- event_id
- organizer_id
- event_name
- event_date
event_presence
- event_id
- visitor_id
- present
In de laatste tabel is de PK de combinatie van event_id en visitor_id, present is bv 0 voor afwezig, 1 voor misschien en 2 voor ja. Als iemand nog nooit iets heeft opgegeven, staat dat ook niet in de tabel.
Opvragen kan je dan via
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT
e.event_id,
e.event_name,
COALESCE(p.present, 0) AS present
FROM
events AS e
LEFT JOIN
event_presence AS p
ON
e.event_id = p.event_id
AND
p.visitor_id = 666
WHERE
e.organizer_id = 555
e.event_id,
e.event_name,
COALESCE(p.present, 0) AS present
FROM
events AS e
LEFT JOIN
event_presence AS p
ON
e.event_id = p.event_id
AND
p.visitor_id = 666
WHERE
e.organizer_id = 555
De COALESCE in combinatie met de LEFT JOIN zorgt ervoor dat er altijd een 0 voor present geselecteerd als de gegevens van de bezoeker nog niet in de presence tabel voorkomen.
Voor de event_presence tabel gebruik je geen UPDATE statements maar altijd INSERT met ON DUPLICATE KEY UPDATE:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
INSERT INTO
event_presence
(event_id, visitor_id, present)
VALUES
(121, 666, 2)
ON DUPLICATE KEY UPDATE
event_presence
(event_id, visitor_id, present)
VALUES
(121, 666, 2)
ON DUPLICATE KEY UPDATE
Gewijzigd op 28/10/2012 12:46:25 door Ger van Steenderen
als imand mij een scriptje kanmaken met de eerste 2 regels erin dat zou ik zelf de rest wel aanvullen.
de pagina is als volgd opgebouwd:
<form id="form1" name="form1" method="post" action="">
<p>
<label>
<input type="radio" name="1" value="Ja" id="1_0" />
Ja</label>
<br />
<label>
<input type="radio" name="1" value="Nee" id="1_1" />
Nee</label>
<br />
<label>
<input type="radio" name="1" value="Misschien" id="1_2" />
Misschien</label>
en dat zn 80 x met steeds opvolgende nummers bij naam en ID
Gewijzigd op 28/10/2012 14:31:41 door Sander Jansen
80 groepen? bedoel je voor 80 evenementen?
Toevoeging op 29/10/2012 00:47:13:
vandaar dat facebook ook geen optie is...
Toevoeging op 29/10/2012 00:47:25:
vandaar dat facebook ook geen optie is...
Toevoeging op 29/10/2012 00:47:25:
ja...er zijn 80 evenementen waar per evenement ja/nee/misschien ingevuld wordt
Toevoeging op 29/10/2012 00:54:32:
wat ik nu heb is: http://84.28.204.44/flaarisse/vragenlijst.html
oke en flaarisse dat is een naam?
ja...dat is de naam van de vereniging
user_accounts
- user_id int,autoincrement,primary key
- user_name varchar lengte 50
- user_email varchar lengte 50
events
- event_id int,autoincrement,primary key
- organizer_id int
- event_name varchar lengte 50
- event_date date
event_presence
- event_id int
- visitor_id int
- present enum(ja,nee,misschien)
Gewijzigd op 29/10/2012 14:52:15 door Frank Nietbelangrijk
dat is net het probleem...weet niet hoe...heb nooit zelf databases gemaakt
Toevoeging op 29/10/2012 18:41:26:
kijk eens op: http://localhost/phpmyadmin daar is waar je een database, een table en fields kunt aanmaken.
http://www.web-garden.be/cursusphp/Hoofdstuk11.pdf
Frank Nietbelangrijk op 29/10/2012 14:36:06:
....
event_presence
- event_id int
- visitor_id int
- present enum(ja,nee,misschien)
event_presence
- event_id int
- visitor_id int
- present enum(ja,nee,misschien)
Frank zo min mogelijk enums gebruiken, dit geeft alleen maar extra contoles bij een insert en een update. dus maakt dan je query ietsje trager.
Databases werken beter met integers.
Oke bedankt voor de tip
Table structure for table events
Column Type Null Default
event_id int(11) No
organizer_id int(11) No
event_name varchar(50) No
event_date date No
Dumping data for table events
Table structure for table events
Column Type Null Default
event_id int(11) No
organizer_id int(11) No
event_name varchar(50) No
event_date date No
Table structure for table event_presence
Column Type Null Default
event_id int(11) No
visitor_id int(11) No
present int(11) No
Dumping data for table event_presence
Table structure for table event_presence
Column Type Null Default
event_id int(11) No
visitor_id int(11) No
present int(11) No
Table structure for table user_accounts
Column Type Null Default
user_id int(11) No
user_name varchar(50) No
user_email varchar(50) No
Dumping data for table user_accounts
Table structure for table user_accounts
Column Type Null Default
user_id int(11) No
user_name varchar(50) No
user_email varchar(50) No
weet je al het verschil tussen een int en een varchar?
Toevoeging op 29/10/2012 21:33:54:
Sander ik heb even een gewijzigde tabel structuur naar je pm gestuurd.
Toevoeging op 29/10/2012 21:37:48:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
// zet vragen op de hoogste name="x" waarde ofwel het aantal vragen.
error_reporting(E_ALL);
$user = array('user_id' => 0, 'user_name' => '', 'user_email' => '');
if(isset($_POST['user_name'])) $user['user_name'] = $_POST['user_name'];
if(isset($_POST['user_email'])) $user['user_email'] = $_POST['user_email'];
$connection = connect();
function connect() {
$connection = mysql_connect("localhost","root","")
or die ('request "Unable to connect to MySQL server."');
$db = mysql_select_db("test", $connection)
or die ('request "Unable to select database."');
return $connection;
}
function validate() {
return true;
}
function getuserinfo($connection) {
$email = strtolower(mysql_real_escape_string($_POST['user_email']));
$name = strtolower(mysql_real_escape_string($_POST['user_name']));
$sql = "SELECT * FROM user_accounts WHERE user_email='".$email."'";
$result = mysql_query($sql, $connection);
if(mysql_num_rows($result) == 1) {
return mysql_fetch_assoc($result);
}
if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
$sql = "INSERT INTO user_accounts VALUES ('', '".$name."', '".$email."')";
if($result = mysql_query($sql, $connection))
return array('user_id' => mysql_insert_id($connection), 'user_name' => $name, 'user_email' => $email);
}
return 0;
}
function savetodatabase($connection) {
global $user;
$sql = "DELETE FROM event_presence WHERE visitor_id=".$user['user_id'];
$result = mysql_query($sql, $connection);
$sql = "SELECT MAX(id) AS max FROM `events`";
$result = mysql_query($sql, $connection);
$row = mysql_fetch_assoc($result);
$max = $row['max'];
for($i = 1 ; $i <= $max ; $i++) {
if(isset($_POST[$i])) {
$sql = "INSERT INTO event_presence VALUES ('".$i."', '".$user['user_id']."', '".$_POST[$i]."')";
mysql_query($sql, $connection);
}
}
}
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$user = getuserinfo($connection);
if(isset($_POST['save'])){
if(validate())
savetodatabase($connection);
}
}
$sql = "SELECT * FROM events LEFT JOIN event_presence ON id = event_id AND visitor_id=".$user['user_id'];
$result = mysql_query($sql, $connection);
?>
// zet vragen op de hoogste name="x" waarde ofwel het aantal vragen.
error_reporting(E_ALL);
$user = array('user_id' => 0, 'user_name' => '', 'user_email' => '');
if(isset($_POST['user_name'])) $user['user_name'] = $_POST['user_name'];
if(isset($_POST['user_email'])) $user['user_email'] = $_POST['user_email'];
$connection = connect();
function connect() {
$connection = mysql_connect("localhost","root","")
or die ('request "Unable to connect to MySQL server."');
$db = mysql_select_db("test", $connection)
or die ('request "Unable to select database."');
return $connection;
}
function validate() {
return true;
}
function getuserinfo($connection) {
$email = strtolower(mysql_real_escape_string($_POST['user_email']));
$name = strtolower(mysql_real_escape_string($_POST['user_name']));
$sql = "SELECT * FROM user_accounts WHERE user_email='".$email."'";
$result = mysql_query($sql, $connection);
if(mysql_num_rows($result) == 1) {
return mysql_fetch_assoc($result);
}
if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
$sql = "INSERT INTO user_accounts VALUES ('', '".$name."', '".$email."')";
if($result = mysql_query($sql, $connection))
return array('user_id' => mysql_insert_id($connection), 'user_name' => $name, 'user_email' => $email);
}
return 0;
}
function savetodatabase($connection) {
global $user;
$sql = "DELETE FROM event_presence WHERE visitor_id=".$user['user_id'];
$result = mysql_query($sql, $connection);
$sql = "SELECT MAX(id) AS max FROM `events`";
$result = mysql_query($sql, $connection);
$row = mysql_fetch_assoc($result);
$max = $row['max'];
for($i = 1 ; $i <= $max ; $i++) {
if(isset($_POST[$i])) {
$sql = "INSERT INTO event_presence VALUES ('".$i."', '".$user['user_id']."', '".$_POST[$i]."')";
mysql_query($sql, $connection);
}
}
}
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$user = getuserinfo($connection);
if(isset($_POST['save'])){
if(validate())
savetodatabase($connection);
}
}
$sql = "SELECT * FROM events LEFT JOIN event_presence ON id = event_id AND visitor_id=".$user['user_id'];
$result = mysql_query($sql, $connection);
?>
<!DOCTYPE html>
<html>
<body>
<form name="input" action="test.php" method="post">
<p class="naam">
<label>Uw naam:
<input type="text" name="user_name" id="user_name" value="" />
</label>
<label>Uw e-mail adres:
<input type="text" name="user_email" id="user_email" value="" />
</label>
<input type="submit" name="load" id="load" value="Haal mijn lijst op" />
</p>
<table class="mytable">
<tr>
<th>datum</th>
<th>activiteit</th>
<th>zaal open</th>
<th>aanvang</th>
<th>lokatie</th>
<th>Deelname</th>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>
<label><input type="radio" name="" value="ja" />Ja</label><br />
<label><input type="radio" name="" value="nee" />Nee</label><br />
<label><input type="radio" name="" value="misschien" />Misschien</label>
</td>
</tr>
</table>
<input type="submit" name="save" value="Opslaan">
email verplicht invullen!
</form>
</body>
</html>
Toevoeging op 29/10/2012 22:01:01:
het lijkt er alleen op dat de keuzes niet worden opgeslagen...?
Toevoeging op 29/10/2012 22:01:25:
http://84.28.204.44/flaarisse/1.php
Toevoeging op 29/10/2012 22:04:54:
event_presence blijft leeg...gebruiker maakt hij wel aan
dan gaat hij zeker werken want dat doet hij hier ook :) morgenavond dan even aan de totaal overzicht werken
dit is wat ik nu heb: (ik heb alleen de e-mailadressen even eruit gehaald vanwegen privecy...
-- phpMyAdmin SQL Dump
-- version 3.5.2
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Oct 29, 2012 at 10:30 PM
-- Server version: 5.5.25a
-- PHP Version: 5.4.4
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!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 */;
--
-- Database: `flaarisse`
--
-- --------------------------------------------------------
--
-- Table structure for table `events`
--
CREATE TABLE IF NOT EXISTS `events` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`organizer_id` int(11) NOT NULL,
`event_name` varchar(50) NOT NULL,
`event_location` varchar(50) NOT NULL,
`event_date` date NOT NULL,
`event_open` time NOT NULL,
`event_start` time NOT NULL,
PRIMARY KEY (`id`),
KEY `organizer_id` (`organizer_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
--
-- Dumping data for table `events`
--
INSERT INTO `events` (`id`, `organizer_id`, `event_name`, `event_location`, `event_date`, `event_open`, `event_start`) VALUES
(1, 0, 'event 1', 'event lokatie 1', '2012-10-30', '20:30:00', '21:00:00');
-- --------------------------------------------------------
--
-- Table structure for table `event_presence`
--
CREATE TABLE IF NOT EXISTS `event_presence` (
`event_id` int(11) NOT NULL,
`visitor_id` int(11) NOT NULL,
`present` enum('ja','nee','misschien') NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Table structure for table `user_accounts`
--
CREATE TABLE IF NOT EXISTS `user_accounts` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` varchar(50) NOT NULL,
`user_email` varchar(50) NOT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
--
-- Dumping data for table `user_accounts`
--
INSERT INTO `user_accounts` (`user_id`, `user_name`, `user_email`) VALUES
(3, 'sander jansen', '*emailadress*'),
(4, '', '*emailadress*');
/*!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 */;