Waarom zou hij het in een swapfile zetten als het ook gewoon op je schijf staat?Het lijkt me handiger als MySql de index in zijn geheugen zet en de rest van schijf leest ofzo...quote:Op maandag 20 februari 2006 19:54 schreef Nevermind het volgende:
Stel dat ik op mijn thuisserver eenofandere grote site ga rippen en in de database stop, zodat ik op een gegeven moment >1 gig aan data in MySQL heb. Probeert MySQL dat dan permanent in het geheugen te laden, zodat ik een gigantische (langzame) swapfile krijg? Of wordt het bij een query pas van de schijf gelezen en is het alsnog langzaam, maar zit het niet permanent in het geheugen?
Ik zeg het ook niet, ik vraag hetquote:Op maandag 20 februari 2006 20:12 schreef ikke_ook het volgende:
[..]
Waarom zou hij het in een swapfile zetten als het ook gewoon op je schijf staat?Het lijkt me handiger als MySql de index in zijn geheugen zet en de rest van schijf leest ofzo...
Ik kan me iig niet voorstellen dat er gebeurd wat jij zegt.
kijk eerder eens op de vBulletin forum. Volgens mij is er wel vrij duidelijke handleiding. Met je vraag kunnen we niets. Misschien specifiekere vraag over wat je moet invullen maar niet zeker weet?quote:Op maandag 20 februari 2006 19:20 schreef eer-ik het volgende:
Hallo allemaal, ik heb een probleempje, namelijk ik heb zo'n VBulletin forum, maar ik kan deze niet installeren op mijn server. Ik heb de mogelijkheid tot PHP en MySQL, maar ik krijg de melding bij stap 3 dat er iets is foutgegaan. Het gaat om http://www.wapata.nl/forum/install/install.php?step=3
Bij http://www.wapata.nl/forum/install/install.php?step=2 kun je ervoor kiezen om de database te legen en het nog een keer te proberen, maar dat lukt me niet.
Weet iemand wat ik hieraan kan doen?
Alvast bedankt,
Erik
Maar het probleem is, dat ik daar geen kont van snapquote:Database error in vBulletin :
Invalid SQL:
CREATE TABLE deletionlog (
primaryid INT UNSIGNED NOT NULL DEFAULT '0',
type ENUM('post', 'thread') DEFAULT 'post',
userid INT UNSIGNED NOT NULL DEFAULT '0',
username VARCHAR(100) NOT NULL DEFAULT '',
reason VARCHAR(125) NOT NULL DEFAULT '',
PRIMARY KEY (primaryid, type)
);
MySQL Error : All parts of a PRIMARY KEY must be NOT NULL; If you need NULL in a key, use UNIQUE instead
Error Number : 1171
Date : Monday, February 20th 2006 @ 09:19:05 PM
Script : http://www.wapata.nl/Vbulletin/install/install.php?step=3&emptydb=true&confirm=true
Referrer : http://www.wapata.nl/Vbulletin/install/install.php?step=3&emptydb=true&confirm=true
IP Address : 80.127.69.223
Username :
Classname : vb_database
Doe dat dan toch maar wel... Het probleem is vaker voorgekomen, en oplossing staat er ook wel bij.quote:Op maandag 20 februari 2006 21:58 schreef eer-ik het volgende:
En, nee, niet op het forum gekeken eigenlijk
MySQL heeft strakke restricties op het geheugengebruik, waarschijnlijk zal een groot deel van de indices en bepaalde delen van de data wel gecached worden door MySQL zelf. Voor de rest kun je prima vertrouwen op de block cache van het besturingssysteem waar het op draait.quote:Op maandag 20 februari 2006 19:54 schreef Nevermind het volgende:
Stel dat ik op mijn thuisserver eenofandere grote site ga rippen en in de database stop, zodat ik op een gegeven moment >1 gig aan data in MySQL heb. Probeert MySQL dat dan permanent in het geheugen te laden, zodat ik een gigantische (langzame) swapfile krijg?
Een query hoeft niet langzaam te zijn, zolang je maar de juiste indices gebruikt.quote:Of wordt het bij een query pas van de schijf gelezen en is het alsnog langzaam, maar zit het niet permanent in het geheugen?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | $lines = file('http://URL'); while($i < 300) { preg_match_all($regex,$lines[$i],$needle); $needle = split(' ',$needle[0][0]); if($needle[0] != '' && is_numeric($needle[0])) { $query = RunQuery("INSERT INTO"); CloseConDB($con); exit; } $i++; } ?> |
Die bepaalt of een variabele bestaat. Wat houd je tegen om het uit te proberen?quote:Op dinsdag 21 februari 2006 09:48 schreef Desdinova het volgende:
en isset($view)?
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 | $query = "SELECT * FROM MRprocesses WHERE MasterID = '0' ORDER BY Name ASC"; $result = mysql_query($query); while ($row = mysql_fetch_object($result)){ $query2 = "SELECT * FROM MRprocesses WHERE MasterID = '".$row->ID."' ORDER BY Name ASC"; $result2 = mysql_query($query2); while ($row2 = mysql_fetch_object($result2)){ $query3 = "SELECT * FROM MRprocesses WHERE MasterID = '".$row2->ID."' ORDER BY Name ASC"; $result3 = mysql_query($query3); while ($row3 = mysql_fetch_object($result3)){ $query4 = "SELECT * FROM MRprocesses WHERE MasterID = '".$row3->ID."' ORDER BY Name ASC"; $result4 = mysql_query($query4); while ($row4 = mysql_fetch_object($result4)){ } } } } ?> |
niemand ?quote:Op maandag 20 februari 2006 23:15 schreef mschol het volgende:
ik heb een script dat stats in mijn database pompt maar ik wil er een error check in dat wanneer de pagina niet geladen kan worden dat hij bijvoorbeeld refreshed en nog eens probeert en dat er een mailtje wordt gestuurd bijvoorbeeld
de code:
[ code verwijderd ]
de niet echt nuttige info er eff uitgewerkt
i wordt nu gebruikt om een x aantal rijen af te gaan (deze rij is variable en daaarom moet ik een loop gebruiken!)
nou heb ik dus de vraag: hoe kan ik zo slim mogelijk een error check erin zetten zodat bij een "pagina kan niet worden gevonden" error hij refreshed en/of iets anders doet?
yips only dus e.v.t. functies die ik zou moeten gebruiken, wil zelf ontdekken hoe de vork in de steel zit, geven jullie me maar de vork en de steel
Ik snap niet wat je wilt doen. Wil je externe pagina's opvragen en zodra dit niet lukt iets anders doen? What about zoiets:quote:
1 2 3 4 5 6 7 8 9 10 11 | $fp = @fopen($site, 'r'); if (!$fp) { $failed = true; break; } } ... if ($failed === true) { //stuur mail } |
Probeer je een parent-child tree te bouwen? Dan kun je wellicht beter alles uit de database halen en met php in elkaar zetten.quote:Op dinsdag 21 februari 2006 22:49 schreef InsaneM666 het volgende:
[ code verwijderd ]
kan dit automatisch tot in het oneindige? dus tot er geen resultaat meer is zeg maar?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | D:\MP3\Februari 2006\Smashmouth - Allstar.mp3 #EXTINF:208,Soulvation - Reset Your Brain D:\MP3\Februari 2006\Soulvation - Reset Your Brain.mp3 #EXTINF:283,Sunblock - I'll Be Ready (Extended version) D:\MP3\Februari 2006\Sunblock - I'll Be Ready .mp3 #EXTINF:247,Survivor - Eye Of The Tiger D:\MP3\Februari 2006\Survivor - Eye Of The Tiger.mp3 #EXTINF:350,System F - Out of the Blue D:\MP3\Februari 2006\System F - Out Of The Blue.mp3 #EXTINF:188,Tatu - Friend Or Foe D:\MP3\Februari 2006\Tatu - Friend Or Foe.mp3 #EXTINF:260,The Bloodhound Gang - Uhn Tiss Uhn Tiss Uhn Tiss D:\MP3\Februari 2006\The Bloodhound Gang - Uhn Tiss Uhn Tiss Uhn Tiss.mp3 #EXTINF:213,The Source ft. Candi Staton - You Got The Love D:\MP3\Februari 2006\The Source ft. Candi Staton - You Got The Love.mp3 |
1 2 3 4 5 6 7 8 9 10 | php $data = file("playlist.m3u"); foreach ($data as $entry) { } ?> |
1 |
www.php.net/explodequote:Op woensdag 22 februari 2006 18:12 schreef wobbel het volgende:
Ik heb een .m3u file in het volgende formaat:
[ code verwijderd ]
Hoe zorg ik ervoor dat ik het getal achter de #EXTINF: krijg (dus 288, 205, 204, 213 etc), de titel achter de komma bij het getal (dus artiest en titel) en de locatie (D:\mp3\februari 2006\young j...etc)
Hoe zorg ik ervoor dat ik dat allemaal uit elkaar haal en apart in strings stop zodat ik elk gegeven in een record kan stoppen?
Dus:
$tijd = 213
$titel = The Source ft. Candi Staton - You Got The Love
$locatie = D:\MP3\Februari 2006\The Source ft. Candi Staton - You Got The Love.mp3
Heel simpel beginseltje
[ code verwijderd ]
quote:Op woensdag 22 februari 2006 19:53 schreef SuperRembo het volgende:
Je doet iets als
[ code verwijderd ]
en toch krijg je een foutmelding over een niet-geescapete quote?
1 2 3 4 5 6 7 8 9 10 11 | if(!get_magic_quotes_gpc()) { $author=addslashes($author); $title=addslashes($title); $description=addslashes($description); } $query="INSERT INTO tabel (id,iuser,send,genre,ISBN,author,title,description,price,image,update_id,date) VALUES(0,48,1,'".$genre."','".$isbn."','".$author."','".$title."','".$description."','".$price."','$image','$update_id',NOW())"; ?> |
1 2 3 4 5 | $author=mysql_real_escape_string($author); $title=mysql_real_escape_string($title); $description=mysql_real_escape_string($description); ?> |
Dan staat magic quotes blijkbaar uitquote:Het valt me wel op dat met de laatste de data niet escaped in de tabel staat.
Stripslashes als het uit een $_POST komtquote:Op woensdag 22 februari 2006 20:06 schreef SuperRembo het volgende:
Het verschil tussen addslashes en mysql_real_escape_string zit er zo te zien (in de manual) vooral in dat die laatste ook dingen als carriage return en newline tekens. En dat zou best het verschil kunnen maken als je description uit een textarea komt.
De beste aanpak is denk ik om altijd als magic quotes aan staan stripslashes over $_GET / $_POST te halen. Als je de sql samenstelt dan gebruik je mysql_real_escape_string.
magic_quotes slasht alles wat zich in $_POST/$_GET/etc. bevind?quote:Op woensdag 22 februari 2006 20:10 schreef Swetsenegger het volgende:
[..]
Stripslashes als het uit een $_POST komtWaarom? magicquotes gaat pas bij een qeury toch slashen?
In dit geval komt de data uit een CSV omdat ik 2000 records in 1 keer moet plaatsen. De code komt min of meer rechtstreeks uit de life website, waar de data WEL uit $_POST komt. Daar gaat het overigens goed.
Maar slashed mysql_real_escape_string de data dan alleen 'virtueel' voor de query ofzo? Want zoals gezegd staat de data niet ge-escaped in de tabel.
1 2 3 4 5 6 7 8 9 | foreach($_GET as $key => $getval) { $_GET[$key] = stripslashes($getval); } foreach($_POST as $key => $postval) { $_POST[$key] = stripslashes($postval); } } |
Nope, zoals hierboven wordt gezegd wordt op alle $_POST, $_GET en $_COOKIE-variabelen addslashes() toegepast op het begin van het script. Normaal doe je dus een stripslashes() op die variabelen op het begin van het script indien magic_quotes_gpc aanstaat, en weer een addslashes() of mysql_real_escape_string() als je het in de query gaat zetten. En niet eerderquote:Op woensdag 22 februari 2006 20:10 schreef Swetsenegger het volgende:
[..]
Stripslashes als het uit een $_POST komtWaarom? magicquotes gaat pas bij een qeury toch slashen?
Ok, ik slash dus data wanneer het de query ingaat (mits magic quotes uitstaan)quote:Op woensdag 22 februari 2006 20:26 schreef JeRa het volgende:
[..]
Nope, zoals hierboven wordt gezegd wordt op alle $_POST, $_GET en $_COOKIE-variabelen addslashes() toegepast op het begin van het script. Normaal doe je dus een stripslashes() op die variabelen op het begin van het script indien magic_quotes_gpc aanstaat, en weer een addslashes() of mysql_real_escape_string() als je het in de query gaat zetten. En niet eerder
Zo magic is magic quotes gpc nietquote:Op woensdag 22 februari 2006 20:10 schreef Swetsenegger het volgende:
[..]
Stripslashes als het uit een $_POST komtWaarom? magicquotes gaat pas bij een qeury toch slashen?
En daarbij komt nog eens het feit dat je het risico loopt dubbel te escapen natuurlijk, bijvoorbeeld als je script van server wisselt.quote:Op woensdag 22 februari 2006 20:32 schreef SuperRembo het volgende:
[..]
Zo magic is magic quotes gpc niet![]()
Magic quotes GPC is gewoon lomp en escaped alle quotes in Get Post en Cookies.
Dat kan problemen geven als je die gegevens wil valideren. Of als je het helemaal niet in een sql string wil gebruiken, zouals een preview in html. Of als je een string op een bepaalde lengte af wil kappen; dan klopt de lengte niet en je het het risico dat je string eindigt op een backslash.
En nu blijkt het ook niet eens altijd te werken
Fuck, met valideren en dergelijke had ik er eigenlijk helemaal nog niet bij nagedacht.quote:Op woensdag 22 februari 2006 20:32 schreef SuperRembo het volgende:
[..]
Zo magic is magic quotes gpc niet![]()
Magic quotes GPC is gewoon lomp en escaped alle quotes in Get Post en Cookies.
Dat kan problemen geven als je die gegevens wil valideren. Of als je het helemaal niet in een sql string wil gebruiken, zouals een preview in html. Of als je een string op een bepaalde lengte af wil kappen; dan klopt de lengte niet en je het het risico dat je string eindigt op een backslash.
En nu blijkt het ook niet eens altijd te werken
Dat is ook de aanbevolen instelling. Maar om een of andere reden staat het bij webhosts vaak wel aan. Het zal wel zijn omdat ouwe brakke scripts niet goed werkenquote:Op woensdag 22 februari 2006 20:36 schreef DutchBlood het volgende:
Wat dat betreft hadden ze magic qoutes/register_globals, en nog wat functies beter weg kunnen laten.
Daarom is het ook aan te raden om aan het begin van elk script iets te includen/require_once-en wat er voor zorgt dat er gestriptslashed wordt wanneer dat nodig is.quote:Op woensdag 22 februari 2006 20:40 schreef Swetsenegger het volgende:
[..]
Fuck, met valideren en dergelijke had ik er eigenlijk helemaal nog niet bij nagedacht.
Hmz, gelukkig staat het op de meeste servers uit, maar wel iets om rekening mee te houden.
Thnks
Uitermate irritant is dat ja. Heb vaak genoeg scripts die niet meer werken doordat het aan staat. Dit omdat sommige variabelen dan ineens 'vervangen' worden.quote:Op woensdag 22 februari 2006 20:41 schreef SuperRembo het volgende:
[..]
Dat is ook de aanbevolen instelling. Maar om een of andere reden staat het bij webhosts vaak wel aan. Het zal wel zijn omdat ouwe brakke scripts niet goed werken
Inderdaad binnenkort een functie voor schrijvenquote:Op woensdag 22 februari 2006 20:47 schreef DutchBlood het volgende:
[..]
Daarom is het ook aan te raden om aan het begin van elk script iets te includen/require_once-en wat er voor zorgt dat er gestriptslashed wordt wanneer dat nodig is.
Dat voorkom je door te controleren of magic quotes GPC aanstaatquote:En daarbij komt nog eens het feit dat je het risico loopt dubbel te escapen natuurlijk, bijvoorbeeld als je script van server wisselt.
Van http://nl3.php.net/manual/nl/function.get-magic-quotes-gpc.phpquote:Op woensdag 22 februari 2006 20:50 schreef Swetsenegger het volgende:
[..]
Inderdaad binnenkort een functie voor schrijven
Dus... stripslashes van alle userinput.
mysql_rela_escape_string bij ALLE data welke de db ingaat.
Dat laatste voorwaardelijk (dus if(!get_magic_quotes_gpc())) of ALTIJD?
[..]
Dat voorkom je door te controleren of magic quotes GPC aanstaat
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | if (get_magic_quotes_gpc()) { function stripslashes_deep($value) { $value = is_array($value) ? array_map('stripslashes_deep', $value) : stripslashes($value); return $value; } $_POST = array_map('stripslashes_deep', $_POST); $_GET = array_map('stripslashes_deep', $_GET); $_COOKIE = array_map('stripslashes_deep', $_COOKIE); } ?> |
Op apache kan je het ook uitzetten door een regeltje in .htaccess:quote:Op woensdag 22 februari 2006 20:47 schreef DutchBlood het volgende:
[..]
Daarom is het ook aan te raden om aan het begin van elk script iets te includen/require_once-en wat er voor zorgt dat er gestriptslashed wordt wanneer dat nodig is.
1 |
Kan dat eigelijk niet beter (sneller) met array_walk?quote:Op woensdag 22 februari 2006 20:55 schreef DutchBlood het volgende:
[..]
Van http://nl3.php.net/manual/nl/function.get-magic-quotes-gpc.php
[ code verwijderd ]
ik zal proberen het te verduidelekijenquote:Op woensdag 22 februari 2006 16:01 schreef JeRa het volgende:
[..]
Ik snap niet wat je wilt doen. Wil je externe pagina's opvragen en zodra dit niet lukt iets anders doen? What about zoiets:
[ code verwijderd ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | $i=80; $lines = file('http://URL'); while($i < 300) { preg_match_all($regex,$lines[$i],$needle); $needle = split(' ',$needle[0][0]); if($needle[0] != '' && is_numeric($needle[0])) { $query = RunQuery("INSERT INTO"); CloseConDB($con); exit; } $i++; } ?> |
1 2 3 4 5 6 7 8 9 | $tries = 0; do { if ($tries > 0) { sleep(2); } $lines = file('url'); $tries++; } while ((count($lines) == 0) && ($tries < $maxTries)); |
probleem is dat wanneer de pagina down is hij nooit leeg is (je krijgt immers de foutmeldingspagina van windows ofzo terug (geen idee waarom dit gebeurd maar is zo)quote:Op woensdag 22 februari 2006 21:37 schreef JeRa het volgende:
@mschol
2. Als de pagina écht down is kun je er niets aan doen natuurlijk. Maar kun je geen loopje bedenken dat loopt zolang het aantal regels 0 is?
[ code verwijderd ]
Niet netjes, maar het is een simpel voorbeeld van hoe je zoiets zou kunnen afvangen
Niet op deze manier, dat kan wel als je met sockets gaat werken. Beter controleer je gewoon of bepaalde woorden in de array voorkomen, zoals 'Page not found' oidquote:Op woensdag 22 februari 2006 21:47 schreef mschol het volgende:
[..]
of kan ik de http status code misschien ophalen ergens met php?
JeRa is Maroc?quote:Op woensdag 22 februari 2006 22:00 schreef JeRa het volgende:
Beter controleer je ...
1 2 3 4 5 6 7 8 9 10 11 12 13 | $cnt = $db->query("SELECT count(*) as count from images WHERE img_unique = '".$_GET["id"]."'"); $db->doQuery("DELETE FROM images WHERE img_unique = '".$_GET["id"]."'"); $db->doQuery("DELETE FROM cars WHERE car_unique = '".$_GET["id"]."'"); for($x=0; $x<$cnt[0][0]; $x++) { unlink("../files/".$_GET["id"]."_".($x+1).".jpg"); } |
Wat voor een foutmelding krijg je dan?quote:Op donderdag 23 februari 2006 09:34 schreef Boink het volgende:
Hoi
Op e.o.a. manier wil de unlink niet werken
Zie
[ code verwijderd ]
Ik heb dit volledig via de handleiding van php.net gedaan, ik zit in een directory waar hij eerst uit moet en dan in de files directory de foto's moet deleten,
Dit werkt wel op de huidige server alleen niet op de php5 i.c.m. mysql5 server waar binnenkort naar gemigreerd wordt.
Kan iemand mij redden hier?
1 2 3 4 5 6 | if(is_file($file){ unlink($file); }else{ echo $file." bestaat niet."; } |
1 |
1 |
het gebruik van $type voor het ophalen van die get/post variable is tegenwoordig toch ook sterk afgeraden??quote:Op donderdag 23 februari 2006 13:54 schreef ViPeRII het volgende:
moet dat geen $_GET['type'] zijn?
Hij herkent de variable $type niet.
anders moet je ergens anders in je script $type declareren.
Verder is dit een notice, en is dus geen fout
Top, dat isook weer weg,quote:Op donderdag 23 februari 2006 13:54 schreef ViPeRII het volgende:
moet dat geen $_GET['type'] zijn?
Hij herkent de variable $type niet.
anders moet je ergens anders in je script $type declareren.
Verder is dit een notice, en is dus geen fout
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 | $cnt = $db->doQuery("SELECT count(*) as count from images WHERE img_unique = '".$_GET["id"]."'"); $db->doQuery("DELETE FROM images WHERE img_unique = '".$_GET["id"]."'"); $db->doQuery("DELETE FROM cars WHERE car_unique = '".$_GET["id"]."'"); for($x=0; $x<$cnt[0][0]; $x++) { $file = "../files/".$_GET["id"]."_".($x+1).".jpg"; if(is_file($file)){ unlink($file); }else{ echo $file." bestaat niet."; } } header("Location: viewcars.php"); } |
Heeft je script wel de juiste rechten? Chmod eens 777 anders.quote:Op donderdag 23 februari 2006 14:09 schreef Boink het volgende:
[..]
Top, dat isook weer weg,
nu die unlink nog, want dat werkt ook nog steeds niet. Ik heb nu dit.
[ code verwijderd ]
Het verwijderen uit de database lukt wel.. De files alleen niet.
Ja alles is gewoon 777quote:Op donderdag 23 februari 2006 14:13 schreef DutchBlood het volgende:
[..]
Heeft je script wel de juiste rechten? Chmod eens 777 anders.
Waarschijnlijk klopt je query niet. Vervang or die("FOUT!") eens door (mysql_error ()) en post de error die je krijgt hier.quote:Op donderdag 23 februari 2006 15:39 schreef Toeps het volgende:
Ook na het zetten van leuke ` tekentjes bij de databasenamen lukt het niet.
Ieder z'n eigen stijl natuurlijk, maar ik vind dit verre van prettig lezen. Weinig overzichtelijk en dan maak je makkelijk van die kleine klotefoutjes.quote:Op donderdag 23 februari 2006 16:21 schreef Toeps het volgende:
Sniegoed?
Ik heb het uit een boek en zo, want op school (CMD) leren ze me niet zo veel.
quote:Kittencentrale vergeten?! Da's alles?!
Whehehequote:Op donderdag 23 februari 2006 16:23 schreef Toeps het volgende:
Aaah!!!! Mijn naam is STOMME IDIOOT!!
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
1 2 3 4 | if(!$result = mysql_query($sql, $db)) echo "Deze query verneukt: ".$query.", op deze manier: ".mysql_error()."."; ?> |
dan splits je je berekening in 2en?quote:Op donderdag 23 februari 2006 22:24 schreef Swetsenegger het volgende:
Ik heb ZCE vast gezet, dus ik ben nu bezig in het practise testboek.
Kom ik er achter dat php EERST aftrekt en pas daarna optelt ipv het Meneer Van Dalen Wacht Op Antwoord alternatief
dus 20-10+4+2=16 en niet 20-10+4+2=4 zoals ik verwacht. Ligt het mij of is dat vreemd?
Daar gaat het niet om, het is een testvraag uit een proefexamenquote:Op donderdag 23 februari 2006 22:26 schreef mschol het volgende:
[..]
dan splits je je berekening in 2en?
Dan ligt het aan mijquote:Op donderdag 23 februari 2006 22:28 schreef ikke_ook het volgende:
Tis standaard in de wiskunde trouwens, niet alleen in php
quote:Op donderdag 23 februari 2006 23:07 schreef DutchBlood het volgende:
Met wat haakjes is dit vrij makkelijk op te lossen natuurlijk. Wiskundig èn mogelijk in php.
quote:Op donderdag 23 februari 2006 22:27 schreef Swetsenegger het volgende:
[..]
Daar gaat het niet om, het is een testvraag uit een proefexamen
Lezen blijft lastig zekerquote:Op donderdag 23 februari 2006 23:13 schreef DutchBlood het volgende:
[..]
Ok, dan heb ik niks gezegd.
Voor welk examen ben je aan het oefenen dan?
quote:Op donderdag 23 februari 2006 22:24 schreef Swetsenegger het volgende:
Ik heb ZCE vast gezet, dus ik ben nu bezig in het practise testboek.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $cnt = $db->query("SELECT count(*) as count from images WHERE img_unique = '".$_GET["id"]."'"); $db->doQuery("DELETE FROM images WHERE img_unique = '".$_GET["id"]."'"); $db->doQuery("DELETE FROM cars WHERE car_unique = '".$_GET["id"]."'"); for($x=0; $x<$cnt[0][0]; $x++) { unlink("../files/".$_GET["id"]."_".($x+1).".jpg"); print("../files/".$_GET["id"]."_".($x+1).".jpg<br />"); } |
Humz het lijkt wel of de string offsets geen waarde heeft, of helemaal niet bestaat.quote:Op vrijdag 24 februari 2006 01:37 schreef Tijn het volgende:
Ik heb een tijdje geleden Pear geinstalleerd op m'n Ubuntu-machine. Dat leek toen wel goed te gaan. Ik kan ook packages toevoegen enzo, geen klachten.
Vanavond had ik wat tijd over en dacht ik, laat ik er eens wat mee doen. Dus ik heb Auth geinstalleerd om te kijken of het allemaal werkt. Ik heb in m'n database een tabel "auth" gemaakt met ruimte voor usernames en passwords en daar als test mezelf ingezet met een MD5 password. Vervolgens heb ik het voorbeeld uit de handleiding gekopieerd, de database-gegevens ingevuld en in een bestand genaamd test.php op m'n server gezet.
Dat leverde dit op: Fatal error: Cannot unset string offsets in /usr/share/pear/Auth.php on line 180
Wat nu?
Maar eerlijk gezegd word ik er nog niet echt vrolijk van. Ik heb nu 3 packages geprobeerd (Auth, Auth_HTTP en HTML_BBCodeParser) en ze geven alledrie fouten als ik het standaardvoorbeeld uit de documentatie probeerquote:Op vrijdag 24 februari 2006 11:24 schreef Tijn het volgende:
Pear is een systeem voor standaardscripts, zodat je niet elke keer het wiel aan het uitvinden bent.
Ik heb het nog nooit gebruikt.quote:Op vrijdag 24 februari 2006 11:58 schreef Tijn het volgende:
[..]
Maar eerlijk gezegd word ik er nog niet echt vrolijk van. Ik heb nu 3 packages geprobeerd (Auth, Auth_HTTP en HTML_BBCodeParser) en ze geven alledrie fouten als ik het standaardvoorbeeld uit de documentatie probeer
Dat is ook ongetwijfeld zoquote:Op vrijdag 24 februari 2006 12:36 schreef Swetsenegger het volgende:
[..]
Ik heb het nog nooit gebruikt.
Voornamleijk omdat ik graag zelf het wiel WIL uitvinden omdat ik op die manier een betere php'er denk te worden.
Absoluut.quote:Op vrijdag 24 februari 2006 14:01 schreef ViPeRII het volgende:
Swetsenegger. jij ook al? Vind het altijd leuk om een nieuw systeem van scratch op te bouwen
Daar wordt je ook steeds beter van, merk ik zelf al
Kun je er geen CSV-file van maken?quote:Op vrijdag 24 februari 2006 14:07 schreef Scorpie het volgende:
Ik heb al gegoogled maar ik kon niks nuttigs vinden dus post ik het hier: Weet iemand tutorials over Excel (xls) bestanden in te lezen met PHP?
1 2 3 4 5 6 7 8 | if ($type == 2){ $typeinfo = "wel" } else { $typeinfo = "niet" } ?> |
1 2 3 | $typeinfo = ($type == 2) ? 'wel' : 'niet'; ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | while($row = mysql_fetch_assoc($result1)) { if(($result['urID'] & $row['urID'])) { $check = ' checked = "checked"'; } else { $check = ''; } } echo '<tr><td>' . $row['urName'] . '</td><td><input type = "checkbox" name = "rights[]" id = "rights[]" value = "' . $row['urID'] . '"' . $check . ' /></td></tr>'; } ?> |
Als ik de bitwise functie laat echoen binnen de while krijg ik een rijtje:quote:Op zaterdag 25 februari 2006 21:41 schreef Swetsenegger het volgende:
Kan je controleren of die bits ook daadwerkelijk geset zijn?
In bovenstaande code zou ik alleen nog een spatie kunnen toevoegen, maar ik zie geen opmerkelijke fout
value = "' . $row['urID'] . '"' . $check . ' /> spatie:
value = "' . $row['urID'] . '" ' . $check . ' />
Mjah, ik begrijp er dan geen ruk van wat eruit zou moeten komen, want ik had 1 2 4 8 16 32 verwachtquote:Op zaterdag 25 februari 2006 21:45 schreef c0nd0r het volgende:
[..]
Als ik de bitwise functie laat echoen binnen de while krijg ik een rijtje:
0
2
4
0
02
22
Degene waar nullen staan zijn dus ook niet aangevinkt.
Dat zou je inderdaad verwachten!quote:Op zaterdag 25 februari 2006 21:56 schreef Swetsenegger het volgende:
[..]
Mjah, ik begrijp er dan geen ruk van wat eruit zou moeten komen, want ik had 1 2 4 8 16 32 verwacht
Anyway, je zegt zelf dat daar waar de nullen staan je checkboxes niet aangevinkt zijn. Dat klopt toch?
Wat zeg je nou?quote:Op zaterdag 25 februari 2006 22:00 schreef c0nd0r het volgende:
[..]
Dat zou je inderdaad verwachten!
Maar dat klopt niet want de rechten zijn 63 (dus 1 + 2 + 4 + 8 + 16 + 32) dus alle bitjes die langskomen zou die moeten bevatten maar op 1 of andere manier dus niet
Haha die set of unset je niet maar je gaat gewoon bitwise die rechten toekennen dus voor recht lezen is 1 voor schrijven is 2 voor bewerken is 4 en iemand die dan mag lezen en schrijven krijgt 3 snap ie?quote:Op zaterdag 25 februari 2006 22:01 schreef Swetsenegger het volgende:
[..]
Wat zeg je nou?
Geef nou je code eens die de bitjes set en unset. Hoe set je die bitjes?
Ja duh, maar HOE krijg je dat rijtje terug? Geef die code eens.quote:Op zaterdag 25 februari 2006 22:06 schreef c0nd0r het volgende:
[..]
Haha die set of unset je niet maar je gaat gewoon bitwise die rechten toekennen dus voor recht lezen is 1 voor schrijven is 2 voor bewerken is 4 en iemand die dan mag lezen en schrijven krijgt 3 snap ie?En met de bitwise functies van PHP kun je dat dan controleren
http://nl2.php.net/language.operators.bitwise
1 2 3 4 5 6 7 8 9 10 | switch ($rechten){ case '1': // lezen break; case '10': //schrijven break; } ?> |
Zou ook kunnen inderdaad maar heb de fout al gevonden! Om 1 of andere vage reden parste PHP de getallen als octaal (vandaar dat 1 en 8 het niet deden)quote:Op zaterdag 25 februari 2006 22:17 schreef Swetsenegger het volgende:
En waarom maak je het jezelf eigenlijk niet makkelijk door gewoon binair te rekenen.
1=lezen
10=schrijven
11=lezen en schrijven
Etc.
Op die manier kan je een ubersimpele switch functie gebruiken om je rechten te checken en je checkboxen te setten.
[ code verwijderd ]
als het begint met een 0 wordt het als octaal geinterpreteerd. (dacht ik. even zoeken op php.net)quote:Op zaterdag 25 februari 2006 22:21 schreef c0nd0r het volgende:
[..]
Zou ook kunnen inderdaad maar heb de fout al gevonden! Om 1 of andere vage reden parste PHP de getallen als octaal (vandaar dat 1 en 8 het niet deden)
Even de intval() eromheen zetten en works like a charm! Bedankt iig!
Correct.quote:Op zaterdag 25 februari 2006 22:23 schreef Swetsenegger het volgende:
[..]
als het begint met een 0 wordt het als octaal geinterpreteerd.
helemaal mee eesnquote:Op zondag 26 februari 2006 17:58 schreef ikke_ook het volgende:
Leer zelf eens debuggen, begin eens met die apenstaartjes voor de functies weg te halen want die onderdrukken errors en warnings. En dan zet je gewoon ergens een echo ofzo om te kijken of hij in een bepaald if-statement komt...... Probeer eens wat losse onderdelen of die wel werken.
Doe een echo op je filename/imagepath, misschien is dat wel niet goed.... Wij hoeven toch niet iedere keer jouw lappen code door te gaan spitten op zoek naar een foutje?
En denk ook eens aan het controleren van je input... je haalt iets uit een GET en je zet dat gewoon in een query, ik zou daar op zn minst een addslashes op uitvoeren.....
Magic_quotes?quote:Op zondag 26 februari 2006 18:15 schreef mschol het volgende:
[..]
helemaal mee eesn
ennuh even reactie op 2de punt en een handige vraag voor mij :
om de een of andere reden hoef ik in mijn php scripts nooit de addslashes te gebruiken...
hij negeerdt die slashes ofzo...
wat ik wel doet is dit:
$bla =$_get['Boe'];
komt dat daardoor?
ben zelf nu ook beetje bezig met een hele simpele template parser
eens kijken of ik daar iets leuks van kan maken
Dat komt idd door magic_quotes_gpc. Eerder in dit topic staat er meer over. Een feature die schijnveiligheid creëert en verder alleen maar tegen je werkt.quote:Op zondag 26 februari 2006 18:15 schreef mschol het volgende:
ennuh even reactie op 2de punt en een handige vraag voor mij :
om de een of andere reden hoef ik in mijn php scripts nooit de addslashes te gebruiken...
hij negeerdt die slashes ofzo...
wat ik wel doet is dit:
$bla =$_get['Boe'];
komt dat daardoor?
maar dat zou hij toch alleen doen als hij aanstaatquote:Op zondag 26 februari 2006 19:26 schreef SuperRembo het volgende:
[..]
Dat komt idd door magic_quotes_gpc. Eerder in dit topic staat er meer over. Een feature die schijnveiligheid creëert en verder alleen maar tegen je werkt.
nou normaal gesproken zou je een sql injection kunnen doen als de quotes e.d niet worden gescaped..quote:Op zondag 26 februari 2006 20:09 schreef DutchBlood het volgende:
Maar wat gebeurd er dan precies met dat slashes gebeuren bij deze php-installatie?
Zou je dat eens kunnen uitttesten met wat echo's misschien? Dus de $_GET var en dan de gewone?quote:Op zondag 26 februari 2006 20:19 schreef mschol het volgende:
[..]
nou normaal gesproken zou je een sql injection kunnen doen als de quotes e.d niet worden gescaped..
maar ik escape dus niet en SQL injections zijn echt onmogelijk![]()
ik krijg hooguit een php error op line 10 ofzo
en dit heb ik al heeel lang bij meerdere script..
komt dat omdat ik de GET waarde eerst in een variable zet en die variable in een SQL statment gebruik?
1 |
Dankje, erg handigquote:Op zondag 26 februari 2006 21:01 schreef mschol het volgende:
http://www.securiteam.com/securityreviews/5DP0N1P76E.html
hier wordt het hoe en wat uitgelegd, vaak kan je het misbruiken door in een search veld de string proberen te escapen
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | class template { var $data; function load($file) { $this->data = file_get_contents('templates/'. $file . '.tpl'); } function replace($var, $value) { $this->data = str_replace('{' . $var . '}', $value, $this->data); } function parse() { echo $this->data; } } ?> |
1 2 3 4 5 6 7 8 | { $template->load('main'); $template->replace('Title', 'Overzicht PC\'s'); $template->replace('Content',include('includes\overzicht.php')); $template->parse(); } ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $SQL = "SELECT * FROM `p`"; $result = mysql_query($SQL); while($row = mysql_fetch_array($result)) { echo("<tr>\n"); echo("<td align='center'>".$row['pcnaam']."</td>\n\r"); echo("<td align='center'>".$row['gebouw']."</td>\n\r"); echo("<td align='center'>".$row['lokatie']."</td>\n\r"); echo("<td align='center'>".$row['leerkracht']."</td>\n\r"); echo("<td align='center'>\n\r"); echo("<input name='button2' type='button' value='Aanpassen' onclick=\"\PopUpWindow('edit_pc','http://fia181-83.dsl.hccnet.nl/PWA/pc.php?act=edit_pc','http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."\") />"); echo("</td>\n\r"); echo("<td align='center'><input name='button' type='button' value='Verwijderen' /></td>\n\r"); echo("</tr>"); } } ?> |
probeer maar. Met magic Quotes die aanstaan werkt dit niet nee.....quote:Op zondag 26 februari 2006 20:57 schreef Nevermind het volgende:
Niet dat ik het wil misbruiken, maar hoe kun je sql injections uitproberen? Wat moet je in je GET-variabele toevoegen?
[ code verwijderd ]
Zoiets zal wel niet werken?
Ow, mysql gaat gewoon op z'n bek als je een quotje invoert. Nee, da's primaquote:Op zondag 26 februari 2006 20:19 schreef mschol het volgende:
[..]
nou normaal gesproken zou je een sql injection kunnen doen als de quotes e.d niet worden gescaped..
maar ik escape dus niet en SQL injections zijn echt onmogelijk![]()
ik krijg hooguit een php error op line 10 ofzo
en dit heb ik al heeel lang bij meerdere script..
komt dat omdat ik de GET waarde eerst in een variable zet en die variable in een SQL statment gebruik?
maar aaleen bij de uitvoer van dat script... dus iedere hack poiung loopt doodquote:Op zondag 26 februari 2006 21:49 schreef SuperRembo het volgende:
[..]
Ow, mysql gaat gewoon op z'n bek als je een quotje invoert. Nee, da's prima
Daar zou ik niet al te zeker van zijn.quote:Op zondag 26 februari 2006 21:55 schreef mschol het volgende:
[..]
maar aaleen bij de uitvoer van dat script... dus iedere hack poiung loopt dood
my point : oke script gaat onderuit, maar hij valt voor de rest niet te hacken..
1 |
ook met deze constructie? want zo doe ik het altijd... en als je dan gaat klooien met ; en komma's etc dann loopt ie stuk op php code.. lijkt mij...:quote:Op zondag 26 februari 2006 22:25 schreef SuperRembo het volgende:
[..]
Daar zou ik niet al te zeker van zijn.
Neem een simpele update al deze:
[ code verwijderd ]
Als je dan in het form bij myvalue invult: All Your Quotes Are Belong To Us';--
Dan staat die tekst opeens op ELKE regel in de tabel. Zonder MySQL foutmelding.
1 2 3 | $ids = $_POST[id]; $sql = "UPDATE mytable SET myvalue='$value' WHERE id=$ids"; |
nou vreemd ik heb meerdere scrippie's gemaakt waar ik toch op die manier allerlei haakjes, puntkomma's en quotes tegenhield...quote:Op zondag 26 februari 2006 23:51 schreef SuperRembo het volgende:
Nee, dat is voor php geen probleem. Dan werkt mijn "hack" nog steeds.
1 2 3 4 5 6 7 8 9 | $fp = fopen($filename, "r") or die ("Couldn't open $filename"); while (!feof($fp)) { $line = fgets($fp, 180); //explode alle elementen tot regels in de array $info_array = explode(" | ",addslashes($line)); ?> |
1 2 3 4 5 6 7 8 9 10 11 | php $fp = fopen($filename, "r") or die ("Couldn't open $filename"); while (!feof($fp)) { $line = fgets($fp, 180); //explode alle elementen tot regels in de array $info_array[] = explode(" | ",addslashes($line)); ?> |
1 2 3 4 5 6 7 8 9 | $file = file("blaat.txt"); $array = implode(" ", $file); $info_array = explode(" | ",addslashes($array)); print "<pre>"; print_r($info_array); print "</pre>"; ?> |
1 2 3 4 5 6 7 8 9 10 11 12 | ( [0] => USEDB [1] => localhost [2] => db [3] => ww [4] => naam [5] => INSERT INTO evenementen (naam, datum, folder) values ( \'\" . $_SESSION[\'albumhtmlinfo\'][\'titel\'] . \"\', \'\" . $_SESSION[\'datum\'] . \"\', \'\" . $_SESSION[\'albumhtmlinfo\'][\'filename\'] . \"\' ) | ) |
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 | $bericht = $_POST["bericht"]; $van = $_POST["van"]; $to = $_POST["aan"]; $subject = $_POST["onderwerp"]; $message = ' <html> <head> <title>'.$subject.'</title> <STYLE TYPE="text/css"> <!-- body { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; } --> </STYLE> </head> <body> '.$bericht.' </body> </html> '; $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/html; charset=iso-8859-1\r\n"; $headers .= "To: <".$to.">\r\n"; $headers .= "From: <".$van.">\r\n"; mail($to, $subject, $message, $headers); echo 'Verzonden aan: '.$to.'<br>Vanaf: '.$van.'<br>Bericht:<br>'.$message.'<br>'; ?> |
Het enige wat ik kan bedenken is dat je een mailadres mailt, welke ook ok nog doorgestuurd wordt naar een ander mail adres. Je script verstuurt in ieder geval maar 1 mail.quote:Op maandag 27 februari 2006 14:37 schreef Toeps het volgende:
Om de geblokkeerde uitgaande mailpoort op school te omzeilen en omdat ik soms nog wel eens dringend moet mailen, heb ik een leuk mail scriptje gemaakt. Zo iets had ik al eerder gedaan voor een bestelformulier.
Bij mijn laatste prutswerkje kun je zelf de afzender en geadresseerde invullen. Misbruikgevoelig, maar alleen voor eigen gebruik.
Nou is het enige probleem: Ik krijg alle mail 2x!
[ code verwijderd ]
Wie helpt?
Nope, hij wordt gewoon aangeroepen vanuit mail.htm, een standaard formuliertje. Raar, dat bestelformulier wat ik eerst had gemaakt stuurt wel maar een keer. Het enige verschil is dat ik daarbij de mailadressen al had ingevuld.quote:Op maandag 27 februari 2006 15:04 schreef ViPeRII het volgende:
Toeps,
Ik kan geen fouten ontdekken in je script. wordt echt maar 1x aangeroeken zover ik zie.
je opent hem toch ook niet tochvallig 2x?
Ja dat is dubbel jaquote:Op maandag 27 februari 2006 15:07 schreef Toeps het volgende:
[..]
Nope, hij wordt gewoon aangeroepen vanuit mail.htm, een standaard formuliertje. Raar, dat bestelformulier wat ik eerst had gemaakt stuurt wel maar een keer. Het enige verschil is dat ik daarbij de mailadressen al had ingevuld.
Misschien is het dubbel om het zowel in $to als in de header te zetten?
1 2 3 4 5 | $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/html; charset=iso-8859-1\r\n"; $headers .= "To: <".$tom.">\r\n"; $headers .= "From: <".$van.">\r\n"; |
Als ik hem met fopen inlees krijg ik dit te zien:quote:Op dinsdag 28 februari 2006 15:09 schreef ikke_ook het volgende:
door die html-file in te lezen met fopen en hem dan als string te behandelen?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | { case 'bla': blablabla; break; case 'bli': bliblibli; break; case 'blo': blobloblo; break; } |
1 2 3 4 5 6 7 | if (isset($_POST['submit'])) { //form verwerking } else { //print form } ?> |
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 | $url = str_replace('/CMS/nieuwepagina.php?pagina=', '', $url); switch ($url) { case "nieuw": echo "<form action=nieuwepagina.php?pagina=maaknieuw method=post>"; echo "<table width=400 border=0>"; echo "<tr><td width=200>Paginanaam:</td>"; echo "<td>Waarde:</td></tr>"; echo "<tr><td width=200>Menunaam:</td>\r\n"; echo "<td><input name=naam type=text value=></td>\r\n"; echo "<tr><td width=200>Link naar pagina:</td>\r\n"; echo "<td><input name=naam type=text value=></td>\r\n"; echo "<tr><td width=200>Titel van pagina:</td>\r\n"; echo "<td><input name=naam type=text value=></td>\r\n"; echo "<tr><td width=200>Content:</td>\r\n"; echo "<td><input name=naam type=text value=></td>\r\n"; echo "<tr><td width=200>Hoofdmenu:</td>\r\n"; echo "<td><input name=naam type=text value=></td>\r\n"; echo "</table><br />"; echo "<input name=reset type=reset value=Opnieuw />"; echo "<input name=Opslaan type=submit value=Opslaan />"; echo "</form>"; break; case "maaknieuw": echo "wijzig"; break; } |
? serieuse vraag?quote:Op dinsdag 28 februari 2006 15:57 schreef Knucklezz het volgende:
$_GET['pagina'] ?? :p hoe werkt dat nou weer
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 | include('header.php'); mysql_connect("localhost", "username", "wwoord"); mysql_select_db("tabel"); $url = $_SERVER['REQUEST_URI']; $url = str_replace('/CMS/nieuwepagina.php?pagina=', '', $url); switch ($url) { case "nieuw": ?> <form action="nieuwepagina.php?pagina=maaknieuw" method=post> <table width=400 border=0> <tr> <td width=200>Paginanaam:</td> <td>Waarde:</td><br /> </tr> <tr> <td width=200>Menunaam:</td> <td><input name=menunaam type=text value=""></td> </tr> <tr> <td width=200>Link naar pagina:</td> <td><input name=menulink type=text value=></td> </tr> <tr> <td width=200>Titel van pagina:</td> <td><input name=titel type=text value=></td> </tr> <tr> <td width=200>Content:</td> <td><input name=content type=text value=></td> </tr> <tr> <td width=200>Hoofdmenu:</td> <td><input name=zichtbaar type=text value=></td> </tr> </table><br /> <input name=reset type=reset value="Opnieuw" /> <input name=submit type=submit value="Opslaan" /> </form> <?php break; case "maaknieuw": if (isset($_POST['submit'])) { $query = "INSERT INTO TblMenu (menunaam, menulink, titel, content, zichtbaar) values ('$menunaam', '$menulink', '$titel', '$content', '$zichtbaar')"; mysql_query($query) or die (mysql_error()); break; } else { echo "form ni opgestuurd"; } } include('footer.php'); ?> |
Zoals the_disheaver dus al zei, je kan alles met $url er uit halen, en van je switch-statementquote:
1 |
In MySQL 3/4 heb je SHOW TABLES en SHOW COLUMNS. In versie 5 heb je de INFORMATION_SCHEMA tabellen.quote:Op dinsdag 28 februari 2006 22:42 schreef Desdinova het volgende:
kan ik bepaalde queries opstellen zodat ik een treestructuur van mijn database terugkrijg? eventueel met kolomtypes dr bij?
quote:<meta http-equiv="refresh" content="2;url=http://webdesign.about.com/">
The only difference is in the content attribute.
content="2;url=http://webdesign.about.com"
The number is the time, in seconds, until the page should be redirected. Then, separated by a semi-colon (;) is the URL that should be loaded.
Je kunt PHP's header()-functie alleen gebruiken als er nog niks op de huidige pagina is getoond. Zodra je iets geprint hebt (in dit geval de gewijzigd-tekst), levert de header()-functie een foutmelding op. Volgens de PHP-manual kun je dit omzeilen met ob_start() en ob_end_flush(), maar eerlijk gezegd vind ik het doorsturen van iemand naar een andere pagina sowieso meer een client-side iets en zou ik het dus niet met PHP aanpakken.quote:Op woensdag 1 maart 2006 11:36 schreef ikke_ook het volgende:
dat kun je met javascript doen, als hij na een aantal seconden moet worden doorgestuurd, of met php Header als je hem direct wil doorsturen.
eerst bericht gewijzigd laten zien en dan na een aantal seconden trg naar de pagina waar je dingen kan aanklikken om te wijzigenquote:Op woensdag 1 maart 2006 11:36 schreef ikke_ook het volgende:
dat kun je met javascript doen, als hij na een aantal seconden moet worden doorgestuurd, of met php Header als je hem direct wil doorsturen. Dus moet hij eerst een paar seconden "bericht gewijzigd" laten zien of direct terug naar een bepaalde pagina?
Dat zeg ik tochquote:Op woensdag 1 maart 2006 11:48 schreef Tijn het volgende:
[..]
Je kunt met PHP's header()-functie alleen gebruiken als er nog niks op de huidige pagina is getoond. Zodra je iets geprint hebt (in dit geval de gewijzigd-tekst), levert de header()-functie een foutmelding op. Volgens de PHP-manual kun je dit omzeilen met ob_start() en ob_end_flush(), maar eerlijk gezegd vind ik het doorsturen van iemand naar een andere pagina sowieso meer een client-side iets en zou ik het dus niet met PHP aanpakken.
Oh juist. Nou dan zijn we het eensquote:Op woensdag 1 maart 2006 11:50 schreef ikke_ook het volgende:
[..]
Dat zeg ik tochJavascript als je eerst iets wil tonen. OF php als je dat niet wil
kheb mn header in een include staan.. is dat dan geen probleem ?quote:Op woensdag 1 maart 2006 11:50 schreef ikke_ook het volgende:
[..]
@Knucklezz
probeer die meta tag eens die ik hierboven heb gepost.
Uhhh wat bedoel je precies?Het gaat erom hoe je header bij de gebruiker aankomt..niet hoe je hem samenstelt op de server..quote:Op woensdag 1 maart 2006 11:55 schreef Knucklezz het volgende:
[..]
kheb mn header in een include staan.. is dat dan geen probleem ?![]()
1 |
maar hij moet niet op elke pagina refreshenquote:Op woensdag 1 maart 2006 12:13 schreef ikke_ook het volgende:
ja klopt!
1 2 3 | of <textarea>hier de text die in het vakje moet staan</textarea> |
1 |
1 |
1 |
1 2 3 | <td><input name="menunaam" type="text" value="<?php echo mysql_result($result,$i,'menunaam');?>" /></td>\r\n <?php |
1 |
dat werkt jaquote:Op woensdag 1 maart 2006 14:52 schreef the_disheaver het volgende:
of:
[ code verwijderd ]
of
[ code verwijderd ]
of:
[ code verwijderd ]
uitleg: je hebt geen aanhalingstekens voor en na de value-waarde. Alleen een aanhalingsteken welke het einde van de echo weergeeft.
Dus of enkele aanhalingstekens waardoor je de dubbele niet te hoeft escapen, of dubbele aanhalingstekens, en de dubbele aanhalingstekens voor het HTML escapen. Of alleen voor de echoén van de value php gebruik, de rest in normale html (zonder te echo'en)
1 |
1 2 | extension=php_mysql.dll <- enabled |
1 2 3 | {elks teken incl newline} </div> |
1 |
1 2 3 | <div id="MCaddtion"> |
Dus /ene regel.*volgende regel/s werkt over meerdere regels.quote:s (PCRE_DOTALL)
If this modifier is set, a dot metacharacter in the pattern matches all characters, including newlines. Without it, newlines are excluded. This modifier is equivalent to Perl's /s modifier. A negative class such as [^a] always matches a newline character, independent of the setting of this modifier.
quote:Op dinsdag 28 februari 2006 14:52 schreef user931989 het volgende:
Ik heb een HTML-documentje, dat uit een rss-feed geparsed wordt.
In die rss-feed staat echter voor elke ' en " een backslash.
Nu include ik dat html-document in een php, maar het lukt mij niet om die backslashes weg te krijgen.
Normaal zou ik dit met str_replace doen, maar door die include lukt dat niet.
Hoe kan dit wel?
quote:Op dinsdag 28 februari 2006 15:09 schreef ikke_ook het volgende:
door die html-file in te lezen met fopen en hem dan als string te behandelen?
Kan niemand mij helpen?quote:Op dinsdag 28 februari 2006 15:17 schreef user931989 het volgende:
Als ik hem met fopen inlees krijg ik dit te zien:
Resource id #2
misschien komt dat doordat het in hetzelfde php-document ook verwerkt wordt
file_get_contentsquote:Op woensdag 1 maart 2006 20:08 schreef user931989 het volgende:
Kan niemand mij helpen?
helemaal afhankelijk van wat je doet...quote:Op donderdag 2 maart 2006 02:26 schreef Tijn het volgende:
Wat is een beetje normale tijd waarin een script wordt uitgevoerd?
Of beter gezegd, als een script er langer dan hoeveel micro/milliseconden over doet, moet ik de boel nodig eens optimaliseren?
Nee.quote:Op donderdag 2 maart 2006 14:46 schreef blieblie het volgende:
ff domme vraag, maar waarom worden er in de bestandsnamen van includes de subextensie "inc" gebruikt. Dus dat je krijgt config.inc.php ipv. config.php .
Zitten daar meer voordelen aan dan alleen het kunnen herkennen van includes aan de bestandsnaam?
Dat hangt af van de machine waarop je script draait, de snelheid van de databaseserver waarmee je een verbinding hebt, en zo nog een paar honderd variabelen. Als je script bij normaal gebruik (geen zware zoekactie oid) merkbaar traag is (~ >100 ms) dan wordt het misschien tijd om uit te zoeken hoe dat komt.quote:Op donderdag 2 maart 2006 02:26 schreef Tijn het volgende:
Wat is een beetje normale tijd waarin een script wordt uitgevoerd?
Of beter gezegd, als een script er langer dan hoeveel micro/milliseconden over doet, moet ik de boel nodig eens optimaliseren?
Ben nog totaal niet thuis in PHP maar het lijkt mij dat dat soort dingen gewoon van de PC van de gebruiker afhangt? Op jouw AMD 3000+ zal het ws wel sneller dan 7ms zijn maar als je nog op een 1000+ draait...quote:Op donderdag 2 maart 2006 17:29 schreef Tijn het volgende:
Ik snap dat het van vanalles afhangt, maar ik heb werkelijk geen idee wat "normaal" is. Ik heb een openingpagina gemaakt met 2 queries en wat for-lussen die zichzelf in 7 ms op het scherm zet. Ik vroeg me af of dat redelijk is. Maar ik begrijp dat je pas bij merkbare traagheid actie moet ondernemen en dat er geen algemene regel is in de trant van "als je pagina niet binnen 10 ms rendert is er wat mis" ofzo.
Nee. PHP draait op de server.quote:Op donderdag 2 maart 2006 17:33 schreef DaFan het volgende:
[..]
Ben nog totaal niet thuis in PHP maar het lijkt mij dat dat soort dingen gewoon van de PC van de gebruiker afhangt? Op jouw AMD 3000+ zal het ws wel sneller dan 7ms duren maar als je nog op een 1000+ draait...
Foutmelding die ik dus krijg is:quote:Op woensdag 1 maart 2006 18:35 schreef DaFan het volgende:
Korte vraag, kheb de FAQs ed al doorgelezen en het idee is me duidelijk, maar ik krijg het niet aan de praat.
Het gaat om het áan de praat krijgen van MySQL functions in PHP 5 (Dit).
Nu heb ik gevolgd wat er allemaal staat, maar mysql_connect weigert te werken.
Voor de goede orde, mijn map waar php is geinstalleerd is:
1 C:/php
php.ini staat in de WINDOWS map op de C:/schijf en daar zijn de volgende dingen gewijzigd:
1
2extension_dir = "C:\php"
extension=php_mysql.dll <- enabled
De libmysql.dll is toegevoegd én aan de Windows/system map en ik heb via de Omgevingsvariabelen C:/php als PATH aangegeven.
Kan iemand mij simpel en stap voor stap uitleggen wat er moet gebeuren binnen PHP 5 om MySQL functions aan de praat te krijgen?
Bedankt, en excuses dat ik er niet uitkom
1 |
15x ongeveerquote:Op donderdag 2 maart 2006 17:56 schreef JeRa het volgende:
@DaFan
Don't slap me with a trout, maar heb je de Apache webserver opnieuw gestart?
Waarom download je geen compleet pakket zoals bijvoorbeeld appserv? Dan hoef je niets te configureren. Installeren en draaien maarquote:
Heu das wel verdomde handig. Als je die installed werken ze dan direct met elkaar ? Dus PHP in Apache en MySQL zonder dat je ini's hoeft te verschuiven enzo?quote:Op donderdag 2 maart 2006 18:39 schreef Swetsenegger het volgende:
[..]
Waarom download je geen compleet pakket zoals bijvoorbeeld appserv? Dan hoef je niets te configureren. Installeren en draaien maar
Jaquote:Op donderdag 2 maart 2006 18:43 schreef DaFan het volgende:
[..]
Heu das wel verdomde handig. Als je die installed werken ze dan direct met elkaar ? Dus PHP in Apache en MySQL zonder dat je ini's hoeft te verschuiven enzo?
1 2 3 4 5 6 | $query="SELECT * FROM produkten WHERE product_menu=".$_GET['id']." ORDER BY first_price ASC, product_id DESC"; ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $query="SELECT oc.number, p.articelcode, p.name, oc.giftwrap, p.first_price, p.second_price FROM orders o INNER JOIN order_content oc ON oc.order_id = o.order_id INNER JOIN produkten p ON p.product_id = oc.product_id INNER JOIN users u ON u.user_id = o.user_id WHERE o.order_id =".$_GET['order']." && u.name='".$_SESSION['name']."'"; ?> |
php.ini?quote:Op donderdag 2 maart 2006 21:02 schreef H4ze het volgende:
Ik zoek me een ongeluk, maar waar kan ik in godsnaam het maximale aantal connecties van mysql aanpassen?Op internet vind ik steeds /etc/my.cnf, maar ik ben geloof ik hardstikke blind....
Ik ben iets aan 't maken met mysql en JSP/Servlets, dus denk niet dat de php.ini er veel mee te maken heeft. Thnx voor 't snelle antwoord iig. Maar je moet toch gewoon via de mysql commandline iets kunnen opgeven?quote:
Nee dan heeft php er niets mee te makenquote:Op donderdag 2 maart 2006 21:08 schreef H4ze het volgende:
[..]
Ik ben iets aan 't maken met mysql en JSP/Servlets, dus denk niet dat de php.ini er veel mee te maken heeft. Thnx voor 't snelle antwoord iig. Maar je moet toch gewoon via de mysql commandline iets kunnen opgeven?
jep al gelezenquote:Op donderdag 2 maart 2006 21:11 schreef Swetsenegger het volgende:
[..]
Nee dan heeft php er niets mee te maken
http://dev.mysql.com/doc/refman/4.1/en/too-many-connections.html Staat hier wat bij?
en als je my.cnf file gewoon opent?quote:Op donderdag 2 maart 2006 21:12 schreef H4ze het volgende:
[..]
jep al gelezen![]()
Stond in de reacties wel 1 iets bij:
You can increase this value in main config file (e.g., /etc/my.cnf) using this syntax:
[mysqld]
set-variable=max_connections=250
Dus ik heb in de commandline '--set-variable=max_connections=250'. Hij gaf dan geen error ofzo, maar ook niet dat het nu veranderd was....
Nou, dan weet ik niet wat je doet, want appserv is 3 keer next klikken, je files in de www directory zetten en openen met localhost/filename.phpquote:Op donderdag 2 maart 2006 21:18 schreef DaFan het volgende:
Leuk en aardig dat AppServ maar het werkt nog steeds niet. En nu kan ik totaal niet vinden waar ik in mn MySQL command kan komen. MySQLAdmin opent in DOS en is in 1 sec weer weg
Dus nu kan ik helemaal niks meer
Eigenlijk alles waar op gefilterd of gesorteerd wordt. Dus de kolommen die in de join condities worden gebruikt, maar ook die in de where staan. Als er geen idex voor bestaat dan moet de hele tabel gescanned worden.quote:Op donderdag 2 maart 2006 21:01 schreef Swetsenegger het volgende:
Mijn boerenverstand zegt van alle FK's in alle tabellen dus orders.user_id, order_content.order_id en order_content.product_id.
Maar... klopt dat wel? En kan iemand ook helder onder woorden brengen waarom?
Oke, dus als stelregel kan je zeggen dat je altijd(?) indices moet maken op foreign keys EN op kolommen welke (vaak) in where statements worden gebruikt, correct?quote:Op donderdag 2 maart 2006 21:36 schreef SuperRembo het volgende:
[..]
Eigenlijk alles waar op gefilterd of gesorteerd wordt. Dus de kolommen die in de join condities worden gebruikt, maar ook die in de where staan. Als er geen idex voor bestaat dan moet de hele tabel gescanned worden.
Niet bij álle foreign keys, maar het is een goede vuistregel ja. Voorbeeldje waarbij het niet moet; als je voor een fotoalbum drie groottes van een bepaalde foto hebt kun je die drie groottes in één record laten verwijzen naar drie foreign records, maar daar hoeft in principe helemaal geen index op omdat je daar nooit op selecteert of sorteert.quote:Op donderdag 2 maart 2006 21:41 schreef Swetsenegger het volgende:
[..]
Oke, dus als stelregel kan je zeggen dat je altijd(?) indices moet maken op foreign keys EN op kolommen welke (vaak) in where statements worden gebruikt, correct?
In álle gevallen worden INSERTs trager door indices, en als het goed is kan MySQL zelf prima bepalen of het een index gebruikt of nietquote:Ik las namelijk op mysql.org dat het in sommige gevallen trager kan worden door indices.
Nee ok, alleen op kolommen waarop je selecteert of sorteert is een betere benaming.quote:Op donderdag 2 maart 2006 21:55 schreef JeRa het volgende:
[..]
Niet bij álle foreign keys, maar het is een goede vuistregel ja. Voorbeeldje waarbij het niet moet; als je voor een fotoalbum drie groottes van een bepaalde foto hebt kun je die drie groottes in één record laten verwijzen naar drie foreign records, maar daar hoeft in principe helemaal geen index op omdat je daar nooit op selecteert of sorteert.
Van mysql.org:quote:In álle gevallen worden INSERTs trager door indices, en als het goed is kan MySQL zelf prima bepalen of het een index gebruikt of nietdus wat dat betreft zal het niet trager worden.
MySQL staat nou niet echt goed bekend om z'n query optimalisatie kwaliteiten.quote:Op donderdag 2 maart 2006 21:55 schreef JeRa het volgende:
en als het goed is kan MySQL zelf prima bepalen of het een index gebruikt of niet
In jouw voorbeeld zie ik één query die alle rows aandoet en die sorteert op first_price; die zou je prima kunnen indexeren.quote:Op donderdag 2 maart 2006 22:05 schreef Swetsenegger het volgende:
Maar ja, in bovenstaand voorbeeld heb ik regelmatig ALLE product rows nodig. Zijn indexes dan aan te raden of niet?
Dat weet ik, ik ga er altijd vanuit dat ze dat in de toekomst nog kunnen verbeteren terwijl de queries hetzelfde blijven. Als het een probleem wordt schakel ik over op een andere DBMS die dat wel kan bepalenquote:Op donderdag 2 maart 2006 22:10 schreef SuperRembo het volgende:
[..]
MySQL staat nou niet echt goed bekend om z'n query optimalisatie kwaliteiten.
First price heb ik inderdaad nu geindexeerd.quote:Op donderdag 2 maart 2006 23:14 schreef JeRa het volgende:
[..]
In jouw voorbeeld zie ik één query die alle rows aandoet en die sorteert op first_price; die zou je prima kunnen indexeren.
[..]
Dat weet ik, ik ga er altijd vanuit dat ze dat in de toekomst nog kunnen verbeteren terwijl de queries hetzelfde blijven. Als het een probleem wordt schakel ik over op een andere DBMS die dat wel kan bepalen
Laat eens zien?quote:Op vrijdag 3 maart 2006 11:04 schreef Swetsenegger het volgende:
Ik heb een mooie query van Super Rembo, welke 3 laatste records per catagorie uit de database trekt.
Alleen duurt deze query tussen de 15(!) en 0.0003 seconden. De eerste keer doet hij er meestal heel lang over, de tweede keer korter.
Ik mag toch aannemen dat dat aan de hoster ligt?
De Query?quote:
1 2 3 4 5 6 7 | FROM genre g INNER JOIN ad a ON a.genre = g.genre_id INNER JOIN ad a2 ON a2.genre = g.genre_id AND a.ad_id <= a2.ad_id GROUP BY a.ad_id HAVING COUNT(a2.ad_id) <= 3 ORDER BY g.genre_id, a.ad_id DESC |
Wat anders?quote:
Dit is een mooi voorbeeld van een query die géén indices gebruikt maar de tweede keer snel wordt door het gebruik van de query cache op de server. Ik zie zo even niet waarom hij ze niet gebruikt.quote:Op vrijdag 3 maart 2006 11:04 schreef Swetsenegger het volgende:
Alleen duurt deze query tussen de 15(!) en 0.0003 seconden. De eerste keer doet hij er meestal heel lang over, de tweede keer korter.
Ja, als ik de GROUP BY aanpas naar bv a.title is hij de eerste keer weer traag.quote:Op vrijdag 3 maart 2006 14:31 schreef JeRa het volgende:
[..]
Dit is een mooi voorbeeld van een query die géén indices gebruikt maar de tweede keer snel wordt door het gebruik van de query cache op de server. Ik zie zo even niet waarom hij ze niet gebruikt.
Als het goed is zou je door iets te veranderen in één van de tabellen de query uit de query cache kunnen halen, is hij dan weer zo traag?
ongeveer 2000 records in de ad table, 19 in de genre tabel en een stuk of 100 in de user tabel. ALlemaal niet erg spannendquote:Op vrijdag 3 maart 2006 14:48 schreef Scorpie het volgende:
Hm ik zie zo 1,2,3 niet in waarom hij zo lang moet laden...heel apart. Hoeveel data bevatten de tabellen?
Om voor testing purposes de query cache eventjes te omzeilen zou je SQL_NO_CACHE kunnen gebruiken, zie deze pagina.quote:Op vrijdag 3 maart 2006 14:49 schreef Swetsenegger het volgende:
[..]
Ja, als ik de GROUP BY aanpas naar bv a.title is hij de eerste keer weer traag.
Ik vreesde ook al dat de query daadwerkelijk traag is en de tweede keer uit cache komt
Je GROUP BY is trouwens niet helemaal goed. Alle velden die je in de SELECT gebruikt en die je niet in een aggregate functie hebt staan, moeten in de GROUP BY worden opgenomen. MySQL accepteerd het wel als je dat niet doet, maar dat kan tot onvoorspelbare resultaten leiden. Zo zou het moeten:quote:Op vrijdag 3 maart 2006 11:13 schreef Swetsenegger het volgende:
[..]
De Query?
[ code verwijderd ]
-edit-
indices op a.ad_id (PK), a.genre, g.genre_id (PK)
1 |
1 |
De aggregate functie is... het optel gebeuren?quote:Op vrijdag 3 maart 2006 15:40 schreef SuperRembo het volgende:
[..]
Je GROUP BY is trouwens niet helemaal goed. Alle velden die je in de SELECT gebruikt en die je niet in een aggregate functie hebt staan, moeten in de GROUP BY worden opgenomen. MySQL accepteerd het wel als je dat niet doet, maar dat kan tot onvoorspelbare resultaten leiden. Zo zou het moeten:
[ code verwijderd ]
Eventueel zou je alleen de PK's op kunnen nemen. Dan zijn de resultaten voorspelbaar maar misschien is het ietsje sneller
[ code verwijderd ]
Hier begrijp ik niets van.quote:Op vrijdag 3 maart 2006 17:23 schreef SuperRembo het volgende:
Ik weet niet in welke volgorde MySQL die joins uitvoert. Met een beetje pech begint MySQL met de join van ad op ad. Die geeft 2000 * 2000 / 2 = 2000000 rows.
Dat dacht ik ook.quote:Op vrijdag 3 maart 2006 18:06 schreef JeRa het volgende:
Zelfs dan zou het niet zó lang mogen duren, toch? Een query op een tabel met 10.000 rows die ik op zichzelf laat joinen is in een fractie van een seconde gedaan.
1 2 3 4 5 | FROM ad WHERE genre=1 ORDER BY ad_id DESC LIMIT 3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | $queryMain="SELECT * FROM genre"; $resultMain=mysql_query($queryMain); while($rowMain=mysql_fetch_assoc($resultMain)){ $querySub="SELECT title, ad_id, image, price FROM ad WHERE genre=".$rowMain['genre_id']." ORDER BY ad_id DESC LIMIT 3"; $resultSub=mysql_query($querySub); while($rowSub=mysql_fetch_assoc($resultSub)){ // doe iets } } ?> |
Ik moet toe geven dat het stiekum toch een draak van een query is. Ik heb ff een testje gedraaid met een tabel met 10000 rows... daarmee legde MySQL m'n pc 16 minuten plat. MSSQL deed het met dezelfde data in 42 seconden.quote:Op vrijdag 3 maart 2006 19:28 schreef Swetsenegger het volgende:
Het gadverdamme ik haat een frontpage waarop 20 queries gedraaid worden. Ik vond SuperRembo's oplossing juist zo'n geile query
Maar hij zag er wel heel cool uit en LIJKT veel sneller dan 20 queriesquote:Op vrijdag 3 maart 2006 21:18 schreef SuperRembo het volgende:
[..]
Ik moet toe geven dat het stiekum toch een draak van een query is. Ik heb ff een testje gedraaid met een tabel met 10000 rows... daarmee legde MySQL m'n pc 16 minuten plat. MSSQL deed het met dezelfde data in 42 seconden.
En wat geeft de EXPLAIN van die query? Dat levert meestal wel info waarmee je kunt kijken wat er lang duurt.quote:Op vrijdag 3 maart 2006 11:13 schreef Swetsenegger het volgende:
[..]
De Query?
[ code verwijderd ]
-edit-
indices op a.ad_id (PK), a.genre, g.genre_id (PK)
Of ik begrijp dat explain gewoon niet, of ik doe wat fout.quote:Op vrijdag 3 maart 2006 21:34 schreef Light het volgende:
[..]
En wat geeft de EXPLAIN van die query? Dat levert meestal wel info waarmee je kunt kijken wat er lang duurt.
1 2 3 4 | g ALL PRIMARY NULL NULL NULL 19 Using temporary; Using filesort a ref PRIMARY,genre genre 4 g.genre_id 24 Using where a2 ref PRIMARY,genre genre 4 g.genre_id 24 Using where |
Hij is lastigquote:Op vrijdag 3 maart 2006 21:57 schreef Swetsenegger het volgende:
[..]
Of ik begrijp dat explain gewoon niet, of ik doe wat fout.
Anyway, dit komt eruit
[ code verwijderd ]
quote:Op zaterdag 4 maart 2006 10:49 schreef Light het volgende:
[..]
Hij is lastig
Maar als je nou de key genre in de tabel ad eens aanpast er daar ad_id als tweede index bij zet, wordt het dan sneller?
MySQL heeft de leuke eigenschap dat het maar 1 key (index dus) kan gebruiken.
Ja, ik bedoelde dan ook een index op meerdere kolommen, namelijk genre en ad_id.quote:Op zaterdag 4 maart 2006 11:04 schreef Swetsenegger het volgende:
[..]
ad_id is de PK, die is toch al index?
dus de index op genre zou het juist trager maken ipv sneller?quote:Op zaterdag 4 maart 2006 11:14 schreef Light het volgende:
[..]
Ja, ik bedoelde dan ook een index op meerdere kolommen, namelijk genre en ad_id.
Ik bedoelde dus een index op (genre, ad_id). Maar je zou ook de index op genre eens weg kunnen halen om te kijken of dat effect heeft. Ik vermoed dat het wel merkbaar is, omdat er dan een index gebruikt kan worden bij de group by. Lijkt mij.quote:Op zaterdag 4 maart 2006 11:32 schreef Swetsenegger het volgende:
[..]
dus de index op genre zou het juist trager maken ipv sneller?
Ah zoquote:Op zaterdag 4 maart 2006 11:38 schreef Light het volgende:
[..]
Ik bedoelde dus een index op (genre, ad_id). Maar je zou ook de index op genre eens weg kunnen halen om te kijken of dat effect heeft. Ik vermoed dat het wel merkbaar is, omdat er dan een index gebruikt kan worden bij de group by. Lijkt mij.
Als ik hier lokaal ga testen dan is die query nog best snel. Maar ik heb natuurlijk geeen 2000 rows in een ad tabelquote:Op zaterdag 4 maart 2006 12:14 schreef Swetsenegger het volgende:
[..]
Ah zo
Nee, dat heeft geen effect want ik ben juist met indexes gaan klooien omdat die query zo traag was
Ik heb nu dus die query herschreven zoals op de vorige pagina, en ondanks dat ik dus 20 queries draai, vliegt dit het scherm op.
Mooi is het niet, effectief wel. Daarom vroeg ik al vanaf welke MySQL versie subqueries ondersteunt worden (4.1) maar er draait 4.0 op de server.
Dat klopt, de query was in eerste instantie ook snel genoeg. Ik was er ook zeer content mee.quote:Op zaterdag 4 maart 2006 12:41 schreef Light het volgende:
[..]
Als ik hier lokaal ga testen dan is die query nog best snel. Maar ik heb natuurlijk geeen 2000 rows in een ad tabel
Ik heb hier nog een tabel kunnen vinden met 2000+ rows, met items in verschillende groepen. En daar kan ik best per groep de laatste 3 items uithalen met jouw query, kost maximaal ongeveer 0.02 seconden (op mijn pc).quote:Op zaterdag 4 maart 2006 12:50 schreef Swetsenegger het volgende:
[..]
Dat klopt, de query was in eerste instantie ook snel genoeg. Ik was er ook zeer content mee.
Maar als ik SuperRembo's reken sommetje volg, neemt met een verdubbeling van het aantal advertenties het aantal rijen van de query met een factor 4 toe!
Online was de query in phpmyadmin 15 seconden. Lokaal 9 seconden
Thnx! dat was de oplossingquote:Op zaterdag 4 maart 2006 06:44 schreef JeRa het volgende:
De geescapede newlines (\n) werken over het algemeen alleen als je ze in een string zet met dubbele quotes (aanhalingstekens) eromheen, dus "\n" of "blaat\nblaat". Heb je ze toevallig in single quoted strings gezet? ( '\n' )
Misschien dat het dan aan de SQL versie ligt? Of misschien aan de join met een andere tabel?quote:Op zaterdag 4 maart 2006 13:04 schreef Light het volgende:
[..]
Ik heb hier nog een tabel kunnen vinden met 2000+ rows, met items in verschillende groepen. En daar kan ik best per groep de laatste 3 items uithalen met jouw query, kost maximaal ongeveer 0.02 seconden (op mijn pc).
Ik heb maar een simpele amd64 3000+ met 1GB.quote:Op zaterdag 4 maart 2006 13:18 schreef Swetsenegger het volgende:
[..]
Misschien dat het dan aan de SQL versie ligt? Of misschien aan de join met een andere tabel?
Mijn PC is namelijk niet de traagste (AMD64 3200+, 1GB Kingston HyperX)
En zowel online, als lokaal als bij SuperRembo is hij rete traag
Is goedquote:Ik wil je wel een dump van de tabellen mailen.
Drom, dus ik begrijp niet waarom de query bij mij veel trager zou zijnquote:Op zaterdag 4 maart 2006 13:31 schreef Light het volgende:
[..]
Ik heb maar een simpele amd64 3000+ met 1GB.
komt zo een zippie aan. gewoon at fok punt en el?quote:Is goed
Da's wel de makkelijkstequote:Op zaterdag 4 maart 2006 13:33 schreef Swetsenegger het volgende:
komt zo een zippie aan. gewoon at fok punt en el?
Je hebt mail terugquote:Op zaterdag 4 maart 2006 13:33 schreef Swetsenegger het volgende:
-edit- hij was nu sneller dan gisteren (misschien draaide mijn virusscanner ofzo) maar nog steeds goed voor bijna 4 seconden.
0.4 seconden!quote:Op zaterdag 4 maart 2006 14:19 schreef Light het volgende:
[..]
Je hebt mail terugEn het kan nog sneller
1 |
Je maakt een index, die noem je genre, en die gebruikt 2 velden, namelijk genre en ad_id.quote:Op zaterdag 4 maart 2006 14:28 schreef Swetsenegger het volgende:
[..]
0.4 seconden!
[ code verwijderd ]
Dit begrijp ik niet. Je zet een index op genre, maar die gebruikt twee velden ofzo?
1 |
Ah ok, het is een naampje.quote:Op zaterdag 4 maart 2006 14:30 schreef Light het volgende:
[..]
Je maakt een index, die noem je genre, en die gebruikt 2 velden, namelijk genre en ad_id.
Oh tof, die kende ik nietquote:Op zaterdag 4 maart 2006 12:14 schreef Swetsenegger het volgende:
[..]
Speciaal voor Tijn trouwens, kon je deze al?:
http://www.apple.com/downloads/macosx/unix_open_source/mamp.html
Ik ga denk ik ook maar zoeken naar een xserve
Alleen kom ik nergens een betaalbare xserve tegen.quote:Op zaterdag 4 maart 2006 20:25 schreef Tijn het volgende:
[..]
Oh tof, die kende ik nietMaar ik had PHP en MySQL al zelf draaiende gekregen op m'n Mac, dus op zich heb je het ook niet echt nodig. PHP stond er zo op en MySQL was met de bijgeleverde handleiding ook wel te doen
Sowieso bestaat er ook een server-versie van Mac OS X waar dit trouwens volgens mij al allemaal standaard in zit. Dat is ook het standaard OS van een XServe, dus dat heb je echt binnen 5 seconden werkend.
1 2 3 4 5 6 7 8 9 | function like_esc($string) { $string = mysql_real_escape_string($string); $string = str_replace('%', '\%', $string); $string = str_replace('_', '\_', $string); return $string; } ?> |
1) Wat geeft hij dan wél terug?quote:Op zondag 5 maart 2006 22:47 schreef Swetsenegger het volgende:
Hmz, $search=like_esc($_POST['search']); geeft bij %zoek% niet \%zoek\% terug zoals ik verwacht?
Niet gestripslashed, macig quotes staat aanquote:Op zondag 5 maart 2006 22:50 schreef JeRa het volgende:
[..]
1) Wat geeft hij dan wél terug?
2) Heb je vantevoren alles gestripslashes()'ed indien magic_quotes_gpc aan staat?
Inderdaad, ik weet verder ook niet waarom hij niet voor je werktquote:Op zondag 5 maart 2006 23:05 schreef Swetsenegger het volgende:
[..]
Niet gestripslashed, macig quotes staat aan
Maar goed, dan verwacht ik nog steeds dat ik wel een geescaped % terug krijgt toch? of wordt die OOK geslashed door magic quotes?
1 2 3 4 5 6 7 8 9 10 11 12 | require('../connect.php'); function like_esc($string) { $string = mysql_real_escape_string($string); $string = str_replace('%', '\%', $string); $string = str_replace('_', '\_', $string); return $string; } ?> |
1 2 3 4 5 | if($_SERVER['REQUEST_METHOD']=='POST'){ $search=like_esc($_POST['search']); $query="SELECT whatever FROM tabel WHERE iets LIKE'%".$search."%' || iets_anders LIKE'%".$search."%' || compleet_anders LIKE'%".$search."%' ORDER BY d DESC"; ?> |
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |