Ik zit met een probleempje.
Ik heb er voor gekozen om als vriendendienst voor iemand zijn website aan te pakken.
Nu is dit redelijk gelukt.
Echter loop ik tegen het volgenden aan:
Deze persoon heeft een website waar hij en zijn vrienden wekelijks op kunnen geven of zij wel of niet ergens aan mee doen.
Dit is simpel een tabel waar de data in staat en een ja of nee antwoord kan worden gegeven.
Elke week "schoof" hij dit handmatig op. Er worden bijvoorbeeld 2 maanden getoond en op het moment dat er een nieuwe week is begonnen werd deze toegevoegd en de eerste weer verdween.
Dit is vrij arbeidsintensief. Ik wil nu kijken of ik dit kan vergemakkelijken door dit te automatiseren.
Echter heb ik geen idee hoe ik dit technish voor elkaar zou kunnen krijgen.
Ik hoop dat iemand hier dit al eerder heeft gedaan of hier een idee voor heeft.
Nou een klein opzetje van mijn kant. Drie bestanden even opslaan in één directory bij elkaar met de namen zoals aangegeven.
Dan eventueel database instellingen in mysql.php wijzigen.
Daarna even install.php aanroepen
en dan index.php bekijken en gebruiken
// connect to database
$con = mysql_connect($db['server'], $db['user'], $db['pass']);
if (!$con) {
die('Could not connect: ' . mysql_error());
}
// select the database we want to use
if(!mysql_select_db($db['database'], $con))
die('Could not select database '.$db['database']);
?>
install.php:
<?php
include "mysql.php";
// als de tabel application al bestaat verwijder hem dan
$query = 'DROP TABLE IF EXISTS `application`';
mysql_query($query, $con);
// maak een nieuwe tabel in de database met de naam application
$query = 'CREATE TABLE `application` (
`application_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`application_date` DATE NOT NULL ,
`user_id` INT NOT NULL ,
`lane` VARCHAR( 100 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ,
`time` TIME NOT NULL,
INDEX ( `user_id` )
) ENGINE = INNODB CHARACTER SET utf8 COLLATE utf8_unicode_ci;';
mysql_query($query, $con);
// als de EVENT delete_old_applications al bestaat verwijder hem dan
$query = 'DROP EVENT IF EXISTS delete_old_applications;';
mysql_query($query, $con);
// maak een nieuw EVENT aan met de naam delete_old_applications
// deze event verwijderd dagelijks rijen uit de tabel applications waarvan de datum in de application_date kolom ouder is dan de datum van vandaag
$query = 'CREATE EVENT delete_old_applications
ON SCHEDULE EVERY 1 DAY
DO
DELETE FROM application WHERE application_date < CURRENT_DATE();';
mysql_query($query, $con);
// probeer de scheduler aan te zetten, anders wordt de event nog niet uitgevoerd.
$query = 'SET GLOBAL event_scheduler = ON;';
mysql_query($query, $con);
?>
index.php:
<?php
include "mysql.php";
$user_id = 1; //HIER NOG EEN WORDPRESSFUNCTIE OF SESSION GEBRUIKEN OM DE INGELOGDE USER-ID TE VERKRIJGEN
// vertaal een mysql datum naar een nederlands datum formaat
function tohuman($sqldate) {
$arr = explode("-", $sqldate);
return $arr[2]."-".$arr[1]."-".$arr[0];
}
// haal de gebruikersnaam op bij een user_id uit de wordpress wp_users tabel.
function getUsername($user_id) {
global $con;
$query = 'SELECT `display_name` FROM `wp_users` WHERE `ID`='.$user_id;
$result = mysql_query($query, $con);
if($row = mysql_fetch_array($result)) {
return $row['display_name'];
}
return false;
}
// als het formulier verzonden is dan slaan we nu de gegevens op in de database
if($_SERVER['REQUEST_METHOD'] == 'POST') {
for($i = 1 ; $i <= 4 ; $i++) {
if($_POST['aanwezig'.$i] == 'ja') {
$query = "INSERT INTO `application` VALUES ('', '".$_POST['datum'.$i]."', '".$user_id."', '".$_POST['baan'.$i]."', '".$_POST['tijd'.$i]."');";
if(!mysql_query($query, $con))
echo mysql_error();
}
}
}
echo '<h1>Agenda van '.getUsername($user_id).'</h1><br />';
// verkrijg de datums van de eerstvolgende vier zondagen uit mysql
$query = 'SELECT INTERVAL (6 - WEEKDAY(CURDATE())) DAY + CURDATE() AS sunday union
SELECT INTERVAL (13 - WEEKDAY(CURDATE())) DAY + CURDATE() union
SELECT INTERVAL (20 - WEEKDAY(CURDATE())) DAY + CURDATE() union
SELECT INTERVAL (27 - WEEKDAY(CURDATE())) DAY + CURDATE()';
$result = mysql_query($query, $con);
Anyhow.
Ziet er indrukwekkend uit. Echter ben ik al zodanig ver dat ik mijn data in de database op kan slaan zoals ik dit wil zien gebeuren (en uitlezen)
Echter ga ik hier zeker even naar kijken want volgens mij staan hier sowieso een aantal uiterst handige dingetjes is.
Top man dank je!
@Frank,
Toch even een paar opmerkingen.
Michel heeft het over 12 zondagen, dan lijkt mij het niet handig om daarvoor 12 SELECTS aan elkaar te knopen.
Mijn oplossing uit jouw topic:
SELECT (CURRENT_DATE() + INTERVAL (6 - WEEKDAY(NOW())) DAY)
+ INTERVAL @num := @num + 1 WEEK sundays
FROM attrib, (SELECT @num := -1) u HAVING @num < 11
Enige voorwaarde hier is dat de tabel attrib 12 of meer rijen bevat.
Alleen is dit (vind ik) zinloos als je dat als losstaande query doet.
Dan ga je query's uitvoeren met het resultaat van een andere query, bij bv 12 zondagen met gemiddeld 5 aanmeldingen zijn er dat 73, en dat zijn er 72 teveel.
Alles verwerkt in één query:
SELECT
DATE_FORMAT(d.sunday, '%d-%m-%Y') dutch_sunday,
d.sunday,
a.lane,
a.time,
u.username
FROM
(SELECT (CURRENT_DATE() + INTERVAL (6 - WEEKDAY(NOW())) DAY)
+ INTERVAL @num := @num + 1 WEEK sunday
FROM attrib, (SELECT @num := -1) var HAVING @num < 3) d
LEFT JOIN
application a ON d.sunday = a.application_date
LEFT JOIN
wp_users u ON a.user_id = u.ID
ORDER BY
d.sunday
Ger je opmerkingen / verbeteringen zijn terecht. Alleen hoe jij die queries zo even neer zet dat kost mij een week bij wijze van spreken :-) Maar ik zal er zo eens grondig naar kijken.
p.s. Ik begin me toch af te vragen hoe het komt dat jij zo veel kennis van mysql paraat hebt?
Ben nu zover dat mijn velden automatisch worden gegenereerd.
De velden krijgen hun eigen idnaam+datum.
Alleen het opslaan werkt niet omdat ik nog iets moet doen maar weet niet wat.
Bare with me want het is best veel.
Ajax(Jquery) om op te slaan.
<script type="text/javascript" >
jQuery(document).ready(function() {
jQuery('#social-button').click(function() {
jQuery('#savemessageslider').html('Loading...');
//this is the ajax for general settings
var value = jQuery('#value').val();
var data = {
action: 'slider_my_action',value: value
};
// since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php
jQuery.post(ajaxurl, data, function(response) {
jQuery('#savemessageslider').html('Gegevens opgeslagen!').hide(2000);
});
});
});
</script>
PHP voor de velden:
<?php
function socialSettings(){
$social = '<div id="social-settings" >
' . settings_fields( 'ty-option-group' ) . '
<div id="social-wrapper">
<form action="" method="post" name="socialform">
<table cellpadding="0" cellspacing="0" border="0">
<tr>';
Okay, dit is de eerste post (van dit topic) waar je over Ajax spreekt.
Ik veronderstel dat je daar weinig ervaring mee hebt.
Bij Ajax is het de bedoeling dat javascript - achter de rug van de gebruiker - contact opneemt met een webpagina op de server.
-> dus je moet een url (= een appart bestand of een bestaand bestand met bepaalde GET waarden) reserveren waar je de php-code laat uitvoeren.
bv. 'ajax.php' of 'index.php?p=savesettings' ...
Op die url moet je saveSocialSettings() uitvoeren.
Merk op: binnen die url kan je trouwens gebruik maken van de superglobals. Je kan dus cookies en session gebruiken indien nuttig/nodig.
jQuery.post(ajaxurl, data, function(response) {
Het is dan de bedoeling dat je deze gegevens invult (ajaxurl en data). response is een stuk tekst (kan ook HTML zijn) dat geëcho't wordt door de server (eventueel dus door een echo in of buiten saveSocialSettings() ).
Vertel eens iets over je structuur van bestanden.
Op welk bestand wordt socialSettings() uitgevoerd?, waar staat function socialSettings(); waar staat function saveSocialSettings()? waar staat dat stuk javascript? ...
en eventueel al een voorkeur voor de ajaxurl
Dan kunnen we alle stukjes aan mekaar plakken
Het mooiste zou zijn als hij aan elke "teetime" een datum mee kan geven zoals ik dat ook doe bij de velden:
<?php
$teetime_output = "";
$teetime_sunday = strtotime("next sunday");
$time = 'teetime';
for ($i=1; $i<=12; $i++)
{
$current_date = date('dmy',$teetime_sunday);
$teetime .= $time . $current_date;
$teetime_output .= '<td>TeeTime: <input type="text" id="'.$teetime.'" style="width:85px;" value="' . get_option($teetime) . '" /></td>';
$teetime_sunday = strtotime("next sunday", $teetime_sunday);
}
?>