Antwoord:quote:Op zaterdag 3 december 2005 14:55 schreef Onderbroek het volgende:
ik moet als opdracht voor school een klein invulschermpje maken (php). alles is goed gegaan maar ik weet niet hoe ik alles netjes onder elkaar kan zetten, misschien dat jullie mij daarmee kunnen helpen.
de code:
1
2
3
4
5
6
7
8
9
10
11
12<body>
<FORM name=Voornaam action=toon_keuze.php method=get>
<?php echo ("voornaam")?><INPUT value=... name=Voornaam><BR>
<?php echo ("achternaam")?><INPUT value=... name=Achternaam> <BR><BR>
<?php echo ("geslacht")?><BR>
<?php echo ("man")?><INPUT type=radio value=man name=geslacht> <BR>
<?php echo ("vrouw")?><INPUT type=radio value=vrouw name=geslacht> <BR><BR>
<?php echo ("interesse")?><BR>
<?php echo ("Volkskrant")?><INPUT type=checkbox value=Volkskrant name=Interesse> <BR>
<?php echo ("Algemeen Dagblad")?><INPUT type=checkbox value="Algemeen Dagblad" name=Interesse> <BR>
<INPUT type=submit value=send name=submit> </FORM>
</body>
1 2 3 4 5 6 | <tr width=100%> <td width="40%"><?php echo "voornaam" ?></td> <td> <INPUT value=... name=Voornaam></td> </tr> </table> |
ik heb alles in een tabel staan maar het blijft scheef...zou je misschien precies uit kunnen leggen hoe de code eruit moet zien?quote:Op zaterdag 3 december 2005 15:03 schreef existenz het volgende:
Laatste stukje uit vorige topic:
[..]
Antwoord:
[ code verwijderd ]
Hoeft dus niet in php te gebeuren Gewoon met tabellen of divjes in html werken.
quote:Op zaterdag 3 december 2005 15:13 schreef Onderbroek het volgende:
[..]
ik heb alles in een tabel staan maar het blijft scheef...zou je misschien precies uit kunnen leggen hoe de code eruit moet zien?
1 2 3 4 5 6 7 8 9 10 | <tr width=100%> <td width="40%"><?php echo "voornaam" ?></td> <td> <INPUT value=... name=Voornaam></td> </tr> <tr> <td><?php echo "achternaam" ?></td> <td> <INPUT value=... name=Achternaam></td> </tr> </table> |
Dat had ik kunnen weten dat het zoiets lomps zou zijnquote:
1 2 3 4 5 | <col width="40%"> <col width="60%"> <tr> ... |
Ik snap niet waarom je : <?php echo "Voornaam"; ?> gebruikt.... gewoon "Voornaam" doet precies hetzelfde dacht ik zo... Of ga je met verschillende talen werken? Dan moet je ze in variabelen gooien:quote:Op zaterdag 3 december 2005 15:03 schreef existenz het volgende:
Laatste stukje uit vorige topic:
[..]
Antwoord:
[ code verwijderd ]
Hoeft dus niet in php te gebeuren Gewoon met tabellen of divjes in html werken.
1 2 3 4 5 6 7 8 9 | $word_voornaam = "Voornaam"; $word_achternaam = "Achternaam"; enz... echo $word_voornaam; echo "<br><input type=\"text\" name=\"voornaam\"><br>"; Enz enz enz... ?> |
Ik heb geen flauw idee. Ik heb dat stuk uit de code van Onderbroek gekopieerd en heb dus geen idee wat hij er mee wil doen.quote:Op zaterdag 3 december 2005 16:04 schreef visvogel het volgende:
[..]
Ik snap niet waarom je : <?php echo "Voornaam"; ?> gebruikt.... gewoon "Voornaam" doet precies hetzelfde dacht ik zo... Of ga je met verschillende talen werken? Dan moet je ze in variabelen gooien:
<code>
<?
$word_voornaam = "Voornaam";
$word_achternaam = "Achternaam";
\\ enz...
echo $word_voornaam;
echo "<br><input type=\"text\" name=\"voornaam\"><br>";
\\Enz enz enz...
?>
</code>
ik moet gewoon een invulschermpje maken voor een oefenopdracht voor school. Het is de bedoeling dat je op deze manier php leert kennen.quote:Op zaterdag 3 december 2005 16:06 schreef existenz het volgende:
[..]
Ik heb geen flauw idee. Ik heb dat stuk uit de code van Onderbroek gekopieerd en heb dus geen idee wat hij er mee wil doen.
Je mist volgens mij een puntkomma (';') achter de echo'squote:Op zaterdag 3 december 2005 15:47 schreef existenz het volgende:
[..]
[ code verwijderd ]
Dus per "rij" een <tr> (tabel row) met 2 <td>'s (Tabel d?? (wtf is die d eigenlijk?) kolom).
Dankje weer wat html geleerdquote:Op zaterdag 3 december 2005 16:04 schreef SuperRembo het volgende:
In plaats van de width op elke td zetten, is het mss makkelijker om de col-tag te gebruiken:
[ code verwijderd ]
ow....quote:Op zaterdag 3 december 2005 16:54 schreef SuperRembo het volgende:
Voor de php sluittag (?>) hoeft geen ;
Hoeft niet perse. Je kunt ook gewoon 1x de size zetten. Daarna kopieert ie hem voor de rest. Is gewoon wat je makkelijk vind. Je zou het zelfs in je CSS kunnen opnemen als je dat liever hebt.quote:Op zaterdag 3 december 2005 16:04 schreef SuperRembo het volgende:
tr: table row
td: table data cell
th: table header cell
Daar is niets onlogisch aan.
In plaats van de width op elke td zetten, is het mss makkelijker om de col-tag te gebruiken:
[ code verwijderd ]
Je zou het ook met een definitionlist (dl) kunnen stylen.
quote:Op zaterdag 3 december 2005 17:09 schreef the_disheaver het volgende:
[..]
Hoe voorkomen jullie die irritante fouten als een variable een verkeerde naam te geven waardoor je uren zit te staren waarom ie het niet doet...?
1 |
Daar zijn standaard geoptimaliseerde oplossingen voor in googlequote:Op zaterdag 3 december 2005 21:24 schreef Wifibro het volgende:
Ik wou even zeggen dat er helemaal geen nieuwe PHP GOLF #7 is gestart op http://www.phpfreakz.nl/forum.php?iid=741097, waarin je zonder eval() toch moet proberen in zo weinig mogelijk tekens een per formulier ingevoerd sommetje weer te geven met 2 decimalen.
En dat er een verzoek is om ook hier geen oplossingen te posten. Allemaal laster en leugens!
ik heb ze idd nog niet anders mee gemaakt..quote:Op zaterdag 3 december 2005 23:35 schreef existenz het volgende:
Die ZCE courses zijn net zo lomp als elk ander certificaat. Jammer, je leert er weer niets van. Gewoon uit je kop stampen en je hebt je certificaat. Helaas is dat bij elk examen tegenwoordig zo![]()
Ja, vroegâhquote:Op zondag 4 december 2005 00:00 schreef mschol het volgende:
[..]
ik heb ze idd nog niet anders mee gemaakt..
waren die er wel dan?
Ik denk eerder dat het om je werkgever gaat.quote:Op zondag 4 december 2005 03:45 schreef DionysuZ het volgende:
geen enkele klant van mij tot nu toe heeft ooit gehoord van Zend of het zijn van een ZCE, dus ik vraag me werkelijk af of het zijn geld waard is. (eigenlijk een soort van tvp dus)
maar die heb ik nietquote:Op zondag 4 december 2005 04:38 schreef JeRa het volgende:
[..]
Ik denk eerder dat het om je werkgever gaat.
Daarom. Je klanten zal het in 99% van de gevallen aan hun aarschen roesten wat voor certificaten je hebt, als het gewenste product maar afgeleverd wordt.quote:
Dat zou moeten werken, tenzij PHP als CGI draait ipv als Apache Module. Workaround isquote:Op maandag 5 december 2005 14:48 schreef papernote het volgende:
Maar als ik de volgende regel invoer in mijn .htaccess:
php_value upload_max_filesize 20M
Dan krijg ik een mooie 500 Internal Error nogwat. En bijkomend voordeel is, dat m'n hele site offline is
1 |
upload_max_filesize is 'changeable' PHP_INI_PERDIR, dus: " Entry can be set in php.ini, .htaccess or httpd.conf".quote:Op maandag 5 december 2005 15:00 schreef Niox het volgende:
[..]
Dat zou moeten werken, tenzij PHP als CGI draait ipv als Apache Module. Workaround is
[ code verwijderd ]
in je script zetten
een extra kolom in de huidige tabel met daarin true/false werkt ook, echter zal dat de consistentie van de database niet te goede komen. Boeit je dat niets (Geldt voor 99% vd phpérs), dan is je tabel uitbreiden het makkelijkste voor je, anders de oplossing voor cyberstalker. Die is netter.quote:Op maandag 5 december 2005 20:04 schreef cyberstalker het volgende:
Maak gewoon een extra tabel, waarin je de historie opslaat.
De volgende velden o.i.d.
- userId (de gebruiker die het product heeft gekocht)
- productId (id van het aangeschafte product)
- eventueel nog datum/tijd kolom
Ik heb het in m'n .htaccess proberen in te stellen, toen kwam er een 500 Internal Server Error en was m 'n site downquote:Op maandag 5 december 2005 17:22 schreef SuperRembo het volgende:
Je kan proberen of je het in een .htaccess file kan instellen. Als dat niet kan dan heeft je webhost het geblokkerd (wat me niet onverstandig lijkt).
Ik wilde zeggen:quote:Op maandag 5 december 2005 21:19 schreef Desdinova het volgende:
dat weet ik
haha. maar hoe moet ik t form opzetten?
form tag begint, dan komen alle items met bijbehorende checkboxes (via een while), en dan het eind van de form tag.
en dan als name van elk item iets van 'items[]' doen ofzo? zo wordt het een array toch?
maar hoe vang ik het dan weer op bij de uiteindelijke verwerking
1 2 3 | clb.DataSource = this.data; clb.DataMember = "Veldje"; |
Ohquote:Op maandag 5 december 2005 21:31 schreef cyberstalker het volgende:
@existenz: hij wil juist weten hoe hij het formulier goed verwerkt na het versturen volgens mij.
1 2 3 | echo '<b>' . $key . '</b>: ' . $value . '<br />'; } |
1 2 3 4 | while (list($key, $value) = each($array)) { echo '<b>' . $key . '</b>: ' . $value . '</br >'; } |
Klanten zal het waarschijnlijk ook niet zo heel veel uitmaken welke taal je gebruikt voor een site. Ik denk dat een klant eerder zegt "ik wil een online shop" dan "ik wil een online shop in php". Als een klant al weet wat php is dan nog zullen ze er niet alles van weten, ook niet dat er een bedrijf Zend achter zit. En als je dat niet weet dan is het logisch dat ZCE je ook niets zegt.quote:Op zondag 4 december 2005 05:42 schreef JeRa het volgende:
[..]
Daarom. Je klanten zal het in 99% van de gevallen aan hun aarschen roesten wat voor certificaten je hebt, als het gewenste product maar afgeleverd wordt.
True, dat kan wel handig zijnquote:Werkgevers denken daar in eerste instantie niet zo over en kunnen aan certificaten als ZCE zien dat je de nodige kennis in huis hebt
1 2 3 4 5 6 7 | [tab="link1"]Link #1[/tab] [tab="link2"]Link #2[/tab] [tab="link3"]Link #3[/tab] [tab="link4"]Link #4[/tab] [tab="link5"]Link #5[/tab] [/menu] |
1 2 3 4 5 6 7 8 9 10 11 12 | <tr> <th colspan="5">Menu Titel</th> </tr> <tr> <td><a href="link1">Link #1</a></td> <td><a href="link2">Link #2</a></td> <td><a href="link3">Link #3</a></td> <td><a href="link4">Link #4</a></td> <td><a href="link5">Link #5</a></td> </tr> </table> |
1 2 | "/\[tab=\"(.+?)\"\](.+?)\[\/tab\]/ies" |
Dan verwissel je dat toch gewoon in je INSERT INTO regel?quote:Op dinsdag 6 december 2005 11:51 schreef Desdinova het volgende:
ik heb een vraagje over Insert-select.
Dat is dus iets van:
INSERT INTO table1 (col1, col2, col3)
SELECT table1.col1, table1.col2, table1.col3
FROM table1 WHERE ID = $id
nou wil ik dit een tikkie anders. in plaats van dat table1.col2 in table1.col2 wordt ingevoerd, wil ik daar $col2 invoeren. Hoe doe ik dat?
tevens las ik iets over dat je niet kan insert-selecten en lezen uit dezelfde tabel tegelijk. Dat zou dus betekenen dat ik helemaal niet mijn items kan kopieren van table1 naar table1. klopt dat?
quote:Op dinsdag 6 december 2005 12:28 schreef cyberstalker het volgende:
[..]
Dan verwissel je dat toch gewoon in je INSERT INTO regel?
Doe je het vanuit php? dan lijkt me dat je zo je query in elkaar draait:quote:Op dinsdag 6 december 2005 11:51 schreef Desdinova het volgende:
INSERT INTO table1 (col1, col2, col3)
SELECT table1.col1, table1.col2, table1.col3
FROM table1 WHERE ID = $id
nou wil ik dit een tikkie anders. in plaats van dat table1.col2 in table1.col2 wordt ingevoerd, wil ik daar $col2 invoeren. Hoe doe ik dat?
1 2 3 | (SELECT table1.col1, ".$col.", table1.col3 FROM table1 WHERE ID = ".$id.")"; |
Je haalt dan gewoon eerst in je php script de data op die je wilt kopieren, en dan insert je het ook weer vanuit je php-script. Gewoon 1 extra tussenstap.quote:tevens las ik iets over dat je niet kan insert-selecten en lezen uit dezelfde tabel tegelijk. Dat zou dus betekenen dat ik helemaal niet mijn items kan kopieren van table1 naar table1. klopt dat?
quote:Op dinsdag 6 december 2005 12:20 schreef Nevermind het volgende:
Een regexp vraagje:
De volgende code:
[ code verwijderd ]
Moet iets dergelijks als dit worden:
[ code verwijderd ]
Er is dus een variabel aantal menu-items. Nou heb ik wel deze expressies:
[ code verwijderd ]
Maar, ik zou het graag in één preg_replace willen hebben. Er wordt, indien deze expressie aangetroffen wordt, een functie aangeroepen die het menu (de tabel) bouwt. Komt het volgende probleem erbij; hoe kan ik een variabel aantal items naar een functie sturen? Alle [tab=\"bla\"]bla[/tab] in een array stoppen is bijvoorbeeld een mogelijkheid, maar hoe doe ik dat via een preg_replace?
1 |
aah ok. heel simpel dus eigenlijk. gaat idd vanuit php.quote:Op dinsdag 6 december 2005 12:58 schreef Jimmy het volgende:
[..]
Doe je het vanuit php? dan lijkt me dat je zo je query in elkaar draait:
[ code verwijderd ]
[..]
Je haalt dan gewoon eerst in je php script de data op die je wilt kopieren, en dan insert je het ook weer vanuit je php-script. Gewoon 1 extra tussenstap.
Wat is trouwens de situatie waarin je regels wilt kopieren?
Bedankt voor de hulpquote:Op dinsdag 6 december 2005 12:59 schreef Light het volgende:
[..]
[ code verwijderd ]
Zo even uit de losse pols, niet getest dus
Gebruik de /e-modifier op deze manier:quote:Op dinsdag 6 december 2005 15:06 schreef Nevermind het volgende:
[..]
Bedankt voor de hulpMaar, hoe gebruik ik de gevonden waarden in een functie? De preg_replace roept de functie buildMenu() aan, hoe geef ik de argumenten daar aan door? Ik heb dan toch iets nodig als de $matches-array die je bijvoorbeeld bij preg_match hebt?
1 |
Dat kan wel eens lastig worden als je niet weet hoeveel argumenten er zijn.quote:Op dinsdag 6 december 2005 15:45 schreef JeRa het volgende:
[..]
Gebruik de /e-modifier op deze manier:
[ code verwijderd ]
En dan zou het moeten lukkenje kunt dus gewoon argumenten in de vervangingsstring meegeven.
Och ja, dan gebruik je toch preg_replace_callback()?quote:Op dinsdag 6 december 2005 16:02 schreef Light het volgende:
[..]
Dat kan wel eens lastig worden als je niet weet hoeveel argumenten er zijn.
Ik had het ook niet getestquote:Op dinsdag 6 december 2005 23:00 schreef JeRa het volgende:
Ik wist het zo ook niet Nevermind, in alle testcases die ik had gedaan kwam dezelfde fout naar bovenaltijd werd het laatste subelement geretourneerd ipv. alle subelementen. Ik denk dat dat gewoon de implementatie van de PCRE-functies 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 | { $sizes = getimagesize($start_image); $extension = addslashes($sizes['mime']); if(in_array($extension, array('image/jpg','image/jpeg','image/pjpeg'))){$src_img=imagecreatefromjpeg($start_image);} elseif (eregi("image/png",$extension)){$src_img=imagecreatefrompng($start_image);} else {imagecreatefromgif($start_image);} //print_r($sizes); $old_x = $sizes[0]; $old_y = $sizes[1]; if ($old_x > $old_y) { $thumb_w=$new_w; $thumb_h=$old_y*($new_h/$old_x); } if ($old_x < $old_y) { $thumb_w=$old_x*($new_w/$old_y); $thumb_h=$new_h; } if ($old_x == $old_y) { $thumb_w=$new_w; $thumb_h=$new_h; } $thumb_w =ceil($thumb_w); $thumb_h =ceil($thumb_h); $dst_img=ImageCreateTrueColor($thumb_w,$thumb_h); imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y) or die($enddirectory_image.'<br>'.$thumb_w.'<br>'.$thumb_h.'<br>'.$old_x.'<br>'.$old_y); if(in_array($extension, array('image/jpg','image/jpeg','image/pjpeg'))) {imagejpeg($dst_img,$enddirectory_image);} elseif (eregi("image/png",$extension)) {imagepng($dst_img,$enddirectory_image);} else {imagegif($dst_img,$enddirectory_image);} imagedestroy($dst_img); } |
Ik heb het opgelost door de inhoud van de [menu]-tag (alle [tab]-tags dus) door te sturen naar een functie, en die dan te parsen. Dan kan ik het zelf nog begrijpen in ieder gevalquote:Op woensdag 7 december 2005 00:15 schreef Light het volgende:
[..]
Ik had het ook niet getestMakkelijkere optie is waarschijnlijk om toch maar gebruik te maken van 2 expressies, als je dat handig aanpakt dan werkt die tweede alleen op de match van de eerste. Dat kan ook in de callback functie van de /e modifier natuurlijk
misschien gewoon met imagecreate?quote:Op woensdag 7 december 2005 18:31 schreef Darkomen het volgende:
DOH, ff zoeken hoe wel gif images te resizen
1 2 3 4 5 6 | $r=mysql_query($query); $row=mysql_fetch_assoc($r); if($row['aantal']!=0){ echo'<script type="text/javascript">if (confirm(\'verwijderen?\')){document.write(\'<?//delete query;?>\')}</script>'; } |
Hoezo niet? Kun je die gif niet laden en naar een truecolor canvas kopiëren?quote:Op woensdag 7 december 2005 21:04 schreef Darkomen het volgende:
maar dat ging weer niet met mn gifs
Tja, of een mooi plaatje, of een lelijke animatie. Denk niet dat je het heel gemakkelijk kunt oplossen, hoewel er misschien wel ergens implementaties van een gif-resizer te vinden zijnquote:Op woensdag 7 december 2005 21:27 schreef Darkomen het volgende:
Ze bewegen dan niet meer
1 |
Thnx.quote:Op woensdag 7 december 2005 21:45 schreef JeRa het volgende:
Je mag kolomnamen niet met singlequotes omvatten, dat zul je zonder moeten doen of met backticks (`), die zit links van je niet-keypad '1'-knop op je toetsenbord.
Overigens wordt het over het algemeen wel gewaardeerd als je bij iets dat 'niet werkt' een foutmelding levertdan kunnen we meestal wat sneller zien waar de fout zit.
Hmz...., ja dat kan werken.quote:Op woensdag 7 december 2005 19:30 schreef SuperRembo het volgende:
Dan zal je met een XMLHttpRequest moeten kijken of je een confirm moet tonen.
Inderdaad. Waarom vraag je niet standaard om een confirm (je verwijdert iets!)?quote:Op woensdag 7 december 2005 23:03 schreef SuperRembo het volgende:
Een XMLHttpRequest is voor php een request (get of post) als alle andere.
Je haalt je wel flink wat op de hals, en dat alleen om een confirm over te kunnen slaan.
Het gaat om een menu item. En ik wil eigenlijk een EXTRA warning geven wanneer er aan dat menu item produkten gekoppeld zijn.quote:Op woensdag 7 december 2005 23:13 schreef JeRa het volgende:
[..]
Inderdaad. Waarom vraag je niet standaard om een confirm (je verwijdert iets!)?
Dit is dus nog vrij moeilijk te vinden, wel genoeg mensen die met hetzelfde zittenquote:Op woensdag 7 december 2005 21:33 schreef JeRa het volgende:
[..]
Tja, of een mooi plaatje, of een lelijke animatie. Denk niet dat je het heel gemakkelijk kunt oplossen, hoewel er misschien wel ergens implementaties van een gif-resizer te vinden zijn
Ik zou dát als oplossing nemen met eventueel een extra melding ná het verwijderen in de trant van 'Het door u zojuist verwijderde menu-item bevatte subitems die nu niet meer gekoppeld zijn'.quote:Op donderdag 8 december 2005 08:21 schreef Swetsenegger het volgende:
[..]
Maar het is inderdaad een hoop moeite voor een extra warning. En in principe is het ergste wat er kan gebeuren dat je via het menu niet meer bij een aantal produkten kan komen. Die moet je dan in het CMS eerst aan een andere menu item koppelen.
Kan fok het ook?quote:Op donderdag 8 december 2005 10:15 schreef Darkomen het volgende:
[..]
maar fok kan het ook, dus waarom wij niet
Dat is wel een mooie oplossing inderdaad.quote:Op donderdag 8 december 2005 10:27 schreef JeRa het volgende:
[..]
Ik zou dát als oplossing nemen met eventueel een extra melding ná het verwijderen in de trant van 'Het door u zojuist verwijderde menu-item bevatte subitems die nu niet meer gekoppeld zijn'.
Sowieso is het geen risico voor het menu. Parents kunnen niet verwijderd worden, alleen childeren/leafenodes. Alleen het diepste level dus.quote:Een alternatief is om alle subitems onder de parent van het zojuist verwijderde item te hangen, maar dit is niet professioneel op een live site en moet je alleen doen als je het menu naar hartelust kunt wijzigen zónder dat dit effect heeft op het 'echte' menu.
Als je de usericons op de FP bedoelt, die zijn "geresized" met width="30" height="30".quote:Op donderdag 8 december 2005 10:15 schreef Darkomen het volgende:
[..]
maar fok kan het ook, dus waarom wij niet
1) Ofwel bedoel je de iconmanager, dus dat je GIF-afbeeldingen kunt uploaden en als vaste usericon kunt gebruiken. Voor zover ik weet kan die geen GIF-animaties resizen.quote:Op donderdag 8 december 2005 13:22 schreef Darkomen het volgende:
Bedoel die hier op het forum, maar daar is het vast hetzelfde :$
1 2 3 4 5 6 7 8 9 10 11 | Tree[1] = "2|1|Page 1.1|#"; Tree[2] = "3|1|Page 1.2|#"; Tree[3] = "4|3|Page 1.2.1|#"; Tree[4] = "5|1|Page 1.3|#"; Tree[5] = "6|2|Page 1.1.1|#"; Tree[6] = "7|6|Page 1.1.1.1|#"; Tree[7] = "8|6|Page 1.1.1.2|#"; Tree[8] = "9|1|Page 1.4|#"; Tree[9] = "10|9|Page 1.4.1|#"; Tree[10] = "11|0|Page 2|#"; |
1 2 3 4 5 6 7 | 1|1|system32|C://WINDOWS/system32 1|1|config|C://WINDOWS/system32/config 1|1|systemprofile|C://WINDOWS/system32/config/systemprofile 1|1|Local Settings|C://WINDOWS/system32/config/systemprofile/Local Settings 1|1|Temp|C://WINDOWS/system32/config/systemprofile/Local Settings/Temp 1|2|Geschiedenis|C://WINDOWS/system32/config/systemprofile/Local Settings/Geschiedenis |
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 | error_reporting(E_ALL); function scantree($start, $fDb = 0, $pathCount = 0) { // global $fDb; $fDb++; $pathcount = 0; $dir = opendir($start); while (($file = readdir($dir)) != false) { if (is_dir($start . "/" . $file) && $file != "." && $file != "..") { $pathcount++; echo 'test[' . $fDb . '] = ' . $fDb + 1 . '|' . $pathcount . '|' . $file . '|' . $start . "/" . $file . CHR(13) . CHR(10); scantree($start . "/" . $file, $fDb, $pathCount); } } } $fDb = -1; if (isSet($_GET['drive']) && substr($_GET['drive'], 1,1) == ":") { scantree($_GET['drive'] . "/");// the tree looping can begin } else { echo 'no ow no'; } |
Regel 23. Je gebruikt de functie scantree in de functie scantree?quote:Op donderdag 8 december 2005 16:45 schreef Chandler het volgende:
Luitjes..
[ code verwijderd ]
dit is wat ik wil crearen met een tree loper echter krijg ik het niet goed voor elkaar en krijg steeds 1|1 1|2 etc
vb
[ code verwijderd ]
zoals je ziet gaat het ergens goed fout, echter zie ik niet waar!?
de code
[ code verwijderd ]
allemaal weer uit het hoofd, maar goed... iemand een suggestie!?
Ik snap je voorbeeld nietquote:Op donderdag 8 december 2005 17:30 schreef Chandler het volgende:
dat kan toch, dat is juist nodig voor de diepgang
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | if(is_numeric($_GET['id']) && is_numeric($_GET['right'])){ deleteLeaf($_GET['right'],$_GET['id']); } } function deleteLeaf($right,$id){ $query="DELETE FROM menu WHERE id=".$id." LIMIT 1"; mysql_query($query); $query="UPDATE menu SET rgt=rgt-2 WHERE rgt>".$right; mysql_query($query); $query="UPDATE menu SET lft=lft-2 WHERE lft>".$right; mysql_query($query); header("location: ".$_SERVER['PHP_SELF']); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | var url = "checkProduct.php?id="; // The server-side script var http = getHTTPObject(); function handleHttpResponse() { if (http.readyState == 4) { results = http.responseText; if(results!=0){ if(confirm('Aan dit menu-item zijn produkten gekoppeld!\nIndien u dit menu-item verwijderd, moet u er rekening mee houden de produkten aan een ander menu-item te koppelen.\nMenu-item verwijderen?')){ alert('verwijder'); } }else{ if(confirm('Weet u zeker dat u dit menu-item wilt verwijderen?')){ alert('verwijderd') } } } } function checkProduct(id) { http.open("GET", url + escape(id), true); http.onreadystatechange = handleHttpResponse; http.send(null); } function getHTTPObject() { var xmlhttp; /*@cc_on @if (@_jscript_version >= 5) try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp = false; } } @else xmlhttp = false; @end @*/ if (!xmlhttp && typeof XMLHttpRequest != 'undefined') { try { xmlhttp = new XMLHttpRequest(); } catch (e) { xmlhttp = false; } } return xmlhttp; } </script> |
1 |
1 2 3 4 5 6 | http.open("GET", url + escape(id), true); http.onreadystatechange = handleHttpResponse(id); http.send(null); } |
hehehequote:Op donderdag 8 december 2005 20:19 schreef SuperRembo het volgende:
@chandler:
Zet eens haakje om $fDb + 1
Lang leve loose typed talen
Zorgt er voor dat http.onreadystatechange gelijk wordt aan de functie handleHttpResponse.quote:http.onreadystatechange = handleHttpResponse;
Zorgt er voor dat http.onreadystatechange gelijk wordt aan het resultaat van het uitvoeren van handleHttpResponse(id).quote:http.onreadystatechange = handleHttpResponse(id);
1 2 3 4 5 6 7 8 9 | http.open("GET", url + escape(id), true); http.onreadystatechange = function() { if (http.readyState == 4) { checkProductCallback(id); } } http.send(null); } |
1 2 3 4 5 6 | id=id; //Dit maakt de var id global http.open("GET", url + escape(id), true); http.onreadystatechange = handleHttpResponse(id); http.send(null); } |
Closure werkte ook, maar een aparte functie was even netterquote:Op donderdag 8 december 2005 20:40 schreef SuperRembo het volgende:
@swetsenegger:
[..]
Zorgt er voor dat http.onreadystatechange gelijk wordt aan de functie handleHttpResponse.
[..]
Zorgt er voor dat http.onreadystatechange gelijk wordt aan het resultaat van het uitvoeren van handleHttpResponse(id).
Dit kan je op verschillende manieren oplossen.
Met een closure:
[ code verwijderd ]
Doordat de functie binnen de functie checkProduct wordt gedefinieerd, blijft de scope van checkProduct behouden. Daardoor is id binnen de onreadystatechange functie nog bekend op het moment dat die aangeroepen wordt.
Een andere oplossing is dat je niet alleen het aantal producten terug stuurt, maar ook de id.
Ah... dus wanneer ik delete.php?id=6 stuur en er voor kies NIET te deleten, kan hij de volgende keer abusievelijk zeggen dat er produkten aan 6 gekoppeld zitten wat niet het geval is? Cached hij in temp files?quote:Internet Explorer heeft trouwens een vervelende bug: het resultaat van de httprequest wordt gecached. Als de url van twee requests gelijk zijn, dan wordt geen cal naar de server gedaan, maar krijg je gewoon de eerder opgehaalde resultaten terug. Dit is gelukkig simpel te voorkomen door een random string aan de url toe te voegen.
Klopt, maar het was gecombineerd door de xmlhttprequest. Ik heb 'm dus in beide topics gecrosspostquote:Dit is trouwens allemaal clientside scripting, dus meer iets voor het javascript topic.
wrom niet?quote:Op donderdag 8 december 2005 20:42 schreef SuperRembo het volgende:
Dit lijkt me geen handige oplossing
1 2 3 | id=menu; //var global maken right=rgt; //var global maken |
Dat vind ik zo'n kromme oplossing, maar kan het écht niet anders?quote:Op donderdag 8 december 2005 20:49 schreef DionysuZ het volgende:
if ($_FILES["Avatar"]["size"] > 0)
if($_FILES['avatar']['tmp_name']!='') om te checken of er een bestandsnaam is ingevuldquote:Op donderdag 8 december 2005 20:47 schreef wobbel het volgende:
Hoe kijk of ik er wel écht een bestand wordt geupload bij een formulier met een file-field?
if($_FILES['Avatar']) is namelijk altijd positief, ook als ik geen enkel bestand invul.
Ik heb if($_FILES['Avatar']['tmp_name']) en name ook al gebruikt, maar dan kan ik bij het file-field ook wat random tekens invullen ipv een bestand, en dan zegt ie alsnog dat er wél een bestand is geupload.
Ik heb http://nl2.php.net/features.file-upload er al op nageslagen, maar het helpt me niet echt :s
dan kan ik een PHP file ook wel de extensie .jpg geven, en met punten erin wordt het ook een probleem.quote:Op donderdag 8 december 2005 20:52 schreef Swetsenegger het volgende:
[..]
if($_FILES['avatar']['tmp_name']!='') om te checken of er een bestandsnaam is ingevuld
if(preg_match("/\.(jpg)$/i", $_FILES['avatar']['name'])) om te checken of de geuploade file een jpg is (uiteraard aan te passen voor gif, etc)
ik zou eerder $_FILES["avatar"]["type"] gebruiken om te checken of het een jpg is..quote:Op donderdag 8 december 2005 20:52 schreef Swetsenegger het volgende:
[..]
if($_FILES['avatar']['tmp_name']!='') om te checken of er een bestandsnaam is ingevuld
if(preg_match("/\.(jpg)$/i", $_FILES['avatar']['name'])) om te checken of de geuploade file een jpg is (uiteraard aan te passen voor gif, etc)
http://nl2.php.net/features.file-uploadquote:Op donderdag 8 december 2005 20:50 schreef wobbel het volgende:
[..]
Dat vind ik zo'n kromme oplossing, maar kan het écht niet anders?
Dat is voor de link van het vorige mapjequote:Op donderdag 8 december 2005 18:45 schreef JeRa het volgende:
[..]
Ik snap je voorbeeld nietdat het eerste getal telkens opgehoogd dient te worden snap ik (heb je eigenlijk niet eens nodig maar toch), maar wat doet het tweede getal?
1 2 3 | 2 program files 3 documents and settings |
1 2 3 4 5 6 7 | 2|1| Windows\System 3|1| Windows\Temp 4|3| Windows\Temp\inst_all 5|1| Program files 6|5| Program files\Winzip 7|1| Documents and Settings |
Je hebt inderdaad gelijk, zal eens kijken of de error daaruit komtquote:Op donderdag 8 december 2005 18:58 schreef DionysuZ het volgende:
wat lelijk dat hoofdlettergebruik ook :S $pathcount en $pathCount. Het werkt ZEER verwarrend. En zo geef je als je recursief scantree weer aanroept $pathCount en niet $pathcount, degene die opgehoogd wordt.
Ga ik ook doenquote:Op donderdag 8 december 2005 20:19 schreef SuperRembo het volgende:
@chandler:
Zet eens haakje om $fDb + 1
quote:Lang leve loose typed talen
Voordelenquote:Op donderdag 8 december 2005 20:27 schreef DionysuZ het volgende:
hehehehet heeft door zijn simpliciteit natuurlijk ook veel voordelen.
Ja klopt, die check je vervolgens tegen je preg_match en indien dat niet klopt ban je sucker gelijkquote:Op donderdag 8 december 2005 20:55 schreef DionysuZ het volgende:
[..]
ik zou eerder $_FILES["avatar"]["type"] gebruiken om te checken of het een jpg 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 | error_reporting(E_ALL); function scantree($start, $fDb = 0, $pathcount = 0) { // global $fDb; $fDb++; $dir = opendir($start); while (($file = readdir($dir)) != false) { if (is_dir($start . $file) && $file != "." && $file != "..") { $pathcount++; echo 'test[' . $pathcount . '] = ' . ($fDb + 1) . '|' . $pathcount . '|' . $file . '|' . $start . $file . CHR(13) . CHR(10); scantree($start . $file . "/", $fDb, $pathcount); } } } $fDb = -1; if (isSet($_GET['drive']) && substr($_GET['drive'], 1,1) == ":") { scantree($_GET['drive'] . "/");// the tree looping can begin } else { echo 'no ow no'; } |
quote:
1 2 3 4 5 6 7 8 9 10 11 | echo $a;// $a is een string $a = 'test'. 1; echo $a;// $a is een string $a = 'test'. 1 + 2; echo $a;// $a is nu een integer $a = 'test'. 1 + 2 .'drie'; echo $a;// $a is weer string |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | php if($ext == "jpeg" || $ext == "jpg") { imagejpeg($_SERVER['HTTP_HOST']."/".$_GET['pic']); } if($ext == "bmp") { imagewbmp($_SERVER['HTTP_HOST']."/".$_GET['pic']); } if($ext == "gif") { imagegif($_SERVER['HTTP_HOST']."/".$_GET['pic']); } if($ext == "png") { imagepng($_SERVER['HTTP_HOST']."/".$_GET['pic']); } ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 | if($_FILES['Avatar']['type'] == "image/jpg" OR $_FILES['Avatar']['type'] == "image/jpeg" OR $_FILES['Avatar']['type'] == "image/pjpg" OR $_FILES['Avatar']['type'] == "image/pjpeg" OR $_FILES['Avatar']['type'] == "image/gif") { // Tjekken op size :P $SizeX = imagesx($_FILES['Avatar']['tmp_name']); $SizeY = imagesy($_FILES['Avatar']['tmp_name']); echo $SizeX . " en de ander is " . $SizeY; } ?> |
1 2 3 | Warning: imagesy(): supplied argument is not a valid Image resource in /home/xostnl/public_html/tccl/member_avatar.php on line 69 |
of met javascript je menuframe reloaden (iets van menuframe.location.reload ofzo...)quote:Op donderdag 8 december 2005 22:01 schreef Fugie het volgende:
jo even een vraagje, ik heb een inlogfunctie (heel simpel) en ik wil dat wanneer iemand succesvol inlogd mijn menuframe wordt refreshed. Nu heb ik tot nu toe niets werkend gekregen, ik kan de functie header niet gebruiken omdat ik dan een foutmelding krijg dat de header al eerder is verzonden en de enige andere manier die ik tot nu tegenkwam was een stukkie javascript erin ramme maar dat heeft ook nog niet gewerkt. Iemand hier nog een idee ?
ja ik heb dat al geprobeerd ja maar dat haalde om de 1 of andere suffe reden niets uitquote:Op donderdag 8 december 2005 22:05 schreef mschol het volgende:
[..]
of met javascript je menuframe reloaden (iets van menuframe.location.reload ofzo...)
of je hele frameset pagina opnieuw aanroepen...
probeer getimagesize eensquote:Op donderdag 8 december 2005 22:02 schreef wobbel het volgende:
Krijg bij deze code, onderstaande error....
[ code verwijderd ]
[ code verwijderd ]
imagey(); doen met de afbeelding, en dan daar bijv 10 pixels vanaf halen, en op die hoogte de tekst plaatsen.quote:Op donderdag 8 december 2005 21:54 schreef mschol het volgende:
ik zit met klein, waarschijnlijk simpel, probleempje...
ik heb met een htaccess bestand gezorgd dat al mijn plaatjes op mijn server lopen via een php bestand dit ziet er als volgt uit:
[ code verwijderd ]
nou wil ik een stukkie tekst toevoegen aan een plaatje..
hoe kan ik het zo doen dat de tekst procentueel gezien op dezelfde hoogte komt...?
werktquote:Op donderdag 8 december 2005 22:09 schreef wobbel het volgende:
[..]
imagey(); doen met de afbeelding, en dan daar bijv 10 pixels vanaf halen, en op die hoogte de tekst plaatsen.
Als je de tekst wilt centeren, moet je een imagettftextbox gebruiken dacht ik (horizontaal)
Maar als hij een tekst over de afbeelding wil poepen, moet hij dat zoiezo in GD gaan doen, tenzij hij met HTML wi lgaan prutsen,quote:Op donderdag 8 december 2005 22:11 schreef the_disheaver het volgende:
Moet voor imagesx/y niet een gd-image achtige variable zijn? (geen idee hoe ik het goed uitleg...)
In de php comments kijkend, zou het wel kunnen als je er tusen magecreatefromgif() gebruikt, maar daar heb je dus GD voor nodig.
Maar als je alleen de hoogte/breedte nodig hebt, kun je ook gewoon getimagesize() gebruiken.
image_data = getimagesize($imagepath);
komt een array uit met [0] = witdh, [1]=heigth en nog enkele variables.
Als je er 10 pixels af haalt, heb je niet een procentuele gelijke hoogte.quote:Op donderdag 8 december 2005 22:09 schreef wobbel het volgende:
[..]
imagey(); doen met de afbeelding, en dan daar bijv 10 pixels vanaf halen, en op die hoogte de tekst plaatsen.
Als je de tekst wilt centeren, moet je een imagettftextbox gebruiken dacht ik (horizontaal)
Was meer op jou vraag van toepassingquote:Op donderdag 8 december 2005 22:13 schreef wobbel het volgende:
[..]
Maar als hij een tekst over de afbeelding wil poepen, moet hij dat zoiezo in GD gaan doen, tenzij hij met HTML wi lgaan prutsen,
Mag ik vragen waarom je uberhaupt frames gebruikt wanneer je met php werkt?quote:Op donderdag 8 december 2005 22:01 schreef Fugie het volgende:
jo even een vraagje, ik heb een inlogfunctie (heel simpel) en ik wil dat wanneer iemand succesvol inlogd mijn menuframe wordt refreshed. Nu heb ik tot nu toe niets werkend gekregen, ik kan de functie header niet gebruiken omdat ik dan een foutmelding krijg dat de header al eerder is verzonden en de enige andere manier die ik tot nu tegenkwam was een stukkie javascript erin ramme maar dat heeft ook nog niet gewerkt. Iemand hier nog een idee ?
ik begrijp wat je bedoelt...quote:Op donderdag 8 december 2005 22:18 schreef the_disheaver het volgende:
[..]
Was meer op jou vraag van toepassing(ja, ik was laat...)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | <html> <head> <title>destroydrop » JavaScripts » Tree</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <link rel="StyleSheet" href="tree.css" type="text/css"> <script type="text/javascript" src="tree.js"></script> <script type="text/javascript"> <!-- var Tree = new Array; // nodeId | parentNodeId | nodeName | nodeUrl <? error_reporting(E_ALL); function scantree($start, $id = 0) { $parent_id = $id; $id++; $dir = opendir($start); while (($file = readdir($dir)) != false) { if (is_dir($start . $file) && $file != "." && $file != "..") { echo 'Tree[' . ($id -1) . '] = "' . ($id) . '|' . $parent_id . '|' . $file . '|#";' . CHR(13) . CHR(10); list($id) = scantree($start . $file . "/", $id); } } return array($id); } if (isSet($_GET['drive']) && substr($_GET['drive'], 1,1) == ":") { scantree($_GET['drive'] . "/");// the tree looping can begin } else { echo 'no ow no'; } ?> //--> </script> </head> <body> <div class="tree"> <script type="text/javascript"> <!-- createTree(Tree); //--> </script> </div> </body> </html> |
waarom bouw je hem met javascript op?quote:Op donderdag 8 december 2005 23:03 schreef Chandler het volgende:
Ik moet zeggen dat firefox m'n hele tree ook niet echt leuk vind
Dat is natuurlijk niet nodig, het opbouwen kan ook serverside gebeuren. Nadeel is dan wel dat je heel veel data moet verstouwen, en dat maakt het toch weer traag.quote:Op donderdag 8 december 2005 23:09 schreef DionysuZ het volgende:
[..]
waarom bouw je hem met javascript op?
true, true.quote:Op donderdag 8 december 2005 23:31 schreef Light het volgende:
[..]
Dat is natuurlijk niet nodig, het opbouwen kan ook serverside gebeuren. Nadeel is dan wel dat je heel veel data moet verstouwen, en dat maakt het toch weer traag.
Euh, omdat mij dat wel handig leek, maar bij nader inzien is dat helaas niet echt handigquote:Op donderdag 8 december 2005 23:09 schreef DionysuZ het volgende:
waarom bouw je hem met javascript op?
Je hebt gelijk, ik weet het. Echter heb ik geen flauw idee hoe ik dat dan moet realiseren. Heb er namelijk zelf ook al overna gedacht maar kan maar geen goed idee bedenkenquote:Op donderdag 8 december 2005 23:25 schreef SuperRembo het volgende:
Je hele C schijf omzetten naar een tree in JS zal altijd lang duren. Je kan dan beter met XMLHttp steeds nieuwe gegevens ophalen als je een folder uitklapt. Op die manier laadt je niet meer dan nodig is.
Inderdaad, zo zat ik ook te denken maar goed... sommige mensen denken net even iets andersquote:Op donderdag 8 december 2005 23:31 schreef Light het volgende:
Dat is natuurlijk niet nodig, het opbouwen kan ook serverside gebeuren. Nadeel is dan wel dat je heel veel data moet verstouwen, en dat maakt het toch weer traag.
Dat heb ik helaas gemerkt ja, alleen hoe dat dan met XMLHTTP te realiseren is me nog een vraag, met FireFox kwam ik echter wel iets verder dan met IEquote:Op donderdag 8 december 2005 23:37 schreef DionysuZ het volgende:
true, true.
*is stiekem wel benieuwd hoever je met opera komtquote:Op vrijdag 9 december 2005 00:00 schreef Chandler het volgende:
Dat heb ik helaas gemerkt ja, alleen hoe dat dan met XMLHTTP te realiseren is me nog een vraag, met FireFox kwam ik echter wel iets verder dan met IE
deze manier is wel een leuke Chandlerquote:Op donderdag 8 december 2005 23:25 schreef SuperRembo het volgende:
Je hele C schijf omzetten naar een tree in JS zal altijd lang duren. Je kan dan beter met XMLHttp steeds nieuwe gegevens ophalen als je een folder uitklapt. Op die manier laadt je niet meer dan nodig is.
Absoluut, daar ben ik het mee eens, maar dan zit ik nog steeds mezelf af te vragen hoe ik dat correct voor elkaar krijg? Want ik wil wel graag de mappen structuur behouden... heb reeds gezocht naar een voorbeeld die daar wat dieper op inging maar helaas heb dus niets gevonden en nog steeds geen idee hoe dit te verwezelijken.quote:Op vrijdag 9 december 2005 00:12 schreef DionysuZ het volgende:
deze manier is wel een leuke Chandler.
ik wil me ook nog eens een keer goed verdiepen in xmlhttprequests. Maar dat is misschien iets voor het javascript topic? [javascript] voor dummies - deel 3 dan tvp ik me daar ook ffquote:Op vrijdag 9 december 2005 00:15 schreef Chandler het volgende:
[..]
Absoluut, daar ben ik het mee eens, maar dan zit ik nog steeds mezelf af te vragen hoe ik dat correct voor elkaar krijg? Want ik wil wel graag de mappen structuur behouden... heb reeds gezocht naar een voorbeeld die daar wat dieper op inging maar helaas heb dus niets gevonden en nog steeds geen idee hoe dit te verwezelijken.
prototype.js is het keyword. Die is zo goed als crossbrowser zover ik weet.quote:Op vrijdag 9 december 2005 00:19 schreef DionysuZ het volgende:
[..]
ik wil me ook nog eens een keer goed verdiepen in xmlhttprequests. Maar dat is misschien iets voor het javascript topic? [javascript] voor dummies - deel 3 dan tvp ik me daar ook ff
quote:Op vrijdag 9 december 2005 00:20 schreef Chandler het volgende:
Met opera is het echt geluktal duurde het wel wat minuten voordat de gehele tree er stond
best jammer eingelijk, had best sneller gekund maar goed... na 4200+ items kan je ook niet veel anders verwachten... Wel mooi dat opera het hele script gewoon lekker laat draaien zonder error meldingen te geven. IE en FF kappen het gewoon af of blijven met errors (notices) komen
sja... javascript hequote:Op vrijdag 9 december 2005 00:24 schreef the_disheaver het volgende:
[..]
![]()
![]()
Ik heb het script je ff zelf geprobeerd, maar dat duurde (voor mn c schijf) langer dan 30 minuten om de gehele lijst te krijgen, waardoor de max runtime (oid) overschreven werd...
Het duurde idd best lang voordat een kleinere map geopend werd.
Ja godsamme ik blijf maar klikken bij die treequote:Op vrijdag 9 december 2005 00:32 schreef Chandler het volgende:
http://webfx.eae.net/dhtml/xloadtree/demo.html dit is wel een mooie, die moet ik maar eens uit gaan spitten, want lijkt me wel verdomde handig
geen probleem met javascript hoor. Maar het is zo traag en processorvretendquote:Op vrijdag 9 december 2005 00:29 schreef Chandler het volgende:
Je hebt het script nu gezien, heb je misschien anders een idee hoe ik dit dan moet aanpakken? met andere DIVS? zonder javascript? of toch maar met XMLHTTP (waar ik nog steeds op zit te spacen?) .. Divs zou ook wel kunnen hoor maar dan houd je idd nog een zeer grote lap met bandwidth voor misschien een 0.01% gebruik daarvan en dan is XMLHTTP wel weer handig... maar goed...
haha dat was me ook al opgevallenquote:Op vrijdag 9 december 2005 00:34 schreef JeRa het volgende:
[..]
Ja godsamme ik blijf maar klikken bij die treewillen ze een wereldwijde denial of service gaan uitoefenen met die eeuwige uitklapbare meuk?
![]()
1 2 | [Test, C:\Test, 0] |
Waarom niet? Windows / Explorer (om eens een voorbeeld te nemen) laat ook gewoon folder zien. En als blijkt dat een folder geen subfolders heeft dan verdwijnt het plusje voor de foldernaam wel op het moment dat je erop klikt. Pas op het moment dat je een folder opent ga je kijken naar de inhoud, niet eerder.quote:Op vrijdag 9 december 2005 09:02 schreef Chandler het volgende:
want ik moet natuurlijk ook de directories laten zien die leeg zijn maar die moeten dan weer niet open kunnen hé.
Ik gebruik er nu een welke in ieder geval werkt op Firefox, Internet Explorer en Opera (allemaal windows).quote:Op vrijdag 9 december 2005 00:21 schreef Ro�a� het volgende:
[..]
prototype.js is het keyword. Die is zo goed als crossbrowser zover ik weet.
Misschien doet verkenner dat dan wel zo, maar dat betekend dus niet dat de manier hoe verkenner dat doet ook de beste is.quote:Op vrijdag 9 december 2005 10:25 schreef Light het volgende:
[..]
Waarom niet? Windows / Explorer (om eens een voorbeeld te nemen) laat ook gewoon folder zien. En als blijkt dat een folder geen subfolders heeft dan verdwijnt het plusje voor de foldernaam wel op het moment dat je erop klikt. Pas op het moment dat je een folder opent ga je kijken naar de inhoud, niet eerder.
Je hebt gelijk, echter is dat dan weer de vraag hoe dat te verwerkenquote:Op vrijdag 9 december 2005 10:25 schreef Light het volgende:
Waarom niet? Windows / Explorer (om eens een voorbeeld te nemen) laat ook gewoon folder zien. En als blijkt dat een folder geen subfolders heeft dan verdwijnt het plusje voor de foldernaam wel op het moment dat je erop klikt. Pas op het moment dat je een folder opent ga je kijken naar de inhoud, niet eerder.
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 | <head> <title>XMLHTTP example</title> <script type="text/javascript" language="javascript"> var http_request = false; function makeRequest(path, id) { if (window.XMLHttpRequest) { // Mozilla, Safari,... http_request = new XMLHttpRequest(); } else if (window.ActiveXObject) { // IE http_request = new ActiveXObject("Microsoft.XMLHTTP"); } http_request.onreadystatechange = alertContents; http_request.open('GET', "tree.php?path=" + path + "&id=" + id, true); http_request.send(null); } function alertContents() { if (http_request.readyState == 4) { if (http_request.status == 200) { alert(http_request.responseText); } else { alert('There was a problem with the request.'); } } } </script> </head> <body> <a href="#" onclick="makeRequest('c:/myserver/', 666);">Make a request</a> </body> </html> |
no cache headers meesturen vanaf de server, zoals dat altijd voor php geldt.quote:Op vrijdag 9 december 2005 13:57 schreef Chandler het volgende:
&Roonaan; ok dat snap ikhad ik ook al aan gedacht maar is er geen andere mogelijkheid om de caching uit te zetten?
@Wobbel:
Je kan in een quote een quote verwijderenstr_replace hé
tot zoquote:Op vrijdag 9 december 2005 14:41 schreef Chandler het volgende:
hmmm... dat is ook wel weer een leuk ideeik ga er ff mee spelen...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | .fld { margin-left: 16px; } </style> <div class="fld" id="test1"> <img id="test1fld" src="images/foldericon.png"> Folder1 <div class="fld" id="test4"> <img id="test4fld" src="images/foldericon.png"> Folder4 </div> <div class="fld" id="test2"> <img id="tes2fld" src="images/foldericon.png"> Folder2 <div class="fld" id="test3"> <img id="test3fld" src="images/foldericon.png"> Folder3 </div> </div> </div> <div class="fld" id="test5"> <img id="test5fld" src="images/foldericon.png"> Folder5 </div> |
Je kent me een beetje héquote:
MySQL is bij het controleren van een string niet hoofdlettergevoelig. Wat je wel kunt doen is de passwordstring (dus die md5-string) uit je database halen, dan krijg je precies dat wat er ook is ingezet. En dat kun je dan met strcmp weer vergelijken, strcmp moet dan 0 opleveren.quote:Op zaterdag 10 december 2005 12:59 schreef Desdinova het volgende:
Ik heb een soort inlogsysteem gemaakt wat je wachtwoord (md5) checked met het opgegeven md5(wachtwoord) in de database. werkt prima en is op zich wel redelijk veilig denk ik.
punt is, hij is niet hoofdlettergevoelig
is dat te fixen?
Da's logisch toch? "bla" en "BLA" zijn verschillende strings. Het zou heel wat makkelijker kraken worden als dat niet zo was.quote:Op zaterdag 10 december 2005 14:35 schreef Desdinova het volgende:
md5(bla) creeert niet dezelfde waarde als md5(BLA)
dus op die manier is het hoofdlettergevoelig.
Readfile is waarschijnlijk het makkelijkst.quote:Op zaterdag 10 december 2005 14:43 schreef wobbel het volgende:
Hoe kan ik met PHP een bestand doorgeven?
Ik heb blaat.php, en daar wil ik de inhoud van poepchinees.jpg in weergeven. Iets met filepassthrough() ofzo?
readfile idd, ik wou het net posten hier...maar er is er nog 1tje volgensmijquote:Op zaterdag 10 december 2005 14:50 schreef Light het volgende:
[..]
Readfile is waarschijnlijk het makkelijkst.
Niemand die zijn licht kan laten schijnen over bovenstaande post?quote:Op vrijdag 9 december 2005 02:27 schreef JeRa het volgende:
Even een vraagje met betrekking tot security, of iig, het in stand houden daarvan.
(...)
Kort antwoord: Nee. Het kan veel veiliger.quote:Op vrijdag 9 december 2005 02:27 schreef JeRa het volgende:
Even een vraagje met betrekking tot security, of iig, het in stand houden daarvan.
Ik heb hier twee perfect samenwerkende servers staan die vanalles doen, en om dat te managen heb ik in PHP een tool gemaakt genaamd AAP, Ares Administrative Panel (Ares is de naam van de server die o.a. als webserver fungeert). Deze tool is interactief en maakt dus gebruik van STDIN om mijn input te verwerken en draait dus ook onder php-cli, met de rechten van root. Dit is omdat AAP in staat moet zijn user directories te maken en qua rechten goed te zetten, de Apache webserver moet kunnen laten reloaden, en nog veel meer. Dit is op het moment allemaal prima afgeschermd.
Echter wil ik nu alles modulebased opbouwen waarbij ik voor iedere account incluis mezelf (de administrator) een webinterface biedt. Nu moet ik dus in staat zijn om via die webinterface hetzelfde te doen als via AAP, maar gezien PHP via Apache draait heeft het dus zo min mogelijk rechten (wat heel logisch is maar niet door elke webhoster in stand wordt gehouden - dat terzijde) waardoor dat niet mogelijk is. Ik heb dus een manier nodig om een veilige communicatie op te zetten tussen de webinterface en de 'backend' die als root-account aanpassingen aan beide servers doet.
Qua scripten is het voor mij geen probleem dit veilig te doen, het gaat mij vooral om de globale manier waarop ik dit zou moeten doenik had zelf al bedacht dat ik wellicht een backend kon schrijven die als server fungeert en verbindingen accepteert, de verbinding authenticeert en vervolgens bepaalde acties toelaat. Gebruikers moeten overigens straks zelf ook in staat zijn subdomeinen toe te voegen waar een Apache reload voor nodig is.
Hierbij komt een ietwat complexer geheel kijken.quote:Op zaterdag 10 december 2005 17:51 schreef existenz het volgende:
[..]
Schrijf een backend applicatie die de rechten heeft van de user die je laat inloggen. Je php en linux logins zullen dus gelijk moeten zijn en de applicatie zal in iedereen zijn homedir moeten staan met zijn eigen rechten dus bijvoorbeeld:
/home/piet/
piet piet Run.sh
/home/henk/
henk henk Run.sh
Ja, dat doet ongeveer hetgene waar ik op doel, alleen kies jij voor een (misschien wel betere) oplossing waar het op 1 plaats gebeurd, maar de scripts dus meer rechten nodig hebben (denk ik, ik ken je model niet, en dat moet ook niet, anders had je het niet hoeven te bouwenquote:Op zaterdag 10 december 2005 18:15 schreef JeRa het volgende:
[..]
Hierbij komt een ietwat complexer geheel kijken.
Alle userinformatie, inclusief informatie over quotas, webdirectories, e-mailaliassen, etc, etc, wordt opgeslagen in een centrale database. Het is natuurlijk geen goed idee om iedereen toegang te geven tot die gegevens, dus is er een aparte account die alleen dit werk afhandelt.
De gebruikers kunnen zelf straks e-mailaliassen of subdomeinen aanmaken. Als ik dat onder hun account doe moeten ze ook het recht hebben om naam + wachtwoord van de account waarmee die informatie in de database kan worden gewijzigd te achterhalen --> weg veiligheid.
Dus ik had zo bedacht dat alles via één systeem moet lopen waarbij de gebruikers niet de werking van het systeem kunnen achterhalen (immers, alle scripts en wachtwoorden zitten in de bestanden waar zowel de webserver als de accounts op de machine zelf niet bij kunnen). Zou ik niet een zooi aan bash-scriptjes het onderliggende werk kunnen doen (apache reloaden, etc) d.m.v. sudo?
1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | class Db_functies { // enkele variabalen worden gedefinieerd hier... function Db_functies($user,$pw,$naam) { if (trim($user) == '') { this->fout('Er is geen gebruiker opgegeven'); //Dit is lijn 37!!! } if (trim($pw) == '') { this->fout('Er is geen wachtwoord opgegeven'); } if (trim($naam) == '') { this->fout('Er is geen database opgegeven'); } this->db_user = $user; this->db_pw = $pw; this->db_naam = $naam; this->c_db(); } ?> |
PHP is bijna altijd de $ ervoorquote:Op zaterdag 10 december 2005 21:25 schreef SkaterSam het volgende:
Grrmmmbllllzal je altijd zien, zoiets simpels... danku
Dat soort dingen heb ik ook heel veel hoorquote:Op zaterdag 10 december 2005 21:25 schreef SkaterSam het volgende:
Grrmmmbllllzal je altijd zien, zoiets simpels... danku
Heb je wel display_errors = On staan in php.ini?quote:Op zaterdag 10 december 2005 20:43 schreef SkaterSam het volgende:
Grmmbblll, op een of andere manier krijg ik nooit errors te zien, maar telkens een standaard blanke pagina, maar dat terzijde...
Ik heb tijdens ontwikkeling altijd error_reporting(E_ALL); aanstaan, maar als ik een curly bracket vergeet krijg ik ook een lege page te zien en geen foutmeldingquote:Op zaterdag 10 december 2005 22:46 schreef SuperRembo het volgende:
[..]
Heb je wel display_errors = On staan in php.ini?
Jup, dat heb ik dus ook ja, dus moet ik altijd de fouten uit de error.log lezen, verder niet zo'n probleem, wel een beetje onhandigquote:Op zaterdag 10 december 2005 22:53 schreef Swetsenegger het volgende:
[..]
Ik heb tijdens ontwikkeling altijd error_reporting(E_ALL); aanstaan, maar als ik een curly bracket vergeet krijg ik ook een lege page te zien en geen foutmelding
Dank, ik nietquote:Op zaterdag 10 december 2005 22:46 schreef SuperRembo het volgende:
[..]
Heb je wel display_errors = On staan in php.ini?
weet iemand een leuke windows apache log file parser?quote:Op zaterdag 10 december 2005 22:54 schreef SkaterSam het volgende:
[..]
Jup, dat heb ik dus ook ja, dus moet ik altijd de fouten uit de error.log lezen, verder niet zo'n probleem, wel een beetje onhandig
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | php session_start(); /* Load main library Files */ require_once ("lib/htconfig.php"); require_once( $GLOBALS['SITE']['LibPath'] . "/main.php"); if(!$_GET['sid']) { $error->Report ("Er is geen (sub)forum ID meegegeven. Bewerking is afgebroken."); } else { $MySQL_Fora_Select = "SELECT IdForumSubCat, ForumCatId, Titel FROM ForumSubCat WHERE IdForumSubCat = '" . addslashes($_GET['sid']) . "' LIMIT 1"; $MySQL_Fora_Query = mysql_query($MySQL_Fora_Select) or die($error->ReportMysqlError(__FILE__, $MySQL_Fora_Select ,__LINE__)); $MySQL_Fora_Numrow = mysql_num_rows($MySQL_Fora_Query); if($MySQL_Fora_Numrow >= 1) { ## Select the main forum Titel and Image $MySQL_Fora_Assoc = mysql_fetch_assoc($MySQL_Fora_Query); $MySQL_Forum_Select = "SELECT IdForumCat, Titel, TitelImage FROM ForumCat WHERE IdForumCat = '" . addslashes($MySQL_Fora_Assoc['ForumCatId']) . "' LIMIT 1"; $MySQL_Forum_Query = mysql_query($MySQL_Forum_Select) or die(mysql_error()); $MySQL_Forum_Assoc = mysql_fetch_assoc($MySQL_Forum_Query); $tml->RegisterVar ("CONTENTTOP", $MySQL_Forum_Assoc['TitelImage']); $tml->RegisterVar ("FORUMTITLE", $MySQL_Forum_Assoc['Titel']); $tml->RegisterVar ("SUBFORUMTITLE", $MySQL_Fora_Assoc['Titel']); ## $MySQL_Topic_Select = "SELECT IdTopic, UserId, Titel, Type FROM ForumTopics WHERE SubCatId = '" . addslashes($_GET['sid']) . "' ORDER BY Date DESC"; $MySQL_Topic_Query = mysql_query($MySQL_Topic_Select) or die(mysql_error()); $MySQL_Topic_Numrow = mysql_num_rows($MySQL_Topic_Query); while($Topic = mysql_fetch_assoc($MySQL_Topic_Query)) { $MySQL_Message_Select = "SELECT TopicId, Datum FROM ForumMessages WHERE TopicId = '" . $Topic['IdTopic'] . "' ORDER BY Datum DESC LIMIT 1"; $MySQL_Message_Query = mysql_query($MySQL_Message_Select) or die(mysql_error() . " op regel: " . __LINE__ . "<br />De betreffende query:" . $MySQL_Message_Select); $MySQL_Message_Assoc = mysql_fetch_assoc($MySQL_Message_Query); $LastPostInTopic = $MySQL_Message_Assoc['Datum']; $MySQL_Reacties_Select = "SELECT COUNT(IdMessage) FROM ForumMessages WHERE TopicId = '" . $Topic['IdTopic'] . "'"; $MySQL_Reacties_Query = mysql_query($MySQL_Reacties_Select); $MySQL_Reacties_Result = mysql_result($MySQL_Reacties_Query, 0); $LoopData = array ( "TITLE" => $Topic['Titel'], "IDTOPIC" => $Topic['IdTopic'], "USERID" => $main->User_Name($Topic['UserId'], 1), "REACTIES" => $MySQL_Reacties_Result, "LASTPOST" => date("d-m-Y H:i:s", $LastPostInTopic), ); $i++; /* Registreren van een Loop */ $tml->RegisterLoop("TOPIC",$i,$LoopData); } /* Load Header file */ $tml->LoadFromFile ("pages/overall_header"); $tml->Parse(); /* Load Page Content */ $tml->LoadFromFile ("pages/forum_subcat"); $tml->Parse(); /* Load Footer file */ $tml->LoadFromFile ("pages/overall_footer"); $tml->Parse(); /* Output Pages */ $tml->Output(); } else { $error->Report ("Het (sub)forum dat je probeert op te vragen is niet gevonden."); } } ?> |
Dat laatste is dus wel de juiste manier, het gaat hier niet om "handig", want misschien gaat het opslaan zo wel sneller, maar het ophalen wel 10x zo traag!quote:Op zondag 11 december 2005 20:15 schreef Swetsenegger het volgende:
Korte vraag,
zoals jullie weten ben ik met een webshop bezig.
Het winkelwagentje is een array, waarbij de key het produkt ID is en de value het aantal.
Nu moet ik deze gegevens op gaan slaan in de db. Zal ik simpelweg de array opslaan in een kolom? Het lijkt me een beetje 'vreemde' oplossing eigenlijk, maar aan de andere kant lijkt het me niet handig wanneer ik elk produkt van de bestelling afzonderlijk in een kolom of rij op ga slaan en vervolgens nog iets van een koppeltable moet maken voor de aantallen.
Je hebt alleen een tabel nodig (inhoud van de winkelwagen) die de gebruiker koppelt aan de gekozen producten en het aantal dat daarbij hoort. Oftwel, een userid, productid en number (aantal producten).quote:Op zondag 11 december 2005 20:15 schreef Swetsenegger het volgende:
Korte vraag,
zoals jullie weten ben ik met een webshop bezig.
Het winkelwagentje is een array, waarbij de key het produkt ID is en de value het aantal.
Nu moet ik deze gegevens op gaan slaan in de db. Zal ik simpelweg de array opslaan in een kolom? Het lijkt me een beetje 'vreemde' oplossing eigenlijk, maar aan de andere kant lijkt het me niet handig wanneer ik elk produkt van de bestelling afzonderlijk in een kolom of rij op ga slaan en vervolgens nog iets van een koppeltable moet maken voor de aantallen.
Hoezo?quote:Op zondag 11 december 2005 20:33 schreef existenz het volgende:
[..]
Dat laatste is dus wel de juiste manier, het gaat hier niet om "handig", want misschien gaat het opslaan zo wel sneller, maar het ophalen wel 10x zo traag!
De tabel moet dan wel userid, product id, order id en number worden.quote:Op zondag 11 december 2005 20:34 schreef JeRa het volgende:
[..]
Je hebt alleen een tabel nodig (inhoud van de winkelwagen) die de gebruiker koppelt aan de gekozen producten en het aantal dat daarbij hoort. Oftwel, een userid, productid en number (aantal producten).
Mocht je het toch als array willen opslaan, dan kan dat het makkelijkst via serialize()
Ophogen van order_id?quote:Op zondag 11 december 2005 20:34 schreef Swetsenegger het volgende:
[..]
De tabel moet dan wel userid, product id, order id en number worden.
Anders weet ik nooit welke rij bij welke bestelling hoort en een klant kan meerdere bestellingen plaatsen.
Hmz, zit ik weer met het ophogen van order_id. Of ik moet me in 'unique' mbt mysql gaan verdiepen. *zucht*.
Je geeft als voorbeeld een tabel met de volgende kolommen:quote:Op zondag 11 december 2005 20:44 schreef JeRa het volgende:
[..]
Ophogen van order_id?
Als een klant een nieuwe bestelling doet maak je (neem ik aan) een nieuwe entry in de tabel met orders. De id van die tabel is dan toch gewoon AUTO_INCREMENT? Vervolgens plaats je in de tabel met de inhoud van een bestelling de id van die bestelling
1 2 3 4 5 | 1 1 1 1 2 2 1 1 4 1 3 2 2 3 1 4 1 3 1 1 |
Zie de edit.quote:Op zondag 11 december 2005 21:18 schreef JeRa het volgende:
Ik snap niet welk probleem je hebt
Je hebt een tabel users met daarin de klantennummers. FK = userid.
Je hebt een tabel orders met daarin de bestellingen. FK = orderid.
Je hebt een tabel products met daarin de producten. FK = productid
Je hebt een tabel winkelwagen (ofzo) met daarin de koppeling van bovenstaande drie tabellen én het aantal producten. Die ziet er dan toch als volgt uit?
id --> unieke verwijzing naar een bestelling in een winkelwagen (AUTO_INCREMENT PRIMARY KEY)
userid --> verwijzing naar klant (mag ook vaker voorkomen)
orderid --> verwijzing naar order. De 'id'-kolom van de tabel 'orders' is AUTO_INCREMENT
productid --> verwijzing naar het product
number --> aantal producten dat gewenst is
Wat is het probleem hiermee?
Ja dat gaat perfect werkenquote:Op zondag 11 december 2005 21:32 schreef JeRa het volgende:
Mja, dat gaat toch werken?sorry dat ik even niet duidelijk aangaf dat ik het over een nieuwe koppeltabel had
Er komt natuurlijk nog veel meer bij kijken; ik noem even het tijdstip van aanmaken of het IP-adres van de klant. Maar dat is aan jouquote:Op zondag 11 december 2005 21:43 schreef Swetsenegger het volgende:
[..]
Ja dat gaat perfect werken
Ik moet nog wel even goed nadenken, want orders moeten nogwel via mail bevestigt worden dus in de order tabel komt nog een activation kolom.
Dat kan met één DELETE door te joinenquote:Indien niet geactiveerd moet ik dus wel de order EN de inhoud wissen.
Ja, dat heb ik allemaal op een rijtje ivm tweedehandsboek, waarbij gebruikers ook hun aanmelding moeten bevestigen. Er moet dus ook een datum/tijd in de order tabelquote:Op zondag 11 december 2005 21:49 schreef JeRa het volgende:
[..]
Er komt natuurlijk nog veel meer bij kijken; ik noem even het tijdstip van aanmaken of het IP-adres van de klant. Maar dat is aan jou
Bedankt voor de tip, daar ga ik mee stoeien.quote:Dat kan met één DELETE door te joinenof meerdere DELETEs die je binnen een LOCK TABLES / UNLOCK TABLES zet.
Dat ligt aan je inlogsysteem. Stel, je hebt een sessie-variabele genaamd 'userid' waarvoor geldt dat als userid groter is dan 0 de user is ingelogd als klant nummer #userid. Dan kun je na het toevoegen van de NAW-gegevens in de usertabel de primary key ophalen (mysql_insertid) en die in je sessie-variabele zetten. Voila, user ingelogdquote:Op zondag 11 december 2005 21:56 schreef Swetsenegger het volgende:
Nu wil ik op deze NAW gegevens pagina nadat een en ander succesvol is ingevuld en naar db is geschreven de klant direkt automatisch inloggen. Maar vanuit PHP Kan ik volgens mij niet automatisch de juiste gegevens (inlognaam en wachtwoord welke bij aanmelden is opgegeven) POSTen naar inlog.php. Uiteraard kan het wel met GET, maar dat lijkt me niet zo veilig
Maar dat is een klein risico als er meerdere gebruikers min of meer teglijk aanmelden. mysql_insertid kan dan hoger zijn dan degene welke ik voor deze klant bedoel toch?quote:Op zondag 11 december 2005 22:00 schreef JeRa het volgende:
[..]
Dat ligt aan je inlogsysteem. Stel, je hebt een sessie-variabele genaamd 'userid' waarvoor geldt dat als userid groter is dan 0 de user is ingelogd als klant nummer #userid. Dan kun je na het toevoegen van de NAW-gegevens in de usertabel de primary key ophalen (mysql_insertid) en die in je sessie-variabele zetten. Voila, user ingelogd
Nope, mysql_insert_id() geeft de waarde terug van de laatste INSERT-operatie van de huidige thread. Zolang je users niet weten hoe ze op de webserver threads moeten overnemen is dat vrij veiligquote:Op zondag 11 december 2005 22:04 schreef Swetsenegger het volgende:
[..]
Maar dat is een klein risico als er meerdere gebruikers min of meer teglijk aanmelden. mysql_insertid kan dan hoger zijn dan degene welke ik voor deze klant bedoel toch?
Of ik moet met lock table gaan werken natuurlijk.
mysql_insert_id() it is dusquote:Note: The value of the MySQL SQL function LAST_INSERT_ID() always contains the most recently generated AUTO_INCREMENT value, and is not reset between queries.
Het verschil tussen beide ontging me even, maar ik lees dat last_insert_id niet gereset wordt tussen queries en dus niet thread gerelateerd is. Begrijp ik het zo goed?quote:Op zondag 11 december 2005 22:05 schreef JeRa het volgende:
[..]
Nope, mysql_insert_id() geeft de waarde terug van de laatste INSERT-operatie van de huidige thread. Zolang je users niet weten hoe ze op de webserver threads moeten overnemen is dat vrij veilig
Nu lees ik op die pagina ook dat je LAST_INSERT_ID kunt gebruikendat is eigenlijk wel heel handig, gegeven dat dat ook de laatste insert id van de huidige thread is.
edit: nee dus.
[..]
mysql_insert_id() it is dus
Klopt.quote:Op zondag 11 december 2005 22:11 schreef Swetsenegger het volgende:
[..]
Het verschil tussen beide ontging me even, maar ik lees dat last_insert_id niet gereset wordt tussen queries en dus niet thread gerelateerd is. Begrijp ik het zo goed?
Klopt ook.quote:Maar ik kan dus save mysql_insert_id gebruiken direkt na de query welke de klantgegevens in de DB zet.
De combinatie orderid, productid is uniek, dus die kan je als PK gebruiken.quote:Op zondag 11 december 2005 21:18 schreef JeRa het volgende:
id --> unieke verwijzing naar een bestelling in een winkelwagen (AUTO_INCREMENT PRIMARY KEY)
userid --> verwijzing naar klant (mag ook vaker voorkomen)
orderid --> verwijzing naar order. De 'id'-kolom van de tabel 'orders' is AUTO_INCREMENT
productid --> verwijzing naar het product
number --> aantal producten dat gewenst is
PK?quote:Op zondag 11 december 2005 22:30 schreef SuperRembo het volgende:
[..]
De combinatie orderid, productid is uniek, dus die kan je als PK gebruiken.
Ik neem aan dat in de tabel met bestellingen bij een order een userid staat. Dan is de kolom userid in deze tabel overbodig.
Klopt helemaal. Over die primary key, ikzelf vind het altijd handig om in elke tabel een unieke waarde te hebben die ik kan toekennen aan elke entry, vandaarquote:Op zondag 11 december 2005 22:30 schreef SuperRembo het volgende:
[..]
De combinatie orderid, productid is uniek, dus die kan je als PK gebruiken.
Ik neem aan dat in de tabel met bestellingen bij een order een userid staat. Dan is de kolom userid in deze tabel overbodig.
Nav JeRa begreep ik 'mquote:
Ik nietsquote:Op zondag 11 december 2005 23:22 schreef Light het volgende:
Huh? Wat voor query doe je dan?
Hmmmz. Dat is weer zo'n vaag iets van MySQLquote:Op zondag 11 december 2005 23:30 schreef Light het volgende:
MySQL (phpmyadmin) geeft bij mij gewoon een melding dat er 0 rijen zijn aangepast. Geen foutmeldingen ofzo.
MySQL redeneert dat als er geen velden worden aangepast, dat er dan ook geen rijen worden aangepast. En het schijnt sneller te zijn om niet opnieuw te schrijven als de waarde voor en na de update gelijk is. Klinkt op zich ook nog wel logisch, ergensquote:Op zondag 11 december 2005 23:43 schreef SuperRembo het volgende:
[..]
Hmmmz. Dat is weer zo'n vaag iets van MySQL
Als je dus 2x het statement "UPDATE MyTable SET name = 'Foo' WHERE id = 1" uitvoert, dat krijg je de eerste keer affected rows = 1, maar daarna affected rows = 0
Het kost veel minder tijd om zo'n waarde niet weg te schrijven (indices hoeven dan ook niet bijgewerkt te worden, query/block cache kan blijven bestaan, etc). Echter zou het wel wat netter zijn als affected rows 1 teruggaf jaquote:Op zondag 11 december 2005 23:43 schreef SuperRembo het volgende:
[..]
Hmmmz. Dat is weer zo'n vaag iets van MySQL
Als je dus 2x het statement "UPDATE MyTable SET name = 'Foo' WHERE id = 1" uitvoert, dat krijg je de eerste keer affected rows = 1, maar daarna affected rows = 0
Je moet dan wel eerst de oude en de nieuwe gegevens vergelijken, dat kost ook tijd.quote:Op zondag 11 december 2005 23:46 schreef Light het volgende:
[..]
MySQL redeneert dat als er geen velden worden aangepast, dat er dan ook geen rijen worden aangepast. En het schijnt sneller te zijn om niet opnieuw te schrijven als de waarde voor en na de update gelijk is. Klinkt op zich ook nog wel logisch, ergens
Ja (heb het hier draaien). Weliswaar niet in de strict-modus, misschien dat dat wat uitmaakt?quote:Op zondag 11 december 2005 23:54 schreef SuperRembo het volgende:
[..]
Je moet dan wel eerst de oude en de nieuwe gegevens vergelijken, dat kost ook tijd.
Het lijkt me geen standaard gedrag. Is dat is MySQL 5 ook zo?
Ik. En eigenlijk moeten die herschreven worden, ze kunnen best zwaar worden voor de server (die het toch al niet makkelijk heeft). En nee, die queries gooi ik hier niet neerquote:Op maandag 12 december 2005 00:05 schreef Ro�a� het volgende:
Wie gebruikt er eik weleens bij sql "replace" ?
Ik niet. Maar even gelezen in de documentation, dan worden alle dubbele rijen gedelete en opnieuw geinsert met een nieuwe primary key. Dat moet je niet te vaak doen op een grote tabelquote:Op maandag 12 december 2005 00:05 schreef Ro�a� het volgende:
Wie gebruikt er eik weleens bij sql "replace" ?
replace into mytable (id, name) values (1, "test")quote:Op maandag 12 december 2005 00:15 schreef JeRa het volgende:
[..]
Ik niet. Maar even gelezen in de documentation, dan worden alle dubbele rijen gedelete en opnieuw geinsert met een nieuwe primary key. Dat moet je niet te vaak doen op een grote tabel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $url = "https://[psp]/[psp].php"; $host = substr($url, 0, strpos($url, "/")); $uri = strstr($url, "/"); $reqbody = ""; foreach($data as $key=>$val) { if (!empty($reqbody)) $reqbody.= "&"; $reqbody.= $key."=".urlencode($val); } $contentlength = strlen($reqbody); $reqheader = "Location: $url\r\n". "POST $uri HTTPS/1.1\r\n". "Host: ssl://$host\n". "User-Agent: PostIt\r\n". "Content-Type: application/x-www-form-urlencoded\r\n". "Content-Length: $contentlength\r\n\r\n". "$reqbody\r\n"; header($reqheader); ?> |
Helaas niet en de support afdeling was vandaag niet aanwezig. Maar ik ga zeker contact met ze opnemen om dit te overleggen. Het enige kant-en-klare 'script' wat ze aanboden was een HTML pagina. En dat is niet echt zo netjes, als je gebruikers eerst op een lege pagina komen alwaar ze een knop moeten indrukken. Ik wil ze gewoon direct doorverwijzen naar de PSP. Het is dan ook niet mogelijk voor de wat slimmere mensen om bijvoorbeeld het bedrag aan te passen.quote:Op maandag 12 december 2005 18:46 schreef Swetsenegger het volgende:
Heeft je PSP geen kant en klaar php script dan?
quote:Op zondag 11 december 2005 23:30 schreef Light het volgende:
MySQL (phpmyadmin) geeft bij mij gewoon een melding dat er 0 rijen zijn aangepast. Geen foutmeldingen ofzo.
Nu post dat HTML scherm toch naar de PSP? Dan moet er in die HTML file toch aan de submit knop een CGI of ander soortig script hangen welke die verbinding opzet.quote:Op maandag 12 december 2005 19:14 schreef HuHu het volgende:
In die HTML page staan alle benodigde variabelen (ordernummer, bedrag, enzovoorts) als hidden FORM fields. En die worden, zodra je op de knop drukt, gepost naar een https server waar vervolgens de betaling wordt afgehandeld en de gebruiker z'n creditcard gegevens invuld.
Het gaat nu dus zo:Gebruiker kiest product en vult ons bestelformulier in.
Mijn PHP script met database handelingen en bevestigingmailtjes
Scherm met: druk op de knop om te betalen
Betalen bij de PSP
Maar ik wil dat nutteloze tussenscherm eruit hebben door de variabelen die daarin staan direct vanuit mijn PHP script naar de server van de PSP te posten. Maar dat moet via SSL, en ik weet niet hoe dat moet.
Dit is de FORM actie:quote:Op maandag 12 december 2005 19:28 schreef Swetsenegger het volgende:
[..]
Nu post dat HTML scherm toch naar de PSP? Dan moet er in die HTML file toch aan de submit knop een CGI of ander soortig script hangen welke die verbinding opzet.
Je kan in je PHP form toch gewoon dezelfde action gebruiken als nu in dat HTML form?
1 |
Hoe versleutelt die HTML ze?quote:Op maandag 12 december 2005 19:38 schreef HuHu het volgende:
[..]
Dit is de FORM actie:
[ code verwijderd ]
Hij post dus naar een beveiligde server. Nu wil ik met PHP naar die beveiligde server posten. Maar hoe versleutel ik mijn variabelen en dergelijke, zodat de server ze accepteerd.
Wil je het per se via php doen dan? Dus niet via een html form aan de client zijde waarin je die variabele echo't?quote:Op maandag 12 december 2005 19:38 schreef HuHu het volgende:
[..]
Dit is de FORM actie:
[ code verwijderd ]
Hij post dus naar een beveiligde server. Nu wil ik met PHP naar die beveiligde server posten. Maar hoe versleutel ik mijn variabelen en dergelijke, zodat de server ze accepteerd.
1 2 3 4 5 6 7 | foreach($_POST['cat'] as $a) { $db->query("DELETE FROM nieuws_categorie WHERE nieuws_categorie_id='$a'"); } $db->closedb(); ?> |
1 |
1 |
Heb die constructie al een behoorlijke tijd gebruikt zonder enige problemenquote:Op dinsdag 13 december 2005 20:41 schreef DionysuZ het volgende:
werkt IN (bla,bla,ba) ook bij MySQL dan?heb er veel problemen mee gehad.
quote:Op dinsdag 13 december 2005 19:47 schreef SuperRembo het volgende:
Vergeet niet om de invoer van de gebruiker te controleren.
Ik zal het niet vergetenquote:Op dinsdag 13 december 2005 19:47 schreef SuperRembo het volgende:
Vergeet niet om de invoer van de gebruiker te controleren.
Een mysql_real_escape_string() heb je nodig als je een waarde in een string gaat zetten in de query. Nu werk je met integers, en is het minste wat je moet doen checken of het daadwerkelijk een getal is (en dat eventueel zo maken met intval() of strval()) en of het in de gewenste range ligt.quote:Op dinsdag 13 december 2005 21:16 schreef SkaterSam het volgende:
[..]
Ik zal het niet vergeten![]()
Er wordt al gekeken of de waarden in de array nummers zijn via is_numeric(), en straks nog even een mysql_real_escape_string() er over heen.![]()
Zo goed?
Haha, weer wat geleerd in ieder geval, dan heb ik dus nu met mijnquote:Op dinsdag 13 december 2005 21:22 schreef JeRa het volgende:
[..]
Een mysql_real_escape_string() heb je nodig als je een waarde in een string gaat zetten in de query. Nu werk je met integers, en is het minste wat je moet doen checken of het daadwerkelijk een getal is (en dat eventueel zo maken met intval() of strval()) en of het in de gewenste range ligt.
1 2 3 4 5 6 7 | if (is_numeric(array_sum($_POST['cat']))) { // voer code uit } else { // stout!!! } ?> |
Nee. Het feit dat array_sum een getal oplevert zegt niets over de afzonderlijke elementen van de array. Het kunnen nog steeds allemaal strings zijn, die worden bij rekenkundige bewerkingen naar de waarde nul omgezet.quote:Op dinsdag 13 december 2005 21:37 schreef SkaterSam het volgende:
[..]
Haha, weer wat geleerd in ieder geval, dan heb ik dus nu met mijn
[ code verwijderd ]
genoeg gecontroleerd? En wat is dan een range? Het zijn gewoon allemaal ID's die ik bij elkaar optel. Ik Google wel even wat een "range" inhoudt.
1 2 3 | echo array_sum(array(2,5,'a','zes')); ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $remove = $_POST['cat']; $b = array(); foreach($remove as $a) { if(!is_numeric($a)) { $a = ''; } else { $b[] = $a; } } //Maak een verbinding met DB $b = implode(',',$b); $db->query("DELETE FROM nieuws_categorie WHERE nieuws_categorie_id IN (" . $b . ")"); ?> |
wat bedoel je daar mee als ik vragen mag?quote:Op dinsdag 13 december 2005 20:50 schreef JeRa het volgende:
[..]
Heb die constructie al een behoorlijke tijd gebruikt zonder enige problemenlijkt me van wel dus. Weet iemand of die operatie atomic is?
Atomic komt van het idee van het 'kleinste deeltje', in dit geval het idee dat een operatie in één geheel kan worden uitgevoerd. Een INSERT is atomic, dit betekent dat men geen SELECT kan uitvoeren terwijl de INSERT halverwege is bijvoorbeeld. Ik vroeg me af of dit ook het geval is bij een DELETE waarbij je meerdere items verwijderd, aangezien een DELETE op één item normaal wel atomic isquote:Op dinsdag 13 december 2005 23:00 schreef Chandler het volgende:
[..]
wat bedoel je daar mee als ik vragen mag?
1 2 3 | SET vieworder = CASE vieworder WHEN 10 THEN 5 ELSE vieworder + 1 END WHERE vieworder BETWEEN 5 AND 10 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | if(!@mysql_num_rows($posts)>0){ home(); return; } $titel = mysql_fetch_assoc($titel); ?> <h4><?php echo $titel['titel']; ?></h4> <?php while($data = mysql_fetch_assoc($posts)){?> <?php $smilies = array(':)', ':(', ':+', '_O_', '(Y)', ';)', ':{', ':P', ':p','(A)'); $images = array('<img src="smilies/smile.gif">', '<img src="smilies/frown.gif">', '<img src="smilies/clown.gif">', '<img src="smilies/worshippy.gif">', '<img src="smilies/thumbsup.gif">', '<img src="smilies/wink.gif">', '<img src="smilies/nosmile.gif">', '<img src="smilies/puh2.gif">', '<img src="smilies/puh2.gif">', '<img src="smilies/hypocrite.gif">'); $content = str_replace($smilies, $images, $data['content']); echo $content; ?><br><br> <?php } ?> |
Dit is een leuke. Bij een topic met 10.000 posts haal je ze dus allemaal op om het totaal te berekenen terwijl je er maar 10 wilt laten zien? Niet erg efficient.quote:Op woensdag 14 december 2005 20:03 schreef SkaterSam het volgende:
1. bereken het totaal aantal resultaten (bijv. mysql_num_rows() )
2. definieer het maximum aantal resultaten per pagina (bijv. $pp = 10 )
3. bereken het aantal pagina's dat je krijgt door het aantal resultaten te delen door het maximum en het op hele naar boven af te ronden
4. creëer een offset (van welk nummer moeten de resultaten verder gaan op de volgende pagina (bijv. door de link show.php?page=3 en dan de offset berekenen door ($page - 1) * 10 te doen.)
5. Deze offset in de query zetten bij LIMIT $offset, 10
En die linkjes er onder kan je dan met allerlei if/else statements maken, bijvoorbeeld als er maar een pagina is zijn vorige en volgende geen links... Dit doe ik altijd in ieder geval![]()
Doe je SELECT count(*) as TOTAL FROM table LIMIT $offset,10 of zoiets? Zo bedoel je? Maar berekent die dan niet alleen maar degene die hij ophaalt (TOTAL zou dan 10 zijn) ? Enlighten mequote:Op woensdag 14 december 2005 20:16 schreef DionysuZ het volgende:
Dit is een leuke. Bij een topic met 10.000 posts haal je ze dus allemaal op om het totaal te berekenen terwijl je er maar 10 wilt laten zien? Niet erg efficient.
Nee, je doet een aparte COUNT(*)-query zodat MySQL snel het aantal rows kan teruggeven en je het totaal aantal posts weet. Dit is snel omdat de MyISAM-tables een rowcounter bijhouden, bij InnoDB gaat dit niet zo gemakkelijk. Vervolgens kun je door een nieuwe query te LIMIT'en bepalen welke posts je precies zietquote:Op woensdag 14 december 2005 20:25 schreef SkaterSam het volgende:
[..]
Doe je SELECT count(*) as TOTAL FROM table LIMIT $offset,10 of zoiets? Zo bedoel je? Maar berekent die dan niet alleen maar degene die hij ophaalt (TOTAL zou dan 10 zijn) ? Enlighten me
Gewoon een SELECT count(*) as TOTAL FROM table.quote:Op woensdag 14 december 2005 20:25 schreef SkaterSam het volgende:
[..]
Doe je SELECT count(*) as TOTAL FROM table LIMIT $offset,10 of zoiets? Zo bedoel je? Maar berekent die dan niet alleen maar degene die hij ophaalt (TOTAL zou dan 10 zijn) ? Enlighten me
quote:Op woensdag 14 december 2005 20:26 schreef JeRa het volgende:
[..]
Nee, je doet een aparte COUNT(*)-query zodat MySQL snel het aantal rows kan teruggeven en je het totaal aantal posts weet. Dit is snel omdat de MyISAM-tables een rowcounter bijhouden, bij InnoDB gaat dit niet zo gemakkelijk. Vervolgens kun je door een nieuwe query te LIMIT'en bepalen welke posts je precies ziet
Voor zover ik zie welquote:Op woensdag 14 december 2005 20:31 schreef SkaterSam het volgende:
COUNT(*) telt dus alle rijen in een DB, terwijl mysql_num_rows() alleen de rijen die uit een query komen telt. Ik snap het denk ik. De rest van de 5 stappen was echter wel 'logisch'?
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 | function resize_photo($new_name,$new_width,$new_height,$filename){ // Content type header('Content-type: image/jpeg'); // nieuwe resolutie bepalen list($width_orig, $height_orig) = getimagesize($filename); if(empty($new_height)){ $new_height = round(($new_width / $width_orig) * $height_orig); }elseif(empty($new_width)){ $new_width = round(($new_height / $height_orig) * $width_orig); }elseif ($new_width && ($width_orig < $height_orig)) { $new_width = ($new_height / $height_orig) * $width_orig; }else{ $new_height = ($new_width / $width_orig) * $height_orig; } // Resample $image_p = imagecreatetruecolor($new_width, $new_height); $image = imagecreatefromjpeg($filename); imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width_orig, $height_orig); // Output imagejpeg($image_p, $new_name, 80); Imagedestroy($image); } ?> |
1 2 3 4 5 6 7 8 | $filename = $_FILES['photo']['tmp_name']; list($width_orig, $height_orig) = getimagesize($filename); $new_name="../pathnaarfotomap/".$watdanook; $new_width=300; //mag ook leeg izjn $new_height=200; //mag ook leeg zijn resize_photo($new_name,$new_width,$new_height,$filename); ?> |
tx allenquote:Op donderdag 15 december 2005 10:35 schreef Swetsenegger het volgende:
[ code verwijderd ]
Aanroepen met:
[ code verwijderd ]
Alleen voor jpg, maar dat is redelijk eenvoudig aan te passen in de functie.
Je moet wel GD2 op de server hebben staan.
1 2 | header('Content-type: image/jpeg'); |
Komt rechtstreeks van php.net: http://nl3.php.net/manual/en/function.imagecopyresampled.php. Ik heb gewoon die functie gepakt en wat aangepast toen ik 'm nodig hadquote:Op donderdag 15 december 2005 14:22 schreef DionysuZ het volgende:
[ code verwijderd ]
dit is dan toch niet nodig Swetsenegger?
Het is nodig als je rechtstreeks een jpeg als output wil hebben, niet als je een jpg file maakt.quote:Op donderdag 15 december 2005 15:13 schreef Swetsenegger het volgende:
[..]
Komt rechtstreeks van php.net: http://nl3.php.net/manual/en/function.imagecopyresampled.php. Ik heb gewoon die functie gepakt en wat aangepast toen ik 'm nodig had
moet je voor het gemiddelde aantal factuur regels niet eerst alle factuurregels bij elkeer optellen (de aantallen wat in de tabel staan) en dan delen door het aantal factuurnummers.quote:Op donderdag 15 december 2005 16:43 schreef IbeBen het volgende:
Ik begin maar met de meest kneuzige vraag,
Wat is het gemiddelde aantal factuurregels in 2004?
Ik heb (onder andere) de tabel Factuurregel dus daar zal het antwoord wel vandaan moeten komen.
Factuurregel
Factuurnummer
Artikelcode
verkoopaantal
verkoopprijs
Volgens mij moet ik dus gewoon de factuurnummer optellen en dan delen door het aantal "gecounte" factuurnummers.
Zelf kwam ik tot
SELECT factuurnummer/COUNT(factuurnummer)
FROM factuurnummer;
IbeBen
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |