Pfoeh, even denkenquote:Op maandag 31 juli 2006 20:57 schreef Swetsenegger het volgende:
Wat is het voordeel van sessie zelf managen, behalve het obvious dat mensen ingelogged kunnen blijven. Zijn er daarnaast nog voordelen?
Hou een timestamp bij. Elke keer als je je database update schrijf je de timestamp op dat moment ergens weg, en bij de volgende update INSERT je alleen de nieuwe items sinds die timestamp.quote:Op maandag 31 juli 2006 23:12 schreef Mr_Zoidberg het volgende:
Ik heb een rss feed met ongeveer 150 items. De description is bij elk item uniek.
Deze rss feed wil ik in mijn eigen database zetten zodat ik makkelijk wat kan sorteren etc. Om het uur wil ik deze verversen. Nu is het zo dat er per uur misschien 5 oude items weg zijn er wellicht 5 nieuwe bij zijn.
Wat is nu de makkelijkste manier om enkel de nieuwe items in de DB te zetten? Steeds op die description zoeken en dan num_rows lijkt me namelijk iets te omslachtig... Dat moet toch makkelijker kunnen?
1 2 3 4 5 6 7 8 | SQL-query : ALTER TABLE `freeroll` CHANGE `update_date` `update_date` TIMESTAMP DEFAULT 'now()' MySQL retourneerde: #1067 - Invalid default value for 'update_date' |
quote:Op maandag 31 juli 2006 15:54 schreef JeRa het volgende:
[..]
Je moet eerst weten wat een session precies is. Het is in feite niets meer dan wat data gekoppeld aan een unieke identifier, de session ID. Voor die session ID wordt heel vaak de md5- of sha1-hash van een hoop random input genomen. Die session ID is het énige wat je van je sessies als cookie opslaat bij de gebruiker.
Als een gebruiker een van je pagina's opvraagt, kijk je of er een session ID in z'n cookie te vinden is. Zo nee, dan genereer je een nieuwe random session ID, insert je die in de database en zet je een cookie bij de gebruiker die na een bepaalde tijd verloopt. Zo ja, dan vraag je de bijbehorende session uit de database op.
Zo'n session tabel kán er zo uitzien, op z'n simpelst:
sid - VARCHAR(32/40)
data - TEXT
timestamp - UNSIGNED INT
Op 'sid' zet je dan een INDEX voor een bepaald aantal karakters. Om data op te slaan in een session kun je die data opslaan in een array in PHP, en op het eind van elk script (indien gewijzigd) opslaan in de database door gebruik te maken van serialize() (en weer ongedaan te maken via unserialize().
In 'timestamp' sla je de UNIX_TIMESTAMP() op van de láátste keer dat een bezoeker een pagina heeft opgevraagd. Bij het laden van de sessions controleer je of een session niet verlopen is, bijvoorbeeld na 30 minuten.
Verder kun je in de database nog meer criteria opnemen zoals IP-adres en User Agent, zodat je sessions als ongeldig verklaart zodra daaraan iets verandert bij de gebruiker. Dan kan iemand, zodra hij een session ID van iemand heeft weten te stelen, nog niet meteen bij de session.
Als laatste moet je natuurlijk af en toe een grote schoonmaken houden waarbij je oude sessions uit de database verwijdert, hoe je dat doet moet je zelf even uitzoekenik voer meestal een cleanup uit op ongeveer 1 vd 200 requests.
quote:Op maandag 31 juli 2006 21:06 schreef JeRa het volgende:
[..]
Pfoeh, even denken
- je hebt zelf alle controle over hoe sessions werken en worden geďdentificeerd
- je kunt direct via een JOIN gegevens bij je session betrekken
- je bepaalt zelf hoe en wanneer sessions worden getrashed
- op een (slechte) shared webserver zit je niet meer met session IDs van andere websites
- je kunt zo gebruikers toestaan hun actieve sessies te beheren (ala Tweakers.net)
- het is leuk & leerzaam
- etc
Dat heb ik nu als oplossing, maar je zou now() of CURRENT_TIMESTAMP ook gewoon als default value in je tabel kunnen zetten en dat werkt niet echtquote:Op dinsdag 1 augustus 2006 18:45 schreef Scorpie het volgende:
je moet niet now() als in php gebruiken, gebruik de SQL now
Op z'n minst door er quotes omheen te zetten en het bericht goed te escapen:quote:Op woensdag 2 augustus 2006 13:50 schreef qu63 het volgende:
vraag 1:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'bericht van veel tekens)' at line 1
$bericht = $_POST['Bericht'];
mysql_query("INSERT INTO reacties (op_ID, Naam, Bericht) VALUES($id, $naam, $bericht)");
en $bericht bestaat dus uit: "mijn bericht van veel tekens"
hoe los ik dit nou netjes op?
Nogmaals, quotes om je strings.quote:vraag 2:
Unknown column 'testertester' in 'field list'
$naam = $_POST['Naam'];
mysql_query("INSERT INTO reacties (op_ID, Naam, Bericht) VALUES($id, $naam, $bericht)");
testertester heb ik zelf ingevuld bij Naam in mn invulpagina, maar hoe de fuck komt ie er bij dat die kolom niet bestaat? de kolommen zijn toch op_ID, Naam en Bericht? en daarin moet ie die zooi invullen
heb je wel een linkje dan?quote:Op woensdag 2 augustus 2006 14:02 schreef JeRa het volgende:
Het beste doe je zoiets grondiger en door bijvoorbeeld prepared statements te gebruiken, maar dat is even teveel uitleg.
1 2 3 4 5 6 | if (isset($_POST['search']) { //formulierveld 'search' heeft een waarde > voer db connectie uit //code db connectie enzo } //formulier ?> |
1 2 3 4 5 6 7 8 9 | $quoteFile = "quote.txt"; $content = file($quoteFile); $quotes = explode("\n",$content); //$index = (rand(1, sizeof($quotes)) - 1); print_(r)($quotes); //echo $quotes[$index]; ?> |
HINT!!quote:file
(PHP 3, PHP 4, PHP 5)
file -- Leest het volledige bestand in een array
Hetzelfde als readfile(), behalve dat file() het bestand in een array terug geeft. Elk element van de array komt overeen met een regel uit het bestand, met het newline teken er nog aan. Als het faalt, geeft file() FALSE terug.
ik heb het inmiddels opgelost door $search alvast n beginwaarde te geven op deze manier;quote:Op donderdag 3 augustus 2006 00:03 schreef the_disheaver het volgende:
[ code verwijderd ]
ofwel: via if (isset()) bekijken of een variable is 'gezet'.
Door een leeg formulier te versturen set je de varable ook, dus krijg je ook alle waarde.
Als je dat niet wilt, kun je if ( empty() ) gebruiken. Echter is ook de waarde 0 false.
Wil je 0 wel toestaan: if ($_POST['search'] != "")
1 |
1 2 3 4 5 6 | { return isset($_GET[$key]) ? $_GET[$key] : false; } $search = getGet('search'); |
bah!quote:Op donderdag 3 augustus 2006 16:03 schreef warezguy05 het volgende:
[..]
ik heb het inmiddels opgelost door $search alvast n beginwaarde te geven op deze manier;
$search = 'blablabla';
if(isset($_GET['search']))
{
$search = $_GET['search'];
}
evengoed bedankt voor de reacties![]()
Dat zal niet helpen als je een 9mb file probeert te uploaden op een server met een lagere upload limiet. De file komt gewoon niet aan op de server.quote:Op zaterdag 5 augustus 2006 22:41 schreef Desdinova het volgende:
je kan toch ook een vinkje zetten bij het importeren van een file, dattie het automatisch zelf opsplitst?
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |