Mijn nieuw scriptje is af...
>
Hoe het werkt
Op een admin-pagina geef je een csv-versie van de ledenlijst van VVKSM op (kan door het ledenprogramma gemaakt worden). Dat bestand wordt verwerkt en komt in je database terecht, waarna onze leiding de gegevens kan opvragen. Sommige gegevens zoals telefoonnummer worden "geformateerd", en er wordt ook een veld "verjaardag" toegevoegd om op een eenvoudige manier de verjaardagskalender te kunnen opstellen.
>
De code
Ik ga er van uit dat volgende tabel in je database steekt:
Code:
CREATE TABLE `ledenlijst` (
`achternaam` varchar(40) NOT NULL default '',
`voornaam` varchar(40) NOT NULL default '',
`functie` varchar(5) NOT NULL default '',
`lidnummer` varchar(13) NOT NULL default '',
`adres` varchar(80) NOT NULL default '',
`geboortedatum` varchar(10) NOT NULL default '',
`verjaardag` varchar(4) NOT NULL default '',
`mv` char(1) NOT NULL default '',
`telefoon` varchar(15) NOT NULL default '',
`telefoon2` varchar(15) NOT NULL default '',
`akabe` char(1) NOT NULL default '',
`verm_lidgeld` char(1) NOT NULL default '',
`begindatum` varchar(10) NOT NULL default ''
) TYPE=MyISAM;
# Eén voorbeeldregel van wat er zou kunnen instaan:
INSERT INTO `ledenlijst` VALUES ('Janssen', 'Jan', 'KAP', '1998102401116', 'Janssenstraat 1 B 3000 Leuven', '1998-10-24', '1024', 'M', '(016) 12 34 56', '', 'N', 'N', '22/10/2004');
De admin-pagina (ledenlijsten_aanpassen.php) ziet er zo uit (opgelet! gemaakt voor register_globals op Off > hier en daar zal je dus nog wat moeten aanpassen):
Code:
<!-- hoofding komt hier -->
<div class="titel">Ledenlijsten aanpassen</div>
<?php
if ($submit == "Update gegevens") {
// +++++++++++++++++++++++++++++++ VERBINDING MAKEN +++++++++++++++++++++++++++++++ //
include('url/naar/verbinden.php'); // in verbinden.php wordt een verbinding gemaakt met je database
$tabel = "ledenlijst";
// tabel ledenlijst leegmaken
$select = "DELETE FROM $tabel";
$query = mysql_query($select)or die(mysql_error());
// veld "verjaardag" verwijderen
$select = 'ALTER TABLE `ledenlijst` DROP `verjaardag` ';
$query = mysql_query($select)or die(mysql_error());
// tijdelijke velden aanmaken
$select = 'ALTER TABLE `ledenlijst` ADD `pa` VARCHAR( 1 ) NOT NULL AFTER `mv`,'
. ' ADD `temp1` VARCHAR( 1 ) NOT NULL ,'
. ' ADD `temp2` VARCHAR( 1 ) NOT NULL ,'
. ' ADD `temp3` VARCHAR( 1 ) NOT NULL ,'
. ' ADD `temp4` VARCHAR( 1 ) NOT NULL ,'
. ' ADD `temp5` VARCHAR( 1 ) NOT NULL ,'
. ' ADD `temp6` VARCHAR( 1 ) NOT NULL ,'
. ' ADD `temp7` VARCHAR( 1 ) NOT NULL ,'
. ' ADD `temp8` VARCHAR( 1 ) NOT NULL ,'
. ' ADD `temp9` VARCHAR( 1 ) NOT NULL ,'
. ' ADD `temp10` VARCHAR( 1 ) NOT NULL ,'
. ' ADD `temp11` VARCHAR( 1 ) NOT NULL ,'
. ' ADD `temp12` VARCHAR( 1 ) NOT NULL ,'
. ' ADD `temp13` VARCHAR( 1 ) NOT NULL ,'
. ' ADD `temp14` VARCHAR( 1 ) NOT NULL ,'
. ' ADD `temp15` VARCHAR( 1 ) NOT NULL ,'
. ' ADD `temp16` VARCHAR( 1 ) NOT NULL ,'
. ' ADD `temp17` VARCHAR( 1 ) NOT NULL ,'
. ' ADD `temp18` VARCHAR( 1 ) NOT NULL ,'
. ' ADD `temp19` VARCHAR( 1 ) NOT NULL ,'
. ' ADD `temp20` VARCHAR( 1 ) NOT NULL ,'
. ' ADD `temp21` VARCHAR( 1 ) NOT NULL ,'
. ' ADD `temp22` VARCHAR( 1 ) NOT NULL ,'
. ' ADD `temp23` VARCHAR( 1 ) NOT NULL ,'
. ' ADD `temp24` VARCHAR( 1 ) NOT NULL ,'
. ' ADD `temp25` VARCHAR( 1 ) NOT NULL ,'
. ' ADD `temp26` VARCHAR( 1 ) NOT NULL ,'
. ' ADD `temp27` VARCHAR( 1 ) NOT NULL ,'
. ' ADD `temp28` VARCHAR( 1 ) NOT NULL ;';
$query = mysql_query($select)or die(mysql_error());
$local_file = "./ledenlijsten_aanpassen_actieve_lijst.txt";
if(copy ($bestand, $local_file)) {
$fcontents = file($local_file);
for($i=1; $i<sizeof($fcontents); $i++) {
$line = trim($fcontents[$i]);
$arr = explode(";", $line);
$sql = "INSERT INTO $tabel VALUES ('".implode("','", $arr) ."')";
mysql_query($sql);
}
}
// eerste lijn met veldgegevens verwijderen
$select = "DELETE FROM $tabel WHERE achternaam='Naam' AND voornaam='Voornaam'";
$query = mysql_query($select)or die(mysql_error());
// veld "verjaardag" weer toevoegen
$select = 'ALTER TABLE `ledenlijst` ADD `verjaardag` VARCHAR( 4 ) NOT NULL AFTER `geboortedatum`';
$query = mysql_query($select)or die(mysql_error());
// overbodige velden verwijderen
$select = 'ALTER TABLE `ledenlijst` DROP `pa` ';
$query = mysql_query($select)or die(mysql_error());
$select = "ALTER TABLE `ledenlijst` DROP `temp1`";
$query = mysql_query($select)or die(mysql_error());
$select = "ALTER TABLE `ledenlijst` DROP `temp2`";
$query = mysql_query($select)or die(mysql_error());
$select = "ALTER TABLE $tabel DROP `temp3` ";
$query = mysql_query($select)or die(mysql_error());
$select = "ALTER TABLE $tabel DROP `temp4` ";
$query = mysql_query($select)or die(mysql_error());
$select = "ALTER TABLE $tabel DROP `temp5` ";
$query = mysql_query($select)or die(mysql_error());
$select = "ALTER TABLE $tabel DROP `temp6` ";
$query = mysql_query($select)or die(mysql_error());
$select = "ALTER TABLE $tabel DROP `temp7` ";
$query = mysql_query($select)or die(mysql_error());
$select = "ALTER TABLE $tabel DROP `temp8` ";
$query = mysql_query($select)or die(mysql_error());
$select = "ALTER TABLE $tabel DROP `temp9` ";
$query = mysql_query($select)or die(mysql_error());
$select = "ALTER TABLE $tabel DROP `temp10` ";
$query = mysql_query($select)or die(mysql_error());
$select = "ALTER TABLE $tabel DROP `temp11` ";
$query = mysql_query($select)or die(mysql_error());
$select = "ALTER TABLE $tabel DROP `temp12` ";
$query = mysql_query($select)or die(mysql_error());
$select = "ALTER TABLE $tabel DROP `temp13` ";
$query = mysql_query($select)or die(mysql_error());
$select = "ALTER TABLE $tabel DROP `temp14` ";
$query = mysql_query($select)or die(mysql_error());
$select = "ALTER TABLE $tabel DROP `temp15` ";
$query = mysql_query($select)or die(mysql_error());
$select = "ALTER TABLE $tabel DROP `temp16` ";
$query = mysql_query($select)or die(mysql_error());
$select = "ALTER TABLE $tabel DROP `temp17` ";
$query = mysql_query($select)or die(mysql_error());
$select = "ALTER TABLE $tabel DROP `temp18` ";
$query = mysql_query($select)or die(mysql_error());
$select = "ALTER TABLE $tabel DROP `temp19` ";
$query = mysql_query($select)or die(mysql_error());
$select = "ALTER TABLE $tabel DROP `temp20` ";
$query = mysql_query($select)or die(mysql_error());
$select = "ALTER TABLE $tabel DROP `temp21` ";
$query = mysql_query($select)or die(mysql_error());
$select = "ALTER TABLE $tabel DROP `temp22` ";
$query = mysql_query($select)or die(mysql_error());
$select = "ALTER TABLE $tabel DROP `temp23` ";
$query = mysql_query($select)or die(mysql_error());
$select = "ALTER TABLE $tabel DROP `temp24` ";
$query = mysql_query($select)or die(mysql_error());
$select = "ALTER TABLE $tabel DROP `temp25` ";
$query = mysql_query($select)or die(mysql_error());
$select = "ALTER TABLE $tabel DROP `temp26` ";
$query = mysql_query($select)or die(mysql_error());
$select = "ALTER TABLE $tabel DROP `temp27` ";
$query = mysql_query($select)or die(mysql_error());
$select = "ALTER TABLE $tabel DROP `temp28` ";
$query = mysql_query($select)or die(mysql_error());
// lijst aanpassen
$select = "SELECT * FROM $tabel";
$query = mysql_query($select)or die(mysql_error());
$aantal_aangepast = "0";
while($list = mysql_fetch_object($query)) {
$achternaam = $list->achternaam;
$voornaam = $list->voornaam;
$functie = $list->functie;
$telefoon = "";
$telefoon2 = "";
$telefoon = ereg_replace("\."," ",$list->telefoon);
$telefoon = ereg_replace("/",") ",$telefoon);
$telefoon = "(" . $telefoon;
if ($list->telefoon2 <> "") {
$telefoon2 = ereg_replace("\."," ",$list->telefoon2);
$telefoon2 = ereg_replace("/",") ",$telefoon2);
$telefoon2 = "(" . $telefoon2;
}
$geboortedatum = $list->geboortedatum;
if ($geboortedatum{1} == "/") {
$geboortedatum = "0" . $geboortedatum;
}
$geboortedatumrij = preg_split('//', $geboortedatum, -1, PREG_SPLIT_NO_EMPTY);
$geboortedatum = $geboortedatumrij[6] . $geboortedatumrij[7] . $geboortedatumrij[8] . $geboortedatumrij[9] . "-" . $geboortedatumrij[3] . $geboortedatumrij[4] . "-" . $geboortedatumrij[0] . $geboortedatumrij[1];
$verjaardag = $geboortedatumrij[3] . $geboortedatumrij[4] . $geboortedatumrij[0] . $geboortedatumrij[1];
// tabel checken op personen met dubbele functies: deze mogen maar één keer in de verjaardagslijst voorkomen!
$selecteer = "SELECT * FROM $tabel WHERE achternaam='$achternaam' AND voornaam='$voornaam'";
$querie = mysql_query($selecteer)or die(mysql_error());
$aantal_gevonden = "0";
while($lijst = mysql_fetch_object($querie)) {
if ($lijst->verjaardag == $verjaardag) {
$aantal_gevonden++;
}
}
if ($aantal_gevonden == "0") {
$verjaardag = $geboortedatumrij[3] . $geboortedatumrij[4] . $geboortedatumrij[0] . $geboortedatumrij[1];
} else {
$verjaardag = "";
}
$aantal_aangepast++;
$ed = "UPDATE $tabel SET telefoon='$telefoon' WHERE achternaam='$achternaam' AND voornaam='$voornaam'";
$querie = mysql_query($ed)or die(mysql_error());
$ed = "UPDATE $tabel SET telefoon2='$telefoon2' WHERE achternaam='$achternaam' AND voornaam='$voornaam'";
$querie = mysql_query($ed)or die(mysql_error());
$ed = "UPDATE $tabel SET geboortedatum='$geboortedatum' WHERE achternaam='$achternaam' AND voornaam='$voornaam'";
$querie = mysql_query($ed)or die(mysql_error());
$ed = "UPDATE $tabel SET verjaardag='$verjaardag' WHERE achternaam='$achternaam' AND voornaam='$voornaam' AND functie='$functie'";
$querie = mysql_query($ed)or die(mysql_error());
}
echo ("\n<p class=\"midden\">");
echo ("\n De update is geslaagd! ($aantal_aangepast leden ingevoerd en aangepast)");
echo ("\n</p>");
} else {
?>
<p class="tekst">
Met dit scriptje kan je de tabel met de ledenlijsten updaten. Alles wordt verwerkt zodat het meteen bruikbaar is voor de on-line ledenlijsten en verjaardagskalender.
<br />
<br />Geef hieronder het csv-bestand op en klik op "Update gegevens".
</p>
<form enctype="multipart/form-data" action="ledenlijsten_aanpassen.php" method="post" name="toevoegen">
<table class="tabel3" align="center">
<tr>
<td class="td1" colspan="2" align="center">Ledenlijst updaten</td>
</tr>
<tr>
<td class="td1" align="right" width="200">Bestand:</td>
<td class="td2"><input type ="file" class="input" size="36" name="bestand"></td>
</tr>
<tr>
<td class="td2" colspan="2" height="2"></td>
</tr>
<tr>
<td class="td2" colspan="2" align="center"><input type="submit" class="button" name="submit" value="Update gegevens"></td>
</tr>
</table>
</form>
<?php
}
?>
<!-- voet komt hier -->
Je csv-bestand bestaat uit regels die er ongeveer zo uitzien:
Code:
Janssen;Jan;KAP;1998102401116;Janssensstraat 1 B 3000 Leuven;24/10/1998;M;;016/12.34.56;;N;N;22/10/2004;;;;;;;;;;;;;;;;;;;;;N;N;N;N;N;N;N;N
In de directory waar je het admin-script uitvoert, moet je ook een bestand kunnen kopieren. Als je het script wil uittesten op Scoutnet, maak je best een bestand
ledenlijsten_aanpassen_actieve_lijst.txt aan dat je toegangsrechten 777 geeft.
Meer heb je niet nodig denk ik (je kan nu met eenvoudige sql-statements de lijsten al dan niet op bepaalde wijze geordend oproepen).
Nog één ding: ik wilde eerst gebruikmaken van
LOAD DATA INFILE om het csv-bestand in te lezen (dus zonder het echt te kopiëren), maar dat lukte niet. Op mijn localhost kreeg ik steeds te horen dat hij het bestand in de temp-map niet vond, en op Scoutnet werd dat commando zelfs geblokkeerd? Ik heb dan ook een stukje code van scoutsboekhoute gekopieerd om tot hetzelfde eindresultaat te komen (waarvoor dank, Wim!).
Veel plezier ermee!
To