quote:Op donderdag 1 februari 2007 19:18 schreef Chandler het volgende:
Ooit eens 1 progie mee gemaakt om de scherm mode naar mode 13 te veranderenmaaruh voor mij te hoog gegrepen, want je moet bij iedere JMP, MOV, AS etc etc etc gaan nadenken over wat het allemaal voor consequenties zou kunnen hebben..
Volgens mij kan dat hiermee:quote:Op vrijdag 2 februari 2007 01:01 schreef the_disheaver het volgende:
uhhh, kun je met php console opdrachten enzo uitvoeren?
ofwel: kun je met een linux, lamp en tex installatie latex bestandjes compileren?
Ach, dat is tegenwoordig standaard.quote:Op vrijdag 2 februari 2007 11:59 schreef super-muffin het volgende:
Ik heb al een simpele class geschreven
Zie alleen nog niet het echte voordeel er van in, maar het staat wel stoer, Object Georiënteerd Programmeren
UNIX_TIMESTAMP van de datum maken en dan de datum van gisteren als parameter in de where meegeven oid...quote:Op vrijdag 2 februari 2007 14:13 schreef Tijn het volgende:
Kan iemand me uitleggen hoe ik werk met DATETIME in MySQL? Ik heb een tabel gemaakt waarin elk record o.a. zo'n veld heeft, en daar staan dus dingen in als "2007-02-01 22:35:30". Prima.
Maar hoe krijg ik nu bv alle resultaten van gisteren? Of alle resultaten tussen 10 en 11 uur?
Ah, de UNIX_TIMESTAMP() functie. Dat ziet er inderdaad veel belovend uitquote:Op vrijdag 2 februari 2007 14:18 schreef Chandler het volgende:
[..]
UNIX_TIMESTAMP van de datum maken en dan de datum van gisteren als parameter in de where meegeven oid...
Leuk.quote:Op vrijdag 2 februari 2007 11:59 schreef super-muffin het volgende:
Ik heb al een simpele class geschreven
Zie alleen nog niet het echte voordeel er van in, maar het staat wel stoer, Object Georiënteerd Programmeren
Loop je natuurlijk wel tegen het Y2K38 probleem aan, maar okay, dat lossen we dan wel weer opquote:Op vrijdag 2 februari 2007 14:21 schreef Tuvai.net het volgende:
Tijn: Ik zou inderdaad ook overschakelen naar UNIX timestampts. Vind ik persoonlijk veel flexibeler...
bijvquote:Op vrijdag 2 februari 2007 14:13 schreef Tijn het volgende:
Kan iemand me uitleggen hoe ik werk met DATETIME in MySQL? Ik heb een tabel gemaakt waarin elk record o.a. zo'n veld heeft, en daar staan dus dingen in als "2007-02-01 22:35:30". Prima.
Maar hoe krijg ik nu bv alle resultaten van gisteren? Of alle resultaten tussen 10 en 11 uur?
1 2 | SELECT FROM_UNIXTIME(date,"%d %m %y") FROM xxx WHERE date BETWEEN UNIX_TIMESTAMP("2005-1-1") AND UNIX_TIMESTAMP("2006-1-1"); |
voor alles van gisteren:quote:Op vrijdag 2 februari 2007 14:13 schreef Tijn het volgende:
Kan iemand me uitleggen hoe ik werk met DATETIME in MySQL? Ik heb een tabel gemaakt waarin elk record o.a. zo'n veld heeft, en daar staan dus dingen in als "2007-02-01 22:35:30". Prima.
Maar hoe krijg ik nu bv alle resultaten van gisteren? Of alle resultaten tussen 10 en 11 uur?
1 2 3 | FROM blaat WHERE date = GETDATE() - 1 |
1 2 3 | FROM blaat WHERE HOUR(date) BETWEEN '10' AND '11' |
GROUP BY?quote:Op vrijdag 2 februari 2007 14:50 schreef Tijn het volgende:
Oh, nu ik hier toch ben, ik heb nog een vraagje over MySQL trouwens, want ik ben best wel een databasekneus
Wat is de handigste manier om het aantal verschillende entries in een field te bepalen? Ik heb een tabel met daarin een field waarin IP-nummers worden onthouden en ik wil graag het aantal verschillende IP-adressen weten wat erin staat.
Hoe ik het nu heb opgelost is een query die alle IP-adressen binnenhaalt en daarna met PHP een while-lus die de verschillende telt, maar ik heb het idee dat het efficienter kan met een goede query.
Ah cool, dit werkt ook heel goed.quote:Op vrijdag 2 februari 2007 14:57 schreef ralfie het volgende:
select count(distinct(kolomnaam)) from tabelnaam
Ergens in de komende 30 jaar kun je je data vast wel omzetten naar 64 bit. Dan heb je voorlopig geen problemen meer.quote:Op vrijdag 2 februari 2007 14:25 schreef Tijn het volgende:
[..]
Loop je natuurlijk wel tegen het Y2K38 probleem aan, maar okay, dat lossen we dan wel weer op
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 | //Alle extra's uitlezen $query = "SELECT * FROM extra WHERE Artikelcode='$acode'"; $result = mysql_query($query); //in tabel zetten echo "<table cellspacing='3'>"; echo "<tr><td colspan='100'></td></tr>"; echo "<tr> <td><b>Artikelcode</b></td> <td><b>Omschrijving</b></td> <tr><td colspan='100'></td></tr>"; while ($row = mysql_fetch_array($result)) { extract($row); echo "<tr> <td>$Extra</td> <td>$Omschrijving</td> </tr>n"; } echo "</table>"; ?> |
En wat is de oplossing dan?quote:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | // Breedte thumbnail (in pixels) $thumb_x=100; // Hoogte thumbnail (in pixels) $thumb_y=100; // path van jouw originele afbeelding $normaalplaatje="directory/jouwplaatje.jpg"; // path van de te maken thumbnail $verkleindplaatje="directory/jouwplaatje_klein.jpg"; // kwaliteit plaatje (0 tot 100) $kwaliteit=100; $afmetingen=getimagesize($normaalplaatje); $image=imagecreatefromjpeg($normaalplaatje); $destination=imagecreatetruecolor($thumb_x,$thumb_y); imagecopyresampled($destination,$image,0,0,0,0,$thumb_x,$thumb_y,$afmetingen[0],$afmetingen[1]); imagejpeg($destination,$verkleindplaatje,$kwaliteit); imagedestroy($image); imagedestroy($destination); ?> |
Ja het verkleint een afbeelding, alleen zodanig onscherp dat ik een andere methode zoek.quote:Op dinsdag 6 februari 2007 09:03 schreef Tuvai.net het volgende:
Um, dat scriptje wat ik gepost heb doet anders precies wat je wilt hoor.
Jawel hoor, kijk maar naar mijn afbeelding php vs photoshop.quote:Sowieso krijg je bij het verkleinen van afbeeldingen nooit een haarscherpe afbeelding.
En heb je in je eigen scriptje de kwaliteit wel op 100 staan? De voorbeeldafbeelding die je post is dusdanig onscherp dat ik wel zeker weet dat er een compressiepercentage op gebruikt is. D'r zitten zelfs vlekken kleurverschil in het witte van de achtergrond.quote:Op dinsdag 6 februari 2007 09:53 schreef wipes66 het volgende:
[..]
Ja het verkleint een afbeelding, alleen zodanig onscherp dat ik een andere methode zoek.
[..]
Jawel hoor, kijk maar naar mijn afbeelding php vs photoshop.
Je zou in plaats van GD ook Image Magick eens kunnen proberen, als dat op je server geinstalleerd is. De imagick_resize() functie heeft een blur-argument, waarmee je je plaatje scherper of blurrier kunt maken. Wie weet krijg je het daarmee wel goed.quote:Op dinsdag 6 februari 2007 04:07 schreef wipes66 het volgende:
Weet iemand hoe je in php thumbnail kan maken die niet wazig zijn? Ik gebruik gewoon imagecopyresampled en ImageCreateTrueColor, maar de kwaliteit is echt beroerd.
Het veschil tussen photoshop en php![]()
[afbeelding]
hij stond op 75, maar als ik het op 100 zet maakt het nog niet veel uit.quote:Op dinsdag 6 februari 2007 10:10 schreef Tuvai.net het volgende:
[..]
En heb je in je eigen scriptje de kwaliteit wel op 100 staan? De voorbeeldafbeelding die je post is dusdanig onscherp dat ik wel zeker weet dat er een compressiepercentage op gebruikt is. D'r zitten zelfs vlekken kleurverschil in het witte van de achtergrond.
Ja magick schijnt een stuk beter te zijn, maar het staat helaas niet op mijn serverquote:Op dinsdag 6 februari 2007 10:16 schreef Tijn het volgende:
[..]
Je zou in plaats van GD ook Image Magick eens kunnen proberen, als dat op je server geinstalleerd is. De imagick_resize() functie heeft een blur-argument, waarmee je je plaatje scherper of blurrier kunt maken. Wie weet krijg je het daarmee wel goed.
Zou eigenlijk, zoiets moeten kunnenquote:sub_list[]=17&sub_list[]=6&sub_list[]=3&sub_list[]=4&sub_list[]=18&sub_list[]=20&sub_list[]=19
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | $str='sub_list[]=17&sub_list[]=6&sub_list[]=3&sub_list[]=4&sub_list[]=18&sub_list[]=20&sub_list[]=19'; //methode 1 parse_str($str); var_dump($sub_list); //methode 2 eval('$'.str_replace('&sub_list',';$sub_list',$str).';'); var_dump($sub_list); //methode 3 preg_match_all("/sub_list[]=(d+)/",$str,$matches); $sub_list=$matches[1]; var_dump($sub_list); ?> |
Jammer dat ik er geen kan kiezen aangezien ze allemaal $$ kostenquote:Op dinsdag 6 februari 2007 11:51 schreef ViPeRII het volgende:
@Chandler.. kies er een uit
http://www.newfreedownloads.com/find/dns-server.html
Parse_str() is denk ik wel de mooiste oplossing. Alleen is het wel handig om 'm even in een functie te zetten, om te voorkomen dat er andere variabelen gezet worden dan je eigenlijk wil.quote:Op dinsdag 6 februari 2007 14:11 schreef ralfie het volgende:
ok, dus je wilt die string omzetten (als ik het goed begrijp)? Hier heb je wat voorbeelden
[ code verwijderd ]
veel plezier
1 2 3 | mysql_query($query) or die(mysql_error()); ?> |
1 2 3 | mysql_query($query) or die("Kan de Query niet uitvoeren!"); ?> |
En dat is het probleem, want nu krijg ik:quote:Op woensdag 7 februari 2007 15:57 schreef super-muffin het volgende:
SELECT *
FROM categorie, Subcategorie
WHERE SubCategorie.Subcategorie = categorie.idCategorie
Ik had vanmiddag het zelfde, zo werkt het wel ongeveer, nu nog alles netjes in een UL zien te krijgen.
1 2 3 4 5 6 7 8 9 10 11 12 | while($row = mysql_fetch_assoc($result)) { if($categorie != $row['Categorie']) { $categorie!= $row['Categorie'] echo "n<h2>" . $row['Categorie'] . "</h2>n<ul>n"; } echo $row['Subcategory'] . "<br /> n"; } ?> |
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 | $MySQL_Subcat_Select = "SELECT SHOP_Category.Intern, SHOP_Subcategory.InternSubcat, SHOP_Subcategory.IdSubcategory FROM SHOP_Category INNER JOIN SHOP_Subcategory ON ( SHOP_Subcategory.CategoryId = SHOP_Category.IdCategory ) ORDER BY SHOP_Category.Intern ASC"; $MySQL_Subcat_Query = mysql_query ( $MySQL_Subcat_Select ) or die ( $error->MySQL ( __FILE__, $MySQL_Subcat_Select, __LINE__ ) ); $i = 0; $DropDown = "<select name="Category">"; $DropDown .= "n"; while ( $MySQL_Subcat_Array = mysql_fetch_assoc ( $MySQL_Subcat_Query ) ) { if ( $MySQL_Subcat_Array['Intern'] != $CategoryIntern ) { if ( $i > 0 ) { $DropDown .= "</optgroup>"; $DropDown .= "n"; } $DropDown .= "<optgroup label="" . $MySQL_Subcat_Array['Intern'] . "">"; $DropDown .= "n"; } $DropDown .= "<option value="" . $MySQL_Subcat_Array['IdSubcategory'] . "">" . $MySQL_Subcat_Array['InternSubcat'] . "</option>"; $DropDown .= "n"; if ( $MySQL_Subcat_Array['Intern'] != $CategoryIntern ) { $CategoryIntern = $MySQL_Subcat_Array['Intern']; } $i++; } $DropDown .= "</optgroup>"; $DropDown .= "n"; $DropDown .= "</select>"; echo $DropDown; ?> |
Ik werk altijd met tabjes enzo en met een template parser (en mijn script had ik ff omgebouwd voor fok zonder template parser)quote:
Viezerikquote:Op donderdag 8 februari 2007 11:44 schreef Swetsenegger het volgende:
Ordinaire terug vind post
1 |
1 2 3 | "SELECT * FROM x WHERE id IN (" . join( ',' , $arr ) . ")"; ?> |
Het is best al regelmatig voorbij gekomen.quote:Op donderdag 8 februari 2007 15:30 schreef Desdinova het volgende:
OOMGGG.. als ik die JOIN eerder had gekend had ik echt uuuuureeen bespaard..
zelfde met de IN
een combinatie van euforie en melancholie.
tx!
1 2 3 4 5 6 7 8 9 10 | echo "<tr>"; } // tabel weergeven if ($teller % 2){ }else{ echo "</tr>"; } |
Wat dus ook zo kan:quote:Op donderdag 8 februari 2007 16:33 schreef markiemark het volgende:
heb het als volgt opgelost: heel vies:
[ code verwijderd ]
1 2 3 4 5 6 7 8 9 | echo "<tr>"; } // tabel weergeven if ($teller !% 2){ echo "</tr>"; } |
1 2 3 | echo "</tr>"; } |
Ik zit wel eens in SQL dumps te snuffelen die honderden MBs groot zijn. Duurt effe eer ze geopend zijn, maar zodra 't geladen is kun je aan de slag.quote:Op vrijdag 9 februari 2007 08:28 schreef Xcalibur het volgende:
hoe kan ik makkelijk een kolom uit een csv halen met 100.000+ records? Ik kan het bestand niet eens in z'n geheel in Excel openen.... ik wil het bij voorkeur via LOAD DATA doen, omdat het anders zo lang gaat duren (moet ook dagelijks geautomatiseerd gaan gebeuren).
Ik ga maar eens om een goed bestand zeuren denk ik
1 2 3 4 | $fingerprint = "UNIEKE_TOKEN" . $_SERVER['HTTP_USER_AGENT']; $fingerprint = md5($fingerprint); ?> |
Zo'n fingerprint is toch niet uniek? IPV md5 kan je natuurlijk iets sterkers gebruiken als sha256.quote:Op vrijdag 9 februari 2007 19:09 schreef SkaterSam het volgende:
Even vraagje, ben na een tijdje weer bezig met mijn weblogscriptjes, en nu ben ik bezig met de login. Nu geef ik in de login sessie een Fingerprint mee aan elke user, om te controleren of ze het wel zijn. Maar nu ik er naar kijk lijkt het me niet zo veilig meer...
[ code verwijderd ]
Dit is de unieke token dat gemaak wordt en telkens gecontroleerd op elke pagina in de Admin. Ik vroeg me af wat jullie er van vonden, en of je tips had wat betreft beveiliging.
1 2 3 4 | $plain = sprintf("%s-%s",$_SERVER['REMOTE_ADDR']."-".$zijninlognaam); $fingerprint = base64_encode(hash('sha256',$plain,true)); ?> |
Niet.quote:Op zaterdag 10 februari 2007 00:59 schreef super-muffin het volgende:
Misschien lukt het niet omdat het zo laat is, maar hoe kan ik 2 strings returnen in een functie?
quote:Op vrijdag 9 februari 2007 21:54 schreef smesjz het volgende:
[..]
Zo'n fingerprint is toch niet uniek? IPV md5 kan je natuurlijk iets sterkers gebruiken als sha256.
Maar verder kan je gewoon het IP versleutelen.
[ code verwijderd ]
1 2 3 | $plain = sprintf("%s-%s",$_SERVER['REMOTE_ADDR']."-".$zijninlognaam); ?> |
Oeps, zo dus:quote:Op zaterdag 10 februari 2007 11:54 schreef Light het volgende:
[..]
[ code verwijderd ]
sprintf verwacht daar 2 strings, je geeft er maar 1.
1 2 3 | $plain = sprintf("%s-%s",$_SERVER['REMOTE_ADDR'],$zijninlognaam); ?> |
oke bedanktquote:Op zaterdag 10 februari 2007 10:55 schreef smesjz het volgende:
[..]
Niet.
Alleen:
return array($stringA,$stringB);
In PHP werkt dit bijv niet: echo foobar()[0];
Je moet dan iets gebruiken als dit:
$tmp = foobar();
echo $tmp[0] // Geeft $stringA
echo $tmp[1] // Geeft $stringB
1 |
1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | // http://foo.net => [url=http://foo.net]http://foo.net[/url] '#(?<![url=)(http://.*?)(?=[.,?:;()<>]*(s|$))#i' => '[url=1]1[/url]', // www.foo.net => [url=www.foo.net]http://www.foo.net[/url] '#(?<![url=)(?<!http://)(www..*?)(?=[.,?:;()<>]*(s|$))#i' => '[url=http://1]1[/url]', // [url=http://foo.net]Foo[/url] => <a href="http://foo.net">Foo</a> '#[url=(https?://.*?)](.*?)[/url]#i' => '<a class="main" href="1" target="_new">2</a>', // [url=foo.net]Foo[/url] => <a href="http://foo.net">Foo</a> '#[url=(.*?)](.*?)[/url]#i' => '<a class="main" href="http://1" target="_new">2</a>', ); foreach ($regexps as $search=>$replace) { $text = preg_replace($search, $replace, $text); } |
"om javascript zaken uit HTML te filteren"quote:Op zondag 11 februari 2007 12:00 schreef Chandler het volgende:
Weet iemand een manier om javascript zaken uit HTML te filteren? zodat ik heerlijk gewoon een wysiwyg editor kan gebruiken voor wat voor site dan ook maar?
Ja ik snapte hem ook al niet helemaalquote:Op zondag 11 februari 2007 14:46 schreef SuperRembo het volgende:
[..]
"om javascript zaken uit HTML te filteren"
Nou ik moet iets scripten wat het volgende doet:quote:Op zondag 11 februari 2007 14:31 schreef Chandler het volgende:
vtel! eens! :)
1 2 3 4 5 6 7 | <BR> <a href="url2"><img src="plaatje2"></a> <a href="url3"><img src="plaatje3"></a> <BR> <a href="url4"><img src="plaatje4"></a> <BR> |
Ik zou hier heel erg mee uitkijken. Een onclick bevat ook scripting, en css kan ook scripting bevatten (tenminste: op de plaats waar css hoort te staan javascript uitvoeren). Je zult je aardig moeten verdiepen in de materie om dit allemaal af te vangen.quote:Op zondag 11 februari 2007 15:10 schreef Chandler het volgende:
Ik doel dus op het volgende
Er zijn vele varianten van <script> in html, en deze wil ik allemaal kunnen verwijderen op het moment dat een pagina wordt opgeslagen (en dat over wysiwyg editor boeit niet)
ik weet niet of er een betere manier is, maar je kunt in xp iig deze drives uit het register lezen. Bij elke drive staat een vage code die vast ergens voor staat, en waar je waarschijnlijk een hoop informatie uit kan halen, maar ik kom niet verder als de eerste twee karakters, die bij removable hardware altijd '5c' blijken te zijn (bij mij iig). Ze schijnen ook identiek te zijn bij verschillende partities van dezelfde schijf, tis maar dat je het weet. Ik heb zogauw iig niets gevonden over wat de codes precies betekenen.quote:Op zondag 11 februari 2007 15:22 schreef Nevermind het volgende:
Is er een manier om alle aanwezige schijfletters op een windows pc te achterhalen? En is het mogelijk om onderscheid te maken tussen vaste (HD) en losse (CD/diskette) schijven?
Met COM werken is geen bezwaar, maar daar heb ik helaas geen kaas van gegeten
1 2 3 4 5 6 | exec('reg query "HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices"',$output); $out=array(); foreach($output as $x) if(preg_match("#DosDevices.(\w):.REG_BINARY.([0-9A-Z]{2})#is",$x,$matches)) $out[$matches[1]]=$matches[2]=='5C'?'Removable':'Stuck'; ?> |
1 2 3 4 5 6 7 8 9 10 11 | 'C' => 'Stuck', 'D' => 'Stuck', 'A' => 'Removable', 'E' => 'Stuck', 'F' => 'Stuck', 'G' => 'Stuck', 'H' => 'Removable', 'I' => 'Removable', 'J' => 'Removable', ) |
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 | function getDriveStats($drive) { if (strlen($drive) == 1) { $drive = $drive . ":"; } $exists = @stat($drive); if ($exists != false) { $free = disk_free_space($drive); $total = disk_total_space($drive); $driveinfo['space'] = $total; $driveinfo['used'] = $total; $driveinfo['free'] = 0; if ($total != 0) { $driveinfo['free'] = $free; $driveinfo['used'] = $total - $free; } return $driveinfo; } return false; } for ($x = 0; $x < 26; $x++) { $info = getDriveStats(chr(65+$x)); echo 'drive ' . CHR(65+$x); if ($info == false) { echo ' does not exists <br />'; } else { echo ' exists and is ' . $info['space'] . ' bytes big and has ' . $info['free'] . ' bytes free<br />'; } } ?> |
1 2 3 4 5 6 7 8 9 10 | if(file_exists($row['location'].$row['filename'])) { echo("reading ".$row['location'].$row['filename']."<br><pre>"); $last_line = passthru("d:/www/ffmpeg/ffmpeg.exe -i ".$row['location'].$row['filename']); echo("</pre>"); // Printing additional info } ?> |
wie kan me helpen?quote:Seems that stream 0 comes from film source: 23.98 (65535/2733) -> 23.98 (250000/10427)
Input #0, avi, from 'm:AnimeFate Stay Night[Eclipse] Fate-stay night - 02 (XviD) [FF455508].avi':
Duration: 00:24:30.0, start: 0.000000, bitrate: 1041 kb/s
Stream #0.0: Video: mpeg4, yuv420p, 640x368, 23.98 fps(r)
Stream #0.1: Audio: mp3, 48000 Hz, stereo, 128 kb/s
Must supply at least one output file
FFmpeg version SVN-r7215, Copyright (c) 2000-2006 Fabrice Bellard, et al.
configuration: --enable-memalign-hack
libavutil version: 49.1.0
libavcodec version: 51.25.0
libavformat version: 51.6.0
built on Dec 3 2006 00:22:39, gcc: 3.4.6
1 |
1 |
1 |
quote:Op zondag 11 februari 2007 19:16 schreef ralfie het volgende:
Bedankt beide! Ik zit tijdelijk even op W2k tot ik XP weer geïnstalleerd heb, dus de eerste oplossing gaat nu niet werken. Het is wel iets netter om het via het register te doen, maar de eerste tijd kan ik tijdelijk Chandlers oplossing gebruiken. Ik kan weer verder, hartelijk dankquote:Op zondag 11 februari 2007 20:47 schreef Chandler het volgende:
Dan moet je de whitespace opgeven in je regexp, en wel buiten de haakjes:quote:Op maandag 12 februari 2007 11:36 schreef Swetsenegger het volgende:
regexp vraag
[...]
Ik kan geen trim op het result loslaten, dus ik wil graag de regexp aanpassen zodat hij de whitespaces aan het eind negeert. maar uh... hoe :P
1 |
Bedankt! zo simpel.quote:Op maandag 12 februari 2007 12:25 schreef SuperRembo het volgende:
[..]
Dan moet je de whitespace opgeven in je regexp, en wel buiten de haakjes:
[ code verwijderd ]
Graag gedaanquote:Op maandag 12 februari 2007 12:13 schreef Nevermind het volgende:
Bedankt beide! Ik zit tijdelijk even op W2k tot ik XP weer geïnstalleerd heb, dus de eerste oplossing gaat nu niet werken. Het is wel iets netter om het via het register te doen, maar de eerste tijd kan ik tijdelijk Chandlers oplossing gebruiken. Ik kan weer verder, hartelijk dank
quote:Op maandag 12 februari 2007 13:35 schreef Swetsenegger het volgende:
Hmz, waarom matched hij ook vanalles voor en na de TD? Ik wil alleen dat wat tussen de td staat :{
1 2 3 | $inhoudVanDeTD = $matches[1]; } |
Ja precies, ik had hem nodig in ASP en daarmee was het ff zoeken hoe ik de juiste uit de array kon vissenquote:Op maandag 12 februari 2007 18:43 schreef SuperRembo het volgende:
[..]
[ code verwijderd ]
$matches[1] bevat alles wat tussen de 1e set haakjes staat. Dat zou moeten werken.
Omdat een regexp een regexp is en ik weet dat hier mensen zitten die veel weten van regexpsquote:Op maandag 12 februari 2007 19:25 schreef SuperRembo het volgende:
Waarom stel je die vraag dan hier en niet in dat APS(.NET) topic? (Waar alleen maar ouwe ASP meuk in staat)
Mjah het is geen kwestie van hardware ofzo. Maar het is een gemeente, die veranderen niet zomaarquote:Op maandag 12 februari 2007 19:49 schreef SuperRembo het volgende:
ASP.NET heeft minimaal Win2k Pro nodig. Dat lukt toch nog wel mag ik hopen?
Ik werk overdag en kom er dan niet aan toe om hier mee te lezenquote:Op maandag 12 februari 2007 19:27 schreef Swetsenegger het volgende:
[..]
Omdat een regexp een regexp is en ik weet dat hier mensen zitten die veel weten van regexps
Ja ik kan het ook niet helpen dat het intranet nog op ASP3.0 draait
1 2 3 4 5 | if (!$_SERVER['PATH_TRANSLATED'] == "http://localhost/index.php") { header("Location: http://localhost/index.php?pagina=home"); } ?> |
En hoe doe ik dat precies?quote:Op donderdag 15 februari 2007 10:38 schreef super-muffin het volgende:
[ code verwijderd ]
Dat dus. Maar ik zou nog wel ergens de invoer van $pagina controleren.
1 2 3 4 5 6 7 8 9 10 11 12 | $pagina = 'home'; $bekende_paginas = array ('home', 'about', 'contact', 'producten'); if (isset($_GET['pagina']) && in_array ($_GET['pagina'], $bekende_paginas)) { $pagina = $_GET['pagina']; } ?> |
Bedankt.quote:Op donderdag 15 februari 2007 10:48 schreef CaPS_ het volgende:
[ code verwijderd ]
Zie ook dit artikeltje op scriptorama.
quote:Op donderdag 15 februari 2007 11:02 schreef super-muffin het volgende:
en vergeet en geen else aan te hangen om de gebruiker door te sturen of iig een nette foutmelding te geven, mocht het voorkomen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | include("functies.php"); $pagina = $_GET['pagina']; switch ($pagina) { default: case "home": include("home.php"); break; case "telefoonboek": include("telefoonboek.php"); break; case "relatiegids": include("relatiegids.php"); break; case "admin": include("admin.php"); break; } ?> |
Die van mij heeft een bug...quote:Op donderdag 15 februari 2007 11:29 schreef super-muffin het volgende:
Maar welke ga je nu gebruiken, die van CaPS of die van jou?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | include("functies.php"); $pagina = $_GET['pagina']; switch ($pagina) { case "home": include("home.php"); break; case "telefoonboek": include("telefoonboek.php"); break; case "relatiegids": include("relatiegids.php"); break; case "admin": include("admin.php"); break; default: include("404.php"); } ?> |
Als er nou geen waarde in de pagina is, dan pakt de switch toch default?quote:Op donderdag 15 februari 2007 11:54 schreef Geqxon het volgende:
[ code verwijderd ]
Bingo, als je nog even een 404.php aanmaakt zou het moeten werken. Je default kun je het beste onderaan gooien
Die van CaPS is het makkelijkst.quote:Op donderdag 15 februari 2007 11:43 schreef Qunix het volgende:
[..]
Die van mij heeft een bug...
Heb jij anders een idee hoe ik de bug kan oplossen in mijn script?
Ik snap niet precies het CaPS script
Bvd.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | $pagina = $_GET['pagina']; //een lijst met pagina's die geinclude mogen worden //aanpassen naar de pagina's die je wilt $bekende_paginas = array ('home', 'about', 'contact', 'producten'); // als $pagina een waarde heeft, en in de waarde daar van in de array staat if (isset($pagina) && in_array ($pagina, $bekende_paginas)) { // include de pagina include($pagina . ".php"); } // als de statment hierboven false is, controleer of dit wel goed is else if($pagina == '') { include("home.php"); } // als beide statements false zijn else { include("404.php"); } ?> |
Jij snapt hemquote:Op donderdag 15 februari 2007 12:07 schreef Qunix het volgende:
[..]
Als er nou geen waarde in de pagina is, dan pakt de switch toch default?
Klopt, als geen van de cases true is, word de default gepakt.quote:Op donderdag 15 februari 2007 12:07 schreef Qunix het volgende:
[..]
Als er nou geen waarde in de pagina is, dan pakt de switch toch default? :?
1 2 3 4 5 6 | $pagina = $_GET['pagina']; if($pagina = '') $pagina = "home"; //switch ?> |
1 2 3 | if (isset($_GET['pagina']) && in_array ($_GET['pagina'], $bekende_paginas) && file_exists($_GET['pagina']) ?> |
1 2 3 | if (isset($_GET['pagina']) && in_array ($_GET['pagina'], $bekende_paginas) && file_exists($_GET['pagina'] . ".php") //of .html/.htm of wat je ook gebruikt. ?> |
Wel zo slimquote:Op donderdag 15 februari 2007 12:21 schreef super-muffin het volgende:
ik zou er dan van maken:
[ code verwijderd ]
Thanksquote:Op donderdag 15 februari 2007 12:16 schreef super-muffin het volgende:
[..]
Die van CaPS is het makkelijkst.
hier is zijn script met commentaar:
[ code verwijderd ]
1 2 3 | $pagina = $_GET['pagina']; ?> |
1 2 3 | include("http://www.website.nl/content/" . $pagina . ".php"); ?> |
Thanksquote:Op donderdag 15 februari 2007 13:37 schreef Geqxon het volgende:
De kans is gering dat het werkt, maar for the sake of safety zou je ook iets als dit even kunnen proberen:
[ code verwijderd ]
Dan is het in principe onmogelijk om "gekke" pagina's aan te vragen
ik had een spelfoutquote:Op donderdag 15 februari 2007 14:50 schreef super-muffin het volgende:
SELECT *
FROM tabelnaam1, tabelnaam2
Misschien heb je wat aan deze site:
http://www.tizag.com/mysqlTutorial/
1 2 3 | $pointer=&$clsCategory[0]->clsChilds; //etc ?> |
Tja, de standaard PHP configuratie laat je inderdaad toe om de isset() aanroep weg te laten maar ik vind het niet verstandig. Wat ik schreef is logischer, het is immers mogelijk dat de variabele 'pagina' niet is meegegeven in de URL en dat dient dus gecontroleerd te worden voordat je er zomaar gebruik van maakt. Qunix is die situatie zelf ook al tegen gekomen:quote:Op donderdag 15 februari 2007 12:22 schreef Geqxon het volgende:
Verder ben ik van mening dat die isset en de in_array controle een beetje teveel van het goede is, want als hij in de array zit zal hij ook vast wel ge-set is.
quote:Op donderdag 15 februari 2007 13:20 schreef Qunix het volgende:
Als de url "http://localhost/intranet/" is dan krijg ik de volgende foutmelding:
Notice: Undefined index: pagina in S:Leerbedrijfwwwrootintranetindex.php on line 72
Lijn 72 tot 73:
[ code verwijderd ]
Ligt dat aan de php instellingen? Of is het gevaarlijk?
1 |
mysql_real_escape_stringquote:Op donderdag 15 februari 2007 18:46 schreef BaggerUser het volgende:
dag, zit me teen klein probleempje.
ben onlangso vergestapt naar een nieuwe php, mysql en apache versie en alles werkt in princiepe
alleen krijg ik bij sql statements bij sommige nog een foutmelding:
de foutmelding:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '
<?php
$text = $_POST['text'];
$id = $_GET['id'];
$sql = "UPDATE paginas SET content = '$text' WHERE id = '$id'";
mysql_query($sql) or die("<h1>Er is iets misgegaan</h1><hr>".mysql_error());
?>
ik weet al wel hoe het komt en heb al een workarround maar weet niet hoe ik de statement kan aanpassen zodat het wel nmormaal werkt.
het probleem is namelijk dat ik een stuk text probeer op te slaan, maar de ' uit de text als bijvoorbeeld ergens komma 's worden gebruikt dan loopt hij daar tegen aan in de statement... dubbele quotes gebruiken is een oplossing maar dat gaat gewoon niet altijd
iemand een idee hoe ik dit kan verhelpen ? ;(
1 2 3 | $sql = "UPDATE paginas SET content = '".$text."' WHERE id = ".$id; ?> |
Ik heb nu:quote:Op donderdag 15 februari 2007 18:00 schreef ralfie het volgende:
of gebruik pointers:
[ code verwijderd ]
In combinatie met een simpel for loopje natuurlijk helemaal te gek
1 2 | $$var = $pointer->function(); |
1 2 3 | $pointer2 =& clsChild; $$var = $pointer->pointer2->function(); |
1 |
1 2 3 | $font[1] = "Times"; etc |
Toch zou ik $_GET['id'] ff met is_numeric checken, in case ofquote:Op donderdag 15 februari 2007 19:39 schreef Swetsenegger het volgende:
[..]
mysql_real_escape_string
En $id hoeft waarschijnlijk niet in tussen enkele quotes, want zal een integer bevatten en je variabelen buiten quotes plaatsen
[ code verwijderd ]
explode() en dan array_flip()? En anders even verder kijken dan je neus lang is en http://nl2.php.net/manual/en/ref.array.php eens lezenquote:Op donderdag 15 februari 2007 20:38 schreef Chandler het volgende:
Minivraag
met dit maak ik van een string een array
[ code verwijderd ]
echter krijg ik dan
[ code verwijderd ]
maar eingelijk wil ik $font['Arial'] = "Arial" etc.
Weet iemand hoe ik dat simpel kan realiseren![]()
1 2 3 4 5 | foreach ($fnt as $null => $font) { $fontArr[$font] = $font; } |
Die discussie is nu al 500 keer gevoerd en het algemene standpunt daarin is ALTIJD USER INPUT CONTROLEREN en dat standpunt blijf ik niet herhalen.quote:Op donderdag 15 februari 2007 20:39 schreef Chandler het volgende:
[..]
Toch zou ik $_GET['id'] ff met is_numeric checken, in case of
Dat heeft inderdaad geen enkel nutquote:Op donderdag 15 februari 2007 21:01 schreef Tijn het volgende:
Waarom zou je willen dat de key hetzelfde is als de value? Wat is dan nog het nut van ze beiden opslaan?
Maar aangezien die er volgens mij geen quotes omheen zet, moet je wel heel zeker weten dat het een integer is.quote:Op donderdag 15 februari 2007 21:03 schreef Swetsenegger het volgende:
Uiteraard ga je met is_numeric controleren, hoewel de grotste angel er met mysql_real_escape_STRING AL WEL UIT IS.
Waarom zou je een integer gaan behandelen als een string?quote:Op donderdag 15 februari 2007 21:03 schreef Swetsenegger het volgende:
Uiteraard ga je met is_numeric controleren, hoewel de grotste angel er met mysql_real_escape_STRING AL WEL UIT IS.
mysql_real_escape_string slasht quotes en voorkomt derhalve sqlinjection. Ook integers als string behandelen is een goed idee, als je eens een keer slipt met je userinput controlle zou er wel eens een 'tje in je 'integer' kunnen staan.quote:Op donderdag 15 februari 2007 21:45 schreef slakkie het volgende:
[..]
Waarom zou je een integer gaan behandelen als een string?
Als ie de is_numeric passed betekend het toch dat je deze data kan gebruiken voor je SQL query. Al dan niet met een single quote char eromheen.
mysql_real_escape_string lijkt me voor strings alleen, niet voor een integer.
Nee, dat kan er dus niet in staan als is_numeric() true isquote:Op donderdag 15 februari 2007 22:17 schreef Swetsenegger het volgende:
[..]
mysql_real_escape_string slasht quotes en voorkomt derhalve sqlinjection. Ook integers als string behandelen is een goed idee, als je eens een keer slipt met je userinput controlle zou er wel eens een 'tje in je 'integer' kunnen staan.
Op zich is het ook een nadeel van mysql dat strings in een numeriek veld kunnen worden geplaatst.quote:Op donderdag 15 februari 2007 22:17 schreef Swetsenegger het volgende:
[..]
mysql_real_escape_string slasht quotes en voorkomt derhalve sqlinjection. Ook integers als string behandelen is een goed idee, als je eens een keer slipt met je userinput controlle zou er wel eens een 'tje in je 'integer' kunnen staan.
niemand die hier nog wat zinnigs over te zeggen heeft?quote:Op dinsdag 13 februari 2007 08:50 schreef Xcalibur het volgende:
voor alle regex mensen hier: weet iemand vanaf welke Linux / PHP versie de regex ook special characters kan matchen (ë / à / etc.). Ik had een Windows server met PHP 4.3.11 waar het werkte, maar nu ben ik over naar een Linux server met PHP 4.3.11, en daar werkt het niet
Het gaat dus om regexen als: P{M} enzo
Edit: ik krijg dus deze error: "Warning: preg_match(): Compilation failed: PCRE does not support L, l, N, P, p, U, u, or X"
Ik volg je niet echt..quote:Op donderdag 15 februari 2007 22:17 schreef Swetsenegger het volgende:
mysql_real_escape_string slasht quotes en voorkomt derhalve sqlinjection. Ook integers als string behandelen is een goed idee, als je eens een keer slipt met je userinput controlle zou er wel eens een 'tje in je 'integer' kunnen staan.
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 | $array = array ( 9, '9', "9", "9.9", "9,9", "hello9", "hello world", "-9.0", "+99.0", "-9", "+9", "'+9'", "9.000001", ); foreach ($array as $id) { echo "$id\n"; if (is_numeric($id) && (!is_float($id) && !is_string($id))) { echo "is_nummeric and not float and not string\n"; } if (ctype_digit($id)) { echo "Is ctype_digit\n"; } # -9.000 -9.0 -9 en zelfde voor + maar mag ook zonder ;) if (preg_match('/^[-+]?\s*d+([.,]0+)?\s*$/', $id)) { echo "Is int - regexp\n"; } echo "\n"; ?> |
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 | is_nummeric and not float and not string Is int - regexp 9 Is ctype_digit Is int - regexp 9 Is ctype_digit Is int - regexp 9.9 9,9 hello9 hello world -9.0 Is int - regexp +99.0 Is int - regexp -9 Is int - regexp +9 Is int - regexp '+9' 9.000001 |
Zie quote CraZaayquote:Op donderdag 15 februari 2007 21:01 schreef Tijn het volgende:
Waarom zou je willen dat de key hetzelfde is als de value? Wat is dan nog het nut van ze beiden opslaan?
Geheel fout!quote:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | session_start ( ); $_SESSION['SettleLand'] = 1; echo $_SESSION['SettleLand']; // 1 in dit geval if ( $_SESSION['SettleLand'] == 1 ) { $SettleLand = "Nederland" } elseif { $SettleLand = "Belgiieeuuuuh"; } echo $SettleLand; // Nederland in dit geval echo $_SESSION['SettleLand']; // is ook veranderd in Nederland en niet meer 1 !!! ?> |
Verbaasde mij ook, want dit vond ik echt wel heel strangequote:Op vrijdag 16 februari 2007 17:16 schreef splendor het volgende:
Controleer je php.ini eens of register_globals aan staat, die moet uitstaan en in php5 kun je die geloof ik niet eens meer aanzetten, dus dat zou het verklaren.
register_globals zorgt ervoor dat je een global (session is dit geval) kunt gebruiken alsof het een normaal variable is, dus hij maakt van $_SESSION['SettleLand'] autoatisch al $SettleLand, en die is inderdaad "Nederland" geworden in jou script. Overigens raar dat $_SESSION['SettleLand'] ook nederland wordt maar vooruit, zal de andere kant ook wel zo op werken.
Je gaat er maar vanuit dat je daadwerkelijk de userinput controleert. Zowel mysql als php zijn zo inconsistent als de tyfus met strings en integers, dus is 1 fuck-up voldoende om sql injection toe te staan.quote:Op donderdag 15 februari 2007 23:31 schreef slakkie het volgende:
[..]
Ik volg je niet echt..
Ik zie de gehele reden voor de mysql_real_escape_string niet. Het is een integer, geen string. En zelfs al is het een string, dan heb je die mysql_real_escape_string niet nodig. Een input van '9 moet ie er zoiezo uitfilteren en op barfen, daar hoef je niet nog eens een \'9 van te maken. Dit is immers geen int.
Ik zat ff te spelen met verschillende manier om te checken of iets een int is.
[ code verwijderd ]
[ code verwijderd ]
Zoals je kan zien, heb ik die hele mysql_real_escape_string niet nodig. Die is_numeric is mij te los qua wat ie als integer zit, ik zou hem iig daarvoor nooit gebruiken. Ik zou dus altijd met een regexp checken of het een integer is.
Wellicht dat intval() ook nog gebruikt kan worden, ik heb ermee getest, maar die vind 9.9 ook een int, en daar ben ik het niet mee eens, dat is een double/float, en valt dus buiten de boot.
quote:Op donderdag 15 februari 2007 23:11 schreef CraZaay het volgende:
[..]
Nee, dat kan er dus niet in staan als is_numeric() true is
quote:Op donderdag 15 februari 2007 22:17 schreef Swetsenegger het volgende:
als je eens een keer slipt met je userinput controlle zou er wel eens een 'tje in je 'integer' kunnen staan.
1 2 3 4 | $getValue = trim(htmlspecialchars($getValue)); return $getValue; } |
[php/mysql] SQL Injection, Maqic Quotes genoeg?quote:Op vrijdag 16 februari 2007 19:10 schreef splendor het volgende:
Is het misschien iets om voor iedereen hier een functie te schrijven die veilig met $_GET's omgaat?
Ik wil wel een begin geven door mijn voorlopige functie hier neer te zetten, kan iemand anders hem uitbreiden en er over discussiëren tot we een goeie hebben.
[ code verwijderd ]
Misschien een idee dat je aangeeft of het een int, string of beide moet/mag zijn en dat ie daar dan ook op controleert.
1 2 3 4 5 | Warning: fwrite(): supplied argument is not a valid stream resource in /var/www/mp3/frontend/display.php on line 139 Warning: fclose(): supplied argument is not a valid stream resource in /var/www/mp3/frontend/display.php on line 140 |
1 2 3 4 5 | Warning: fwrite(): supplied argument is not a valid stream resource in /var/www/mp3/frontend/display.php on line 139 Warning: fclose(): supplied argument is not a valid stream resource in /var/www/mp3/frontend/display.php on line 140 |
Ik neem niet aan dat de data al gevalideerd is. En in mijn check weet ik dat de data een integer is (in de regexp accepteerd ie ook doubles en floaters). Maar ik weet dat de data correct is en daarna alles met mijn data doen. Het is gechecked, alles wat ik daarna doe is op mijn conto en heeft dan niks meer te maken met users die SQL injection willen doen.quote:Op vrijdag 16 februari 2007 18:52 schreef Swetsenegger het volgende:
Je gaat er maar vanuit dat je daadwerkelijk de userinput controleert. Zowel mysql als php zijn zo inconsistent als de tyfus met strings en integers, dus is 1 fuck-up voldoende om sql injection toe te staan.
Nee, ik begrijp je redenatie achter de safety maatregel. Ik snap alleen niet waarom je dit met een integer doet. Het is namelijk geen string. Dat is mijn enige commentaar.quote:Ik begrijp jouw weerstand niet tegen een extra safety maatregel als mysql_real_escape_string. Zeker niet in toepassingen zoals de meeste hier maken waar performance geen groot issue is. Want eigenlijk is dat de enige reden die ik kan bedenken voor je aversie tegen een failback systeem![]()
Totdat er een keer niet gechecked isquote:Op vrijdag 16 februari 2007 22:38 schreef slakkie het volgende:
[..]
Ik neem niet aan dat de data al gevalideerd is. En in mijn check weet ik dat de data een integer is (in de regexp accepteerd ie ook doubles en floaters). Maar ik weet dat de data correct is en daarna alles met mijn data doen. Het is gechecked, alles wat ik daarna doe is op mijn conto en heeft dan niks meer te maken met users die SQL injection willen doen.
Tja, volgens php is $a="1" ook een integer, of probeert het in ieder geval als integer te parsen.quote:Nee, ik begrijp je redenatie achter de safety maatregel. Ik snap alleen niet waarom je dit met een integer doet. Het is namelijk geen string. Dat is mijn enige commentaar.
Ja, als het niet gechecked wordt is er toch ergens een grove fout gemaakt - die er uitgehaald had moeten worden in de unit test of end-to-end test.quote:Op vrijdag 16 februari 2007 22:41 schreef Swetsenegger het volgende:
We zitten al op 1 lijn. Je moet user input controleren. Maar het wordt wel eens vergeten he, zeker in work in progress. Dus wat is er erg om in elke query een mysql_real_escape_string op te nemen om slips op te vangen? Dat is alles wat ik zeg.quote:Op vrijdag 16 februari 2007 22:58 schreef slakkie het volgende:
[..]
Ja, als het niet gechecked wordt is er toch ergens een grove fout gemaakt - die er uitgehaald had moeten worden in de unit test of end-to-end test.
$a = "1"; $a = intval($a); zou dit volgens mij moeten oplossen, daar heb je geen extra functie voor nodig.
jij hebt een andere mening hierover dan ik. Laten we het daarbij houden. Heb zo'n idee dat we niet dichter bijelkaar gaan komen.
Ja, php is loosely typed. Dus na $a = "1"; $b = 2 + $a; is $b == 3. En na $a = "1"; $b = 2 . $a; is $b == "21";quote:Op vrijdag 16 februari 2007 22:41 schreef Swetsenegger het volgende:
Tja, volgens php is $a="1" ook een integer, of probeert het in ieder geval als integer te parsen.
Hier zijn we het allemaal mee eens denk ikquote:Op vrijdag 16 februari 2007 23:15 schreef JeRa het volgende:
Ik ben persoonlijk meer fan van een doodsbedreiging en een flinke scheldpartijquote:Op vrijdag 16 februari 2007 23:15 schreef JeRa het volgende:
+ Vang verkeerde user input op met een nette waarschuwing.
"Denk je GODVERDOMME dat ik een mongool ben ofzo met je kut injection!!!!"quote:Op vrijdag 16 februari 2007 23:28 schreef Tijn het volgende:
[..]
Ik ben persoonlijk meer fan van een doodsbedreiging en een flinke scheldpartij
quote:Op vrijdag 16 februari 2007 23:30 schreef Swetsenegger het volgende:
[..]
"Denk je GODVERDOMME dat ik een mongool ben ofzo met je kut injection!!!!"
INSERT ... ON DUPLICATE KEY UPDATE met een primary key?quote:Op zaterdag 17 februari 2007 18:30 schreef wonderer het volgende:
Is er een makkelijker manier om te controleren of een bepaald record al bestaat dan met een SELECT en daarna een if(mysql_num_rows($result)!=0)(UPDATE) else (INSERT)?
Na een Update of een Insert kun je met mysql_affected_rows() opvragen hoeveel rijen er zijn aangepast. Als dat 0 is dan kun je met de andere functie in de herkansingquote:Op zaterdag 17 februari 2007 18:30 schreef wonderer het volgende:
Is er een makkelijker manier om te controleren of een bepaald record al bestaat dan met een SELECT en daarna een if(mysql_num_rows($result)!=0)(UPDATE) else (INSERT)?
Die is nog beterquote:Op zaterdag 17 februari 2007 18:48 schreef JeRa het volgende:
[..]
INSERT ... ON DUPLICATE KEY UPDATE met een primary key?
Mijn server draait 4.1.12 dus dat moet kunnen. Kun je in een tabel meer keys hebben? Ik heb nu de kolom "ID" als key maar ik wil zoeken op een ander veld.quote:Op zaterdag 17 februari 2007 18:51 schreef Light het volgende:
[..]
Die is nog beterMaar pas beschikbaar vanaf MySQL 4.1.
Dat kan, de ON DUPLICATE KEY clausule is geldig wanneer er een PRIMARY of UNIQUE key overtreden wordt, dus bij een nieuwe PK maar een al bestaande UNIQUE key gaat dat gewoon werkenquote:Op zaterdag 17 februari 2007 18:57 schreef wonderer het volgende:
[..]
Mijn server draait 4.1.12 dus dat moet kunnen. Kun je in een tabel meer keys hebben? Ik heb nu de kolom "ID" als key maar ik wil zoeken op een ander veld.
Je weet dat je een UNIQUE constraint ook op meerdere velden tegelijk kunt plaatsen? Dus, in jouw geval, een combinatie van karakter en verhaal?quote:Op zaterdag 17 februari 2007 19:06 schreef wonderer het volgende:
Oh, bah, ik bedenk me net dat het een veel op veel relatie is... (karakters in verhalen. Een karakter kan in meerdere verhalen zitten en een verhaal kan meerdere karakters hebben). Dus UNIQUE gaat niet werken. Het moet de combinatie van karakter en verhaal zijn...
Hm, nou ja, die on duplicate kan ik nog wel voor andere dingen gebruiken. Dus helemaal nutteloos was het niet
Een key kan best op meer dan 1 veld slaan.quote:Op zaterdag 17 februari 2007 19:06 schreef wonderer het volgende:
Oh, bah, ik bedenk me net dat het een veel op veel relatie is... (karakters in verhalen. Een karakter kan in meerdere verhalen zitten en een verhaal kan meerdere karakters hebben). Dus UNIQUE gaat niet werken. Het moet de combinatie van karakter en verhaal zijn...
Hm, nou ja, die on duplicate kan ik nog wel voor andere dingen gebruiken. Dus helemaal nutteloos was het niet
Nee? Leg uitquote:Op zaterdag 17 februari 2007 19:20 schreef JeRa het volgende:
[..]
Je weet dat je een UNIQUE constraint ook op meerdere velden tegelijk kunt plaatsen? Dus, in jouw geval, een combinatie van karakter en verhaal?
Je kunt een UNIQUE constraint leggen op één veld (UNIQUE(a)) of op meerdere velden (UNIQUE(a, b)). In dat geval mogen er geen twee records voorkomen waarbij a én b hetzelfde zijnquote:Op zaterdag 17 februari 2007 19:31 schreef wonderer het volgende:
[..]
Nee? Leg uit
Ik heb het nou trouwens veranderd naar een cvs-stukje in een veld dat ik dan bij het ophalen met explode kan doen en dan is het ook klaar. Maar vertel vooral over dat unique gedoe want het komt regelmatig terug.
Als je het over die unique constraints hebt: die doe je wel in de tabel zelfquote:Op zaterdag 17 februari 2007 19:55 schreef wonderer het volgende:
Ooh, okee, dat doe je in de query en niet in de tabel zelf. Thanks.
Dat lijkt heel erg op REPLACE. Heeft dat hetzelfde effect?quote:Op zaterdag 17 februari 2007 18:48 schreef JeRa het volgende:
[..]
INSERT ... ON DUPLICATE KEY UPDATE met een primary key?
Replace is eigenlijk een onding. Sowieso doet replace geen update. Als een waarde al bestaat dan wordt'ie doodleuk uit je database gegooid en er vervolgens opnieuw ingezet.quote:Op zaterdag 17 februari 2007 22:36 schreef SuperRembo het volgende:
[..]
Dat lijkt heel erg op REPLACE. Heeft dat hetzelfde effect?
1 2 3 4 5 6 | if ($post == "") { $post = "leeg bericht.."; } ?> |
1 2 3 4 5 6 | if ($post == "bla") { $post = "je typte bla.."; } ?> |
Krijg ik dan geen problemen als ik bijv. enkele producten verwijder en dan later wil updaten mbv rangs? Dan zou je in sommige gevallen wel + 10 moeten doen....of als ik een product verwijder alle BOVENLIGGENDE (dus hoger dan de rank van het verwijderde product) - 1quote:Op maandag 19 februari 2007 11:05 schreef Siegfried het volgende:
Ik vermoed dat je een rang veld moet toevoegen in je DB.
GH2108 = 1
HG2122 = 2
GH2138 = 3
Als je op dat pijltje klikt moet je dat veld updaten, en van 3 -> 2 maken, en van 2 -> 3 maken.
Thanks!quote:Op zondag 18 februari 2007 15:42 schreef Geqxon het volgende:
Leuke opgave, ben even aan het knutselen geweest
[ code verwijderd ]
Uh, nee.. Gewoon:quote:Op maandag 19 februari 2007 11:11 schreef wobbel het volgende:
Jah heel leuk, ik kan bij 1 veld wel 2 + 1 = 3 doen, maar hoe moet ik dan die 3 - 1 doen? Gewoon 2 + 1 = 3, dan zoeken waar RANG 3 is en daar - 1?
En als ik een product toevoeg, moet ik de hoogste rang pakken en daar + 1 he?
Hou zoals eerder gezegd een rang of positie bij:quote:Op maandag 19 februari 2007 10:46 schreef wobbel het volgende:
Ik had het al een keer gevraagd, maar kwam er niet echt uit
Ik heb meerdere producten in een tabel ( in dit geval 3 stuks ) maar nu wil ik dat je de volgorde kan aanpassen. Dat ik bijv. op kolom "Rank" kan sorteren op ASC/DESC bijv.
Als ik bij de GH2138 op het pijltje omhoog doe dat de GH2138 op nr 2 komt en de GH2122 1tje naar beneden gaat, maar hoe laat ik dat nou mooi werken met PHP en MySQL?
[afbeelding]
Het dollarteken in de string is puur dat het op .txt moet eindigen. Zo uit mijn roestige hersenpan is het volgens mij zo dat als het ergens mee moet beginnen, dat het dollarteken dan aan het begin moet.quote:Op maandag 19 februari 2007 11:32 schreef Likkende_Lassie het volgende:
[..]
Thanks!(vanwaar die '$' in de string imagepatern? )
Wat als ik nou alles wil renamen / zien wat begint met iets?
Nee, dakje ^ is op het begin van de string, $ op het eind.quote:Op maandag 19 februari 2007 11:36 schreef Geqxon het volgende:
[..]
Het dollarteken in de string is puur dat het op .txt moet eindigen. Zo uit mijn roestige hersenpan is het volgens mij zo dat als het ergens mee moet beginnen, dat het dollarteken dan aan het begin moet.
Je hebt helemaal gelijk, ik was net bezig mijn stoffige schoolboeken over regular expressions er op na te slaan.quote:Op maandag 19 februari 2007 11:56 schreef JeRa het volgende:
[..]
Nee, dakje ^ is op het begin van de string, $ op het eind.
ik voeg altijd een veld 'ORDER' toe, waarbij ieder record een waarde krijgt met een meervoud van 10. Dus 10 / 20 / 30 / 40. Als je dan een record verplaatst doe je die ORDER + 11 (of -11), zodat hij voorbij de de volgende komt. Daarna update je in een loop *alle* records in de tabel zodat ze weer netjes een waarde met een veelvoud van 10 hebbenquote:Op maandag 19 februari 2007 10:46 schreef wobbel het volgende:
Ik had het al een keer gevraagd, maar kwam er niet echt uit
Ik heb meerdere producten in een tabel ( in dit geval 3 stuks ) maar nu wil ik dat je de volgorde kan aanpassen. Dat ik bijv. op kolom "Rank" kan sorteren op ASC/DESC bijv.
Als ik bij de GH2138 op het pijltje omhoog doe dat de GH2138 op nr 2 komt en de GH2122 1tje naar beneden gaat, maar hoe laat ik dat nou mooi werken met PHP en MySQL?
[afbeelding]
Tnx, ben wat verder nu idd!quote:Op maandag 19 februari 2007 12:22 schreef Tijn het volgende:
Je zou bijvoorbeeld fopen() kunnen gebruiken, veldmuis.
Jawel, met die twee functies kun je een bestand inlezen en voor de rest is het pure string manipulatiequote:Op maandag 19 februari 2007 12:33 schreef veldmuis het volgende:
[..]
fgets en fread lijken niet de oplossing als ik het zo zie op php.net?
quote:Op maandag 19 februari 2007 12:36 schreef Tijn het volgende:
Nou, je zou met fgets() wel de regel kunnen uitlezen en dan die regel door een sjieke reguliere expressie halen om je data eruit te filteren.
Hoe dat zit met die reguliere expressie moet je maar even aan iemand anders vragen, daar ben ik niet zo handig in :@
1 2 3 4 5 | $patern="#waarde1(.*?)</p>#i" preg_replace($patern,$string,$match); echo $match[1]; ?> |
dat gaat dus helemaal niet werken, want als ik bij 1 product rank + 1 doe, hoe weet ik dan welk product er dan 1 af moet?quote:Op maandag 19 februari 2007 11:34 schreef Siegfried het volgende:
[..]
Uh, nee.. Gewoon:
UPDATE `tabel` SET `rang` = '3' WHERE `id` = 'GH2122 ' LIMIT 1
UPDATE `tabel` SET `rang` = '2' WHERE `id` = 'GH2138' LIMIT 1
Lijkt mij
quote:Op maandag 19 februari 2007 12:53 schreef veldmuis het volgende:
Ik zou toch graag een iets hardere schop in de goeie richting willen :P.
Van stringmanipulatie en reguliere expressies snap ik niets :@.
Als ik nou de inhoud tussen Waarde1: en </P> zou willen uitlezen, hoe doe ik dat dan? :@.
1 2 3 4 5 6 | $inhoud = file_get_contents('bestandsnaam'); $matches = array(); preg_match('#^Waarde1:(.*)</P>#Ui', $inhoud, $matches); echo $matches[1]; ?> |
$matches is in eerste instantie een lege array maar wordt gevuld met strings door de functie preg_match(). Daarna is $matches[1] gelijk aan de eerste subset in de regular expression in preg_match() (als je dat niet snapt maakt het niet uitquote:Op maandag 19 februari 2007 13:04 schreef veldmuis het volgende:
Dank allen! Ik ga verder proberen!![]()
Nou ben ik alleen nog nieuwsgierig wat de [1] achter $matches/$match doet?
Zou dat dan geen [0] moeten zijn?quote:Op maandag 19 februari 2007 13:08 schreef Swetsenegger het volgende:
[..]
^waarde1: betekent toch dat de string daarmee begint?
Mjah, als test. Maar als hij ook waarde2, waarde3 etc wil matchen moet er toch een andere expression komenquote:Op maandag 19 februari 2007 13:08 schreef Swetsenegger het volgende:
[..]
^waarde1: betekent toch dat de string daarmee begint?
Maar het betekent toch ook dat de string er zo uit moet zien: "Waarde1:....." Op het moment dat de string niet met Waarde1 begint matched hij toch niet? dus de ^ moet toch gewoon weg?quote:Op maandag 19 februari 2007 13:12 schreef JeRa het volgende:
[..]
Mjah, als test. Maar als hij ook waarde2, waarde3 etc wil matchen moet er toch een andere expression komen
quote:Op maandag 19 februari 2007 13:15 schreef veldmuis het volgende:
"Call to undefined function preg_match()"
Betekent dat dat m'n PHP de preg_match() niet ondersteunt of dat ik gewoon iets fout doe in de code?.
1 2 3 | (PHP 3 >= 3.0.9, PHP 4, PHP 5) |
Je zou denken dat eerste, maar het lijkt me sterk dat je met PHP 3 bezig bentquote:Op maandag 19 februari 2007 13:15 schreef veldmuis het volgende:
"Call to undefined function preg_match()"
Betekent dat dat m'n PHP de preg_match() niet ondersteunt of dat ik gewoon iets fout doe in de code?.
quote:Op maandag 19 februari 2007 13:17 schreef veldmuis het volgende:
PHP Version 5.0.5, maar het zou zomaar kunnen dat het een ERG beperkte PHP is.
Post je code eens dan.quote:Afhankelijkheden
Deze functies zijn beschikbaar als onderdeel van de standaard module die altijd beschikbaar is.
bron
Of het is om een wazige reden zonder pcre gecompiledquote:Op maandag 19 februari 2007 13:16 schreef Swetsenegger het volgende:
[..]
[ code verwijderd ]
Dan zou je php versie onder 3.0.9 moeten liggen en DAT lijkt me niet.
Dat zou eventueel kunnen, voor de size-obsessed compileerders onder ons die denken genoeg te hebben aan de ereg_*-functiesquote:Op maandag 19 februari 2007 13:23 schreef Tiemie het volgende:
[..]
Of het is om een wazige reden zonder pcre gecompiled.
--without-pcre-regex
Ik heb deze gepakt:quote:Op maandag 19 februari 2007 13:19 schreef Swetsenegger het volgende:
[..]
[..]
Post je code eens dan.
1 2 3 4 5 6 7 8 | #!/usr/bin/php $inhoud = file_get_contents('test'); $matches = array(); preg_match('#^Waar:(.*)</P>#Ui', $inhoud, $matches); echo $matches[1]; ?> |
Ow, dan is dat het. De reden is ruimtegebrek. Gok ik.quote:Op maandag 19 februari 2007 13:23 schreef Tiemie het volgende:
[..]
Of het is om een wazige reden zonder pcre gecompiled :{ .
--without-pcre-regex
Is het daarmee te doen?quote:Op maandag 19 februari 2007 13:25 schreef JeRa het volgende:
[..]
Dat zou eventueel kunnen, voor de size-obsessed compileerders onder ons die denken genoeg te hebben aan de ereg_*-functies
http://nl2.php.net/manual/nl/function.ereg.phpquote:
Ja dat kanquote:Op maandag 19 februari 2007 13:36 schreef wobbel het volgende:
Kan ik ook een join doen in een delete?
Dus dat ik gegevens verwijder uit 2 tabellen die een relatie met elkaar hebben dmv ID?
Subqueries worden al erg lang door MySQL ondersteund, maar met een DELETE is het gewoon een simpele JOINquote:Op maandag 19 februari 2007 13:45 schreef Geqxon het volgende:
[..]
MySQL en subqueries? Ik leer telkens wat nieuws hier
Ik heb mijzelf in 2004/2005 MySQL aangeleerd, en één van de grote punten was de slechte support voor subqueries. Maar zoals ik al zei: Ik leer hier constantquote:Op maandag 19 februari 2007 13:46 schreef JeRa het volgende:
[..]
Subqueries worden al erg lang door MySQL ondersteund, maar met een DELETE is het gewoon een simpele JOIN
Zo dus:quote:
1 2 3 4 5 | FROM SHOP_Products INNER JOIN SHOP_Products_Lang ON ( SHOP_Products_Lang.ProductId = SHOP_Products.IdProduct ) WHERE SHOP_Products.SubcategoryId = '" . $SQL_SID . "' |
Precies. Probeer het eerst uit met SELECT FROM <rest van je query> en als dat werkt gewoon je SELECT FROM vervangen door deletequote:
Interbase (firebird) doet dat ook begreep ikquote:Op maandag 19 februari 2007 14:02 schreef JeRa het volgende:
Overigens, in sommige andere RDBMS'en wordt het bovenstaande gedaan door foreign key constraints met een ON DELETE-clausuleeen ON DELETE CASCADE zorgt er dan voor dat wanneer je een record verwijdert waarna andere records verwijzen, dat dan die andere records ook worden verwijderd. Erg handig als je de database-inhoud consistent wilt houden
PostgreSQL is een goede open source RDBMS die zoiets doet (maar ook de grotere commerciële varianten).
Werkt inderdaad...MAAR!quote:Op maandag 19 februari 2007 12:55 schreef JeRa het volgende:
[..]
1
2
3
4
5
6<?php
$inhoud = file_get_contents('bestandsnaam');
$matches = array();
preg_match('#^Waarde1:(.*)</P>#Ui', $inhoud, $matches);
echo $matches[1];
?>
Vreemd, zou gewoon moeten werken. Geen komma's quotes of andere ongein verkeerd?quote:Op maandag 19 februari 2007 14:20 schreef wobbel het volgende:
Betreffende query: DELETE FROM SHOP_Products INNER JOIN SHOP_Products_Lang ON ( SHOP_Products.IdProduct = SHOP_Products_Lang.ProductId ) WHERE SHOP_Products.SubcategoryId = '1'
MySQL error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INNER JOIN SHOP_Products_Lang ON ( SHOP_Products.IdProduct = ' at line 3
Inderdaad.quote:Op maandag 19 februari 2007 14:43 schreef JeRa het volgende:
Er zit een verschil in aanroep. In Swetsenegger's voorbeeld wordt er DELETE tabel1.*, tabel2.* FROM ... gedaan
1 |
die # is alleen start patroon, mag bijna elk teken zijnquote:Op maandag 19 februari 2007 16:29 schreef veldmuis het volgende:
Hmm, ben eruit intussen.
Ik begrijp dat je moet escapen, maar wat is nou het verschil tussen / en #?
Ik las overal / maar jullie gaven in jullie voorbeeld # aan, en dat werkt dus wel.
eh... niet de zooi parsen maar bewerken?quote:Op maandag 19 februari 2007 17:26 schreef veldmuis het volgende:
Okay, andere vraag.
dmv een shell_exec haal ik met wget het bestand op waar ik de data uit wil halen, dat gaat prima, maar daardoor krijg ik allemaal bagger in de pagina. Kan ik de output die wget geeft ergens anders heen sturen zodat het niet op m'n scherm komt?
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |