1 2 3 4 5 6 7 8 9 10 | SELECT `pix`.*, `pix_tags`.`tag` FROM `pix_tags` LEFT JOIN `pix_tags_links` ON `pix_tags_links`.`tag_id` = `pix_tags`.`tag_id` LEFT JOIN `pix` ON `pix`.`pix_id` = `pix_tags_links`.`pix_id` WHERE `pix_tags`.`tag` LIKE '%cool%' AND `pix`.`adult` = 'n' LIMIT 0,20 |
Je doetquote:Op woensdag 16 februari 2011 08:57 schreef Chandler het volgende:
Pff mijn import is voltooid en heb nu de volgende query; die er volgens mij nog steeds lang over doet.
[ code verwijderd ]
deze duurt wel 0.3 seconden voor maar 241K tags / 1.500k aan tag_links
Kan ik deze nog verder optimaliseren?
1 | SELECT `pix`.*, |
Oke, naja viel te proberen. Je query is eigenlijk ook helemaal niet zo lang en haalt maar 20 records op.quote:Op woensdag 16 februari 2011 09:19 schreef Chandler het volgende:
klopt er zouden een paar kolommen af kunnen maar zou niet weten of dat echt wel een besparing oplevert (extreme besparing)... maar zal het proberen!
-edit-
geprobeerd totaal geen extra preformance winst
Met goedgeplaatste indices moet je een eind kunnen komen, volgens mijquote:Op woensdag 16 februari 2011 08:57 schreef Chandler het volgende:
Pff mijn import is voltooid en heb nu de volgende query; die er volgens mij nog steeds lang over doet.
[ code verwijderd ]
deze duurt wel 0.3 seconden voor maar 241K tags / 1.500k aan tag_links
Kan ik deze nog verder optimaliseren?
quote:WHERE `pix_tags`.`tag` LIKE '%cool%'
1 2 3 | <?php $query = "SELECT agenda_id, agendatitel, agendaplaats, from_unixtime(agendadatum, '%d-%m-%Y') AS datum, agendabeschrijving FROM agenda WHERE agendadatum >= NOW() ORDER BY agenda_id ASC"; ?> |
Hij zet de datum als unix_timestamp in een varchar veld.quote:Op woensdag 16 februari 2011 14:51 schreef remi1986 het volgende:
Werken datum velden in MySQL niet in Y-m-d formaat?
1 2 3 | <?php strtotime(date("Y-m-d")); ?> |
1 | from_unixtime(agendadatum, '%d-%m-%Y') AS datum |
1 | WHERE agendadatum >= NOW() |
Nee, want als je daar agendadatum van maakt gaat hij vervolgens WHERE doen op de unixtimestamp die al is omgezet volgens mij.quote:Op woensdag 16 februari 2011 14:58 schreef remi1986 het volgende:
Overigs doe je
[ code verwijderd ]
en
[ code verwijderd ]
moet dat dan niet datum zijn i.p.v. agendadatum?
1 | SELECT from_unixtime(timestamp, '%d-%m-%Y') AS datum FROM test WHERE timestamp <= NOW() |
Een unix timestamp is gewoon een getal, kan dus prima in een INT-veldquote:Op woensdag 16 februari 2011 14:52 schreef Emery het volgende:
[..]
Hij zet de datum als unix_timestamp in een varchar veld.
Ik heb je topic meerdere keren door gelezen maar kan niet vinden wat ik fout doe!quote:Op woensdag 16 februari 2011 10:33 schreef GlowMouse het volgende:
[..]
http://gathering.tweakers.net/forum/list_messages/1429432
Dat sluit mijn db-opzet niet uit.quote:Op woensdag 16 februari 2011 18:04 schreef Chandler het volgende:
Dat heb ik ook, maar ik heb meerdere tags per plaatje
quote:Op woensdag 16 februari 2011 10:46 schreef Light het volgende:
Chandler, LIKE %cool% komt op hetzelfde neer als de Dikke Van Dale pakken en alle woorden waar een Q in staat opzoeken. Dat moet je niet willen.
1 2 3 4 5 6 7 8 9 10 | <?php $mktijd = mktime($maand, $dag, $jaar); $sql= "INSERT INTO agenda (agendatitel, agendaplaats, agendadatum, agendabeschrijving) VALUES ('" . mysql_real_escape_string($agendatitel) . "', '" . mysql_real_escape_string($agendaplaats) . "', '" . mysql_real_escape_string($mktijd) . "', '" . mysql_real_escape_string($agendabeschrijving) . "')"; ?> |
Lijkt me sterk dat het daaraan ligt? Hij deed het vanmiddag gewoon goed en toen heb ik ook geen 0,0,0 gebruikt. Overigens is nu opeens de webserver van de website waar ik aan het testen ben down. Godver.quote:
Enigste wat me opviel. Verder weet ik het ook niet . [/newb]quote:Op donderdag 17 februari 2011 01:51 schreef Emery het volgende:
[..]
Lijkt me sterk dat het daaraan ligt? Hij deed het vanmiddag gewoon goed en toen heb ik ook geen 0,0,0 gebruikt. Overigens is nu opeens de webserver van de website waar ik aan het testen ben down. Godver.
quote:mktime() returns the Unix timestamp of the arguments given. If the arguments are invalid, the function returns FALSE (before PHP 5.1 it returned -1).
Haha ongeveer wel ja. Maar toen dacht ik nog dat het aan de INSERT lag. En niet aan het update script. Nou ja, bedankt voor het meedenken!quote:Op donderdag 17 februari 2011 02:29 schreef Tegan het volgende:
Haha, dus mijn eerste opmerking was de fout .
Je hebt die extra tabellen niet nodig.quote:Op donderdag 17 februari 2011 08:48 schreef MrNiles het volgende:
omdat het toevoegen van een kolom dmv een variable niet echt goed werk ontvangen hier
moet ik dus redelijk opnieuw beginnen
om het nu een beter inzicht te krijgen hoe ik de db moet opbouwen heb ik jullie opbouwende kritiek nodig
ik wil dus dat een gebruiker op een bepaalde datum kan aangeven of hij wel of niet aanwezig is
tabel 1
uniek gebruikers id (G_id)
gebruikers naam (G_name)
tabel 2
afspraak id (A_id)
datum
wat
waar
tabel 3
G_id
A_id
aanwezig (j/n/?)
Tabel 3 zal voor elke unieke afspraak zijn:
Tabel 3 voor datum1
Tabel 4 voor datum2
Tabel 5 voor datum3 etc etc
Klopt deze opzet?
1 2 3 | <?php $datum = date("Y-m-d"); ?> |
1 2 3 | <?php $datum = strtotime(date("Y-m-d"); ?> |
1 2 3 | <?php $query = mysql_query("SELECT g.name FROM gebruikers AS g INNER JOIN koppeltabel k ON ( k.g_id = g.g_id ) INNER JOIN afspraak a ON ( k.a_id = a.a_id ) WHERE a.datum = '".mysql_real_escape_string($datum)."' "); ?> |
Als je timestamps gebruikt, kan het makkelijker:quote:Op donderdag 17 februari 2011 09:19 schreef remi1986 het volgende:
Stel je wil weten welke gebruikers vandaag komen
[ code verwijderd ]
of als je timestamps gebruikt
[ code verwijderd ]
[ code verwijderd ]
1 2 3 4 5 | <?php $datum = mktime(); // Timestamp van huidige tijd // Alternatief: $datum = mktime(0, 0, 0) // Timestamp van huidige datum, met tijd 00:00:00 ?> |
Ja kan ook. En ben met je eens dat escapen niet nodig is, maar ik doe het zelf altijd standaard. Als het straks uit bijvoorbeeld POST data komt, waar je eerst een datum moet kiezen is het weer user input.quote:Op donderdag 17 februari 2011 09:33 schreef Light het volgende:
[..]
Als je timestamps gebruikt, kan het makkelijker:
[ code verwijderd ]
En mysql_real_escape_string() lijkt me niet direct nodig als je weet dat de variabele altijd een gegenereerd datumveld bevat.
maar de gebruiker met zelf ergens kunnen aangeven of hij wel of niet aanwezig kan zijnquote:Je hebt die extra tabellen niet nodig.
Je hebt aan een koppeltabel genoeg met g_id en a_id. Staat de gebruiker gekoppeld aan de afspraak (welke al een datum hebben), dan komt hij/zij. Anders niet.
Dan voeg je die toe aan die koppeltabel..quote:Op donderdag 17 februari 2011 09:53 schreef MrNiles het volgende:
[..]
maar de gebruiker met zelf ergens kunnen aangeven of hij wel of niet aanwezig kan zijn
dit moet toch ergens opgeslagen worden....
ooh..tijdens het typen bedenk ik me..je slaat alleen op als hij WEL aan wezig is..
hmm...en als ik 3 verschillende statussen wil hebben...JA NEE en ONBEKEND
maar dan moet ik voor die status een tabel makenquote:Dan voeg je die toe aan die koppeltabel..
a_id,g_id,status
1,1,Ja
Je kan dan in de JOIN nog aangeven als je een bepaalde status wil
Nee is niet nodig op zich, want gebruiker 2 kan voor afspraak 1 een status NEE/ONBEKEND hebben. Je koppelt een gebruiker aan een afspraak. Dezelfde gebruiker kan op voor een andere afspraak een andere status hebben.quote:Op donderdag 17 februari 2011 09:57 schreef MrNiles het volgende:
[..]
maar dan moet ik voor die status een tabel maken
want voor elke andere datum kan een andere status zijn
ik probeer het te snappen he :pquote:Nee is niet nodig op zich, want gebruiker 2 kan voor afspraak 1 een status NEE/ONBEKEND hebben. Je koppelt een gebruiker aan een afspraak. Dezelfde gebruiker kan op voor een andere afspraak een andere status hebben.
Je kan wel een tabel maken met de statussen. Dan krijg je dus 1,1,1 in de koppeltabel, maar met maar 3 statussen zou ik dat niet doen
1 2 3 | a_id,datum,waar,wat 1,2011-02-17,locatie,workshop 2,2011-02-18,locatie,meeting |
1 2 3 4 5 6 7 | a_id,g_id,status 1,1,Ja 1,2,Nee 1,3,Onbekend 2,1,Nee 2,2,Onbekend 2,3,Ja |
quote:Op donderdag 17 februari 2011 10:38 schreef KomtTijd... het volgende:
Welke joepmeloen verzint er nou kolomnamen als "waar" en "wat"?
Had even zijn voorbeeld gebruikt. Het is om het idee even duidelijk te maken. Zolang het idee maar van tafel is, dat voor iedere datum een aparte tabel/kolom moet worden aangemaaktquote:Op donderdag 17 februari 2011 08:48 schreef MrNiles het volgende:
omdat het toevoegen van een kolom dmv een variable niet echt goed werk ontvangen hier
moet ik dus redelijk opnieuw beginnen
om het nu een beter inzicht te krijgen hoe ik de db moet opbouwen heb ik jullie opbouwende kritiek nodig
ik wil dus dat een gebruiker op een bepaalde datum kan aangeven of hij wel of niet aanwezig is
tabel 1
uniek gebruikers id (G_id)
gebruikers naam (G_name)
tabel 2
afspraak id (A_id)
datum
wat
waar
tabel 3
G_id
A_id
aanwezig (j/n/?)
Tabel 3 zal voor elke unieke afspraak zijn:
Tabel 3 voor datum1
Tabel 4 voor datum2
Tabel 5 voor datum3 etc etc
Klopt deze opzet?
wat is het probleem?quote:Welke joepmeloen verzint er nou kolomnamen als "waar" en "wat"?
Het probleem is, dat als je geen beschrijvende kolomnamen gebruikt, je over een week al geen flauw benul meer hebt wat je query in hemelsnaam doet.quote:Op donderdag 17 februari 2011 10:43 schreef MrNiles het volgende:
[..]
wat is het probleem?
zolang je geen WHERE ofzo gaat gebruiken..dan lijkt me dat toch niet zo'n probleem
of mis ik iets...stomme vraag..ik mis een heleboel op php/sql..maar goed..
op die fiets...tja..hoeveel uitgebreider moet het zijn?quote:Het probleem is, dat als je geen beschrijvende kolomnamen gebruikt, je over een week al geen flauw benul meer hebt wat je query in hemelsnaam doet.
Ik gebruik zelf altijd Engelse namen voor tabellen en kolommen. Maar als je het in het NL wilt houden kan je iets doen als locatie en onderwerp.quote:Op donderdag 17 februari 2011 11:01 schreef MrNiles het volgende:
[..]
op die fiets...tja..hoeveel uitgebreider moet het zijn?
ik weet toch wat die waar en wat betekenen in dit geval
maar doe eens een voorstel hoe het zou kunnen zijn
OK..ik heb het probleem eigenlijk met alle file namen..die ben ik nu dus ook maar beter aan het benoemen...edit2 en verwerken3 dan raak je al snel de draad kwijtquote:Ik gebruik zelf altijd Engelse namen voor tabellen en kolommen. Maar als je het in het NL wilt houden kan je iets doen als locatie en onderwerp.
hopelijk kom ik niet stom over als ik vraag dat dit een daadwerkelijk tabel is en niet iets gegenereerd vanuit een join oidquote:Maar snap je het idee van de koppeltabel?
Helemaal als je Engelse en Nederlandse namen door elkaar gebruikt kan ik me dat voorstellen. Leer je aan om een bepaalde structuur (vaste namen en taal voor iets) te gebruiken. Nu weet je nog waar alles staat, maar weet je dat over een half jaar ook nog als je iets wil aanpassen?quote:Op donderdag 17 februari 2011 11:10 schreef MrNiles het volgende:
[..]
OK..ik heb het probleem eigenlijk met alle file namen..die ben ik nu dus ook maar beter aan het benoemen...edit2 en verwerken3 dan raak je al snel de draad kwijt
[..]
hopelijk kom ik niet stom over als ik vraag dat dit een daadwerkelijk tabel is en niet iets gegenereerd vanuit een join oid
ik begin m te vattenquote:Die koppeltabel is inderdaad een vaste tabel. Die moet je dan ook gewoon aanmaken.
Ik had ergens op deze pagina een voorbeeldquery gemaakt. Kan je vast wel wat mee.quote:Op donderdag 17 februari 2011 11:30 schreef MrNiles het volgende:
[..]
ik begin m te vatten
nu ff bedenken hoe ik dit om kan toveren tot een goede (inner) join zodat ik iets om mijn scherm krijg te zien
1 2 3 4 5 6 7 | <?php SELECT g.name FROM gebruikers AS g INNER JOIN koppeltabel k ON ( k.g_id = g.g_id ) INNER JOIN afspraak a ON ( k.a_id = a.a_id ) WHERE a.datum = '".mysql_real_escape_string($datum)."' "); ?> |
Ja klopt. Je kan k ook weglaten geloof ik maar moet je de volledige tabelnaam voor de kolommen gebruiken (koppeltabel.g_id = gebruikers.g_id)quote:Op donderdag 17 februari 2011 11:43 schreef MrNiles het volgende:
ben aan het kijken
[ code verwijderd ]
wat is die K bij INNER JOIN koppeltabel k
benoem je die koppeltabel nu als k voor de vergelijking daarachter?
1 2 3 | <?php var_dump(get_defined_vars()); ? ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php $commando= "SELECT gebruikers.G_id, gebruikers.G_name, optredens.O_id, FROM optredens, gebruikers INNER JOIN koppeltabel ON (koppeltabel.G_id=gebruikers.G_id) INNER JOIN optredens ON (koppeltabel.O_id=optredens.O_id) WHERE koppeltabel.O_id=$id AND koppeltabel.aanwezig='o' "; $resultaat=mysql_query($commando); echo "Deze mensen hebben nog niets laten weten"; while($array=mysql_fetch_array($resultaat)){ echo "<br />"; echo "<a href=\"aanwezig_edit.php?name=".$array['G_name']."&id=".$array['O_id']." \"> ".$array['G_name']."</a>"; } ?> |
En dit werkt niet? Probeer de code eens uit in phpmyadmin en verander $id naar een id die bestaat. Kijk dan of je resultaat krijgt.quote:Op donderdag 17 februari 2011 13:02 schreef MrNiles het volgende:
kan iemand op mijn code schieten?
[ code verwijderd ]
op deze manier hoop ik de mensen (G_name) te filteren die nog status "o" hebben
1 2 3 4 5 6 7 | <?php SELECT gebruikers.*, optredens.*, koppeltabel.* FROM gebruikers INNER JOIN koppeltabel ON (koppeltabel.G_id=gebruikers.G_id) INNER JOIN optredens ON (koppeltabel.O_id=optredens.O_id) WHERE koppeltabel.O_id=$id AND koppeltabel.aanwezig='o' ?> |
Altijd leuk, queries tussen je html-output.quote:Op donderdag 17 februari 2011 13:02 schreef MrNiles het volgende:
kan iemand op mijn code schieten?
[ code verwijderd ]
op deze manier hoop ik de mensen (G_name) te filteren die nog status "o" hebben
beter zo?quote:Altijd leuk, queries tussen je html-output.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php echo "Deze mensen hebben nog niets laten weten"; echo "<br />"; $commando_ja= "SELECT gebruikers.*, optredens.*, koppeltabel.* FROM gebruikers INNER JOIN koppeltabel ON (koppeltabel.G_id=gebruikers.G_id) INNER JOIN optredens ON (koppeltabel.O_id=optredens.O_id) WHERE koppeltabel.O_id=$id AND koppeltabel.aanwezig='o' "; $resultaat=mysql_query($commando_ja); while($array=mysql_fetch_array($resultaat)){ echo "<a href=\"aanwezig_edit.php?G_name=".$array['G_name']."&O_id=".$array['O_id']."&G_id=".$array['G_id']." \"> ".$array['G_name']."</a>"; echo "<br />"; } ?> |
dat is de bedoelingquote:Die array loop je in je html output door en geef je de namen weer. Zo hou je de queries gescheiden van de html.
1 2 3 4 5 6 7 8 | <?php $people_present = get_present(); foreach($people_present as $people) { echo hier de link naar aanwezig_edit.php } ?> |
1 2 3 | <?php $people_aanwezig = get_people($date,$event,"Ja"); // mensen op datum die aanwezig zijn ("ja") ?> |
1 2 3 4 5 6 7 8 9 | <?php function get_people($date,$event,$status) { // aan het einde return $array; } ?> |
Goed! het systeem zoekt nu op het hele woord en niet op delen! maar als ik nu kijk bv naar het forum, daar kun je ook zoeken op delen van woorden en dat is gewoon rete rap, waarom kan dat niet met tags? (kan wel maar qua preformance weer niet...)quote:
Welk forum, en op welk woord zoek je?quote:Op donderdag 17 februari 2011 18:07 schreef Chandler het volgende:
[..]
Goed! het systeem zoekt nu op het hele woord en niet op delen! maar als ik nu kijk bv naar het forum, daar kun je ook zoeken op delen van woorden en dat is gewoon rete rap, waarom kan dat niet met tags? (kan wel maar qua preformance weer niet...)
1 2 3 4 5 6 7 | <?php $result = mysql_query("SELECT G_id FROM gebruikers WHERE G_name='$G_name' "); while($row = mysql_fetch_array($result)) { $row['G_id']; } ?> |
echo $row['G_id']; ??quote:Op vrijdag 18 februari 2011 10:38 schreef MrNiles het volgende:
hoe krijg ik $G_id hier nu uit?
[ code verwijderd ]
1 2 3 4 | <?php $row = mysql_fetch_array($result); $G_id = $row['G_id']; ?> |
adblocker?quote:Op vrijdag 18 februari 2011 10:44 schreef MrNiles het volgende:
klote dat ik niet kan editen..maaruh...zo simpel.... dat ik eerst dacht dat het niet werkte..maar helaas een domme type fout...
gelukt dus
sorry!
misschienquote:adblocker?
1 2 3 4 5 6 | <?php if (iets hier waarschijnlijk) UPDATE koppeltabel SET aanwezig='$aanwezig' WHERE O_id='$O_id' AND G_id='$G_id' "); else INSERT INTO koppeltabel(O_id, G_id, aanwezig) VALUES ('$O_id','$G_id','o')"; ?> |
1 2 3 4 5 6 7 8 9 10 | <?php $query = SELECT WHERE id=id if (mysql_num_rows($query) == 1) { update } else { insert } ?> |
ik snap het ook niet, vandaar de vraagquote:Ik snap je niet? Je wilt iets updaten maar dan moet het er wel zijn?
1 2 3 4 5 6 7 8 | <?php $query = mysql_query(UPDATE bla bla); if (mysql_affected_rows($query) == 0) { INSERT } ?> |
dat doet de truc niet....ff eten..dadelijk weer verder over denkenquote:Mooiste oplossing is denk ik:
sorry..heel flauwquote:Ik snap je niet? Je wilt iets updaten maar dan moet het er wel zijn?
Je zoekt dus eigenlijk iets om een rij in te voegen, maar als die rij al bestaat moet'ie een update krijgen. Daar heeft MySQL al iets voor: INSERT ... ON DUPLICATE KEY UPDATEquote:Op vrijdag 18 februari 2011 11:54 schreef MrNiles het volgende:
[..]
sorry..heel flauw
ik wil een rij updaten..maar als deze rij niet bestaat kan ik m ook niet updaten
ik kan de rij wel invoegen dan wordt bij elke wijziging deze rij ingevoegd terwijl hij geupdate moet worden
Hee dat is cool, wist ik zelf ook niet. Weer wat geleerdquote:Op vrijdag 18 februari 2011 11:56 schreef Light het volgende:
[..]
Je zoekt dus eigenlijk iets om een rij in te voegen, maar als die rij al bestaat moet'ie een update krijgen. Daar heeft MySQL al iets voor: INSERT ... ON DUPLICATE KEY UPDATE
of gewoon REPLACE INTOquote:Op vrijdag 18 februari 2011 11:56 schreef Light het volgende:
[..]
Je zoekt dus eigenlijk iets om een rij in te voegen, maar als die rij al bestaat moet'ie een update krijgen. Daar heeft MySQL al iets voor: INSERT ... ON DUPLICATE KEY UPDATE
Let wel op dat REPLACE INTO eerst de rij verwijdert en daarna weer invoegt.quote:
Werkt dit ook met tabellen waar je geen primary key hebt?quote:Op vrijdag 18 februari 2011 12:03 schreef mstx het volgende:
[..]
Let wel op dat REPLACE INTO eerst de rij verwijdert en daarna weer invoegt.
Die koppeltabel kun je een primary key (of unieke key) geven op (g_id, o_id). Dat werkt meteen als een index op g_id, dus daar heb je geen aparte index meer nodig. Een index op o_id is wel handig.quote:Op vrijdag 18 februari 2011 11:57 schreef remi1986 het volgende:
[..]
Hee dat is cool, wist ik zelf ook niet. Weer wat geleerd
Het is echter wel in dit geval dat het gaat om een koppeltabel, dus geen primary key. Werkt dit dan ook ?
Snel ff getest in een project waar ik zelf ook een koppeltabel heb. Maar als ik een primary key toevoeg en ik voeg een rij in, krijg ik een error dat de key al bestaat.quote:Op vrijdag 18 februari 2011 12:11 schreef Light het volgende:
[..]
Die koppeltabel kun je een primary key (of unieke key) geven op (g_id, o_id). Dat werkt meteen als een index op g_id, dus daar heb je geen aparte index meer nodig. Een index op o_id is wel handig.
Dat dus, zou ik niet zo snel doen.quote:Op vrijdag 18 februari 2011 12:03 schreef mstx het volgende:
[..]
Let wel op dat REPLACE INTO eerst de rij verwijdert en daarna weer invoegt.
http://dev.mysql.com/doc/refman/5.0/en/replace.htmlquote:Note that unless the table has a PRIMARY KEY or UNIQUE index, using a REPLACE statement makes no sense. It becomes equivalent to INSERT, because there is no index to be used to determine whether a new row duplicates another.
Je zegt niks nieuws.quote:Op vrijdag 18 februari 2011 12:16 schreef remi1986 het volgende:
[..]
http://dev.mysql.com/doc/refman/5.0/en/replace.html
G_id is niet uniekquote:Die koppeltabel kun je een primary key (of unieke key) geven op (g_id, o_id). Dat werkt meteen als een index op g_id, dus daar heb je geen aparte index meer nodig. Een index op o_id is wel handig.
Weet ik, maar paar berichten daarboven ging het over keys toevoegen in een koppeltabel. Maar dan kan je niet meer meerdere malen dezelfde user_id (in het geval van MrNiles) in de koppeltabel kwijt.quote:
Als je vaker dezelfde user_id nodig hebt, moet je hem niet uniek maken.quote:Op vrijdag 18 februari 2011 12:40 schreef remi1986 het volgende:
[..]
Weet ik, maar paar berichten daarboven ging het over keys toevoegen in een koppeltabel. Maar dan kan je niet meer meerdere malen dezelfde user_id (in het geval van MrNiles) in de koppeltabel kwijt.
Daarom een unieke index (of primary key) op (G_id, O_id). Een index kan meerdere kolommen bevattenquote:Op vrijdag 18 februari 2011 12:34 schreef MrNiles het volgende:
[..]
G_id is niet uniek
O_id is ook niet uniek
maar G_id AND O_id moeten wel uniek zijn
jullie zijn er natuurlijk allang achter dat ik een complete n00b benquote:Daarom een unieke index (of primary key) op (G_id, O_id). Een index kan meerdere kolommen bevatten
De makkelijkste manier is via phpmyadmin.quote:Op vrijdag 18 februari 2011 12:50 schreef MrNiles het volgende:
[..]
jullie zijn er natuurlijk allang achter dat ik een complete n00b ben
maar wat moet een index (over meerdere kolommen) dan doen?
Dat maakt de combinatie van beide velden uniek. Dus je kan een INSERT doen. als de waarden van g_id EN o_id al voorkomen dan zal hij ze updaten. Wist dit ook nog niet. Heb dit net aangepast in mijn eigen project. Kon hierdoor van 4 queries terug naar 2.quote:Op vrijdag 18 februari 2011 13:58 schreef MrNiles het volgende:
[..]
Niet Hoe maar wat de functie ervan is
1 2 3 4 5 6 7 8 9 10 | <?php $query = mysql_query("INSERT INTO langpack (link_id,type,language,data) VALUES ('".mysql_real_escape_string($unit_id)."', 'unit', '".mysql_real_escape_string($code)."', '".mysql_real_escape_string($_POST["unit_name_".$code])."') ON DUPLICATE KEY UPDATE data = '".mysql_real_escape_string($_POST["unit_name_".$code])."' "); ?> |
want?quote:Op vrijdag 18 februari 2011 14:18 schreef GlowMouse het volgende:
Je zou een klein MySQL-quizje moeten doen elke keer voordat je zo'n LAMP-pakket kunt downloaden.
Beter een google-cursus. Ik wist twee weken geleden ook nog niet van het bestaan van REPLACE of ON DUPLICATE KEY UPDATE af. Maar zo moeilijk is het allemaal niet als je gewoon even de documentatie doorneemt.quote:Op vrijdag 18 februari 2011 14:18 schreef GlowMouse het volgende:
Je zou een klein MySQL-quizje moeten doen elke keer voordat je zo'n LAMP-pakket kunt downloaden.
Jawel, daarmee kun je verder zoeken. Alsof ik hele snippets uit een boek ga overtypen.quote:Op vrijdag 18 februari 2011 14:33 schreef remi1986 het volgende:
En in plaats alleen maar negatieve feedback te geven, kan je ook zeggen hoe het dan wel moet (ik kan me van gisteren een reactie herinneren van "altijd leuk, queries tussen je html output"). Daar kan iemand niks mee.
Dat is dus de moeilijkheid van programmeren, je moet creatief zijn. Meestal zijn er geen uitgebreide omschrijvingen van een probleem te vinden. Uiteindelijk moet je zelf leren denken, dat is ervaring.quote:Op vrijdag 18 februari 2011 14:45 schreef MrNiles het volgende:
Moeilijkheid bij google is vaak de omschrijving van je probleem
en vaak staat php/sql codes/oplossingen zo algemeen omschreven dat je nog hard moet nadenken hoe het toe te passen in je eigen script
Ik weet niet hoe ik die ON DUPLICATE had moeten vinden..
daarbij..ben er wel achter gekomen dat er een hoop shit en tegenstrijdigheden op het internet staan
1 2 3 4 5 6 | <?php for ($i=1; $i <=31; $i++) { echo $i; } ?> |
1 2 3 4 5 6 7 8 9 10 | <select name="nummer"> <option value="" selected>Kies een nummer.</option> <?php for ($i=1; $i <=31; $i++) { echo "<option value='$i' >$i</option>"; } ?> </select> |
Fout zat m meer in de HTML zeg maar bij het maken van de dropdownlist. De phpcode die ik heel de tijd had was gewoon goed. Fout was dus simpelweg dat ik een aanhalingsteken of < > miste...quote:Op zaterdag 19 februari 2011 19:15 schreef Tegan het volgende:
Ik ben wel erg benieuwd wat jouw code was die foutmeldingen gaf .
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 | <?php if(isset($_POST['submit'])){ //Check of passwords match met Gebruikersnaam if($match['passwd'] != $_POST['old_password']){ echo "<div class='error_box'><ul><li>Het oude wachtwoord komt niet overeen met de gebruikersnaam</li></ul></div>"; } else{ $go_ahead .= 1; } //Check of nieuwe passwords matchen if($_POST['new_password'] != $_POST['new_password_2']){ echo "<div class='error_box'><ul><li>De nieuwe wachtwoorden matchen niet</li></ul></div>"; } else{ $go_ahead .= 1; } //Checken op go_ahead if($go_ahead == 2){ echo "WERK!"; } else{ echo "KAK!"; } } ?> |
Ik heb net even een pauze gehad en blij naar boven gestormd omdat ik het wist. Wat kan eten toch wonderen doenquote:Op zondag 20 februari 2011 00:43 schreef ursel het volgende:
echo je $go_ahead maar eens, dan zul je het wel zien.
1 2 3 | <?php $found = mysql_result(mysql_query("SELECT count(0) FROM ftpuser WHERE userid = '".$_POST['username']."' LIMIT 1"), 0, 0); ?> |
1 2 3 | <?php if($found > 0) ?> |
1 | Warning: mysql_result() expects parameter 1 to be resource, boolean given in (..) on line 3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php $result = mysql_query("SELECT userid FROM ftpuser WHERE userid = '".mysql_real_escape_string($_POST['username'])."' "); if (mysql_num_rows($result) == 0) { //Userid bestaat niet. } else if (mysql_num_rows($result) == 1) { //Userid bestaat wel. } else { //Error, tenzij userid enkel unieke waarden mag hebben. } ?> |
count(*) is gebruikelijker, je limit is overbodig, en volgens mij heb je met $found == 0 geen aanwezigheid en met $found == 1 wel.quote:Op zondag 20 februari 2011 00:46 schreef dirkjo het volgende:
Nu heb ik alleen nog wel een vraagje. Ik wil checken of de username aanwezig is in de databse. ik heb het checken op NIET aanwezigheid gedaan via deze manier:
[ code verwijderd ]
[ code verwijderd ]
Maar hoe check ik of die er WEL is?
Geen prepared statements?quote:Op zondag 20 februari 2011 01:41 schreef Tegan het volgende:
Ik vind je manier een beetje omslachtig.
En, userid is een string ?
Ik zou het zo doen.
Allereerst even voor de duidelijkheid:quote:Op maandag 21 februari 2011 20:16 schreef GlowMouse het volgende:
MySQL cluster gebruikt een storage engine die sterk afwijkt van de overige storage engines.
Beide gebruiken de NDB storage engine, dus mijn opmerking slaat op beide.quote:Op maandag 21 februari 2011 21:23 schreef Flepke het volgende:
[..]
Allereerst even voor de duidelijkheid:
Je bedoeld voor zover ik kan zien "het product" MySQL cluster?
http://www.mysql.com/products/cluster/
Ik heb me een beetje zitten inlezen,
http://www.howtoforge.com/loadbalanced_mysql_cluster_debian
Percona kan het ongetwijfeld, maar daar betaal je voor. Een gemiddelde php professional heeft onvoldoende verstand van MySQL, en heeft vrijwel zeker geen enkele ervaring met MySQL cluster.quote:Waar zijn er mensen in te huren (freelance?) (prijs/uur?) die zo'n cluster zouden kunnen bedenken, opzetten onderhouden & queries ervoor kunnen schrijven?
Mag ik er vanuit gaan dat een gemiddeld 'php professional' code hiervoor kan schrijven?
Je moet je afvragen wat je precies nodig hebt. NDB hoort niet in dat rijtje thuis.quote:Ik ben namelijk bezig met het uitdenken of een bepaald redelijk complex idee wat ik in mijn hoofd heb zitten mogelijk is.
De database kant volledig uitbesteden zou al weer een zorg minder zijn...
Klopt.quote:Nu we het toch over clustering hebben, een apache cluster is toch mag ik hopen niet zulk gespecialiseerd werk als een mysql cluster?
Ziet er goed uit, meest rendabele lijkt me dan iemand in vaste dienst aan nemen en die naar zo'n trainings course te sturen, ziet er redelijk betaalbaar uit.quote:Op maandag 21 februari 2011 21:46 schreef GlowMouse het volgende:
Percona kan het ongetwijfeld, maar daar betaal je voor. Een gemiddelde php professional heeft onvoldoende verstand van MySQL, en heeft vrijwel zeker geen enkele ervaring met MySQL cluster.
Uiteraard zal ik in de eerste maanden niet een cluster van 100'en - 1000'en servers nodig hebben, het gaat mij erom dat ik liever zo weinig mogelijk geld en tijd besteed aan het continue herschrijven.quote:Op maandag 21 februari 2011 21:46 schreef GlowMouse het volgende:
Je moet je afvragen wat je precies nodig hebt. NDB hoort niet in dat rijtje thuis.
Hmm.quote:Op maandag 21 februari 2011 22:14 schreef GlowMouse het volgende:
Je weet dat bij een NDB cluster alle data op elke server in het geheugen moet passen?
Ik weet niet of hij helemaal klopt. Maar zoiets?quote:Op woensdag 23 februari 2011 23:50 schreef mwvrs het volgende:
Graag wil ik dat op mijn website iedere keer een willekeurige achtergrondfoto getoond wordt. Nu kan ik zelf wel met een php scriptje een willekeurige achtergrond uit een map op mijn server met allemaal achtergrondafbeeldingen laten selecteren.
Het lijkt me echter vrij irritant voor een bezoeker dat iedere keer dat er op een link geklikt wordt er een andere achtergrond geselecteerd wordt. Het liefst zou de site per bezoek willekeurig een achtergrond moeten selecteren uit de map en deze blijven tonen gedurende het hele bezoek, los van hoeveel pagina's binnen de website men bezoekt.
Kan dit bijv. met behulp van sessies opgelost worden? Of op een andere manier? Ik heb zelf geen ervaring met sessies om dit concreet op te lossen.
In ieder geval alvast hartelijk bedankt.
1 2 3 4 5 6 7 8 9 10 11 | <?php session_start(); if (!isset($_SESSION['achtergrond'])) { $alleachtergrondfotos = array('1.png', '2.png', 'etc...'); shuffle($alleachtergrondfotos); $_SESSION['achtergrond'] = array_shift($alleachtergrondfotos); } ?> |
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 | <?php session_start(); if(isset($_SESSION['randombgimg'])) { $_SESSION['randombgimg'] = $imgarray[$rand]; echo '<img src="../images/gallery/'.$imgarray[$rand].'">'; } else { $dir=opendir("/path/to/your/images/folder/"); $i=0; while($imgfile=readdir($dir)) { if ($imgfile != "." && $imgfile!="..") { $imgarray[$i]=$imgfile; $i++; } } closedir($dir); $rand=rand(0,count($imgarray)-1); if($rand >= 0) { $_SESSION['randombgimg'] = $imgarray[$rand]; echo '<img src="../images/gallery/'.$imgarray[$rand].'">'; } } ?> |
1 2 3 4 5 6 7 | <?php if ($imgfile != "." && $imgfile!="..") { $imgarray[$i]=$imgfile; $i++; } ?> |
1 2 3 4 5 6 | <?php if ($imgfile != "." && $imgfile!="..") { $imgarray[]=$imgfile; } ?> |
HIer zou ik persoonlijk javascript voor gebruiken. Alhoewel het met puur php ook wel te maken is.quote:Op maandag 21 februari 2011 20:15 schreef erikkll het volgende:
Ik heb een vraagje! Voor m'n werk moet ik een formuliertje maken. Hierbij moeten keuzes gemaakt worden die de rest van het formulier beïnvloeden. Voorbeeldje van hoe ik dit voor me zie:
1. Is er een keuze gemaakt? Radiobuttons ja/nee
indien ja => 2a. inputveld verschijnt met iets van een label 'keuze'
indien nee =>2b. inputveld verschijnt met iets van een label 'datum waarop keuze wordt gemaakt'
Dit gaat tot op 4 niveaus diep.
Hoe zouden jullie dit doen? Zelf heb ik hier wel ideeën over - Ik hoef geen concrete aanwijzingen/code; meer een globale beschrijving. Ik ben voornamelijk benieuwd naar hoe jullie het zouden aanpakken en hoop inspiratie op te doen.
If, then.quote:Op maandag 21 februari 2011 20:15 schreef erikkll het volgende:
Ik heb een vraagje! Voor m'n werk moet ik een formuliertje maken. Hierbij moeten keuzes gemaakt worden die de rest van het formulier beïnvloeden. Voorbeeldje van hoe ik dit voor me zie:
1. Is er een keuze gemaakt? Radiobuttons ja/nee
indien ja => 2a. inputveld verschijnt met iets van een label 'keuze'
indien nee =>2b. inputveld verschijnt met iets van een label 'datum waarop keuze wordt gemaakt'
Dit gaat tot op 4 niveaus diep.
Hoe zouden jullie dit doen? Zelf heb ik hier wel ideeën over - Ik hoef geen concrete aanwijzingen/code; meer een globale beschrijving. Ik ben voornamelijk benieuwd naar hoe jullie het zouden aanpakken en hoop inspiratie op te doen.
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 | <?php session_start(); if(isset($_SESSION['randombgimg'])) { $_SESSION['randombgimg'] = $imgarray[$rand]; echo '<img src="../images/gallery/'.$imgarray[$rand].'">'; } else { $imgarray=array(); $path = "/path/to/your/images/folder/"; foreach (glob($path."*.jpg") as $filename) { $imgarray[] = basename($filename) } $rand=rand(0,count($imgarray)-1); if($rand >= 0) { $_SESSION['randombgimg'] = $imgarray[$rand]; echo '<img src="../images/gallery/'.$imgarray[$rand].'">'; } } ?> |
quote:
1 2 3 4 | <?php $fileType = '[jJ][pP][gG]'; foreach (glob($path."*.".$fileType) as $filename) { ?> |
Met array_walk kun je die foreach nog wegwerken.quote:
array_rand() is nog netter, dan krijg je 1 (of meer) random key uit de array. Werkt ook met niet-numerieke keys.quote:Op donderdag 24 februari 2011 16:54 schreef GlowMouse het volgende:
rand lijkt me sneller als je een grote array hebt.
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 | <?php $newsid = $_GET['newsid']; $query = "SELECT reactieid, newsid, reactiebericht, reactieposter, reactiedatum, reactietijd FROM newsreactie WHERE newsid =$newsid "; $result = mysql_query($query); $aantalrijen = mysql_num_rows($result); while ($row = mysql_fetch_array($result)) { if( $aantalrijen == 0) { echo "<div class='info reactie2'> <p>Er zijn nog geen reacties op dit bericht.</p> </div>"; } else { $bericht = nl2br("$row[reactiebericht]"); $maand = substr("$row[reactiedatum]", -5, 2); $dag = substr("$row[reactiedatum]", -2, 2); $jaar = substr("$row[reactiedatum]", -11, 4); $tijd = substr("$row[reactietijd]", -8, 5); echo "<div class='info reactie2'> <p>$bericht</p> </div> <div class='reactie3'> <h2>Geplaatst door: $row[reactieposter] op $dag-$maand-$jaar om $tijd</h2> </div>"; } } ?> |
mysql_num_rows uit de while-loop halen. Deze controle is slechts één keer nuttig...quote:Op zaterdag 26 februari 2011 01:03 schreef Dennis82 het volgende:
Ik kom er even niet meer uit. Ik wil iets heel eenvoudigs. Namelijk dat als er geen rows uit een database worden gehaald er een melding komt en zodra er wel row uit de database komt, dan moet hij die info weergeven. Dit is mijn code:
[ code verwijderd ]
Hiermee laat hij echter gewoon de reactie zien als er wel wat uit de query komt en niets zodra er ook niets uit de query komt.
Ik heb zelf een echo op de $aantalrijen gedaan en dan komt er wel netjes 1 of 0 uit.
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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | <?php include 'includes/dbconnect.inc.php'; include 'includes/appinfo.inc.php'; include 'includes/bouncer.inc.php'; $id = $_SESSION['ingelogd']; //$getty = mysql_query("SELECT * FROM gebruker WHERE id=$id"); //$getty2 = mysql_fetch_assoc($getty); //$username = $getty2['username']; // This code is released under GPL 3.0 which is included in the bundle // Files to hide in the directory listing // add and subtract as you please $hide = array( 'resources', 'index.php', '.htaccess', '.htpasswd', '.DS_Store'); error_reporting(E_ERROR); // When downloading force it to actually download // rather than just open it in the browser if ($_GET['download']) { $file = str_replace('/', '', $_GET['download']); $file = str_replace('..', '', $file); if (file_exists($file)) { header("Content-type: application/x-download"); header("Content-Length: ".filesize($file)); header('Content-Disposition: attachment; filename="'.$file.'"'); readfile($file); die(); } } $filepath = "/data/$user/"; $scriptname = basename($filepath); $readpath = str_replace($scriptname, "", $filepath); $handle = opendir($readpath); // If deleting if (isset($_GET['rmfile'])) { unlink($readpath . $_GET['rmfile']); } // If uploading if ($_FILES['file']) { $success = move_uploaded_file($_FILES['file']['tmp_name'], $_FILES['file']['name']); } while ($file = readdir($handle)) { if ($file == "." || $file == ".." || in_array($file, $hide)) continue; $key = @filemtime($file); $files[$key] = $file; } closedir($handle); // Sort our files @ksort($files, SORT_NUMERIC); $files = @array_reverse($files); ?> <!DOCTYPE html> <html> <head> <title>Super Simple PHP File Manager</title> <link rel="stylesheet" type="text/css" href="../../media/styles.css" /> </head> <body> <?php $baseurl = $_SERVER['PHP_SELF']; ?> <table border="0" cellspacing="5" cellpadding="5"> <?php $arsize = sizeof($files); for ($i=0; $i<$arsize; $i++) { $ext = strtolower(substr($files[$i], strrpos($files[$i], '.')+1)); $filename = stripslashes($files[$i]); $fileurl = $files[$i]; if (strlen($filename) > 43) { $filename = substr($files[$i], 0, 40) . '...'; } ?> <tr> <td><img src="../../media/zip.gif" /></td> <td><a href="./index.php?download=<?php echo $filename; ?>"><?php echo $filename; ?></a></td> <td><?php echo round(filesize($leadon.$files[$i])/1024); ?>KB</td> <td><?php echo date ("d/m/y", filemtime($leadon.$files[$i]));?></td> <td><a href="./index.php?rmfile=<?php echo $filename; ?>">Delete</a></td> </tr> <?php } ?> </table> <div id="upload"> <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>" enctype="multipart/form-data"> <p><input type="file" name="file" /></p> <p><input type="submit" value="Upload" /></p> </form> </div> </body> </html> |
1 2 3 | <?php $success = move_uploaded_file($_FILES['file']['tmp_name'], $_FILES['file']['name']); ?> |
Tegenwoordig downloaden we tutorials via het net. Althans ik.quote:Op maandag 28 februari 2011 21:52 schreef Jump het volgende:
83 delen verder staat mijn grapje van "cd niet bijgeleverd" nog altijd in de OP
quote:Op maandag 28 februari 2011 23:36 schreef Ofyles2 het volgende:
[..]
Tegenwoordig downloaden we tutorials via het net. Althans ik.
Wel gecombineerd met literatuur kopen...
Op basis van jouw advies heb ik de volgende query gemaakt:quote:
1 2 3 4 5 6 | SELECT swtickets.ticketid, swtickets.subject, swtickets.email,open.dateline, close.dateline, response.dateline FROM swtickets JOIN swauditlogs open ON(swtickets.ticketid=open.ticketid AND open.actiontype=11) JOIN swauditlogs close ON(swtickets.ticketid=close.ticketid AND close.actiontype=8 AND close.actionmsg LIKE '%to: Nog te factureren%') JOIN swauditlogs response ON(swtickets.ticketid=response.ticketid AND response.actiontype=12) WHERE (swtickets.ticketstatusid=3 OR swtickets.ticketstatusid=4) AND swtickets.email LIKE '%trinicom%' |
Zoals je ziet zijn de records hetzelfde, met uitzondering van het laatste veld. Hoe kan ik er nu voor zorgen dat alleen de record met de LAAGSTE waarde van response.dateline wordt weergegeven?quote:9668 Email aanmaken mailadres@adres.nl 1298907438 1298966816 1298965276
9668 Email aanmaken mailadres@adres.nl 1298907438 1298966816 1298965822
9668 Email aanmaken mailadres@adres.nl 1298907438 1298966816 1298966801
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php $filepost = $_POST['filename']; $extensie=".php"; $filename = $filepost.$extensie ; $file = $filename; $handle = fopen($file, 'w'); $data = "Jane Doe\n"; fwrite($handle, $data); $data = include 'galleria.php'; fwrite($handle, $data); print "Data Written"; fclose($handle); ?> |
1 2 3 | <?php $data = file_get_contents('galleria.php'); ?> |
je hebt gelijkquote:$filename via $_POST is niet handig, wat als $filepost = 'index'?
dit heb ik inmiddels opgelost!quote:Op dinsdag 1 maart 2011 10:34 schreef erikkll het volgende:
[..]
Op basis van jouw advies heb ik de volgende query gemaakt:
[ code verwijderd ]
Mooi he?
Nu heb ik nog een vraagje. Daarvoor geef ik even een mogelijk resultaat:
[..]
Zoals je ziet zijn de records hetzelfde, met uitzondering van het laatste veld. Hoe kan ik er nu voor zorgen dat alleen de record met de LAAGSTE waarde van response.dateline wordt weergegeven?
1 2 3 4 5 6 7 | SELECT swtickets.ticketid, swtickets.subject, swtickets.email, open.dateline, close.dateline, MIN(response.dateline) FROM swtickets JOIN swauditlogs open ON(swtickets.ticketid=open.ticketid AND open.actiontype=11) JOIN swauditlogs close ON(swtickets.ticketid=close.ticketid AND close.actiontype=8 AND close.actionmsg LIKE '%to: Nog te factureren%') JOIN swauditlogs response ON(swtickets.ticketid=response.ticketid AND response.actiontype=12) WHERE (swtickets.ticketstatusid=3 OR swtickets.ticketstatusid=4) AND swtickets.email LIKE '%trinicom%' GROUP BY swtickets.ticketid |
Geen probleem. Ik werd er inmiddels enigszins moedeloos van, tot ik dit vond:quote:
Mooie query trouwens he? Helemaal naar jouw voorbeeld.quote:
Hmm. Ja, nouja, close.dateline kan meerdere keren voorkomen; het gaat om een ticket-systeem dat wij gebruiken. Die close.dateline is het moment dat een ticket naar 'Nog te factureren' wordt gezet. Het komt echter voor dat mensen dan een reactie in het ticket zetten, en dan gaat het automatisch terug naar 'Eerste lijn'.quote:Op dinsdag 1 maart 2011 19:52 schreef GlowMouse het volgende:
Ja, ik ben trots op je notatie. Let alleen wel op dat open.dateline en close.dateline uniek zijn bij één ticketid.
1 2 3 4 5 | <form enctype="multipart/form-data" action="uploader.php" method="POST"> <input type="hidden" name="MAX_FILE_SIZE" value="100000" /> Choose a file to upload: <input name="uploadedfile" type="file" /><br /> <input type="submit" value="Upload File" /> </form> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php $naam= $_POST["uploadedfile"]; $name_short = substr($naam, 0, strrpos($naam, '.')); mkdir( $name_short); echo $naam."<br/>"; //puur voor test; echo $name_short."<br/>"; //puur voor test; $target_path = "uploads/"; $target_path = $target_path . basename( $_FILES['uploadedfile']['name']); if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) { echo "The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded"; } else{ echo "There was an error uploading the file, please try again!"; } ?> |
je weet wel beter....quote:ja, exec, shell_exec, backticks, etc.
is dat niet erg dubbelop en onnodig ruimte gebruik? (al gaat het niet echt om grote berichten)quote:
ah, niet bij stil gestaan inderdaad....quote:Op woensdag 2 maart 2011 13:51 schreef GlowMouse het volgende:
Omzetten is tijdrovend, dus bbcode opslaan is noodzakelijk. Als iemand een bericht wil wijzigen dan heb je de oorspronkelijke code ook nodig omdat er vaak geen mooie 1:1 terugvertaling is. Onnodig zou ik het dus niet noemen.
je bent bekend met de functie fgetcsv() ?quote:Op donderdag 3 maart 2011 10:44 schreef wobbel het volgende:
Ik ben al eventjes aan het brainstormen, maar ik kom er niet uit. Ook niet dankzij Google.
Gebruikers kunnen bij mij een CSV uploaden, en vervolgens selecteren welke kolommen ze willen importeren. Nu wil ik eigenlijk controleren of de aangeboden CSV correct is, voordat ik dit ga doen. Hiermee loop ik wel tegen een probleem, want elke CSV is anders. Sommige bestaan uit 2 velden, andere uit 5 of zelfs nog meer.
Hoe kan ik alle regels van de CSV valideren? Dat er niet 150 regels zijn met 5 velden, en dat regel 151 er ineens maar 4 heeft en mijn scriptje in de war raakt
Dat dus. CSV wil je niet met een eigen methode inlezen. Wat als iemand een newline heeft maar die netjes insluit tussen quotes?quote:Op donderdag 3 maart 2011 11:03 schreef mschol het volgende:
[..]
je bent bekend met de functie fgetcsv() ?
ik moet zeggen dat ik die functie pas 2 dagen ken maar em nu al fantastisch vindquote:Op donderdag 3 maart 2011 12:37 schreef GlowMouse het volgende:
[..]
Dat dus. CSV wil je niet met een eigen methode inlezen. Wat als iemand een newline heeft maar die netjes insluit tussen quotes?
1 2 3 | <?php set_magic_quotes_runtime(0); ?> |
1 | php_flag magic_quotes_gpc Off |
ik kan niet bij php.ini en mijn webhost wil het niet zelf uitzetten.quote:Op vrijdag 4 maart 2011 12:07 schreef GlowMouse het volgende:
php_value magic_quotes_gpc off dan? Kun je bij php.ini? Wat zegt phpinfo over magic_quotes_*?
ik zal het proberen , leuke is dat mijn webhost ondertussen ook bezig is met een raid configuratie, als ik ze niet uit kan zetten zal ik ze moeten encoden en decoden en een eigen functie schrijven. maar als ze uitstaan bespaart met dat een hoop gezeik .quote:
En als je het script niet phpinfo.php maar bijvoorbeeld info.php noemt, krijg je dan ook die warning?quote:Op vrijdag 4 maart 2011 12:41 schreef cablegunmaster het volgende:
[..]
ik kan niet bij php.ini en mijn webhost wil het niet zelf uitzetten.
Warning: phpinfo() has been disabled for security reasons in /*/phpinfo.php on line 2
Door die "in /*/phpinfo.php" krijg ik de indruk dat ze filteren op bestandsnaam en functie, niet alleen op functienaam. Maar goed, dat ben ik. Een hoster die phpinfo() uitzet, snapt het ook niet helemaal. Als je een site wilt bouwen, is het toch heel handig dat je php-instellingen na kunt kijken? Dat kan snel verklaren of iets wel of niet gaat werken.quote:Op vrijdag 4 maart 2011 18:30 schreef GlowMouse het volgende:
Ja, "in /*/phpinfo.php on line 2" lijkt me duidelijk.
nou mijn vraag even stom.quote:Op vrijdag 4 maart 2011 19:05 schreef Light het volgende:
[..]
Door die "in /*/phpinfo.php" krijg ik de indruk dat ze filteren op bestandsnaam en functie, niet alleen op functienaam. Maar goed, dat ben ik. Een hoster die phpinfo() uitzet, snapt het ook niet helemaal. Als je een site wilt bouwen, is het toch heel handig dat je php-instellingen na kunt kijken? Dat kan snel verklaren of iets wel of niet gaat werken.
1 2 3 4 5 6 7 | <?php function public function toonbaar_maken($page){ $find =' \ '; return preg_replace($find, $replace ,$page); } ?> |
Je wilt slashes weghalen? Dat kan met stripslashes(). Of mis ik iets?quote:Op vrijdag 4 maart 2011 19:09 schreef cablegunmaster het volgende:
[..]
nou mijn vraag even stom.
[ code verwijderd ]
nu wou ik hem dan maar weghalen met variabelen. hoe krijg ik dan de regex van een stom \ teken want die escaped natuurlijk in php.
als dat zo is dan faal ik keihard eigenlijk.quote:Op vrijdag 4 maart 2011 19:29 schreef Light het volgende:
[..]
Je wilt slashes weghalen? Dat kan met stripslashes(). Of mis ik iets?
En dit is 2e jaars informatica student aan de UvAquote:
ah sorry, het gaat mij niet zo zeer om de css of html, eerder om de gebruikte tags...quote:Op zaterdag 5 maart 2011 19:36 schreef Tegan het volgende:
http://www.icms.info/website-howto/css-tutorial
ik had wel gekeken, maar kon het niet vinden (zal voor de zekerheid het dubbelcheckken)quote:Op zaterdag 5 maart 2011 20:42 schreef Diabox het volgende:
Al rondgekeken in de documentation?
http://wiki.cmsmadesimple.org/index.php/Main_Page
Je had die gebruikers toch al eens in de database gezet? Of was dat "foutje" dat de tabel nu weer helemaal leeg is?quote:Op woensdag 9 maart 2011 22:09 schreef boem-dikkie het volgende:
Maar met een UPDATE? Want ik heb dus nu een lege database?
Nee ik was met een UPDATE query een WHERE vergeten dus toen heeft hij alle 188 leden overschrijven met mijn eigen gebruikersnaam en wachtwoord. !quote:Op woensdag 9 maart 2011 22:39 schreef Light het volgende:
[..]
Je had die gebruikers toch al eens in de database gezet? Of was dat "foutje" dat de tabel nu weer helemaal leeg is?
Als de tabel met users leeg is, moet je die weer vullen. En dan heb je idd niets aan een update, dan moet je een insert gebruiken. Het idee is wel vergelijkbaar met die update-query's.
quote:Op woensdag 9 maart 2011 22:49 schreef boem-dikkie het volgende:
[..]
Nee ik was met een UPDATE query een WHERE vergeten dus toen heeft hij alle 188 leden overschrijven met mijn eigen gebruikersnaam en wachtwoord. !
toch wel een backup bij?quote:Op woensdag 9 maart 2011 22:49 schreef boem-dikkie het volgende:
[..]
Nee ik was met een UPDATE query een WHERE vergeten dus toen heeft hij alle 188 leden overschrijven met mijn eigen gebruikersnaam en wachtwoord. !
Niet dus.quote:
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 session_start(); if(isset($_SESSION['randombgimg'])) { echo '<img alt="" id="bg" src="../gallery/backgrounds/'.$_SESSION['randombgimg'].'">'; } else { $imgarray=array(); $path = "../gallery/backgrounds/"; $fileType = '[jJ][pP][gG]'; foreach (glob($path."*.".$fileType) as $filename) { $imgarray[] = basename($filename); } $rand=mt_rand(0,count($imgarray)-1); if($rand >= 0) { $_SESSION['randombgimg'] = $imgarray[$rand]; echo '<img alt="" id="bg" src="../gallery/backgrounds/'.$imgarray[$rand].'">'; } } ?> |
heb je zelf al eens met wat echo(); 's geprobeerd te kijken wat waar in zit?quote:Op woensdag 9 maart 2011 23:31 schreef mwvrs het volgende:
Iedereen die op mijn "willekeurige achtergrond selecteren"-code van een paar pagina's terug heeft gereageerd: heel erg bedankt. Ik had nu helaas pas weer tijd om er mee te sleutelen.
Ik heb het idee dat ik erg dichtbij zit, maar toch werkt het nog niet.
[ code verwijderd ]
De inhoud van $_SESSION['randombgimg'] en $imgarray[$rand] worden echter niet weergegeven (of zijn leeg...??). Weet iemand misschien waar dit in zit? Voor de goede orde: session_start(); staat op de eerste regel
Heel erg bedankt!
in mijn header tag. Ik maak namelijk gebruik van RewriteRules, hierdoor kan ik SEO vriendelijke URL's gebruiken, bijvoorbeeld: http://www.mijnwebsite.nl/categorie/productnaam/quote:<base href="http://www.mijnwebsite.nl">
De link moet dus worden: http://www.mijnwebsite.nl/categorie/productnaamquote:<a href="productnaam">product naam</a>
SPOILEROm spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.Net even 5 minuten zitten spelen met innodb en zie hier het resultaat,
(Insertqueries in userdatabase)
Graag reacties over betrouwbaarheid van het scriptje.
Het gaat mij niet zozeer om production vs development verschil maar meer om betrouwbaarheid tussen benchmark #1 met x settings en #2 met y settings zegmaar.
Nu nog even database classes herschrijven naar een hybride memcache/mysql en hop hop, update erop"Op Fok! val je pas op als je normaal bent." -mazaru
met pchart is het super simpelquote:Op zaterdag 12 maart 2011 00:01 schreef erikkll het volgende:
Ik ben voornamelijk onder de indruk van je grafiekje! Waarmee heb je die gemaakt?
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 | <?php $teller = 0; // Verander het getal hieronder in het aantal kolommen // dat je naast elkaar wilt hebben. $naast_elkaar = 1; echo '<table>'; $G_name= "MrNiles"; $result = mysql_query("SELECT * FROM gebruikers WHERE G_name='$G_name' "); while($row = mysql_fetch_array($result)) $G_id=$row['G_id']; $commando=" SELECT koppeltabel.*, optredens.* FROM koppeltabel, optredens WHERE koppeltabel.O_id = optredens.O_id AND koppeltabel.G_id=$G_id"; $resultaat=mysql_query($commando); while($array=mysql_fetch_array($resultaat)) { echo ($teller % $naast_elkaar) == 0 ? '<tr>' : ''; echo '<td>'; // Hier zet je een echo met de gegevens die je // wilt weergeven in het tabelvak. echo $array['datum']; echo '</td>'; echo '<td>'; echo $array['aanwezig']; echo '</td>'; $teller++; echo ($teller % $naast_elkaar) == 0 ? '</tr>' : ''; } echo ($teller % $naast_elkaar) != 0 ? '</tr>' : ''; echo '</table>'; ?> |
ja ik dacht het is zo rustig..laat ik GlowMouse maar weer eens vervelen met stomme vragenquote:mooie dag vandaag
1 | ([^0-9]*)(.*) |
gaat mis bij "straatnaam 12 a1".quote:
Hoe moet hij raden dat met "-13x.1" -13.1 bedoeld wordt?quote:Op dinsdag 15 maart 2011 18:13 schreef Dale. het volgende:
Wie kan me even helpen met deze regex?
Ik wil graag floating point getallen matchen.
Ik heb deze regex "[-]?[0-9]*\.?[0-9]+" van http://www.regular-expressions.info/floatingpoint.html. Ik wil echter dat de regex alles wegfiltert wat fout is. Nu krijg ik namelijk bij de invoer "-13x.1%.4$,14.2" "x%$," ervoor terug terwijl ik graag "-13.1" wil terug krijgen (alles na de 2de punt is immers fout).
Door de x weg te filteren en alles na, inclusief, de punt?quote:Op dinsdag 15 maart 2011 19:05 schreef GlowMouse het volgende:
Chandler: je kunt met preg_match kijken waar het eerste getal voorkomt, of anders
[ code verwijderd ]
gebruiken en wel de straatnaam nog trimmen ivm spatie.
[..]
gaat mis bij "straatnaam 12 a1".
[..]
Hoe moet hij raden dat met "-13x.1" -13.1 bedoeld wordt?
Gaat mis bij "1e middellandstraat"quote:Op dinsdag 15 maart 2011 19:05 schreef GlowMouse het volgende:
Chandler: je kunt met preg_match kijken waar het eerste getal voorkomt, of anders
[ code verwijderd ]
gebruiken en wel de straatnaam nog trimmen ivm spatie.
Of wat te denken van Plein 1945 3?quote:Op dinsdag 15 maart 2011 20:00 schreef KomtTijd... het volgende:
[..]
Gaat mis bij "1e middellandstraat"
waarom niet gewoon filter_var($float,FILTER_SANITIZE_NUMBER_FLOAT) ??quote:Op dinsdag 15 maart 2011 19:54 schreef Dale. het volgende:
[..]
Door de x weg te filteren en alles na, inclusief, de punt?
Goed idee, daar zat ik ook al aan te denken.quote:Op dinsdag 15 maart 2011 20:43 schreef Tegan het volgende:
Laat ze gewoon het huisnummer en toevoeging apart invoeren dan .
Vergeet mijn vorige post, ik praatte voor mijn beurt...quote:Op dinsdag 15 maart 2011 20:44 schreef Tegan het volgende:
Hoewel ik me afvraag waarom je ze apart nodig hebt?
En zelfs als je ze apart nodig hebt kun je het beter in twee velden zetten. Achteraf concateneren is makkelijker dan splitsen. Tenzij je natuurlijk de adressen in een al gegeven database wil splitsen.quote:Op dinsdag 15 maart 2011 20:44 schreef Tegan het volgende:
Hoewel ik me afvraag waarom je ze apart nodig hebt?
quote:Op dinsdag 15 maart 2011 20:00 schreef KomtTijd... het volgende:
[..]
Gaat mis bij "1e middellandstraat"
Je kunt technisch geen onderscheid maken tussen Plein, nummer 1945 3 en tussen Plein 1945, nummer 3.quote:
In dat geval zoek je [0-9x]*\.[0-9x]*, waarna je de x via str_replace uit het resultaat haalt.quote:Op dinsdag 15 maart 2011 19:54 schreef Dale. het volgende:
[..]
Door de x weg te filteren en alles na, inclusief, de punt?
Zit er een logica achter de kolomnamen of niet.quote:Op dinsdag 15 maart 2011 22:14 schreef Keiichi het volgende:
Ik ben bezig met prepared statements in mysqli, maar ik kom iets tegen waar ik niet aan uitkom. Ik heb een tabel met veel kolommen, dus ik probeer wat geautomatiseerder queries te maken. Resultaat hiervan is bv:
"REPLACE INTO `tabel` (`een`,`twee`,`drie`) VALUES (?,?,?)"
Ik heb een array met corresponderende veldtypes en waardes in arrays staan. De types kan ik makkelijk impoden naar een bijhorende string, maar ik kan de array niet als argument opgeven en vol uitschrijven gaat niet (Althans, iemand heeft 100 kolommen in een tabel gemaakt, daarvoor ga ik echt geen 100 variables aanmaken en een mega bind_param call maken
Wie heeft er hiervoor een oplossing?
Met een queryquote:Op dinsdag 15 maart 2011 22:14 schreef Keiichi het volgende:
Ik ben bezig met prepared statements in mysqli, maar ik kom iets tegen waar ik niet aan uitkom. Ik heb een tabel met veel kolommen, dus ik probeer wat geautomatiseerder queries te maken. Resultaat hiervan is bv:
"REPLACE INTO `tabel` (`een`,`twee`,`drie`) VALUES (?,?,?)"
Ik heb een array met corresponderende veldtypes en waardes in arrays staan. De types kan ik makkelijk impoden naar een bijhorende string, maar ik kan de array niet als argument opgeven en vol uitschrijven gaat niet (Althans, iemand heeft 100 kolommen in een tabel gemaakt, daarvoor ga ik echt geen 100 variables aanmaken en een mega bind_param call maken
Wie heeft er hiervoor een oplossing?
1 | DESCRIBE <table> |
Hoe ziet die array er precies uit dan?quote:Op dinsdag 15 maart 2011 22:14 schreef Keiichi het volgende:
Ik ben bezig met prepared statements in mysqli, maar ik kom iets tegen waar ik niet aan uitkom. Ik heb een tabel met veel kolommen, dus ik probeer wat geautomatiseerder queries te maken. Resultaat hiervan is bv:
"REPLACE INTO `tabel` (`een`,`twee`,`drie`) VALUES (?,?,?)"
Ik heb een array met corresponderende veldtypes en waardes in arrays staan. De types kan ik makkelijk impoden naar een bijhorende string, maar ik kan de array niet als argument opgeven en vol uitschrijven gaat niet (Althans, iemand heeft 100 kolommen in een tabel gemaakt, daarvoor ga ik echt geen 100 variables aanmaken en een mega bind_param call maken
Wie heeft er hiervoor een oplossing?
Je bent pas echt fucked als de kolomnamen niet duidelijk aangeven wat de inhoud is.quote:Op dinsdag 15 maart 2011 22:19 schreef themole het volgende:
[..]
Zit er een logica achter de kolomnamen of niet.
Als ze bijvoorbeeld 1 t/m 100 heten kan je proberen een for/while loop. Anders ben je vrij goed gefuckt.
Dan moet de volgorde van je Array wel gelijk zijn aan de volgorde waarin de kolommen in de tabel staan. Maar het is iig vervelend lastig.quote:Op dinsdag 15 maart 2011 22:30 schreef Light het volgende:
[..]
Met een query
[ code verwijderd ]
moet je een overzicht van de aanwezige kolommen kunnen krijgen. Dat is vast wel met een array verder te verwerken.
Met AdoDB kun je ook:quote:Op dinsdag 15 maart 2011 22:34 schreef themole het volgende:
[..]
Dan moet de volgorde van je Array wel gelijk zijn aan de volgorde waarin de kolommen in de tabel staan. Maar het is iig vervelend lastig.
1 2 3 | <?php $db->Execute('INSERT INTO `table` (`een,` `twee`) VALUES (:een, :twee)',array('een'=>'foo', 'twee'=>'bar')); ?> |
1 | "REPLACE INTO `tabel` (`een`,`twee`,`drie`) VALUES (:een,:twee,:drie)" |
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 | <?php $db_old = new PDO(...); $db_new = new PDO(...); $res_new = $db_new->query("DESCRIBE `database_nieuw`.`tabel_nieuw`"); $fields = array(); $fields_types = array(); $fields_filling = array(); while ($row_new = $res_new->fetchObject()) { array_push($fields,"`".$row_new->Field."`"); array_push($fields_filling,":".$row_new->Field.""); if (preg_match("/int\(\d+\)/",$row_new->Type)) { $fields_types[$row_new->Field] = PDO::PARAM_INT; } elseif (preg_match("/date|text|varchar/",$row_new->Type)) { $fields_types[$row_new->Field] = PDO::PARAM_STR; } else { $fields_types[$row_new->Field] = PDO::PARAM_STR; } } $to_prepare = "REPLACE INTO `database_nieuw`.`tabel_nieuw` (".implode(",",$fields).") VALUES (".implode(",",$fields_filling).")"; echo "To prepare: " . $to_prepare . "\n"; $res = $db_old->query("SELECT * FROM `database_oud`.`tabel_oud`"); while($row = $res->fetchObject()) { $this_array = array(); $sth = $db_new->prepare($to_prepare); foreach ($fields as $f) { $f2 = preg_replace("/`/","",$f); $sth->bindValue(":".$f2,$row->$f2,$fields_types[$f2]); echo "Binding " . $f2 ." : " .$row->$f2. "\n"; } $sth->execute(); } ?> |
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |