1 |
quote:Using extended regular expressions, you can specify arbitrary pattern occurrence counts using a more verbose syntax than the question-mark, plus-sign, and asterisk quantifiers. The curly-braces ("{" and "}") can surround a precise count of how many occurrences you are looking for.
The most general form of the curly-brace quantification uses two range arguments (the first must be no larger than the second, and both must be non-negative integers). The occurrence count is specified this way to fall between the minimum and maximum indicated (inclusive). As shorthand, either argument may be left empty: if so the minimum/maximum is specified as zero/infinity, respectively. If only one argument is used (with no comma in there), exactly that number of occurrences are matched.
http://gnosis.cx/publish/programming/regular_expressions.html
Tnx, ik had zelf al geprobeerd maar blijkbaar ging het door de * foutquote:
Het is week 1 van 2008. En met wat code om de eerste dag van die week te bepalen kom ik op 31 december 2007.quote:Op maandag 31 december 2007 12:30 schreef Geqxon het volgende:
[..]
En dat lukt mij inmiddels. Het blijft echter gestoei met de weeknummers. Het is op het moment Week 1 van 2007, en dat is waar het ook gelijk goed fout gaat in het script. Ik ga maar weer even worstelen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | function firstDayOfWeek($week, $year) { $jan1st = mktime(0,0,0,1,1,$year); if(date('W', $jan1st) == 1) { //Correctie toepassen, alleen voor als 1 januari in week 1 zit // En 1 januari kan soms ook bij week 53 of 52 worden gerekend. $week--; } $weekday = date('N', $jan1st) - 1; //Dag 1 is maandag return strtotime('+'.$week.' weeks -'.$weekday.' days', $jan1st); } echo date('Y-m-d', firstDayOfWeek(1,2008)); //Levert 2007-12-31 ?> |
Dat klopt, en als "date('W-Y')" keurig 01-2008 zou tonen dan zou mijn pagina perfect werken, want ook het algoritme dat ik gebruik geeft dan 31 december weer. Helaas, hij geeft nu 01-2007 weer.quote:Op maandag 31 december 2007 14:48 schreef Light het volgende:
[..]
Het is week 1 van 2008. En met wat code om de eerste dag van die week te bepalen kom ik op 31 december 2007.
Edit - de code:
[ code verwijderd ]
Met date("W o") krijg je wel het ISO weeknummer en het ISO jaar. Nadeel is dat je PHP 5.1.0 of nieuwer nodig hebt.quote:Op maandag 31 december 2007 15:04 schreef Geqxon het volgende:
[..]
Dat klopt, en als "date('W-Y')" keurig 01-2008 zou tonen dan zou mijn pagina perfect werken, want ook het algoritme dat ik gebruik geeft dan 31 december weer. Helaas, hij geeft nu 01-2007 weer.
Het is jammer dat de date & time functies van PHP wat rommelig zijn, want "strftime("%W-%Y")" geeft 53-2007 weer, aangezien die weer geen ISO weeknummer geeft.
Een IP is wel een string, bestaat uit getallen met puntjes.quote:Op maandag 31 december 2007 10:32 schreef Tarabass het volgende:
Fix-List:
Variable (volgens mij) nu global gemaakt.
Escape bij declaratie weggehaald en in de query pas meegegeven
If-statements verkort naar 1 if-statement
ID-integer uit de query gesloopt, ook geen idee waarom ik hem er bij had gezet (en dan ook nog als string).
exit; comment weggehaald.
Waarom moet ik de variable $ip escapen in de query? Dit is een integer, en geen string.
$date is een datetime. Waarom vraag je dat?
A List Apart wordt doorgenomen, dank voor de link.
Code na aanpassingen:
[ code verwijderd ]
Kijk voor de grap eens goed naar zijn codequote:Op maandag 31 december 2007 15:29 schreef colourAgga het volgende:
[..]
Een IP is wel een string, bestaat uit getallen met puntjes.
Kijk voor de grap ook eens naar: http://nl3.php.net/manual/en/function.ip2long.php
Dat gebruik ik ook in m'n code. Ik haal hem ook op met long2ipquote:Op maandag 31 december 2007 15:29 schreef colourAgga het volgende:
[..]
Een IP is wel een string, bestaat uit getallen met puntjes.
Kijk voor de grap ook eens naar: http://nl3.php.net/manual/en/function.ip2long.php
Die server_admin variabele bevat de waarde uit de apache config ServerAdmin. CLI gebruikt niet de SAPI en die variabele hoort gewoon leeg te zijn in CLI.quote:Op maandag 31 december 2007 14:43 schreef mschol het volgende:
iemand een idee of ik de $_SERVER['SERVER_ADMIN'] kan benaderen met php in CLI?
of is dat echt helemaal onmogelijk en zal ik het moeten hardcoden?
Wat opmerkingen:quote:Op maandag 31 december 2007 10:32 schreef Tarabass het volgende:
Code na aanpassingen:
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<?php
function CheckPostData() {
$ip = $_SERVER['REMOTE_ADDR'];
$ip = ip2long($ip);
$data = $_POST['data'];
$date = date('y-m-j H:i:s');
Global $mysql_tbn;
if(($data != "Hier je bericht....." && $data != "") && (is_string($data))) {
InsertQuery($ip, $data, $date);
}
}
function InsertQuery($ip, $data, $date) {
Global $mysql_tbn;
$sql_insert = "INSERT INTO " . $mysql_tbn . " SET ";
$sql_insert .= "ip = " . $ip;
$sql_insert .= ", data = '" . mysql_real_escape_string($data) . "'";
$sql_insert .= ", date = '" . $date . "'";
$result = mysql_query($sql_insert);
header("Location: " . $_SERVER['PHP_SELF']);
exit;
}
?>
1 2 3 | $sql_insert = sprintf("INSERT INTO %s SET date='%s',ip=%d, data=' %s' ",$mysql_tbn,$date,$ip,mysql_real_escape_string($data)); ?> |
Dat kan mooier :Pquote:Op maandag 31 december 2007 14:48 schreef Light het volgende:
[..]
Het is week 1 van 2008. En met wat code om de eerste dag van die week te bepalen kom ik op 31 december 2007.
Edit - de code:
[ code verwijderd ]
1 2 3 4 5 6 | { $jan4th = mktime(0, 0, 0, 1, 4, $year); $weekday = date('N', $jan4th) + 6; return strtotime("+$week weeks -$weekday days", $jan4th); } |
1 2 3 4 5 6 7 8 9 | function StartOfWeek($year, $week) { $Jan1 = mktime(1,1,1,1,1,$year); $MondayOffset = (11-date('w',$Jan1))%7-3; $desiredMonday = strtotime(($week-1) . ' weeks '.$MondayOffset.' days', $Jan1); return $desiredMonday; } ?> |
True, rommelig van me maar die had ik laten staan na aanpassingen van de vorige keer (gaf hem toen mee naar de insertquery)quote:Op maandag 31 december 2007 18:55 schreef smesjz het volgende:
* Global $mysql_tbn; heb je niet nodig in CheckPostData
Dit begrijp ik nietquote:* is_string geeft ook true als de invoer ($data) leeg is en dus overbodig.
Eens. Is ook niet de manier die ik nu veel gebruik, inderdaad omdat het zo vervelend lezen is.quote:* De opbouw van $sql_insert vind ik vervelend lezen, gebruik OF een prepared statement of iets als sprintf:
1 2 3 | $sql_insert = "INSERT INTO " . $mysql_tbn . " (ip, data, date) VALUES ('$ip', '" . mysql_real_escape_string($data) . "', '$date')"; ?> |
Is wel netter, maar had het even snel gebouwd, om de veilig te leren en te testen. Beetje zonde van de tijd dus.quote:* Waarom geen else clause bij if ($data blabla) ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | function CheckPostData() { $ip = $_SERVER['REMOTE_ADDR']; $ip = ip2long($ip); $data = $_POST['data']; $data = trim($data); $date = date('y-m-j H:i:s'); if(($data != "Hier je bericht....." && $data != "") && (is_string($data))) { InsertQuery($ip, $data, $date); } } function InsertQuery($ip, $data, $date) { Global $mysql_tbn; $sql_insert = "INSERT INTO " . $mysql_tbn . " (ip, data, date) VALUES ('$ip', '" . mysql_real_escape_string($data) . "', '$date')"; $sql_insert = mysql_query($sql_insert); header("Location: " . $_SERVER['PHP_SELF']); exit; } ?> |
Je had quotjes om $ip staan, dus ik ging er vanuit dat het een string was. Als $ip een int is dan hoef je inderdaad niet te escapen. Waarom zet je het ip om naar een int? Als dat alleen is om 'm in de db te zetten, dan is het logischer om ip2long dicht bij de sql, dus in InsertQuery() te zetten.quote:Op maandag 31 december 2007 20:24 schreef Tarabass het volgende:
@SuperRembo
Waarom moet ik de variable $ip escapen in de query? Dit is een integer, en geen string.
Je insert dus eigenlijk een string in een datetime veld. Blijkbaar doet MySQL daar niet zo moeilijk over (MS SqlServer bijvoorbeeld zou 't niet pikken). Je zou ook de MySQL functie now() kunnen gebruiken als je de huidige tijd wil inserten.quote:$date is een datetime. Waarom vraag je dat?
Gewoon geen tekst in een veld zetten die je niet in je db wil hebben. Gewoon een label voor het veld zetten.quote:Jaja, gezien. Dubbele spatieHoe kan ik die spaties mooier opschonen?
ik had eigenlijk echt server_admin adress nodig maar ik heb het maar gehardcode, script genereert nu geen index warnings meer en daar ging het me om (script zelf werkte vlekkeloos alleen gaf hij dus elke keer index warnings, en was te lui om het uittezoeken..quote:Op maandag 31 december 2007 18:37 schreef smesjz het volgende:
[..]
Die server_admin variabele bevat de waarde uit de apache config ServerAdmin. CLI gebruikt niet de SAPI en die variabele hoort gewoon leeg te zijn in CLI.
En ServerAdmin is nou niet iets waar je blindelings op moet vertrouwen.
Bij phpinfo() (of php -i) zie je welke variabelen je tot je beschikking hebt, misschien heb je daar wat aan?
Je hebt:quote:Op maandag 31 december 2007 20:24 schreef Tarabass het volgende:
Zou je dat uit kunnen leggen? Het is toch een 'and' en de string moet dan toch voldoen aan alle drie?
1 2 3 4 5 | if(($data != "Hier je bericht....." && $data != "") && (is_string($data))) { InsertQuery($ip, $data, $date); } ?> |
Nee,quote:Op dinsdag 1 januari 2008 11:05 schreef smesjz het volgende:
[..]
Dus dit is altijd false:
if ($_POST['abc'] == 1234)
[...]
Je hebt gelijk, my bad.quote:Op dinsdag 1 januari 2008 12:39 schreef SuperRembo het volgende:
[..]
Nee,
"1234" == 1234 geeft true
"1234" === 1234 geeft false
Ik zelf werk altijd met timestamps, al zweren andere mensen weer aan MySQL data / datums, omdat je dan in de query zelf berekeningen uit kan voeren. Persoonlijke voorkeur.quote:Op dinsdag 1 januari 2008 15:49 schreef Dzy het volgende:
Ik word helemaal gestoord van met data werken met PHP en MySQL. Kan iemand me even kort uitleggen hoe je dit nu het beste aanpakt? Ik moet het elke keer weer uitzoeken en telkens doe ik het weer anders, is niet echt handig met aanpassen.
Fields voor je database: TIMEDATE ?
Welke functies gebruiken in php? date()?
Queries in MySQL voor bv de laatste week, welke functies?
Ik kom er nu alweer niet uit -_-
Het ligt er een beetje aan waar je de datum voor nodig hebt. Voor data voor 01-01-1970 is een timestamp niet zo geschikt.quote:Op dinsdag 1 januari 2008 15:52 schreef Geqxon het volgende:
[..]
Ik zelf werk altijd met timestamps, al zweren andere mensen weer aan MySQL data / datums, omdat je dan in de query zelf berekeningen uit kan voeren. Persoonlijke voorkeur.
Met functies als date() kun je van een timestamp weer een fatsoenlijk leesbare datum maken.
Timestamp: Het aantal seconden tussen 01-01-1970 en de datum die je bedoeld. Dat is in MySQL en PHP een simpele integer.
Negatieve timestamp?quote:Op dinsdag 1 januari 2008 16:31 schreef Light het volgende:
[..]
Het ligt er een beetje aan waar je de datum voor nodig hebt. Voor data voor 01-01-1970 is een timestamp niet zo geschikt.
quote:The valid range of a timestamp is typically from Fri, 13 Dec 1901 20:45:54 GMT to Tue, 19 Jan 2038 03:14:07 GMT. (These are the dates that correspond to the minimum and maximum values for a 32-bit signed integer). However, before PHP 5.1.0 this range was limited from 01-01-1970 to 19-01-2038 on some systems (e.g. Windows).
PHP heeft sinds 5.1 een DateTime klasse. Nogal slecht gedocumenteerd en 't biedt niet écht veel functionaliteit maar 't werkt wel goed voor tijdzones en tijdsaanpassingenquote:Op dinsdag 1 januari 2008 17:14 schreef Geqxon het volgende:
Ik durf het haast niet te zeggen, maar een tof Date object zou niet verkeerd zijn.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | // Tijd in UTC (als je geen windowssysteem gebruikt en je je klok goed hebt ingesteld) $timestamp = '@'. time(); // De locale tijdzone ... $localTimeZone = new DateTimeZone('Europe/Amsterdam'); // ... en een andere $newyorkTimeZone = new DateTimeZone('EST'); // Maak een date object aan voor de huidige (UTC) tijd $dateTime = new DateTime($timestamp); // Schuif de datum door naar de volgende ijstijd $dateTime->modify('+10000 years -2 weeks'); // Format de date met binnen verschillende tijdzones echo 'UTC : ' . $dateTime->format(DATE_RFC2822) . "\n"; $dateTime->setTimezone($localTimeZone); echo 'Local time : ' . $dateTime->format(DATE_RFC2822) . "\n"; $dateTime->setTimezone($newyorkTimeZone); echo 'New York time : ' . $dateTime->format(DATE_RFC2822); ?> |
Ik zou beginnen bij www.php.net, dan zie je dat Dreamweaver niet echt handig isquote:Op woensdag 2 januari 2008 00:50 schreef Agiath het volgende:
Ik wil een simpele website maken waar bepaalde mensen rechten krijgen om zelf dingen toe te voegen in een blog. Soort van multi blog dus.
Ik ben redelijk handig met computers maar van site's maken weet ik nog maar weinig.
Heeft PHP bijvoorbeeld nou te maken met dit soort multi-upload dingetjes?
En wat voor software kan ik het beste gebruiken? Dreamweaver?
hmm, DW is, imho, juist een van de beste programma's voor php.quote:Op woensdag 2 januari 2008 10:11 schreef Chandler het volgende:
[..]
Ik zou beginnen bij www.php.net, dan zie je dat Dreamweaver niet echt handig is
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |