Je wilt dus de resultset leegmaken, en deze vervolgens ophalen?quote:Op vrijdag 26 augustus 2005 11:53 schreef BarteS het volgende:
Ik heb een query, $result genaamd
Ik heb een fetch, mysql_fetch_array($result, MYSQL_ASSOC)
Nu wil ik dat in de tussentijd $result leeggemaakt word, op een dusdanige manier dat de fetch niet gaat protesteren met de melding: "Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource "
1 2 3 | <?php $data = @mysql_fetch_assoc($result); //geen resource? geen foutmelding! ?> |
Iets wat ik vaak bij error handlers gebruik: debug_backtrace()quote:Op zaterdag 27 augustus 2005 12:26 schreef ikke_ook het volgende:
Ik wil graag een error handler maken voor mn mysql queries. Die error moet dan in een file worden geschreven, is er een mogelijkheid om uit te vinden op welke regel in het script de foute query staat?
Dat is ook wel handig eigenlijk alhoewel dat van SR er erg veel op lijkt, bedankt beidenquote:Op zondag 28 augustus 2005 15:59 schreef JeRa het volgende:
[..]
Iets wat ik vaak bij error handlers gebruik: debug_backtrace()
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 | <?php if ($_SERVER['REQUEST_METHOD']=='POST'){ $password=md5($_POST['password']); $query='SELECT * FROM user WHERE user="'.$_POST['user'].'" && password="'.$password.'"'; $result=mysql_query($query); $row=mysql_fetch_array($result); if(mysql_num_rows($result) != 0){ if($row['activated']!='0'){ session_start(); $_SESSION['IP']=$_SERVER["REMOTE_ADDR"]; $_SESSION['name']=$row['name']; $_SESSION['login']='1'; header("Location: ../".$_POST['location'].""); }else{ $login="<span style=\"color:red;\">U kunt pas inloggen als uw account is geactiveerd</span>"; setcookie('posted',$login); header("Location: ../".$_POST['location'].""); } }else{ $login="<span style=\"color:red;\">Ongeldige inlog</span>"; setcookie('posted',$login); header("Location: ../".$_POST['location'].""); } } ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php if(mysql_num_rows($result) != 0){ if($row['activated']!='0'){ session_start(); $_SESSION['IP']=$_SERVER["REMOTE_ADDR"]; $_SESSION['name']=$row['name']; $_SESSION['login']='1'; header("Location: ../".$_POST['location'].""); }else{ $login="<span style=\"color:red;\">U kunt pas inloggen als uw account is geactiveerd</span>"; setcookie('posted',$login); header("Location: ../".$_POST['location'].""); } }else{ setcookie('posted','<span style="color:red;">Ongeldige inlog</span>'); echo $_COOKIE['posted']; die(); //header("Location: ../".$_POST['location']); } } ?> |
Houd je er dan ook rekening mee dat expire (de derde parameter) een integer moet zijn?quote:Op maandag 29 augustus 2005 22:40 schreef Swetsenegger het volgende:
path dus
*zucht*
domdomdom... path dus
[ code verwijderd ]
cookie wordt op de volgende pagina uitgelezen en direct getrashed. Daarom stel ik geen expiration inquote:Op maandag 29 augustus 2005 22:43 schreef Light het volgende:
[..]
Houd je er dan ook rekening mee dat expire (de derde parameter) een integer moet zijn?
Dan kun je alsnog beter 0 dan een lege string gebruiken. Of met sessions gaan spelen natuurlijk.quote:Op maandag 29 augustus 2005 23:38 schreef Swetsenegger het volgende:
[..]
cookie wordt op de volgende pagina uitgelezen en direct getrashed. Daarom stel ik geen expiration in
Geen verschil. De pagina ziet er schematisch zo uit:quote:Op donderdag 1 september 2005 01:02 schreef JeRa het volgende:
Buffering is mijns inziens een hel in PHP. Ook al heb je ob_implicit_flush aanstaan, probeer toch eens telkens als je iets output de volgende twee functies aan te roepen:
[ code verwijderd ]
Voor zover ik hier zo kan nagaan doet een ini_set bij session.use_trans_sid niets. Klinkt op zich ook wel logisch, maar het betekent ook dat de enige manier om dit aan te passen is in de server-config. Je zou de suggestie in de php manual kunnen overnemen, dus session_start() weghalen.quote:Op donderdag 1 september 2005 00:50 schreef wonderer het volgende:
Ik ben niet zo thuis met ini_set dingen, maar als ik die bovenaan de stream funcie zet, zou dat dan moeten werken?
<a href="user.html.php?id=<?=$gebruikersid;?>">quote:Op donderdag 1 september 2005 15:16 schreef reinierb het volgende:
Ik wil een aantal gegevens ontsluiten naar mensen die onze site bezoeken. Ik heb daarvoor een tweetal tabellen aangemaakt met extra informatie van deze mensen. Ik wil daarvoor het standaard ID wat mysql aanmaakt in tabel users gebruiken waar ik het ID als foreign key wil gebruiken.
Dat is geen probleem, maar hoe kan ik het ID uitlezen op user.html.php???
Ik heb daar een query waar ik het ID aan mee wil geven zodat de juiste mensen de juiste gegevens te zien krijgen.
1 2 3 4 | <?php $id = intval($_GET['id']); $query = 'SELECT * FROM `database` WHERE `id` = ' . $id; ?> |
Ik heb het geprobeerd te injecten, en dat lukt echt niet zolang je je data in je query maar tussen ' zet.quote:Op donderdag 1 september 2005 19:55 schreef JeRa het volgende:
Daar gebruiken we natuurlijk niet $_GET direct voor maar op deze manier:
[ code verwijderd ]
Bij de methode van Swetsenegger heb je kans op een SQL injection.
Wat is er mis met backticks?quote:Op donderdag 1 september 2005 20:01 schreef Swetsenegger het volgende:
en ow... natuurlijk nooit backticks gebruiken in je query
SQL injection gaat niet alleen om het droppen van tables, het gaat ook om het vergaren van data die niet rechtmatig is. met een '\' OR 1 OR \'' kun je al veel doen. Bovendien, het is gewoon fout om zomaar user data in een query te stoppen, de 'maar het werkt toch'-beredenering is natuurlijk een van de meest foutequote:Op donderdag 1 september 2005 20:01 schreef Swetsenegger het volgende:
[..]
Ik heb het geprobeerd te injecten, en dat lukt echt niet zolang je je data in je query maar tussen ' zet.
En gewoon is_numeric volstaat natuurlijk ook
want laten we het nu eens proberen te injecten
we maken '""DROP TABLE tabel" van de id= in de url.
wat krijgen we dan?
$query="SELECT * FROM table WHERE id=''"DROP TABLE table";
geeft een prachtige sql fout. Maar goed, is_numeric of addslashes
en ow... natuurlijk nooit backticks gebruiken in je query
En dan ook niet mijn redenering. Ik heb voldoende gelezen over injection om te weten dat mijn methode veilig is.quote:Op donderdag 1 september 2005 20:46 schreef JeRa het volgende:
[..]
SQL injection gaat niet alleen om het droppen van tables, het gaat ook om het vergaren van data die niet rechtmatig is. met een '\' OR 1 OR \'' kun je al veel doen. Bovendien, het is gewoon fout om zomaar user data in een query te stoppen, de 'maar het werkt toch'-beredenering is natuurlijk een van de meest foute![]()
Je hoort mij niet zeggen dat dat niet zo is. Als een user wat vreemds in de url propt krijgt hij gewoon netjes een melding dat hij dat niet moet doen.quote:een query behoort altijd te werken, ook als de user iets vreemds opgeeft (intval levert in het geval van ongeldige user input gewoon 0 op).
Joh....quote:Als er tekst van de user moet worden geinserted in een query, behoor je altijd mysql_real_escape_string te gebruiken. Gebruik je tekst van de user in een query met LIKE, zorg er dan ook voor dat de procenten (%) en de underscores (_) ge-escaped worden want die hebben een speciale betekenis in queries.
En dat doe ik ook. Ik denk dat niemand met 100% zekerheid kan stellen dat zijn script veilig is, maar zolang ik numerieke gets check of ze ook daadwerkelijk numeriek zijn (lijkt me een stuk veiliger dan intval, welke een string gewoon interpreteert als integer en derhalve wel eens meer informatie uit je tabel kan trekken dan voor de user bedoeld was) en ASCII gets gewoon escape is er niets aan de hand. PLUS het feit dat ik mijn data altijd tussen quotes zet in een query, maakt injection redelijk lastig.quote:Dit soort basics zorgen ervoor dat je vanaf het begin een script maakt dat veilig is; zolang je er maar over nadenkt
backticks zijn een workaround voor beroerde database modellen, waarbij je reserved names als veldnamen gebruikt. Dat moet je gewoon niet doen, en derhalve zijn backticks volledig overbodig. Wanneer je je aanleert geen backticks te gebruiken, zal je dus ook geen reserved words als veldnamen nemen, waardoor je beter hebt nagedacht over je databasde modelquote:Natúúrlijk nooit backticks gebruiken, want de verdomd goede reden om dat niet te doen is...?
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 | <?php function stream($kamer,$user) { ob_implicit_flush(); $result=runquery("SELECT * FROM $kamer ORDER BY ID DESC LIMIT 0,1"); $row=mysql_fetch_array($result); $last_ID=$row[ID]; $res=runquery("SELECT * FROM chat_times WHERE chatroom='$kamer' AND username='$user'"); $ro=mysql_fetch_array($res); $their_time=$ro[said_time]; $now=time(); $diff=$now-$their_time; $iotime=600; #idle out time while($diff < $iotime && !connection_aborted()){ $result=runquery("SELECT * FROM $kamer ORDER BY ID DESC LIMIT 0,1"); $row=mysql_fetch_array($result); $new_ID=$row[ID]; while($new_ID>$last_ID){ $i=$last_ID+1; $result2=runquery("SELECT * FROM $kamer WHERE ID='$i'"); $row2=mysql_fetch_array($result2); $sentence=parse_sentence($row2[sentence],$row2[systemmess]); $result3=runquery("SELECT * FROM chat_leden WHERE username='$row2[username]'"); $row3=mysql_fetch_array($result3); $line=lineformat($row2[ID], $row[datum], $row3[access_level], $row2[chatname], $row2[kleur], $sentence, $row2[adminmess], $row2[username]); print ($line); $line=""; $last_ID++; } if($diff%25<=1){ $idleline='<!---->'; print ($idleline); } sleep(1); $rest=runquery("SELECT * FROM chat_times WHERE chatroom='$kamer' AND username='$user'"); $ro=mysql_fetch_array($rest); $their_time=$ro[said_time]; $now=time(); $diff=$now-$their_time; } $line='<b style="color:#ffffff">Je hebt te lang niets gezegd. Klik <a href="display.php?kamer='.$kam.'">HIER</a> om de kamer te herladen</b><script>scroll();</script>'; print ($line); } ?> |
Als je checks op je variabele doet, zie ik dat toch echt niet terug als je in een query direct een $_GET element gooit. Mijn opvatting is dat je mensen niet moet aanleren om $_POST of $_GET te vertrouwen, maar dus eerst de user input te validerenquote:Op donderdag 1 september 2005 21:10 schreef Swetsenegger het volgende:
[..]
En dan ook niet mijn redenering. Ik heb voldoende gelezen over injection om te weten dat mijn methode veilig is.
Het database model heeft hier dus helemaal niéts mee te maken, hoogstens de naamgeving. En er zijn voorbeelden van database servers die namen als 'e-mail' toestaan maar dit in een query zien als een berekening (vanwege het minteken) en daarop stoppen. In dat geval zijn backticks benodigd (hoewel de meeste DB servers het nu goed doen).quote:[..]
backticks zijn een workaround voor beroerde database modellen, waarbij je reserved names als veldnamen gebruikt. Dat moet je gewoon niet doen, en derhalve zijn backticks volledig overbodig. Wanneer je je aanleert geen backticks te gebruiken, zal je dus ook geen reserved words als veldnamen nemen, waardoor je beter hebt nagedacht over je databasde model
quote:Op donderdag 1 september 2005 21:17 schreef JeRa het volgende:
[..]
Als je checks op je variabele doet, zie ik dat toch echt niet terug als je in een query direct een $_GET element gooit. Mijn opvatting is dat je mensen niet moet aanleren om $_POST of $_GET te vertrouwen, maar dus eerst de user input te valideren
quote:Op donderdag 1 september 2005 21:10 schreef Swetsenegger het volgende:
In dit geval gaf ik een antwoord op een vraag. Ik hoef toch geen veiligheid tutorial te schrijven bij dit soort vragen?
Dat is net zoiets als een probleem in Windows oplossen door te zeggen dat je Windows opnieuw moet installeren. Mijn opvatting is dat als het op een andere, betere manier kan, je als scripter die er wat meer verstand van heeft de morele verplichting hebt die zo goed mogelijk te meldenquote:
Bullshit. Porbeer de query welke ik hierboven gaf maar te injecten. Maak maar een voorbeeld scriptje, pleur 'm online en wij gaan met z'n allen proberen 'm te injecten. Safe genoeg voor huis tuin en keuken gebruik.quote:Op donderdag 1 september 2005 21:36 schreef JeRa het volgende:
[..]
Dat is net zoiets als een probleem in Windows oplossen door te zeggen dat je Windows opnieuw moet installeren.
Ja met die intval is dat risico zeer zeker aanwezig inderdaad. Tenslotte verkomt dat op geen enkele manier dat er data uit de database getrokken kan worden welke niet voor de persoon bedoelt isquote:Mijn opvatting is dat als het op een andere, betere manier kan, je als scripter die er wat meer verstand van heeft de morele verplichting hebt die zo goed mogelijk te meldenanders heb je over twee weken een nieuw topic, 'mijn site is gehacked!11!1'
Je mist het punt. SQL injection hoeft niet altijd schadelijk te zijn, maar als jij nou een voorbeeld geeft waarbij injection mogelijk is en een gebruiker gaat dezelfde methode ook voor andere (mogeiljk gevaarlijkere) queries gebruiken, dan zijn de poppen aan het dansen. Beter gebruik je één uniforme methode om dit soort dingen af te handelen, dan de ene keer het wel te doen en de andere keer niet onder het mom van 'het werkt toch';quote:Op donderdag 1 september 2005 21:49 schreef Swetsenegger het volgende:
[..]
Bullshit. Porbeer de query welke ik hierboven gaf maar te injecten. Maak maar een voorbeeld scriptje, pleur 'm online en wij gaan met z'n allen proberen 'm te injecten. Safe genoeg voor huis tuin en keuken gebruik.
In dit geval was de intval() bedoeld om er zeker van te zijn dat het een numeriek type is wat in de query gezet wordt, op het moment dat je geen intval gebruikt en je staat toe dat er tekst in een gevaarlijke query komt gaat het wellicht nog erger fout. Ik ben het helemaal met je eens dat de user input gevalideerd moet worden, maar validatie is véél makkelijker als je weet met wat voor type variabele je te maken hebt - bovendien is bij een slechte validatie de kans op injection dan verkleind aangezien je zeker weet dat de user input in het type staat dat in de query mág staan.quote:Ja met die intval is dat risico zeer zeker aanwezig inderdaad. Tenslotte verkomt dat op geen enkele manier dat er data uit de database getrokken kan worden welke niet voor de persoon bedoelt is
1 2 3 | <?php $query = 'SELECT * FROM `database` WHERE `id` = ' . $id; ?> |
Dan krijg je inderdaad onzin.quote:Op donderdag 1 september 2005 20:01 schreef Swetsenegger het volgende:
Ik heb het geprobeerd te injecten, en dat lukt echt niet zolang je je data in je query maar tussen ' zet.
En gewoon is_numeric volstaat natuurlijk ook
want laten we het nu eens proberen te injecten
we maken '""DROP TABLE tabel" van de id= in de url.
wat krijgen we dan?
1 2 3 4 5 6 7 | <?php # stel $_GET[...] = "0 UNION SELECT * FROM `auth`" $id = $_GET[...]; $query = 'SELECT * FROM `database` WHERE `id` = ' . $id; # $query is nu: "SELECT * FROM `database` WHERE `id` = 0 UNION SELECT * FROM `auth`" ?> |
practise what you preachquote:Op donderdag 1 september 2005 22:01 schreef JeRa het volgende:
In dit geval was de intval() bedoeld om er zeker van te zijn dat het een numeriek type is wat in de query gezet wordt, op het moment dat je geen intval gebruikt en je staat toe dat er tekst in een gevaarlijke query komt gaat het wellicht nog erger fout. Ik ben het helemaal met je eens dat de user input gevalideerd moet worden, maar validatie is véél makkelijker als je weet met wat voor type variabele je te maken hebt - bovendien is bij een slechte validatie de kans op injection dan verkleind aangezien je zeker weet dat de user input in het type staat dat in de query mág staan.
Kortom, je antwoord was net zo onveilig en onvolledig dan dat van mij. Sterker nog, jij bracht het nog als 'veilig'. En in MIJN opinie is geen veiligheid nog altijd beter dan schijn veiligheid.quote:Mijn opvatting is dat als het op een andere, betere manier kan, je als scripter die er wat meer verstand van heeft de morele verplichting hebt die zo goed mogelijk te melden
Waar bracht ik het als veilig?quote:Op donderdag 1 september 2005 22:10 schreef Swetsenegger het volgende:
Kortom, je antwoord was net zo onveilig en onvolledig dan dat van mij. Sterker nog, jij bracht het nog als 'veilig'. En in MIJN opinie is geen veiligheid nog altijd beter dan schijn veiligheid.
Nee daar ga je de fout al inquote:Op donderdag 1 september 2005 22:08 schreef Vloris het volgende:
Ter info, de gewraakte query:
[ code verwijderd ]
1 2 3 | <?php $query="SELECT * FROM table WHERE id='".$_GET['id']."'"; ?> |
Nee hoor, dan krijgen we ditquote:Dan krijg je inderdaad onzin.
Maar, als we in de id= waarde nou een ' verstoppen kun je daarachter leuke sql opnemen.
Een voorbeeldje, stel dat er nog een tabel `auth` is met plaintext usernames en passwords (of md5 hashes, daar kan een hacker ook wel wat mee). De volgende injectie moet dan toch best wat leuks kunnen laten zien (mits mysql versie 4 of hoger gebruikt)
1 2 3 | <?php $query="SELECT * FROM table WHERE id='"0 UNION SELECT * FROM `auth`"'"; ?> |
En dan ga je er al vanuit dat de hacker allerlei kennis heeft over je database model.quote:Wauw! Geldige query die mysql zonder problemen uitvoert. Fijn, we krijgen nu als resultaat naast het bedoelde antwoord ook 1 of meerdere regels uit de auth tabel.
Eventueel in plaats van een * kolomnamen hernoemen zodat ze meegenomen worden naar de juiste uitvoer van de pagina, maar daar is wel wat op te vinden.
Je bericht is een kwartier naderhand gewijzigd, dat zag ik ook niet. Maar 'id' is vast een numeriek type, en die ga je vergelijken met een string?quote:Op donderdag 1 september 2005 22:18 schreef Swetsenegger het volgende:
[..]
Het antwoord van JeRa was dus niets vollediger dan dat van mij, terwijl hij dat wel suggereerde.
Waar komen die dubbele quotes opeens vandaan? Die zijn er niet, en dan krijg je het probleem dat Vloris hierboven opmerkt en waarvoor ik mij schaam dat ik dat niet eerder zagquote:Op donderdag 1 september 2005 22:18 schreef Swetsenegger het volgende:
Nee hoor, dan krijgen we dit
[ code verwijderd ]
Het enige wat ik er aan toegevoegd heb is de ;quote:Op donderdag 1 september 2005 22:23 schreef JeRa het volgende:
[..]
Je bericht is een kwartier naderhand gewijzigd, dat zag ik ook niet.
quote:Maar 'id' is vast een numeriek type, en die ga je vergelijken met een string?![]()
is_numeric ook.quote:bovendien voorkomt intval de invoeging van tekst in een query,
wanneer je je data tussen ' ' zet is injection niet zo eenvoudig als het lijkt.quote:want jouw methode voorkomt ook niet dat iemand andere info uit de database haalt. Ik zei alleen dat dat met SQL injection wellicht mogelijk was, maar in de oorspronkelijke query moet daar natuurlijk validatie aan vooraf gaan
Die staan er al vanaf de eerste post van mij hieroverquote:Op donderdag 1 september 2005 22:43 schreef JeRa het volgende:
[..]
Waar komen die dubbele quotes opeens vandaan?
Hij staat niet tussen php tags, dus het is lastig te zienquote:Op donderdag 1 september 2005 19:52 schreef Swetsenegger het volgende:
$query=" SELECT * FROM database WHERE id='".$_GET['id']";
Be my guest, zet een voorbeeld scriptje in elkaar en probeer het.quote:Op donderdag 1 september 2005 22:34 schreef Vloris het volgende:
Goed, even snel.
Swetsenegger: dan pak ik die query met quotes en zorg ik ervoor dat $_GET['id'] begint met 0' UNION ... etc.
Misschien moet er nog een \ voor de ', dat zou kunnen, maar die is er prima in te futselen. En het probleem dat er ineens nog een ' achteraan komt is eenvoudig op te lossen door mijn injectie te laten eindigen op een nutteloze WHERE 'foo' = 'foo
(misschien ook weer \' dat weet ik zo niet precies)
is_numeric controleert of het in het goede type staat. intval() zet het automatisch om naar het goede type. alleen zie ik is_numeric niet echt staan bij die query, en het zorgt er niet voor dat de waarde ook automatisch is wat je wilde. Met intval is het zelfs mogelijk om '3 schapen' in te voeren en daar het goede getal uit te krijgen.quote:
Een \' om de quotes te omzeilen is meer dan genoeg.quote:[..]
wanneer je je data tussen ' ' zet is injection niet zo eenvoudig als het lijkt.
Kijk, dat bedoelde ik in m'n vorige post ook, misschien is dit dan ten overvloede, maar je kunt best ' tekentjes injecten. Dat probeerde ik eigenlijk aan te tonen. Zonder voorzorgsmaatregelen (als b.v. magic_quotes ergens enigszins aan staat) is het dan prima te injecten.quote:Op donderdag 1 september 2005 22:56 schreef Swetsenegger het volgende:
wanneer je je data tussen ' ' zet is injection niet zo eenvoudig als het lijkt.
Dit schreef jij:quote:Op donderdag 1 september 2005 22:58 schreef Swetsenegger het volgende:
[..]
Die staan er al vanaf de eerste post van mij hierover
[..]
Hij staat niet tussen php tags, dus het is lastig te zien
Jij neemt kennelijk aan dat magic_quotes_gpc op On staat. Dit is echter niet altijd het geval. Als die niet aan staat is het ongelofelijk makkelijk om met quotes te spelen en géén error te laten optreden. En die verregaande kennis over het model, je hoeft alleen wat namen te kennen; en security through obscurity werkt natuurlijk niet hequote:Op donderdag 1 september 2005 22:59 schreef Swetsenegger het volgende:
[..]
Het enige wat je krijgt is sql errors. En dan hebben we het nog niet eens over het feit dat je blijkbaar verregaande kennis hebt van het database model.
Als ik iets niet wil in mijn query is het ongecontroleerd 'automatische' scriptjesquote:Op donderdag 1 september 2005 23:00 schreef JeRa het volgende:
[..]
is_numeric controleert of het in het goede type staat. intval() zet het automatisch om naar het goede type.
Nee, en bij jouw query zie ik ook geen controle op user input staan.quote:alleen zie ik is_numeric niet echt staan bij die query,
Nee, het zorgt dat het TYPE automatisch is wat ik wilde. Of de waarde klopt heb ik geen enkel idee van.quote:en het zorgt er niet voor dat de waarde ook automatisch is wat je wilde.
Dat geeft '0'. -edit- nopes, 3. Nu maar hopen dat je 3 wilde hebbenquote:Met intval is het zelfs mogelijk om '3 schapen' in te voeren en daar het goede getal uit te krijgen.
quote:En 'id' is meestal een kolom van het type UNSIGNED INT, en een integer moet je vergelijken met een integer en niét met een string (wat je in die query nu dus in feite doet).
Nogmaals, be my guest. Maak een voorbeeld scriptje en ga lekker de hele avond zitten injecten. Ik zie je voorbeeld injection graag tegemoed.quote:Een \' om de quotes te omzeilen is meer dan genoeg.
quote:Op donderdag 1 september 2005 23:02 schreef JeRa het volgende:
[..]
Dit schreef jij:
$query="SELECT * FROM table WHERE id='"0 UNION SELECT * FROM `auth`"'";
Die code die jij beschrijft zorgt echt niet voor de aanhalingstekens, hoogstens voor de enkele quotes ('). Het resultaat dat geproduceerd wordt is dus zonder de aanhalingstekens, maar met de enkele quotes. Als de user iets doet in de trant van:
' OR 1 OR '
Dan heb je dat dus al omzeild.
1 2 3 | <?php $query="SELECT * FROM table WHERE iets='".$variabele."'"; ?> |
1 2 3 | <?php $query="SELECT * FROM table WHERE iets='"SELECT * FROM `database` WHERE `id` = 0 UNION SELECT * FROM `auth`"'"; ?> |
Snap nou eens dat als je $_GET['id'] tussen quotes zet in een query, je er dan een string van maaktquote:Op donderdag 1 september 2005 23:07 schreef Swetsenegger het volgende:$_GET['id'] is geen string, maar een variable, met in dit geval een integer en geen string.
Door de intval() toevoeging weet je zeker dat de waarde een getal is en zijn quotes niet meer nodig! Quotes zijn niet heilig!quote:Op donderdag 1 september 2005 23:07 schreef Swetsenegger het volgende:
Door het ontbreken van quotes echter, is de boel eerder onveiliger.
quote:Op donderdag 1 september 2005 23:11 schreef JeRa het volgende:
Pak nou eens dit:
' OR 1 OR ''='
Wat krijg je dan? Juist:
SELECT * FROM table WHERE iets='' OR 1 OR ''=''
1 2 3 | <?php $query="SELECT * FROM table WHERE iets='' OR 1 OR ''=''"; ?> |
quote:Op donderdag 1 september 2005 23:13 schreef JeRa het volgende:
[..]
Snap nou eens dat als je $_GET['id'] tussen quotes zet in een query, je er dan een string van maaktje query gaat dan vervolgens de kolom 'id' vergelijken met een string.
Waarom kan ik dat niet in de rest van mijn script? $_GET['id'] veranderd niet opeens magischquote:Op donderdag 1 september 2005 23:14 schreef JeRa het volgende:
[..]
Door de intval() toevoeging weet je zeker dat de waarde een getal is en zijn quotes niet meer nodig! Quotes zijn niet heilig!bovendien kun je in de rest van je script werken met een waarde die je ook in je query hebt meegegeven
Heb je 'm uitgeprobeerd? Hier werkt die query gewoon hoor...quote:Op donderdag 1 september 2005 23:17 schreef Swetsenegger het volgende:
[..]
[ code verwijderd ]
Prachtige sql fout
1 2 3 | <?php $query="SELECT * FROM table WHERE iets='".$_GET['id']."'"; ?> |
1 2 3 | <?php $query == "SELECT * FROM table WHERE iets='0' UNION SELECT * FROM `auth` WHERE 'foo' = 'foo'"; ?> |
Doe dat dan op een andere manier, je voorkomt zo alleen injection als je magic_quotes_gpc op On hebt staan maar op jouw methode moet er vanalles gecast gaan worden door MySQL alvorens die kan gaan checken. Dit is gewoon überfout:quote:
Een 'echte' sql server zou het niet eens goedkeuren als je een numerieke kolom vergelijkt met een string... Maar mysql reken ik dan even niet tot de echten.quote:Op donderdag 1 september 2005 23:22 schreef JeRa het volgende:
Dit is gewoon überfout:
SELECT * FROM table WHERE 1 = '1'
Maar dat is feitelijk wat je nu doet
Zag je mijn edit?quote:Op donderdag 1 september 2005 23:20 schreef JeRa het volgende:
[..]
Heb je 'm uitgeprobeerd? Hier werkt die query gewoon hoor...
Daarom is het eigenlijk ook volstrekt hilarisch dat PHP & MySQL de meest gebruikte combinatie is...ze laten allebei enorm veel fouten toe m.b.t. types waardoor een hoop mensen het verkeerd gaan doenquote:Op donderdag 1 september 2005 23:23 schreef Vloris het volgende:
[..]
Een 'echte' sql server zou het niet eens goedkeuren als je een numerieke kolom vergelijkt met een string... Maar mysql reken ik dan even niet tot de echten.
Een beetje server heeft magic_quotes_gpc gewoon aan staan.quote:Op donderdag 1 september 2005 23:22 schreef JeRa het volgende:
[..]
Doe dat dan op een andere manier, je voorkomt zo alleen injection als je magic_quotes_gpc op On hebt staan maar op jouw methode moet er vanalles gecast gaan worden door MySQL alvorens die kan gaan checken. Dit is gewoon überfout:
SELECT * FROM table WHERE 1 = '1'
Maar dat is feitelijk wat je nu doet
Dat ben ik helemaal met je eens. En wat mij betreft laten we het hierbij, het was absoluut niet mijn bedoeling jou bewering helemaal onderuit te halen, ik wou alleen maar aantonen hoe het eventueel misbruikt zou kunnen worden.quote:Op donderdag 1 september 2005 23:25 schreef JeRa het volgende:
Daarom is het eigenlijk ook volstrekt hilarisch dat PHP & MySQL de meest gebruikte combinatie is...ze laten allebei enorm veel fouten toe m.b.t. types waardoor een hoop mensen het verkeerd gaan doen
Aan mijn post te zien, nietquote:
En voor de volledigheid van mijn kant geef ik ook even aan wat ik bedoelde met het type dat je kunt gebruiken in de rest van je script:quote:Ja hij werkt.
Maar goed, zowel jouw als mijn antwoord was onvolledig.
Dus hierbij voor de volledigheid voor de originele vraagsteller....
ALTIJD je user input controleren.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php //User input ophalen en omzetten naar het gewenste type $id = intval($_GET['id']); $naam = trim($_GET['naam']); //Validatie if ($id <= 0) { ...fout! } if ($naam == '') { ...fout! } //Afhandeling in script kan nu gedaan worden met $id en $naam, die zowel gevalideerd zijn als in het goede type zijn gezet, en pas in de query ge-escaped worden (indien nodig) $query = 'SELECT * FROM `blaat` WHERE `id` = ' . $id . ' AND `naam` = \'' . mysql_real_escape_string($naam) . '\''; ?> |
Een beetje server heeft dat inderdaad, maar een hoop servers hebben dat niet. In mijn scripts heb ik altijd helemaal vooraan een stukje code die alle input omzet naarmate magic_quotes_gpc aan of uit staat.quote:Op donderdag 1 september 2005 23:27 schreef Swetsenegger het volgende:
[..]
Een beetje server heeft magic_quotes_gpc gewoon aan staan.
En leeg eens uit waarom dat uberfout zou zijn?
'gewoon' is wel erg magere uitleg.
O wat haat ik die "feature" van php. Het slaat echt helemaal nergens op om alle binnenkomende get/post/cookie data te voorzien van slashes omdat het misschien in een sql statement gebruikt gaat worden. Je hebt er alleen maar last van als je iets anders met de data wil doen; een preview van een post, validatie van een string op lengte, of gewoon elk willekeurige actie die niets met mysql te maken heeft.quote:Op donderdag 1 september 2005 23:27 schreef Swetsenegger het volgende:
[..]
Een beetje server heeft magic_quotes_gpc gewoon aan staan.
En leeg eens uit waarom dat uberfout zou zijn?
'gewoon' is wel erg magere uitleg.
Ze geven twee redenen in php.ini voor de keuze om magic_quotes_gpc standaard op Off te zetten. De ene is performance (PHP hoeft dan niet langer alle request variabelen te voorzien van slashes) en de tweede is het feit dat je dan zogenaamd alles direct in database kunt stoppen, alleen moet je volgens PHP dan wel addslashes() gebruikenquote:Op vrijdag 2 september 2005 07:34 schreef SuperRembo het volgende:
Overigens staat in php.ini-recommended magic_quotes_gpc = off.
Een beetje server heeft magic_quotes_gpc dus uit staan.
Als je zelf de server config niet kan wijzigen, dan kan je 't uitschakelen met een regeltje in een .htaccess file:quote:Op zondag 4 september 2005 10:27 schreef idontlikepizza het volgende:
Overigens is het handig om al je input te zuiveren van dit magic_quotes gedoe (met behulp van strip_slashes), en dan zélf bewust, bijvoorbeeld in een Database Access Layer, netjes te escapen / te validaten.
1 | php_flag magic_quotes_gpc off |
Zou goed kunnen hoor, ik doe het ook maar voor het eerstquote:Op zondag 4 september 2005 15:30 schreef idontlikepizza het volgende:
Het ene opslagformaat kan toch ook gewoon efficiënter zijn?. En als je het wil testen importeer je de zut toch?
Het is allemaal gelukt, wel mat wat knip- en plakwerk omdat de file groter was dan 1,5mb.quote:Op zondag 4 september 2005 15:38 schreef idontlikepizza het volgende:
Volgens mij wel. Maar het importeren in een test-database kost niet echt veel moeite, lijkt me? Zeker met die grootte..
is een beetje ala "ik wil een andere auto want volgens mijn buurman is mijn huidige niet goed".quote:Op dinsdag 6 september 2005 13:06 schreef Godlike02 het volgende:
Ik heb op dit moment Mambo maar veel menesen vertellen me dat die te zwaar is en niet helemaal ideaal.
Draaid prima.quote:Op dinsdag 6 september 2005 16:01 schreef devzero het volgende:
Waarom wil je eigenlijk van mambo af? Heb je er problemen mee of draait je machine niet lekker?
[..]
is een beetje ala "ik wil een andere auto want volgens mijn buurman is mijn huidige niet goed".
Ja, dat zie ik ook vaak. of een check op e-mail adres met alleen @. Gebruik dan strstr...quote:Op woensdag 7 september 2005 16:37 schreef JeRa het volgende:
Helaas wordt preg_replace vaak te overijverig gebruikt. Zoiets als
$tekst = preg_replace('/blaat/', 'taalb', $tekst);
is iets wat veel mensen gebruiken om een stuk tekst te vervangen, terwijl
$tekst = str_replace('blaat', 'taalb', $tekst);
toch vele malen sneller is
Regexps zuigen als je niet goed weet hoe ze werken :Squote:
Ik heb een powerpointpresentatie ooit eens via dit topic gekregen. Daar staat het best helder in (ik heb het nog niet zoveel gebruikt, dus ik weet niet of het diep genoeg gaat voor wat lastigere regexps )quote:Op woensdag 7 september 2005 17:57 schreef ViPeRII het volgende:
[..]
Regexps zuigen als je niet goed weet hoe ze werken :S
Iemand nog eens een duidelijke "nederlandse" handleiding hiervoor?
1 2 3 4 5 6 7 8 9 | This is a multi-part message in MIME format. --===============1077165900== Content-Type: text/plain; charset=\"us-ascii\" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit utnzpw --===============1077165900==-- |
e107.orgquote:Op dinsdag 6 september 2005 13:06 schreef Godlike02 het volgende:
Ja collega´s en mede fokkers.
Even geen zin om nieuw topic te openen.
Maar ik ben ok zoek naar een mooie portal voor mijn website.
Ik heb op dit moment Mambo maar veel menesen vertellen me dat die te zwaar is en niet helemaal ideaal.
Kan iemand me helpen met wat tips?
Tnx
Voor zover ik weet wel, maar het wordt wellicht een probleem als ze de boundary makkelijk kunnen raden. Als ze die kunnen raden en in hun message zetten heb je het probleem dat ze vervolgens wél headers kunnen opgeven.quote:Op woensdag 7 september 2005 19:48 schreef Swetsenegger het volgende:
Is dit correct? In de body variabelen kunnen ze MIME types, boundry en content type injecteren wat ze willen, en zal toch niet resulteren in mails naar ontvangers welke je niet wil?
Ik ben niet zo into mails.quote:Op woensdag 7 september 2005 21:11 schreef JeRa het volgende:
[..]
Voor zover ik weet wel, maar het wordt wellicht een probleem als ze de boundary makkelijk kunnen raden. Als ze die kunnen raden en in hun message zetten heb je het probleem dat ze vervolgens wél headers kunnen opgeven.
Nee met preg_match check ik gewoon voor een geldig e-mail adres en daar horen enters niet inquote:Ook moet je er dus op letten dat dingen als naam, e-mailadres, etc die in de mailheaders komen géén ongeldige tekens mogen bevatten zoals een enter, want dan kun je ook extra headers opgeven.
Hoeft niet, zolang je maar op de headers blijft lettenquote:
Boundaries worden gebruikt om een multipart e-mail (HTML-email bijvoorbeeld) op te delen in verschillende segmenten met verschillende headers (mime-type etc). Aangezien alleen een unieke boundary aan kan geven dat er een nieuw stuk (mét nieuwe headers) begint, moet je ervoor zorgen dat die ook echt uniek zal zijn. Waarschijnlijk heeft het verder geen gevolgen voor mailinjectie, aangezien de headers daar niet meer van toepassing zijn op de ontvanger.quote:Ik doe zelf niets met boundry., voorzover ik weet. Het is toch niet zo dat elke mail een boundry heeft?
[..]
Dan zit je wrs al gebakkenquote:Nee met preg_match check ik gewoon voor een geldig e-mail adres en daar horen enters niet in
Je doet dit waarschijnlijk via phpMyAdmin? Die heeft de beperking van HTTP file uploads, enkele MB's dus. Wat je kunt doen:quote:Op woensdag 7 september 2005 22:02 schreef wonderer het volgende:
Ik wil graag backupbestanden van 200000 records terugzetten... hoe kan ik dat het beste doen? Uploaden via SQL gaat niet...
1 2 3 | <?php include "header.php?pagina=homepage"; ?> |
Die bestaan al, maar het zou wel eens leuk zijn om een archive te zien die zich ook aan de standaarden houdtquote:Op donderdag 8 september 2005 16:31 schreef Chandler het volgende:
offtopic (beetje) misschien is het eens leuk om een PHP regex archive op te zetten?
1 2 3 4 5 6 7 8 9 10 | <?php mysql_connect("localhost", "root", ""); mysql_select_db("hack"); $query = mysql_query('SELECT bla FROM users ORDER BY bla '.$_GET['ORDER']); while($row = mysql_fetch_array($query)) { echo $row[bla]; } ?> |
Nee, daarmee is aangetoont dat je browser aan url encoding doetquote:Op vrijdag 9 september 2005 11:05 schreef MaxPowered het volgende:
Hoi,
Ik last laatst een artikel over SQL injection. Dus ik ff mijn site daarop gecheckt.
Een voorbeeld van SQL Injection uit het artikel:
[ code verwijderd ]
Als men daarna http://localhost/hack.php?ORDER=desc; DROP TABLE users zou uitvoeren, zou de tabel users verwijderd worden.
Mijns inziens is dit bullshit. Als ik het in de browser plak, krijg ik het volgende als ik op enter druk:
http://localhost/hack.php?ORDER=desc;%20DROP%20TABLE%20users
Is hiermee aangetoond dat SQL-injection niet werkt?
Alvast bedankt voor de tips,
m@x
1 2 | ad_id id_user |
1 2 | user_id name |
1 2 3 | rate_id user rating |
1 2 3 4 5 6 7 | <?php SELECT COUNT(ad.ad_id) AS number, user.name, AVG(SUM(rate.rating)) FROM ad INNER JOIN user ON (id_user = user_id) RIGHT JOIN rate ON (id_user = user) WHERE ad.id_user=1 ?> |
1 2 3 4 5 6 | SELECT user.name, COUNT(ad.ad_id) AS number, AVG(SUM(rate.rating)) FROM user INNER JOIN ad ON ad.id_user = user.user_id LEFT JOIN rate ON rate.user = user.user_id WHERE user.user_id = 1 GROUP BY user.name |
Dat had ik inderdaad ook al geprobeerd.quote:Op vrijdag 9 september 2005 22:02 schreef SuperRembo het volgende:
Er moet nog een GROUP BY user.name bij en volgens mij moet het een LEFT JOIN zijn in plaats van RIGHT JOIN.
[ code verwijderd ]
1 2 3 4 5 6 | SELECT user.name, COUNT(ad.ad_id) AS number, AVG(rate.rating) AS average FROM user INNER JOIN ad ON ad.id_user = user.user_id LEFT JOIN rate ON rate.user = user.user_id WHERE user.user_id =".$_GET['id']." GROUP BY user.name" |
Dat maakt het wel minder bug gevoelig. Een luie programmeur is een slechte programmeur.quote:Op vrijdag 9 september 2005 22:50 schreef SuperRembo het volgende:
Ja da's handig zeg. Nu hoef je niet meer soms "table." voor een veldnaam te zetten, nee je zet er altijd "table_" voor
Ik snap deze opmerking nietquote:Op vrijdag 9 september 2005 22:50 schreef SuperRembo het volgende:
Ja da's handig zeg. Nu hoef je niet meer soms "table." voor een veldnaam te zetten, nee je zet er altijd "table_" voor
Dat lijkt me sowieso een vereistequote:Op vrijdag 9 september 2005 23:02 schreef Swetsenegger het volgende:
Ik gebruik nergens ambigue fields zoals je ziet.
En waarom niet zoals roonaan zegt... tja geen idee. Ik vind naamgeving irritant, zou alles het liefst een nummer geven
Overigens werkt de query wel, maar je moet natuurlijk in je life table wel dezelfde veldnamen gebruiken als in je test tabel
Roonaan stelt voor om voor elk veld in de tabel "users" de string "user_" te plakken. Dan zijn de veldnamen uniek, en hoek je (meestal) geen tabelnamen te vermelden voor de veldnamen in je query.quote:Op vrijdag 9 september 2005 23:01 schreef JeRa het volgende:
[..]
Ik snap deze opmerking nietwat zeg je nu eigenlijk?
1 | SELECT foo.name, bar.name FROM foo INNER JOIN bar ON bar.id = foo.id |
1 | SELECT foo_name, bar_name FROM foo INNER JOIN bar ON bar_id = foo_id |
Heb je wel eens code van jezelf van zegmaar 3 jaar terug eens bekeken ?quote:Op vrijdag 9 september 2005 23:02 schreef Swetsenegger het volgende:
En waarom niet zoals roonaan zegt... tja geen idee. Ik vind naamgeving irritant, zou alles het liefst een nummer geven
Nee, want 3 jaar geleden schreef ik nog geen code (tenminste, geen PHP)quote:Op vrijdag 9 september 2005 23:34 schreef gelly het volgende:
[..]
Heb je wel eens code van jezelf van zegmaar 3 jaar terug eens bekeken ?Ik doe het zelf ook hoor, maar achteraf pas ik alle variabelen weer aan zodat het voor iedereen leesbaar is. En voor mij over 3 jaar.
Ik schrijfquote:Op vrijdag 9 september 2005 23:07 schreef SuperRembo het volgende:
[..]
Roonaan stelt voor om voor elk veld in de tabel "users" de string "user_" te plakken. Dan zijn de veldnamen uniek, en hoek je (meestal) geen tabelnamen te vermelden voor de veldnamen in je query.
In plaats van
[ code verwijderd ]
krijg je dan
[ code verwijderd ]
Ik zie 't voordeel niet. Ik zie wel nadelen.
1 | SELECT foo.name, bar.name FROM foo INNER JOIN bar ON bar.id = foo.id |
1 | SELECT foo.name, bar.name FROM foo INNER JOIN bar USING(id) |
Gaat het over SQL? Dan kun je simpelweg een LIMIT toepassenquote:Op zaterdag 10 september 2005 00:04 schreef The_Terminator het volgende:
Weet iemand toevallig hoe een bestandslijst kan worden verdeeld over meerdere pagina's? Ik gebruik voor mijn Fok! uploader nu een bestandslijst die gewoon in zijn geheel op één pagina staat. Maar de bestandslijst is onderhand zo lang geworden dat ik een pagina van bijna één meg moet downloaden om de lijst in te kunnen zien. Iemand een oplossing?
Nee, het is gewoon een loop. Alle bestanden worden uit de upload dir opgevraagd en de bestandsnamen worden op de pagina weergegeven.quote:Op zaterdag 10 september 2005 00:06 schreef JeRa het volgende:
[..]
Gaat het over SQL? Dan kun je simpelweg een LIMIT toepassen
Dan moet je alle bestandsnamen opvragen en in een array stoppen. Je moet weten hoeveel bestandsnamen je op één pagina wilt hebben. Het aantal pagina's dat je dan hebt is:quote:Op zaterdag 10 september 2005 00:10 schreef The_Terminator het volgende:
[..]
Nee, het is gewoon een loop. Alle bestanden worden uit de upload dir opgevraagd en de bestandsnamen worden op de pagina weergegeven.
1 2 3 4 5 | <?php echo ini_get("session.use_trans_id"); echo ini_get("output_buffering"); echo ini_get("output_handler"); ?> |
Dankje, daar kan ik wel wat meequote:Op zaterdag 10 september 2005 00:18 schreef JeRa het volgende:
[..]
Dan moet je alle bestandsnamen opvragen en in een array stoppen. Je moet weten hoeveel bestandsnamen je op één pagina wilt hebben. Het aantal pagina's dat je dan hebt is:
$aantalPaginas = ceil($totaalAantalBestanden / $bestandenPerPagina);
Vervolgens vraag je een paginanummer op dat loopt van 0...n - 1 met n = aantal pagina's. De items die je uit je array moet opvragen zijn dan:
$eersteItem = $paginaNummer * $bestandenPerPagina;
$laatsteItem = min($eersteItem + $bestandenPerPagina, $totaalAantalBestanden);
en die werk je dan met een loopje afde pagina's wil je natuurlijk laten zien als 1...n, maar dat is puur cosmetisch (je telt 1 op bij de interne waarde).
tuurlijk niet, maar dat maakt de kans erop stukken kleiner. Daarnaast is het in je resultset met mysql_fetch_assoc ook iets practischer, zeker als je extract zou gebruiken., of stomweg var_export bij het bekijken van je query resultaten.quote:Op vrijdag 9 september 2005 23:02 schreef SuperRembo het volgende:
Ik ben niet lui hoor. Je moet weten wat je doet. Zelfs als je al je veldnamen in je database uniek maakt, dan is dat nog geen garantie dat je veldnamen in een query uniek zijn.
Dat moet ook niet... hij moet niet bufferen, hij moet alles meteen uitspugen, maar dat werkt op de een of andere manier niet. Ik probeer uit te vinden waarom niet, maar dat schiet niet op. Ik WEET dat hij buffert, want als de loop tot een eind komt, spuugt ie wel alles uit. Alleen als ik dus flush doe, zegt ie dat er geen buffer is...quote:Op zaterdag 10 september 2005 10:13 schreef Roönaän het volgende:
omdat je geen ob_start() gebruikt hebt?
Je moet er zeker nadenken. Ik ben ook wel een voorstander van tabelnamen in meervoudsvorm. En engels natuurlijk.quote:Op zaterdag 10 september 2005 10:17 schreef Roönaän het volgende:
[..]
tuurlijk niet, maar dat maakt de kans erop stukken kleiner. Daarnaast is het in je resultset met mysql_fetch_assoc ook iets practischer, zeker als je extract zou gebruiken., of stomweg var_export bij het bekijken van je query resultaten.
Mijn belangrijkste pre is het feit dat je in ieder geval een houvast hebt qua naamgeving, en dat je er over nagedacht hebt hoe je je velden noemt, in plaats van maar wat te kiezen.
-r-
Hier moet je vast & zeker wel wat mee kunnenquote:Op zaterdag 10 september 2005 21:07 schreef Swetsenegger het volgende:
Offtopic, weet iemand een site met mooie iconen gratis en voor niets uiteraard?
Dan moet je ook geen ob_flush() gebruiken, maar gewoon flush().quote:Op zaterdag 10 september 2005 20:33 schreef wonderer het volgende:
[..]
Dat moet ook niet... hij moet niet bufferen, hij moet alles meteen uitspugen, maar dat werkt op de een of andere manier niet. Ik probeer uit te vinden waarom niet, maar dat schiet niet op. Ik WEET dat hij buffert, want als de loop tot een eind komt, spuugt ie wel alles uit. Alleen als ik dus flush doe, zegt ie dat er geen buffer is...
'output buffers' zijn in deze context de output buffers van PHP en de webserver, etc. Feitelijk zeggen ze daar niet dat je ob_start() hebt moeten aanroepen voordat je de ob_flush();flush(); methode gebruikt.quote:flush() has no effect on the buffering scheme of your webserver or the browser on the client side. Thus you need to call both ob_flush() and flush() to flush the output buffers.
Maar die doet als ik 't goed begrijp dus niets als je geen ob_start() hebt gebruikt?quote:Op zondag 11 september 2005 13:58 schreef Roönaän het volgende:
misschien niet, maar ob_flush geeft wel een notice als je geen ob_start hebt gebruikt, vandaar. op zich zou je dus iets kunnen doen als:
for($i = 0, $c = ob_get_level(), $i < $c; $i++) ob_end_flush(); maar of dat nu zo'n succes is?
Daar zal de vraagsteller zich over moeten buigen, maar ik geloof dat het sowieso al geen succes was dus het is het proberen waardquote:Op zondag 11 september 2005 13:58 schreef Roönaän het volgende:
...maar of dat nu zo'n succes is?
1 2 3 | while (ob_get_level() > 0) { ob_end_flush(); } |
Maar het werkt prima op twee verschillende servers, dat is het hele punt. Ik roep ob_implicit_flush aan en hij spuugt alles netjes uit. Alleen op die ene server doet ie dat dus niet en ik probeer alles dat ik kan bedenken om uit te vinden waar dat aan ligt.quote:Op zondag 11 september 2005 12:01 schreef JeRa het volgende:
Output buffering is een hel in PHP, zoals ik al twee keer eerder heb gezegd in deze reeksik geloof dat de enige methode om het een beetje te laten werken is ob_flush() en flush() direct na elkaar aan te roepen als je wilt flushen, maar ook dat geeft geen garanties.
Het voor de hand liggende antwoord: het probleem zit 'm in het verschil tussen de serversquote:Op zondag 11 september 2005 17:02 schreef wonderer het volgende:
[..]
Ik weet lang niet zo veel van PHP als jullie, dus ik doe maar wat en hoop dat ik de fouten kan interpreteren. Ik snap gewoon niet waarom ie het op de ene server wel doet en op de andere niet.
Mhmm.. maar ik weet dus niet precies waar het zit. session.use_trans_sid staat aan op de server waar het niet werkt, maar als ik die op de server waar het wel werkt uitzet, maakt dat niet uit. Zelfde geldt voor output buffering. Enige nadeel is dat de "slechte" server met 4.3.10 werkt en de goeie met 5.nogwat.quote:Op zondag 11 september 2005 17:57 schreef JeRa het volgende:
[..]
Het voor de hand liggende antwoord: het probleem zit 'm in het verschil tussen de servers
Dus kijk naar de versie van PHP, Apache (gegeven dat dat je webserver is op alle servers), eventueel modules die je nog extra in PHP en je webserver gebruikt, en kijk natuurlijk ook even of de configuratie (php_info()) verschilt zodat je misschien iets tegenkomt wat de oorzaak kan zijn van je probleem.
Als de servers voor de rest exact hetzelfde is ingericht & ingesteld, dan heb je je oorzaak gevonden lijkt mequote:Op zondag 11 september 2005 18:09 schreef wonderer het volgende:
[..]
Enige nadeel is dat de "slechte" server met 4.3.10 werkt en de goeie met 5.nogwat.
Nou, er is ook nog een server met 4.3.11 en in de changelog staat niks over bugs mbt buffers. Die 5.dinges staat op mijn eigen laptop, dus die kan ik tweaken om te testen. De server waar het betreffende script al ruim een jaar op draait, zonder problemen, kan ik niet bij, dus tenzij ik ergens in phpinfo() output settings over het hoofd heb gezien, kan ik die niet vergelijken.quote:Op zondag 11 september 2005 18:34 schreef JeRa het volgende:
[..]
Als de servers voor de rest exact hetzelfde is ingericht & ingesteld, dan heb je je oorzaak gevonden lijkt memisschien heeft PHP 5 gewoonweg meer mogelijkheden m.b.t. buffering dan oudere versies.
1 2 3 4 5 | $ret = preg_replace("#(http://koopjes\.marktplaats\.nl[\w\:%&/.;\=?\[\]+] "'<a href=\\1 target=_blank>Marktplaats Link</a>'", $ret); $ret = preg_replace("#(http://www\.marktplaats\.nl/index\.php3\?sref= false\&url=http%3A//koopjes\.marktplaats\.nl[\w\%&/.;\[\]+] "'<a href=\\1 target=_blank>Marktplaats Link</a>'\n", $ret); |
Daar is de code tag dus voor uit gevonden, dat je daar geen last van hebtquote:Op maandag 12 september 2005 14:17 schreef Darkomen het volgende:
Bij de * )#sie zit een spatie vanwegen de smilies, en wat enters vanwegen de layout
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <? include('dbconnect.php'); ?> <form action="post"> 1*<select name="name" class="button"> <?php $resultaat = mysql_query("SELECT name FROM movies") or die ("Er is iets mis met de database"); while($row = mysql_fetch_assoc($resultaat)) { echo '<option value="'.$row['name'].'">'.$row['name'].'</option>'; } ?> </select><br> <input type="submit" value=" Toevoegen " class="button"> </form> |
Dacht ik dus ook:quote:Op maandag 12 september 2005 17:19 schreef ikke_ook het volgende:
[..]
Daar is de code tag dus voor uit gevonden, dat je daar geen last van hebt
1 | *) |
je wilt de geselecteerde waarde in een andere tabel stoppen?quote:Op maandag 12 september 2005 18:19 schreef RicXDesign het volgende:
Hoi,
Hoe kan ik de gegevens die ik uit de database heb gehaald weer terug plaatsen in een andere tabel(in de zelfde db).
Ik ben volgens mij wel op de goede weg, maar het wil niet lukken.
Hier de code waar ik de gegevens uit de db haal (in dropdown menu's)
[ code verwijderd ]
Iemand die de helpende hand bied ?
ps. zijn eigenlijk 10 drop down menu's , maar heb er voor het gemak maar even 9 weggehaald.
1 | $query = "INSERT INTO table2 (name) VALUES('".$_POST['name']."')"; |
1 2 3 | $SQL = "INSERT INTO `reacties` ( `id` , `ber_id` , `naam` , `bericht` , `tijd` , `soort` , `IP` ) VALUES ( '', '$id', '$loginnaam', '$bericht', '$date', 'recepten', '$ip' )"; |
1 | SELECT id, ber_id, tijd, soort FROM `reacties` GROUP BY ber_id ORDER BY tijd DESC LIMIT 0, 10 |
1 | "SELECT id, $titel, reacties FROM `$soort` WHERE id = '$ber_id'"; |
Elke marktplaats link pakt hij iig wel, tenminsten degene die de meeste mensen weten te vinden.quote:Op dinsdag 13 september 2005 15:21 schreef JeRa het volgende:
Ik zou de attributen van de A-tag wel in quotes zetten:
<a href="blaat" target="blaat" etc>
Voor de rest lijkt ie me prima? Heb er niet heel erg diep over nagedacht maar ik zou in ieder geval nog wat meer testlinks proberen zodat je er vrij zeker van bent
1 2 3 4 5 | <?php $im = imagecreatefromgif("plaatje.gif"); header("Content-type: image/gif"); imagegif($im); ?> |
1 | <a href="http://www.mijnsite.nl/extern.php?site=jouwsite"><img src="www.mijnsite.nl/plaatje.php?site=jouwsite"></a> |
1 | Parse error: parse error, unexpected $ in /home/web/administratie/contact.php on line 50 |
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 | <?php php if ($submit){ include ("config.php"); {$query = "UPDATE contact SET tel = '$tel', fax = '$fax', email = '$email', straat = '$straat', postcode = '$postcode', plaats = '$plaats' "; mysql_query($query) or die ("query mislukt"); echo "Klik <A HREF='index.php'>hier</a> om terug te gaan"; } } else { include "config.php"; $query = "SELECT * FROM contact"; $resultaat = mysql_query($query) or die (mysql_error()); while($obj = mysql_fetch_object($resultaat)){ echo "telefoonnummer: $obj->tel<br> faxnummer: $obj->fax<BR> email: $obj->email <BR> straat: $obj->straat <BR> postcode: $obj->postcode<br> plaats: $obj->plaats<br> "; } <FORM ACTION="contact.php" METHOD="post"> <INPUT TYPE="hidden" name="submit" value="maakt_niet_uit"> Tel<BR> <input type="text" Name="tel" value='php echo"$tel"; ' size=50 Maxlength=100><BR> Fax<BR> <input type="text" Name="fax" value='php echo"$fax"; ' size=50 Maxlength=100><BR> email<BR> <input type="text" Name="email" value="php echo"$email"; "size=50 Maxlength=20><BR> straat<BR> <input type="text" Name="straat" value="php echo"$straat"; "size=50 Maxlength=20><BR> postcode<BR> <input type="text" Name="postcode" value="php echo"$postcode"; "size=50 Maxlength=20><BR> plaats<BR> <input type="text" Name="plaats" value="php echo"$plaats"; "size=50 Maxlength=20><BR> <INPUT TYPE="submit" VALUE="update"> </FORM> } php echo "<BR><a href='index.php'>Naar administratie</a><BR>"; ?> |
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 | <?php if ($submit){ include ("config.php"); {$query = "UPDATE contact SET tel = '$tel', fax = '$fax', email = '$email', straat = '$straat', postcode = '$postcode', plaats = '$plaats' "; mysql_query($query) or die ("query mislukt"); echo "Klik <A HREF='index.php'>hier</a> om terug te gaan"; } } else { include "config.php"; $query = "SELECT * FROM contact"; $resultaat = mysql_query($query) or die (mysql_error()); while($obj = mysql_fetch_object($resultaat)){ echo "telefoonnummer: $obj->tel<br> faxnummer: $obj->fax<BR> email: $obj->email <BR> straat: $obj->straat <BR> postcode: $obj->postcode<br> plaats: $obj->plaats<br> "; } ?> <FORM ACTION="contact.php" METHOD="post"> <INPUT TYPE="hidden" name="submit" value="maakt_niet_uit"> Tel<BR> <input type="text" Name="tel" value='<?php echo"$tel"; ?>' size=50 Maxlength=100><BR> Fax<BR> <input type="text" Name="fax" value='<?php echo"$fax"; ?>' size=50 Maxlength=100><BR> email<BR> <input type="text" Name="email" value="<?php echo"$email"; ?> "size=50 Maxlength=20><BR> straat<BR> <input type="text" Name="straat" value="<?php echo"$straat"; ?> "size=50 Maxlength=20><BR> postcode<BR> <input type="text" Name="postcode" value="<?php echo"$postcode"; ?> "size=50 Maxlength=20><BR> plaats<BR> <input type="text" Name="plaats" value="<?php echo"$plaats"; ?> "size=50 Maxlength=20><BR> <INPUT TYPE="submit" VALUE="update"> </FORM> } <?php echo "<BR><a href='index.php'>Naar administratie</a><BR>"; ?> |
Parse error: parse error, unexpected $ in /home/web/administratie/contact.php on line 50quote:Op woensdag 14 september 2005 20:14 schreef ikke_ook het volgende:
en gaater nu nog iets fout dan?
Die hoort bij de } op regel 7quote:Op woensdag 14 september 2005 21:37 schreef wonderer het volgende:
Wat doet die { op regel 4?
En de } op regel 45?quote:Op woensdag 14 september 2005 21:42 schreef SuperRembo het volgende:
[..]
Die hoort bij de } op regel 7
klopt die was foutquote:
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 | <?php if ($submit){ include "config.php"; $query = "UPDATE contact SET tel = '$tel', fax = '$fax', email = '$email', straat = '$straat', postcode = '$postcode', plaats = '$plaats' "; $resultaat = mysql_query($query) or die (mysql_error()); echo "Klik <A HREF='index.php'>hier</a> om terug te gaan"; } else { include "config.php"; $query = "SELECT * FROM contact"; $resultaat = mysql_query($query) or die (mysql_error()); while($obj = mysql_fetch_object($resultaat)){ echo "telefoonnummer: $obj->tel<br> faxnummer: $obj->fax<BR>email: $obj->email <BR>straat: $obj->straat <BR>postcode: $obj->postcode<br>plaats: $obj->plaats<br> "; } ?> <form ACTION="contact.php" METHOD="post"> <INPUT TYPE="hidden" name="submit"> Tel<BR> <input type="text" Name="tel" size=50 Maxlength=10><BR> Fax<BR> <input type="text" Name="fax" size=50 Maxlength=10><BR> email<BR> <input type="text" Name="email" size=50 Maxlength=20><BR> straat<BR> <input type="text" Name="straat" size=50 Maxlength=20><BR> postcode<BR> <input type="text" Name="postcode" size=50 Maxlength=20><BR> plaats<BR> <input type="text" Name="plaats" size=50 Maxlength=20><BR> <INPUT TYPE="submit" VALUE="wijzig"> |
1 | Parse error: parse error, unexpected $ in /home/web/administratie/contact.php on line 33 |
Deze regel:quote:Op woensdag 14 september 2005 22:16 schreef dujour het volgende:
mag ik vragen hoe ik anders iets uit een database trek met $obj is het me altijd gelukt
1 | echo "telefoonnummer: $obj->tel<br> faxnummer: $obj->fax<BR>email: $obj->email <BR>straat: $obj->straat <BR>postcode: $obj->postcode<br>plaats: $obj->plaats<br>"; |
1 | echo "telefoonnummer: " . $obj->tel . "<br> faxnummer: " . $obj->fax . "<BR>email: " . $obj->email . "<BR>straat: " . $obj->straat . " <BR>postcode: " . $obj->postcode . "<br>plaats: " . $obj->plaats . "<br>"; |
Wie heeft je eigenlijk geleerd om objects te gebruiken bij mysql als je de fields alleen maar echo'd?quote:Op woensdag 14 september 2005 22:16 schreef dujour het volgende:
mag ik vragen hoe ik anders iets uit een database trek met $obj is het me altijd gelukt
1 | echo "telefoonnummer:" . $obj->tel."<br>faxnummer: ". $obj->fax."<BR>email: ". $obj->email." <BR>straat: ". $obj->straat." <BR>postcode: ". $obj->postcode."<br>plaats: ". $obj->plaats."<br>"; |
Waar kun je die dan het beste voor gebruiken? Ik doe altijd mysql_fetch_array() en dat werkt prima...quote:Op woensdag 14 september 2005 22:23 schreef Roönaän het volgende:
[..]
Wie heeft je eigenlijk geleerd om objects te gebruiken bij mysql als je de fields alleen maar echo'd?
Ik vroeg me ook al af, of bij al die echo's enzo er ook geen ( en ) omheen moeten.quote:Op woensdag 14 september 2005 22:38 schreef wonderer het volgende:
het is toch include('file.php'); en niet include "file.php"; ?
Dat doe ik ook nooitquote:Op woensdag 14 september 2005 22:41 schreef HuHu het volgende:
[..]
Ik vroeg me ook al af, of bij al die echo's enzo er ook geen ( en ) omheen moeten.
In dit stuk:quote:Parse error: parse error, unexpected ',' in /admin/admin.php on line 42
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 | <html> <head> <title>Welkom bij VideoCity Online | Admin</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <link href="../insert/style.css" rel="stylesheet" type="text/css"> </head> <body> Coming Soon <? include('dbconnect.php'); ?> <?php if (!$q = mysql_query("SELECT `id`, `name` FROM `movies` ORDER BY `inserted` DESC")) die('Error @ line: ' . __LINE__ . mysql_error()); if (!isset($_POST['submit'])) { print '<form action="" method="post">'; print '<select name="id">'; if (mysql_num_rows($q) < 1) print '<option value="0">Er staan geen films in de database..<option>'; else for ( ; $ud = mysql_fetch_assoc($q); print '<option value="'.$ud['id'].'">'.$ud['name'].'</option>') ; print '<input type="submit" name="submit" value="Voeg in de database" class="button">'; print '</form>'; } else { if (is_numeric($_POST['id'])) die('foutieve invoer!'); if (!$uname = mysql_result(mysql_query("SELECT `name` FROM `movies` WHERE `id`={$_POST['id']} LIMIT 0,1")), 0, 'name') die('Error @ line: ' . __LINE__ . mysql_error()); if (!mysql_query("INSERT INTO `comingsoon` (id, name) VALUES ({$_POST['id']}, '{$uname}')")) die('Error @ line: ' . __LINE__ . mysql_error()); print 'Gegevens zijn in een andere tabel opgeslagen!'; } ?> </body> </html> |
1 2 | if (!$uname = mysql_result(mysql_query("SELECT `name` FROM `movies` WHERE `id`={$_POST['id']} LIMIT 0,1")), 0, 'name') |
1 2 3 | $query = "SELECT `name` FROM `movies` WHERE `id`= ".$_POST['id']." LIMIT 0,1"; $result = mysql_result($query)or die(__LINE__ . mysql_error()); |
Ik ben dr intussen al mee geholpen, haakjes stonden idd verkeerd.quote:Op donderdag 15 september 2005 17:24 schreef ikke_ook het volgende:
[ code verwijderd ]
Staan de haakjes hier wel goed?Zoja, wat wil je dat hier gebeurd?
quote:Op vrijdag 16 september 2005 15:37 schreef Maikey het volgende:
Vraagje; Ik heb een site met een gastenboek, in dat gastenboek worden de laatste 15 post's getoond. Ik wil echter alle post's tonen, maar dan pagina's laten indexen met behulp van PHP. Net zoals in dit topic, pagina 1, 2, 3, etc dus. Ik kan hier echter moeilijk wat over vinden. Heeft iemand een link waarin zoiets staat uitgelegd of kan iemand mij dat uitleggen? Alvast bedankt!
Stond één pagina terugquote:Op zaterdag 10 september 2005 00:18 schreef JeRa het volgende:
[..]
Dan moet je alle bestandsnamen opvragen en in een array stoppen. Je moet weten hoeveel bestandsnamen je op één pagina wilt hebben. Het aantal pagina's dat je dan hebt is:
$aantalPaginas = ceil($totaalAantalBestanden / $bestandenPerPagina);
Vervolgens vraag je een paginanummer op dat loopt van 0...n - 1 met n = aantal pagina's. De items die je uit je array moet opvragen zijn dan:
$eersteItem = $paginaNummer * $bestandenPerPagina;
$laatsteItem = min($eersteItem + $bestandenPerPagina, $totaalAantalBestanden);
en die werk je dan met een loopje afde pagina's wil je natuurlijk laten zien als 1...n, maar dat is puur cosmetisch (je telt 1 op bij de interne waarde).
dit heb ik ooit geschreven voor een gastenboek. hoop dat je er wat aan hebt:quote:Op vrijdag 16 september 2005 15:37 schreef Maikey het volgende:
Vraagje; Ik heb een site met een gastenboek, in dat gastenboek worden de laatste 15 post's getoond. Ik wil echter alle post's tonen, maar dan pagina's laten indexen met behulp van PHP. Net zoals in dit topic, pagina 1, 2, 3, etc dus. Ik kan hier echter moeilijk wat over vinden. Heeft iemand een link waarin zoiets staat uitgelegd of kan iemand mij dat uitleggen? Alvast bedankt!
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 | <?php if(isset($_GET['showpage']) && is_numeric($_GET['showpage'])){ $page = $_GET['showpage']; } else { $page = "0"; } $gettotalmessages = mysql_query("SELECT COUNT(id) AS id FROM gastenboek"); $totalmessages = mysql_result($gettotalmessages, 0, 0); $pages = ceil($totalmessages / $perpage); $offset = $page * $perpage; $getmessages = mysql_query("SELECT * FROM gastenboek ORDER BY tijd DESC LIMIT $offset, $perpage"); while($messages = mysql_fetch_assoc($getmessages)){ $tpl->newBlock( "message" ); $tpl->assign( array( "id" => $messages['id'], "bericht" => $messages['bericht'], "tijd" => strftime("%A %d %B %Y - %H:%M", $messages['tijd']), )); if(!empty($messages['email'])){ $tpl->newBlock( "email" ); $tpl->assign("mail", $messages['email']); $tpl->assign("naam", $messages['naam']); } else { $tpl->newBlock( "no_email" ); $tpl->assign("naam", $messages['naam']); } } $tpl->newBlock( "pagenav" ); $nextpage = $page+1; $prevpage = $page-1; if($page != "0"){ $prev = "<a href=\"?page=gastenboek&showpage=" . $prevpage . "\"><< vorige</a> |"; } if($page+1 != $pages){ $next = "| <a href=\"?page=gastenboek&showpage=" . $nextpage . "\">volgende >></a>"; } $tpl->assign("pagenav", $prev . " pagina " . $page = $page+1 . " van " . $pages . " pagina's " . $next); ?> |
Welk template systeem gebruik jij? ik ben wel op zoek naar een goed template systemquote:Op zaterdag 17 september 2005 10:38 schreef Lamme_Sterfkanarie het volgende:
[..]
dit heb ik ooit geschreven voor een gastenboek. hoop dat je er wat aan hebt:
[ code verwijderd ]
Mja, of je installeert gewoon appServquote:Op maandag 19 september 2005 18:40 schreef Icey1986 het volgende:
Mochten er mensen zijn die wellicht thuis op hun eigen pc/laptop wat met scripts willen kloten of graag eerst willen testen voor het online te zetten (of geen zin hebben om continou alles te uploaden)... ik heb een handleiding geschreven voor het installeren van apache+php+mysql en phpmyadmin. Wellicht dat men er wat aan heeft.
Precies, AppServ is ideaal.quote:Op maandag 19 september 2005 18:59 schreef Roönaän het volgende:
[..]
Mja, of je installeert gewoon appServ
Zou kunnen, maar de meeste willen php leren en geen server installatiequote:Op maandag 19 september 2005 20:08 schreef JeRa het volgende:
Ja, of je wilt natuurlijk zelf bepalen welke versies je gebruikt of je wilt misschien het fijne weten van de werking tussen Apache <-> PHP <-> MySQL weten, dan kun je het beter zelf handmatig installeren; leer je ook nog eens iets van met een beetje geluk.
Ik zou dit niet als simpeler willen betitelen.quote:Oh, wat nog veel simpeler is. Gooi een Debian cd in je pc/laptop, installeer de boel (beetje op next klikken), start synaptic, vink de betreffende packages aan (apache/httpd, php, php-mysql, mysql) et voila
Hij staat bij mij op de D schijf geinstalleerd.quote:Op maandag 19 september 2005 19:44 schreef Roönaän het volgende:
Je moet alleen niet in een andere dan de standaard directory willen installen...
En wat is de standaard directory? Toch niet C:\AppServ\ hè?quote:Op maandag 19 september 2005 19:44 schreef Roönaän het volgende:
Je moet alleen niet in een andere dan de standaard directory willen installen...
Bij mij staatie dus op d:\AppServ\quote:Op maandag 19 september 2005 21:14 schreef SuperRembo het volgende:
[..]
En wat is de standaard directory? Toch niet C:\AppServ\ hè?
En de afzonderlijke componenten?quote:Op maandag 19 september 2005 21:32 schreef Swetsenegger het volgende:
[..]
Bij mij staatie dus op d:\AppServ\
Nou ik ben ff aan het spitten, want die staan volgens mij gewoon OOK in d:\AppServ. Ik dacht dat hij MySQL en PHP in C:\program files installeerde, maar daar vind ik ze niet terug. in D:\AppServ echter heb ik de mappen Apache, PHP, MySQL en www. In de www folder staat phpmyadmin gewoon.quote:Op maandag 19 september 2005 21:34 schreef SuperRembo het volgende:
[..]
En de afzonderlijke componenten?
Allebei. Ik heb in het verleden zo ontiegelijk veel moeite gehad om MySQL te laten samenwerken met Windows dat in vergelijking een GNU/Linux installatie vele malen simpeler wasquote:Op maandag 19 september 2005 20:46 schreef Roönaän het volgende:
Vind je dat nou echt, of blaat je wat om ook wat te zeggen te hebben?
Vandaar de opmerking van Roonaan voor AppServ.quote:Op maandag 19 september 2005 22:11 schreef JeRa het volgende:
[..]
Allebei. Ik heb in het verleden zo ontiegelijk veel moeite gehad om MySQL te laten samenwerken met Windows dat in vergelijking een GNU/Linux installatie vele malen simpeler was
Vandaar mijn opmerking over AppServ. Inderdaad vind ik dit ook geen topic om complete serverinstallaties te bespreken. Echter een php testomgeving opzetten behoort wel in dit topic, en AMPs (LAMP of WAMP) hoort daar wel bij.quote:En ik ergerde me een beetje aan het feit dat we opeens over de installatie van serversoftware gingen hebben terwijl dit toch echt een scriptingtopic is waarbij we eventueel naar de configuratie van de software kijken, maar als het om installatie gaat mag het van mij in een nieuw topic. En die link in een FAQ, ofzo.
Ja, maar als je me een linkje stuurt wil ik wel ff voor je kijken in safari, IE-Mac en/of Firefox macquote:Op maandag 19 september 2005 22:18 schreef Roönaän het volgende:
De enige mogelijkheid om mac-browsers op een windows bak te testen is pearpc toch?
tnx. alvast.quote:Op maandag 19 september 2005 22:22 schreef Swetsenegger het volgende:
[..]
Ja, maar als je me een linkje stuurt wil ik wel ff voor je kijken in safari, IE-Mac en/of Firefox mac
Een website welke je helemaal zelf kan bijhouden, poppetjes aankleden EN een forum en vanaf de grond bouwen. Dat is geen simpel project.quote:Op dinsdag 20 september 2005 22:34 schreef Gillian_Anderson het volgende:
Ik zou graag een php web site willen hebben.
met een zelf geschreven database, die ik zelf makkerlijk kan update
en een poppertje dat je zelf kan aan kleden, zo als je zelf wilt ( Flash, Java )
en minimaal 10 php pagina's groot
weet iemand wat dit kan kosten heb al op site's gekeken maar kan niet vinden wat ik zoek![]()
Ik zou graag een Index / forum willen hebben waar mensen nieuws en update's kunnen zien en posten.
poppertje moet kledeing aan kunnen doen zo wel man als vrouw
vanaf ( Scrap ) ontworpen worden.
Poppetjes aankleden (met van scratch ontworpen kleding). Ik denk dat je zo een 0 achter dat bedrag van jou mag plakken.quote:Op dinsdag 20 september 2005 22:42 schreef Swetsenegger het volgende:
[..]
Een website welke je helemaal zelf kan bijhouden, poppetjes aankleden EN een forum en vanaf de grond bouwen. Dat is geen simpel project.
Beetje afhankelijk van wat voor functionaliteit je in dat forum/prikbord verwacht, gaat dit je minimaal ¤ 1000,- kosten en zeer waarschijnlijk (veel) meer
PHPBB is niet van scratch ontworpen. Ik nam tenminste aan dat daar de hele site mee bedoeld werdquote:Op dinsdag 20 september 2005 22:53 schreef Roönaän het volgende:
De flash applicatie op zich gaat al een aardige duit kosten. Als de imaging aangeleverd wordt is het al wel goedkoper denk ik. Het forum is een beetje afhankelijk van de eisen en wensen. Als een phpbb voldoet kan je het bijna elke scriptkiddie het laten installeren vrees ik.
-r-
Ik wilde niet gelijk TE ontmoedigend zijnquote:Op dinsdag 20 september 2005 23:00 schreef Light het volgende:
[..]
Poppetjes aankleden (met van scratch ontworpen kleding). Ik denk dat je zo een 0 achter dat bedrag van jou mag plakken.
Moet dus erg rekening houden met 6000 tot 10.000 euro ?quote:Op dinsdag 20 september 2005 23:03 schreef Swetsenegger het volgende:
[..]
PHPBB is niet van scratch ontworpen. Ik nam tenminste aan dat daar de hele site mee bedoeld werd
[..]
Ik wilde niet gelijk TE ontmoedigend zijn
de poppetjes in flash kost een aardig bedrag en als je geen bestaande forum oplossing wilt implementeren, maar een forum van de grond wil laten schrijven zou ik maar van minimaal 10.000 uitgaanquote:Op dinsdag 20 september 2005 23:08 schreef Gillian_Anderson het volgende:
[..]
Moet dus erg rekening houden met 6000 tot 10.000 euro ?
Oh een forum bouwen is wel goed te doen hoor. Niet zo erg lastig. En een bij te houden website ook niet. Mij lijkt met die poppetjes wel het lastige deelquote:Op dinsdag 20 september 2005 22:42 schreef Swetsenegger het volgende:
Een website welke je helemaal zelf kan bijhouden, poppetjes aankleden EN een forum en vanaf de grond bouwen. Dat is geen simpel project.
Afhankelijk van het aantal bezoekers welke je verwacht. Moet er een full text search in, etc etcquote:Op woensdag 21 september 2005 01:30 schreef TechXP het volgende:
[..]
Oh een forum bouwen is wel goed te doen hoor. Niet zo erg lastig.
Neuh, CMSje enzo. De vraag is natuurlijk wel WAT er allemaal dynamisch moet.quote:En een bij te houden website ook niet.
Misschien kan je nog een eind komen met DHTML en CSS, mits het 2D is.quote:Mij lijkt met die poppetjes wel het lastige deelMaar dat is omdat ik geen flash expert ben. Geef mij maar PHP
Ik heb allerlei flash boeken staan, maar ja... tijd hequote:Op woensdag 21 september 2005 08:31 schreef Roönaän het volgende:
Dan kan je beter flash doen. In de nieuwe flash 8 helemaal, kan je simpele FLV filmpjes pakken, zodat het net dat beetje geanimeerd lijkt.
mail maar. keyword: xmlquote:Op woensdag 21 september 2005 08:33 schreef Swetsenegger het volgende:
[..]
Ik heb allerlei flash boeken staan, maar ja... tijd he
(EERST wil ik uitzoeken hoe je flash met database en php laat lullen)
Het ligt inderdaad in wat je wil ja.quote:Op woensdag 21 september 2005 08:19 schreef Swetsenegger het volgende:
Afhankelijk van het aantal bezoekers welke je verwacht. Moet er een full text search in, etc etc
Dat zeker ook. Alles waarschijnlijkquote:Neuh, CMSje enzo. De vraag is natuurlijk wel WAT er allemaal dynamisch moet.
Ja, dat zou eventueel natuurlijk ook wel kunnen.quote:Misschien kan je nog een eind komen met DHTML en CSS, mits het 2D is.
Iemand advies?quote:226-Transfer complete.
226 Quotas off
DELE Lenny Kravitz - California.mp3
550 Lenny Kravitz - California.mp3: No such file or directory
ik wist niet waar ik em moest plaatsen, vandaar.quote:Op donderdag 22 september 2005 11:52 schreef ikke_ook het volgende:
uhm...wat heeft je vraag met php danwel mysql te maken?
Ik zou trouwens ook niet weten hoe het komt.
1 | <input name="obj_foto" type="hidden" value="'.$obj['foto'].'"> |
1 | <img src=".$_POST['obj_foto']." alt=\"\"> |
Dan heb je gewoon geen rechten om het te verwijderenquote:Op donderdag 22 september 2005 11:52 schreef Hillz het volgende:
Jep ik zit in de map, vandaar uit probeer ik het bestand te deleten maar dat lukt niet.
De map zelf heet mp3, want weer een submap is van httpdocs.
Het bestand werkt nog wel, want op de site speelt ie em gewoon af. Ik kan er verder ook nix mee. Niet verwijderen, rename'en, bekijken want telkens geeft hij de 550 aan.
Voor de netheid (misschien dat het ook een fout geeft):quote:
1 | <img src=\"".$_POST['obj_foto']."\" alt=\"\"> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | $file_contents = 'some contents of a file'; $filepath = '/path/to/where/the/file/needs/to/be/stored/and/filename.txt'; if(!is_dir(dirname($filepath))) { echo '<li>Directory "'.dirname($filepath).'" does not exist</li>'; } elseif(!is_writable(dirname($filepath))) { echo '<li>Directory "'.dirname($filepath).'" is not writable</li>'; } elseif(false === ($f = fopen($filepath,'w'))) { echo '<li>Could not open local file for writing ('.strlen($file_contents).' bytes)</li>'; echo '<li> '.$filepath.'</li>'; } else { fwrite($f, $file_contents); fclose($f); echo '<li>File saved: '.strlen($file_contents).' bytes</li>'; $updates++; } |
Zodra ik ".$_POST['obj_foto']." doe ipv <img src=".$_POST['obj_foto']." alt=\"\"> dan geeft ie netjes het pad van de foto weer zoals ie in de database staat.quote:Op donderdag 22 september 2005 12:23 schreef TechXP het volgende:
[..]
Voor de netheid (misschien dat het ook een fout geeft):
[ code verwijderd ]
Krijg je niets terug van $_POST['obj_foto']? Wat geef je mee? Geef je wel een pad naar de foto mee?
Wat zegt: print_r($_POST); ?
Krijg je daar alle waarden te zien?
Zoals de vorige zegt... het is handig om wat meer code te krijgen en wat er nu wel in de code staat.quote:Op donderdag 22 september 2005 14:38 schreef The_Cyberspace het volgende:
Ik ben hier al een paar dagen mee aan het stoeien en ik snap er niks meer van.![]()
1 2 3 | media_id, media_type, media_file, media_artist, media_title, media_album, media_year, media_genre, media_playtime, media_resx, media_resy, media_bitrate, media_filesize, media_playcount |
1 | SELECT * FROM media LIMIT 0, 50 |
Oja, dankjewel!quote:Op donderdag 22 september 2005 20:51 schreef ikke_ook het volgende:
GROUP BY media_artist
Niemand enig idee, any idea?quote:Op donderdag 22 september 2005 14:13 schreef Roönaän het volgende:
Okee, het volgende:
fopen mag om een of andere obscure reden geen files aanmaken op de server. Als de file bestaat krijgt hij toegang, als de file niet bestaat krijg ik de "Could not open local file for writing".
De directory is chmod 0777, vanwege het testen.
Hoe kan het nou dat je geen files kan touchen/fopen/createn in een writable folder?
[ code verwijderd ]
-r-
Meestal is het zo dat er dan al een bepaald bestand bestaat dat niet de goede rechten heeft (geen write-rechten voor de webserver bijv.); maar als dat bestand niét bestaat dan zou het eigenlijk een tekort aan schijfruimte (of quota) moeten zijn.quote:
Dat zou je kunnen achterhalen door get_current_user() te gebruiken.quote:Op vrijdag 23 september 2005 00:16 schreef Roönaän het volgende:
Werkt ook niet. Snap het niet. Wat ik wel zie is dat de owner van de directory apache is.. zou dat het probleem zijn?
Zou alleen niet uit moeten maken, want de directory is drwxrwxrwx
1 2 3 | <?php [topic=100] ?> |
1 2 3 | <?php $i[msg] = preg_replace("/\[topic=(.*?)\]/ie", ubb_topictag("\1"), $i[msg]); ?> |
1 2 | SELECT submenu,name,id,level,file FROM b2b_modules WHERE level>='0' AND level<='10' AND level<>'1' AND place>'00' AND submenu='0' AND menu='1' ORDER BY place |
1 2 3 4 5 6 7 8 | SELECT submenu,name,id,level,file FROM b2b_modules WHERE level BETWEEN '0' AND '10' AND level<>'1' AND place>'00' AND submenu='0' AND menu='1' ORDER BY place en SELECT submenu,name,id,level,file FROM b2b_modules WHERE level in('0,2,3,4,5,6,7,8,9,10') AND place>'00' AND submenu='0' AND menu='1' ORDER BY place |
wtf?quote:ipv encoding kan je altijd obfuscaten. Dat werkt nog best okee
Het zou misschien handig zijn als de rest van de wereld ook weet in welke context dat stondquote:Op zaterdag 24 september 2005 23:29 schreef Swetsenegger het volgende:
Even een crosspostje roonaan
[..]
wtf?
obfuscating is dat je variabelen random namen geeft. Eventueel ook classes, filenames, en andere ongein, maar ten beginnen voornamelijk variabelen. Php kan het geen ruk schelen hoe een variabele heet. Als je dus zorgt dat je je variabele namen consistent veranderd gaat het goed.quote:Op zaterdag 24 september 2005 23:29 schreef Swetsenegger het volgende:
Even een crosspostje roonaan
[..]
wtf?
Later begreep ik het inderdaad.quote:Op zondag 25 september 2005 09:21 schreef Roönaän het volgende:
[..]
obfuscating is dat je variabelen random namen geeft. Eventueel ook classes, filenames, en andere ongein, maar ten beginnen voornamelijk variabelen. Php kan het geen ruk schelen hoe een variabele heet. Als je dus zorgt dat je je variabele namen consistent veranderd gaat het goed.
Het voordeel ten opzichte van encoden/encrypten is dat het process eenrichting is. Tenzij je een translation table bijhoudt.
Zelf heb ik het gebruikt voor een project dat zichzelf synchronized (qua code file) op twee server. De lokale server heeft alle bestanden clean zoals het hoort, de live versie heeft alle php files obfuscated. Via een mirror script wordt tijdens de synchronisatie de boel geobfuscate. Ik moet er nog een nette class van maken, maar die gooi ik daarna wel op mijn_site/lib.
-r-
Ik neem aan dat je de juiste mode gebruikt (namelijk w of a) in fopen(); ..quote:
Hij is zend certified engineer. Ik mag toch hopen dat hij DIE fout niet maaktquote:Op zondag 25 september 2005 12:29 schreef Modwire het volgende:
[..]
Ik neem aan dat je de juiste mode gebruikt (namelijk w of a) in fopen(); ..
Zelfs mode x werkt niet.quote:Op zondag 25 september 2005 12:29 schreef Modwire het volgende:
[..]
Ik neem aan dat je de juiste mode gebruikt (namelijk w of a) in fopen(); ..
En op wat voor manier beveilig je dan je scripts? Een 'oud' gezegde is 'security through obscurity does not work' en ik heb het idee dat dat ook hier het geval isquote:Op zondag 25 september 2005 09:21 schreef Roönaän het volgende:
[..]
obfuscating is dat je variabelen random namen geeft. Eventueel ook classes, filenames, en andere ongein, maar ten beginnen voornamelijk variabelen. Php kan het geen ruk schelen hoe een variabele heet. Als je dus zorgt dat je je variabele namen consistent veranderd gaat het goed.
Het voordeel ten opzichte van encoden/encrypten is dat het process eenrichting is. Tenzij je een translation table bijhoudt.
Hangt van je doel af. Als je niet wilt dat anderen leren van jouw code, dan is obfuscating een hele aardige optie. Probeer jij maar eens een obfuscated stuk code goed te begrijpen.quote:Op zondag 25 september 2005 13:01 schreef JeRa het volgende:
[..]
En op wat voor manier beveilig je dan je scripts? Een 'oud' gezegde is 'security through obscurity does not work' en ik heb het idee dat dat ook hier het geval is
doe ik dan wel de UNIX_TIMESTAMP krijg, maar in php kan ik die dan niet benaderen (bestaat gewoon niet ofzo). Naam en adres gaan prima.quote:$query = "SELECT naam, adres, UNIX_TIMESTAMP(tijd) FROM test";
$resultaat = mysql_query($query) or die ("query mislukt");
Moet gewoon werken hoor.quote:Op dinsdag 27 september 2005 15:56 schreef Nietmachine het volgende:
Uhuh, maar wat er automatisch met NOW() in het veld TIMESTAMP opgeslagen wordt is niet de UNIX_TIMESTAMP zoals PHP hem wil.
Ik ben nu zover dat als ik:
[..]
doe ik dan wel de UNIX_TIMESTAMP krijg, maar in php kan ik die dan niet benaderen (bestaat gewoon niet ofzo). Naam en adres gaan prima.
1 2 3 4 5 | $query = "SELECT naam, adres, UNIX_TIMESTAMP(tijd) as time_stamp FROM test"; $resultaat = mysql_query($query) or die ("query mislukt"); while($row = mysql_fetch_assoc($resultaat){ echo $row['time_stamp']; } |
Nee, en dat wil je ook niet.quote:Op dinsdag 27 september 2005 18:19 schreef Nietmachine het volgende:
Mijn id veld is mijn primary key met auto increment, als ik een rij verwijder mist er natuurlijk een getal.
Dus van 1 2 3 4 5 naar 1 2 3 5. Kun je dat weer mooi aan laten sluiten zodat het weer 1 2 3 4 wordt?
Dat hij dat niet wil is nog geen reden waarom het niet zou kunnen. Drop je id veld, en voeg een nieuwe AUTO_INCREMENT PRIMARY KEY 'id' toequote:Op dinsdag 27 september 2005 19:21 schreef Swetsenegger het volgende:
[..]
Nee, en dat wil je ook niet.
Ik gebruik zelf een pngtje met alpha-transparantie. Dan heb je volledige controle over het lettertype en de kleur. Ik gebruik ook lichte letters met een donkere border zodat het zowel op een lichte als donkere achtergrond leesbaar is.quote:Op woensdag 28 september 2005 04:40 schreef wonderer het volgende:
De eerste keer dat ik met PHP gegenereerde plaatjes aan het werk ga... een "copyright"Alleen staat er achter de string nog een of ander maf teken dat ik graag weg wil hebben. Het staat NIET in de string zelf, dus hoe het daar komt, weet ik ook niet.
http://www.nietoverdrijven.com/galleries/image.php?p=DSC02510.jpg&g=locatietour_september
Enige tips over hoe een leuke lettertype te krijgen ook welkom, maar eerst dat maffe ding weg.
Als je nou eens je code laat zienquote:Op woensdag 28 september 2005 04:40 schreef wonderer het volgende:
De eerste keer dat ik met PHP gegenereerde plaatjes aan het werk ga... een "copyright"Alleen staat er achter de string nog een of ander maf teken dat ik graag weg wil hebben. Het staat NIET in de string zelf, dus hoe het daar komt, weet ik ook niet.
http://www.nietoverdrijven.com/galleries/image.php?p=DSC02510.jpg&g=locatietour_september
Enige tips over hoe een leuke lettertype te krijgen ook welkom, maar eerst dat maffe ding weg.
Er is dus geen sql functie welke je id's opnieuw sorteert. Uiteraard kan je met kunst en vliegwerk de zooi weer sorterenquote:Op dinsdag 27 september 2005 23:19 schreef JeRa het volgende:
[..]
Dat hij dat niet wil is nog geen reden waarom het niet zou kunnen. Drop je id veld, en voeg een nieuwe AUTO_INCREMENT PRIMARY KEY 'id' toemaar niet doen dus.
Goed punt...quote:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php $file=$_SERVER["DOCUMENT_ROOT"].'/galleries/'.$galname.'/'.$paths["pics"].$pic; $font='3'; $header=file($galname.'/header.txt'); $maker=strip_tags($header[1]); $label='(c) '.$maker; $h = imagefontheight($font); $w = imagefontwidth($font) * strlen($label); $image = imagecreatefromjpeg($file); $colorFont = imagecolorallocate($image, 0xFF, 0xFF, 0xFF); $size = getimagesize($file); $dest_x = $size[0] - $w - 5; $dest_y = $size[1] - $h - 5; imagestring($image, $font, $dest_x, $dest_y, $label, $colorFont); imagejpeg($image); imagedestroy($image); ?> |
En wat staat er precies in header.txt ? is het niet een brak end of line teken wat ie nog uitspuugt?quote:Op woensdag 28 september 2005 15:00 schreef wonderer het volgende:
[..]
Goed punt...De reden waarom ik geen png gebruik, is dat de copyright niet altijd dezelfde naam is, ik zet er ook foto's van anderen neer. Ik moet dus een dynamisch iets hebben.
[ code verwijderd ]
Het copyright tekentje werkte ook al niet, dat werd een S met een omgekeerd dakje
De code komt oorspronkelijk van http://www.sitepoint.com/article/watermark-images-php <-- daar, ik heb een beetje lopen kloten met de dynamische tekst dus en was nogal verrast dat het uberhaupt werkte.
Voeg me toe op msn of stuur een mailtje, zie ik het vanzelf welquote:Op woensdag 28 september 2005 12:35 schreef Swetsenegger het volgende:
[..]
Ow ja, die session_id. Kom ik nog op terug
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |