Chandler | dinsdag 18 december 2007 @ 18:08 |
 cd niet bijgeleverd
Als je vragen hebt over PHP/MySQL, dan zit je hier goed met een vaste kliek guru's en een groot aantal regelmatige bezoekers. Beperk je vragen niet tot "hij doet het niet" of "hij geeft een fout" - onze glazen bol is kapot en we willen graag van je weten w�t er niet lukt en w�lke foutmelding je precies krijgt 
Vorige delen: 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
Zie ook: PHP Dataverwerking Offici�le PHP website PHP Documentatie MySQL Reference Manual Yet Another PHP Faq PHP Cheat Sheet PHP5 Power Programming - boek met uitleg over OOP, Pear, XML, etc
Tutorials: W3Schools PHP W3Schools SQL
Deze OP en instructies voor nieuw topic: http://wiki.fok.nl/index.php/OP/PHP
* teeveepee |
qu63 | dinsdag 18 december 2007 @ 19:14 |
quote:Op dinsdag 18 december 2007 19:29 schreef DaFrenk het volgende:Zal vast al eens eerder aan bod zijn gekomen, maar welk programma gebruiken jullie om te coden? @ OS X gebruik ik Smultron. Fijn programma op zich. Maar wat gebruiken jullie in Windows? Gewoon een lichtgewicht editor die fijn werkt met kleurtjes en regelnummertjes enz. Dreamweaver MX 
[ Bericht 79% gewijzigd door qu63 op 18-12-2007 19:42:13 ] |
DaFrenk | dinsdag 18 december 2007 @ 19:29 |
Zal vast al eens eerder aan bod zijn gekomen, maar welk programma gebruiken jullie om te coden? @ OS X gebruik ik Smultron. Fijn programma op zich. Maar wat gebruiken jullie in Windows? Gewoon een lichtgewicht editor die fijn werkt met kleurtjes en regelnummertjes enz. |
super-muffin | dinsdag 18 december 2007 @ 19:45 |
Als ik op mijn stage met Windows werk gebruik ik afwisselent Aptana & E TextEditor (lijkt heel sterk op TextMate, mijn favoriet op de Mac)
Dus ik zou E aanraden als je een lightweight en simpele texteditor zoekt. 
Dreamweaver vind ik te bloated. Code complition heb ik niet nodig, ik tik zo snel  |
qu63 | dinsdag 18 december 2007 @ 19:56 |
quote:Op dinsdag 18 december 2007 19:45 schreef super-muffin het volgende:Als ik op mijn stage met Windows werk gebruik ik afwisselent Aptana & E TextEditor (lijkt heel sterk op TextMate, mijn favoriet op de Mac) Dus ik zou E aanraden als je een lightweight en simpele texteditor zoekt.  Dreamweaver vind ik te bloated. Code complition heb ik niet nodig, ik tik zo snel  Ik tik ook snel, maar maak daardoor juist fouten  |
DaFrenk | dinsdag 18 december 2007 @ 20:20 |
Thanks voor de tips. Ga die E TextEditor eens proberen, al had ik liever een open-source of freeware alternatief Probeer toch zoveel mogelijk open-source te werken. Iemand daar nog een tipje voor? |
Feola | dinsdag 18 december 2007 @ 20:34 |
Nou wat is dit nou weer, ik probeer even simpel wat in een db toe te voegen:
1 2 3 4 5 | <?php $db = mysql_connect("localhost","root","***"); mysql_select_db("wt2", $db) or die ("No database selected"); mysql_query("INSERT INTO nieuws (nieuws_id, nieuws_titel, nieuws_inhoud, nieuws_datum) VALUES ('', 'sdsdf' 'sdf', 'asdasdasd')"); ?> |
En hij doet het gewoon niet? Krijg ook geen foutmelding ofzo, wazig. Ik zie vast weer wat over t hoofd :'). Uitlezen kan wel gewoon. |
Arjan321 | dinsdag 18 december 2007 @ 21:21 |
doe eens
dan krijg je de fout in je query te zien
En je kan de hele kolom `nieuws_id` gewoon weglaten, aangezien je toch auto-incrediment gebruikt. |
colourAgga | dinsdag 18 december 2007 @ 22:03 |
Kom je toch simpel zelf achter door even mysql_error() of mysql_errno() aan te roepen? |
PiRANiA | dinsdag 18 december 2007 @ 22:53 |
quote:Op dinsdag 18 december 2007 22:03 schreef colourAgga het volgende:Kom je toch simpel zelf achter door even mysql_error() of mysql_errno() aan te roepen? ja, maar volgens mij werkt bovenstaande beter
slechte TVP  |
Mordreth | woensdag 19 december 2007 @ 08:41 |
quote:Op dinsdag 18 december 2007 19:29 schreef DaFrenk het volgende:Zal vast al eens eerder aan bod zijn gekomen, maar welk programma gebruiken jullie om te coden? @ OS X gebruik ik Smultron. Fijn programma op zich. Maar wat gebruiken jullie in Windows? Gewoon een lichtgewicht editor die fijn werkt met kleurtjes en regelnummertjes enz. Zowel op m'n werk als thuis gebruik ik jEdit. En dan met een aantal handige plugins + alle kleuren apart aangepast. tvp |
#ANONIEM | woensdag 19 december 2007 @ 08:43 |
Thuis gebruik ik PHPEditor, werkt wel lekker. Soms ook Eclipse, aangezien ik dat van werk ken. |
colourAgga | woensdag 19 december 2007 @ 08:50 |
quote: Dat bedoelde ik met mijn post :p En het was ook een semi verkapte TVP.
Overigens gebruik ik VIM en editplus voor het maken van code  |
PiRANiA | woensdag 19 december 2007 @ 09:14 |
ik gebruik gPHPedit voor ubuntu linux. Werkt geweldig  |
super-muffin | woensdag 19 december 2007 @ 15:50 |
quote:Op dinsdag 18 december 2007 20:20 schreef DaFrenk het volgende:Thanks voor de tips. Ga die E TextEditor eens proberen, al had ik liever een open-source of freeware alternatief  Probeer toch zoveel mogelijk open-source te werken. Iemand daar nog een tipje voor? Anders kun je nog Notepad++ of Notepad 2 proberen, die zijn wel gratis.  |
DaFrenk | woensdag 19 december 2007 @ 15:57 |
Ahja! Kon er niet meer opkomen.. terwijl het zo voor de hand ligt
Maar gelukkig is m'n MacBook weer terug. Dus kan weer aan de slag met Smultron  |
super-muffin | woensdag 19 december 2007 @ 16:20 |
Of probeer TextMate eens. 
Bekijk wat van die screencasts en snuffel tussen de bundle's.  |
DaFrenk | woensdag 19 december 2007 @ 16:38 |
Ziet er idd erg goed uit dat TextMate  |
JortK | woensdag 19 december 2007 @ 19:39 |
Ik gebruik phpDesigner 2007 Professional  |
colourAgga | woensdag 19 december 2007 @ 21:35 |
TextMate heb ik inderdaad op de Mac, helemaal vergeten  |
Chandler | donderdag 20 december 2007 @ 15:02 |
Ik heb een vraagje over database normalisatie of hoe je dat ook wilt noemen.
Voor een x aantal sites wil ik IP adressen gaan opslaan voor statistieken, om te kijken hoevaak een bepaald IP adres langs komt en hoeveel views zo'n IP adres op zo'n site heeft.
Nu vraag ik mij af hoe ik dit het beste kan opslaan.
bv
1 tabel - IPS (id, site_id, ip, laatstehit, hits)
OF
2 tabellen
IPS - (id, ip) IPsHIT (id, site_id, ip_id, laatstehit, hits)
Wat raden jullie aan? 
het gaat mogelijk om honderduizenden ip adressen! |
Mordreth | donderdag 20 december 2007 @ 15:04 |
quote:Op donderdag 20 december 2007 15:02 schreef Chandler het volgende:Ik heb een vraagje over database normalisatie  of hoe je dat ook wilt noemen. Voor een x aantal sites wil ik IP adressen gaan opslaan voor statistieken, om te kijken hoevaak een bepaald IP adres langs komt en hoeveel views zo'n IP adres op zo'n site heeft. Nu vraag ik mij af hoe ik dit het beste kan opslaan. bv 1 tabel - IPS (id, site_id, ip, laatstehit, hits) OF 2 tabellen IPS - (id, ip) IPsHIT (id, site_id, ip_id, laatstehit, hits) Wat raden jullie aan?  Bij die laatste is het handig als je dan ook een datum toevoegd zodat je gelijk kan zien wanneer het druk is enz. Anders kan je net zo goed die eerste doen . |
JortK | donderdag 20 december 2007 @ 15:22 |
quote:Op donderdag 20 december 2007 15:02 schreef Chandler het volgende:Ik heb een vraagje over database normalisatie  of hoe je dat ook wilt noemen. Voor een x aantal sites wil ik IP adressen gaan opslaan voor statistieken, om te kijken hoevaak een bepaald IP adres langs komt en hoeveel views zo'n IP adres op zo'n site heeft. Nu vraag ik mij af hoe ik dit het beste kan opslaan. bv 1 tabel - IPS (id, site_id, ip, laatstehit, hits) OF 2 tabellen IPS - (id, ip) IPsHIT (id, site_id, ip_id, laatstehit, hits) Wat raden jullie aan? het gaat mogelijk om honderduizenden ip adressen! Tweede mogelijkheid 
Maar dan wel wat meer info nog toevoegen zodat je uitgebreidere statistieken kan maken  |
Chandler | donderdag 20 december 2007 @ 15:35 |
Hoe bedoel je met datum toevoegen?
En hoe zouden jullie dit dan aanpassen anders dan kiezen voor de 2e database optie? |
SuperRembo | donderdag 20 december 2007 @ 17:16 |
Het ip-adres beschouw je toch al als uniek, waarom zou je dan ip-adressen in een tabel gaan zetten met een extra id erbij? |
Chandler | donderdag 20 december 2007 @ 20:40 |
Nee het IP adres is niet uniek, wel in combinatie met de site ID |
SuperRembo | donderdag 20 december 2007 @ 21:07 |
quote: Ik bedoel het ip In de tabel IPS die je voorstelt. Daar schiet je dus niets mee op, je verangt dan het ene id (ip) door het andere. |
Chandler | vrijdag 21 december 2007 @ 07:40 |
Ik snap je blijkbaar nog niet helemaal maar zal wel komen omdat het vroeg is  |
DaFrenk | vrijdag 21 december 2007 @ 14:12 |
Weet iemand hier misschien hoe het zit met regeleindes in CSV bestanden? (Ofwel tab-delimited data in een txt bestand)?
Ik heb zelf een DBF database geopend in Excel en dat geëxporteerd naar TXT. Dat bestand kan ik zonder problemen in PHP openen en omzetten naar SQL instructies.
Echter een TXT bestand rechtstreeks uit dBase (ook tab-delimited) gaat helemaal mis, het lijkt erop dat hij de regels niet kan afbreken waardoor het dus niet lukt om elke regel te extracten. |
colourAgga | zondag 23 december 2007 @ 20:23 |
Misschien een verschilletje tussen \r\n en alleen \n?
Overigens over database normalisatie ik heb geleerd dat tabelnamen altijd enkelvoud zijn dus een tabel ip En ik heb stukje over caching geschreven  |
Xcalibur | zondag 23 december 2007 @ 20:42 |
ik heb PHP 5.xx draaien op Windows XP. Gaat allemaal heel leuk, maar ik kan geen mail versturen vanaf localhost. Nu gebruik ik altijd mail.provider.nl, maar dan duurt het verzenden al gauw zo'n 20 seconden, en dat is vrij irritant...
Enig idee hoe ik: - OF mail vanaf localhost kan versturen - OF sneller via mijn provider kan mailen? |
DaFrenk | zondag 23 december 2007 @ 21:46 |
Je kan eventueel ook via sendmail een mail sturen. Is een perl script. |
warezguy05 | zondag 23 december 2007 @ 22:41 |
hoi mensen,
ik ben begonnen met een site waar een database achter moet gaan draaien, maar ik zit met een probleem.
ff kort hoe ik het wil hebben:
de website moet een database bevatten van DJ's, SETS en EVENTS. Een EVENT wordt gezien als evenement/houseparty... en op elk event draaien 1 of meerdere dj's een set. Elke set-pagina zal uiteindelijk ook een link bevatten naar een audiofile zodat mensen de betreffende set nog eens na kunnen luisteren thuis. Elke set bestaat uit een variabel aantal TRACKS (id, artist,title, remixer) die die avond door de dj gedraaid zijn.
Tot zover lukt het me nog wel, maar ik wil ook graag een tracklist toevoegen aan de pagina. Ik dacht aan de volgende manier:
aan de TRACK tabel voeg ik nog de elementen 'set_id' en 'position' toe. Hiermee bepaal ik dus in welke set een bepaalde track gedraaid is, en welke positie binnen de set deze track heeft. Door nu een aantal tabellen te joinen zou ik dus de tracklist van een specifieke set kunnen tonen.
Wanneer ik van die set_id + position gebruik maak, zullen er heel veel 'dubbele' tracks in de database voorkomen. DJ's draaien nogal ns dezeflde nummers maar door die set_id en position kan ik zo'n track maar koppelen aan 1 set.
Nou zou het ook leuk zijn als bezoekers op de tracknaam binnen de tracklist kunnen klikken om zo te zien in welke sets deze track gedraaid is. Maar dit gaat dus niet omdat dezelfde track meerdere id's heeft.
Is er een manier om deze samen te voegen als het ware, zodat die 'dubbele tracks' gezien worden als slechts 1 track??

[ Bericht 23% gewijzigd door warezguy05 op 23-12-2007 23:05:12 ] |
colourAgga | maandag 24 december 2007 @ 02:50 |
Je kan een losse koppeltabel gebruiken met daarin twee foreign keys, eentje van de set en eentje van de track. Hierdoor kun je een enkele track aan meerdere sets hangen of een enkele set aan meerdere tracks etc. 
Die tabel zou dus een set_id en een track_id bevatten en that's it, even wat InnoDB magic erop los laten en het is klaar om te gaan! |
Xcalibur | maandag 24 december 2007 @ 09:40 |
quote: Ik heb geen perl draaien... maar Windows moet toch wel in staat zijn er een mailtje uit te doen lijkt me?  |
warezguy05 | maandag 24 december 2007 @ 12:29 |
quote:Op maandag 24 december 2007 02:50 schreef colourAgga het volgende:Je kan een losse koppeltabel gebruiken met daarin twee foreign keys, eentje van de set en eentje van de track. Hierdoor kun je een enkele track aan meerdere sets hangen of een enkele set aan meerdere tracks etc.  Die tabel zou dus een set_id en een track_id bevatten en that's it, even wat InnoDB magic erop los laten en het is klaar om te gaan! dat klinkt heel logisch idd. ik ga dat vandaag eens proberen, thanks! |
Chandler | maandag 24 december 2007 @ 13:07 |
Ik heb een vraag, voor een kleine website wil ik pagina's gaan inbouwen met de volgende (zelf geschreven code) echter zit er een fout in.. maar kan deze niet vinden.
Bv ik heb 15 items, als ik deze code start met de volgende statement
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $pages = pointer($page, array('file' => '/catch', 'param' => '/videos/page/', 'first' => 1, 'last' => floor($maxpages / 5)-1, 'step' => 1, 'max' => (floor($maxpages / 5) > 5 ? 5 : floor($maxpages / 5)-1)), array('first' => 'eerste', 'prev' => 'vorige', 'currl' => '<strong>', 'currr' => '</strong>', 'next' => 'volgende', 'last' => 'laatste', 'spacer' => ' ')); |
en maxpages = 15 dan krijg ik op de eerste pagina (zonder query) het volgende te zien.
Pagina's: 1 2 volgende
Als ik op pagina 2 klik krijg ik het volgende te zien.
Pagina's: 1
Ik snap niet waar de fout in zit en of wat ik fout doe of heb ik gewoon een sukkie script geschreven? (lange geleden )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 | <?php error_reporting(E_ALL);
$pointers = array('first' => 'eerste', 'prev' => 'vorige', 'currl' => '<strong style="color: blue;">', 'currr' => '</strong>', 'next' => 'volgende', 'last' => 'laatste', 'spacer' => ' ');
$pointer1 = array('first' => '<', 'prev' => '<<', 'currl' => '<strong style="color: green;">', 'currr' => '</strong>', 'next' => '>>', 'last' => '>>', 'spacer' => '<div style="display: inline; width: 15px; border-top: 1px solid black;"> </div>');
function pointer($current, $settings = array(), $pointers = array()) { $tmp = "";
// check for existence
// these variables need to be set! else return false; if (!isSet($settings['file'] )) { return "pointer::file_not_specified";} if (!isSet($settings['first'])) { return "pointer::first_not_specified";} if (!isSet($settings['last'])) { return "pointer::last_not_specified";} // if no settings found, use current. if (!isSet($settings['param'])) { $settings['param'] = "?";} if (!isSet($settings['step'])) { $settings['step'] = 1;} if (!isSet($settings['max'])) { $settings['max'] = 5;} // no pointers found, create default pointers. if (!isSet($pointers['first'])) { $pointers['first'] = "first";} if (!isSet($pointers['prev'])) { $pointers['prev'] = "previous";} if (!isSet($pointers['currl'])) { $pointers['currl'] = "<strong>";} if (!isSet($pointers['currr'])) { $pointers['currr'] = "</strong>";} if (!isSet($pointers['next'])) { $pointers['next'] = "next";} if (!isSet($pointers['last'])) { $pointers['last'] = "last";} if (!isSet($pointers['spacer'])) { $pointers['spacer'] = " ";}
// if first is lower then 1 first is one. if ($settings['first'] < 1) { $settings['first'] = 1; }
// create start, mid and end variables $point_first = $settings['first']; $point_mid = ceil($current / $settings['step']); $point_last = ceil($settings['last'] / $settings['step']);
// is a back to first page pointer needed? if (isSet($pointers['first'])) { if (($point_mid -2) > 0) { // first pointer wanted; $tmp .= '<a href="' . $settings['file'] . $settings['param'] . $point_first . '" TITLE="First page">' . $pointers['first'] . '</a>'; $tmp .= $pointers['spacer']; } } // is a previous page pointer needed? if (isSet($pointers['prev'])) { if (($point_mid -1) > 0) { // previous pointer wanted; $tmp .= '<a href="' . $settings['file'] . $settings['param'] . ($point_mid -1) . '" TITLE="Previous page">' . $pointers['prev'] . '</a>'; $tmp .= $pointers['spacer']; } } // select number of items before and after current page $pos = floor(($settings['max'] -1) /2); // if pointer is close to the beginning of pages if (($point_mid - $pos) < 1) { // first peace (from 12345) for ($x = 1; $x < ($settings['max'])+1; $x++) { if ($x == $point_mid) { // current page $tmp .= '<a href="' . $settings['file'] . $settings['param'] . $x . '" TITLE="To page ' . $x . '">' . $pointers['currl'] . $x . $pointers['currr'] . '</a>'; $tmp .= $pointers['spacer']; } else { $tmp .= '<a href="' . $settings['file'] . $settings['param'] . $x . '" TITLE="To page ' . $x . '">' . $x . '</a>'; $tmp .= $pointers['spacer']; } } } // pointer close to the end of pages elseif (($point_mid + $pos) > $point_last) { // last peace (from 11,12,13,14,15 (to last)) for ($x = ($point_last - $settings['max'])+1; $x <= $point_last; $x++) { if ($x == $point_mid) { // current page $tmp .= '<a href="' . $settings['file'] . $settings['param'] . $x . '" TITLE="To page ' . $x . '">' . $pointers['currl'] . $x . $pointers['currr'] . '</a>'; $tmp .= $pointers['spacer']; } else { $tmp .= '<a href="' . $settings['file'] . $settings['param'] . $x . '" TITLE="To page ' . $x . '">' . $x . '</a>'; $tmp .= $pointers['spacer']; } } } // pointer is somewhere between... else { // mid peace (4,5) before current page for ($x = $point_mid - $pos; $x < $point_mid; $x++) { $tmp .= '<a href="' . $settings['file'] . $settings['param'] . $x . '" TITLE="To page ' . $x . '">' . $x . '</a>'; $tmp .= $pointers['spacer']; }
// current page $tmp .= '<a href="' . $settings['file'] . $settings['param'] . $x . '" TITLE="To page ' . $x . '">' . $pointers['currl'] . $x . $pointers['currr'] . '</a>'; $tmp .= $pointers['spacer'];
// mid peace (7,8) after current page. for ($x = $point_mid +1; $x < ($point_mid + $pos)+1; $x++) { $tmp .= '<a href="' . $settings['file'] . $settings['param'] . $x . '" TITLE="To page ' . $x . '">' . $x . '</a>'; $tmp .= $pointers['spacer']; } } // if there is a next page if (isSet($pointers['next'])) { if (($point_mid +1) < $point_last) { // next pointer wanted; $tmp .= '<a href="' . $settings['file'] . $settings['param'] . ($point_mid +1) . '" TITLE="Next page">' . $pointers['next'] . '</a>'; $tmp .= $pointers['spacer']; } } // if current page is lower then last-2 then show last. if (isSet($pointers['last'])) { if (($point_mid +2) < $point_last) { // last pointer wanted; $tmp .= '<a href="' . $settings['file'] . $settings['param'] . $point_last . '" TITLE="Last page">' . $pointers['last'] . '</a>'; $tmp .= $pointers['spacer']; } } return $tmp . "<br /><br />";
}
// pointer(, $settings, $pointers);
/* echo pointer(10, $settings, $pointers); echo pointer(50, $settings, $pointer1); echo pointer(250, $settings, $pointer1); echo pointer(255, $settings, $pointers); */ ?> |
|
PiRANiA | maandag 24 december 2007 @ 13:22 |
quote:Op maandag 24 december 2007 13:07 schreef Chandler het volgende:Ik heb een vraag, voor een kleine website wil ik pagina's gaan inbouwen met de volgende (zelf geschreven code) echter zit er een fout in.. maar kan deze niet vinden. Bv ik heb 15 items, als ik deze code start met de volgende statement [ code verwijderd ] en maxpages = 15 dan krijg ik op de eerste pagina (zonder query) het volgende te zien. Pagina's: 1 2 volgende Als ik op pagina 2 klik krijg ik het volgende te zien. Pagina's: 1 Ik snap niet waar de fout in zit en of wat ik fout doe  of heb ik gewoon een sukkie script geschreven?  (lange geleden  ) [ code verwijderd ] Ik zie zo snel geen fout in de functionaliteit, maar ik zou in plaats van >> voor knopjes > gebruiken en < voor < |
Chandler | maandag 24 december 2007 @ 13:32 |
Bedankt PiRANiA, zal ik even aanpassen in de lokale versie 
Ik heb mijn script eens opnieuw geschreven, met comments
Graag commentaar!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | <?php function pages($currentPage = 0, $totalItems = 0, $itemsPerPage = 0, $maxPages = 10, $link) { /* currentPage is the page wich we are on yet totalItems are the total items to show / itemsPerPage = pages itemsPerPage are the numbe of items per page maxPages are the max num of pages to show
*/ $returnStr = "";
// start init if (floor($totalItems / $itemsPerPage) < 1) { // no pages available return false; } $pages = floor($totalItems / $itemsPerPage); // if current page is bigger then total pages? if ($currentPage > $pages) { // if current page is bugger then max pages, currentpage is maxpage $currentPage = $pages; } /* show first, prevoius page */ if ($currentPage > 1) { $returnStr .= '<a href="' . $link['link'] . '">first</a> '; $returnStr .= '<a href="' . $link['link'] . str_replace("%s", $currentPage -1, $link['query']) . '">previous</a> '; } elseif ($currentPage > 0) { $returnStr .= '<a href="' . $link['link'] . '">first</a> '; } /* middle part */ $rPage = floor(($maxPages-1) /2);
// if page is between total pages if ($currentPage - $rPage > 0 && $currentPage + $rPage < $pages) { $first = $currentPage - $rPage; $last = $currentPage + $rPage; } // if page is one of the first pages elseif ($currentPage - $rPage <= 0) { // from 0 $first = 1; $last = $maxPages; } // if page is one of the last pages else { // from maxpages $first = ($pages - $maxPages) +1; $last = $pages; } // if last is bigger then total pages if ($last > $pages) { $last = $pages; } /* middle pages */ for ($x = $first; $x < $last+1; $x++) { if ($currentPage == $x) { $returnStr .= '<a href="' . $link['link'] . str_replace("%s", $x, $link['query']) . '">' . str_replace("%s", $x, $link['current']) . '</a> '; } else { $returnStr .= '<a href="' . $link['link'] . str_replace("%s", $x, $link['query']) . '">' . $x . '</a> '; } } /* end part */ if ($pages - $currentPage > 1) { $returnStr .= '<a href="' . $link['link'] . str_replace("%s", $currentPage +1, $link['query']) . '">next</a> '; $returnStr .= '<a href="' . $link['link'] . str_replace("%s", $pages, $link['query']) . '">last</a> '; } elseif ($pages - $currentPage > 0) { $returnStr .= '<a href="' . $link['link'] . str_replace("%s", $pages, $link['query']) . '">last</a> '; } return $returnStr; }
/*
test pogingen, lekker random
*/
$linkArr = array("link" => '/pages.php', "query" => '?from=%s', "current" => '<strong style="color: red;">%s</strong>');
$totalItems = rand(0, 250); $itemsPerPage = rand(4, 10); $maxPages = rand(3, 10);
/* $totalItems = 10; $itemsPerPage = 7; $maxPages = 9; */
echo "<h2> totalItems $totalItems itemsPerPage $itemsPerPage maxPages $maxPages</h2>";
for ($currentPage = 0; $currentPage < floor($totalItems / $itemsPerPage)+1; $currentPage++) { echo pages($currentPage, $totalItems, $itemsPerPage, $maxPages, $linkArr); echo '<hr>'; } ?> |
en ik heb het gepoogd om te zetten naar een class, waarbij je meer dingen kunt instellen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | <?php class pagePointers { var $titleFirst = "first"; var $titlePrevious = "previous"; var $titleNext = "next"; var $titleLast = "last";
function pointers($in) { $this->pointerLink = $in['link']; $this->pointerQuery = $in['query']; $this->pointerCurrent = $in['current']; } function init() { $this->returnStr = ''; // start init if (floor($this->totalItems / $this->itemsPerPage) < 1) { // no pages available return false; } $this->pages = floor($this->totalItems / $this->itemsPerPage);
// if current page is bigger then total pages? if ($this->currentPage > $this->pages) { // if current page is bugger then max pages, currentpage is maxpage $this->currentPage = $this->pages; } /* middle part */ $this->rPage = floor(($this->maxPages -1) /2); // if page is between total pages if ($this->currentPage - $this->rPage > 0 && $this->currentPage + $this->rPage < $this->pages) { $this->first = $this->currentPage - $this->rPage; $this->last = $this->currentPage + $this->rPage; } // if page is one of the first pages elseif ($this->currentPage - $this->rPage <= 0) { // from 0 $this->first = 1; $this->last = $this->maxPages; } // if page is one of the last pages else { // from maxpages $this->first = ($this->pages - $this->maxPages) +1; $this->last = $this->pages; }
// if last is bigger then total pages if ($this->last > $this->pages) { $this->last = $this->pages; } } function first() { /* show first, prevoius page */ if ($this->currentPage > 1) { $this->returnStr .= '<a href="' . $this->pointerLink . '">' . $this->titleFirst . '</a> '; $this->returnStr .= '<a href="' . $this->pointerLink . str_replace("%s", ($this->currentPage -1), $this->pointerQuery) . '">' . $this->titlePrevious . '</a> '; } elseif ($this->currentPage > 0) { $this->returnStr .= '<a href="' . $this->pointerLink . '">' . $this->titleFirst . '</a> '; } } function last() { /* end part */ if (($this->pages - $this->currentPage) > 1) { $this->returnStr .= '<a href="' . $this->pointerLink . str_replace("%s", $this->currentPage +1, $this->pointerQuery) . '">' . $this->titleNext . '</a> '; $this->returnStr .= '<a href="' . $this->pointerLink . str_replace("%s", $this->pages, $this->pointerQuery) . '">' . $this->titleLast . '</a> '; } elseif ($this->pages - $this->currentPage > 0) { $this->returnStr .= '<a href="' . $this->pointerLink . str_replace("%s", $this->pages, $this->pointerQuery) . '">' . $this->titleLast . '</a> '; } } function middle() { /* middle pages */ for ($x = $this->first; $x < ($this->last +1); $x++) { if ($this->currentPage == $x) { $this->returnStr .= '<a href="' . $this->pointerLink . str_replace("%s", $x, $this->pointerQuery) . '">' . str_replace("%s", $x, $this->pointerCurrent) . '</a> '; } else { $this->returnStr .= '<a href="' . $this->pointerLink . str_replace("%s", $x, $this->pointerQuery) . '">' . $x . '</a> '; } } } function getPages($currentPage) { $this->currentPage = $currentPage; $this->init(); $this->first(); $this->middle(); $this->last(); return $this->returnStr; } }
$p = new pagePointers;
$p->pointers(array("link" => '/pages.php', "query" => '?from=%s', "current" => '<strong style="color: red;">%s</strong>'));
$p->totalItems = rand(0, 250); $p->itemsPerPage = rand(4, 10); $p->maxPages = rand(3, 10);
$p->titleFirst = "eerste"; $p->titlePrevious = "vorige"; $p->titleNext = "volgende"; $p->titleLast = "laatste";
echo "<h2> totalItems $p->totalItems itemsPerPage $p->itemsPerPage maxPages $p->maxPages</h2>";
for ($currentPage = 0; $currentPage < floor($p->totalItems / $p->itemsPerPage)+1; $currentPage++) { echo $p->getPages($currentPage); echo '<hr>' . "\r\n\r\n\r\n"; } ?> |
[ Bericht 70% gewijzigd door Chandler op 25-12-2007 12:58:38 ] |
colourAgga | donderdag 27 december 2007 @ 01:35 |
Even zonder erop in te gaan of echt uitgebreid je code te lezen, eventueel iets met kleiner dan of kleiner of gelijk aan. Dus < of <= en > of =>. Als dat het niet is gaat er ergens iets mis met je floor, en zul je daar een andere methode voor pakken.
Overigens zou ik gewoon een arraytje met pagina's maken en kijken of de key bestaat van de vorige pagina, stuk minder gehannes dan zo'n eindeloze lap code. Oh en over die lange lappen code, ik moet eindeloos scrollen man 
Even een kort voorbeeld zonder al te uitgebreid te gaan.
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 | <?php $itemcount = 100; $itemspage = 10;
$pagecount = ceil( $itemcount / $itemspage );
if( !isset( $_GET[ 'page_id' ] ) OR !is_numeric( $_GET[ 'page_id' ] ) ) {
$page = 0;
} elseif( isset( $_GET[ 'page_id' ] ) AND is_numeric( $_GET[ 'page_id' ] ) ) {
$page = $_GET[ 'page_id' ];
}
for( $i = 0; $i <= $pagecount; $i++ ) {
if( $i == 0 ) {
print 'Eerste pagina';
} elseif( $i == $pagecount ) {
print 'Laatste pagina';
} else {
print 'Pagina' . $i;
}
} ?> |
ceil is beter omdat je ander items niet gaat laten zien (die vallen eraf door de floor).
[ Bericht 43% gewijzigd door colourAgga op 27-12-2007 16:11:07 ] |
Chandler | donderdag 27 december 2007 @ 08:48 |
quote:Op donderdag 27 december 2007 01:35 schreef colourAgga het volgende:Even zonder erop in te gaan of echt uitgebreid je code te lezen, eventueel iets met kleiner dan of kleiner of gelijk aan. Dus < of <= en > of =>. Als dat het niet is gaat er ergens iets mis met je floor, en zul je daar een andere methode voor pakken. Ja daar kwam ik al achter toen ik het in mijn project ging verwerken  quote:Overigens zou ik gewoon een arraytje met pagina's maken en kijken of de key bestaat van de vorige pagina, stuk minder gehannes dan zo'n eindeloze lap code. Arraytje? dat zie ik niet terug komen in je code, maar mijn manier kan ook het aantal pagina's achter elkaar instellen.quote:Oh en over die lange lappen code, ik moet eindeloos scrollen man  Tja jammer dat FOK geen minimalize button voor codes heeft héquote:Even een kort voorbeeld zonder al te uitgebreid te gaan. [ code verwijderd ] Leuk dat je is_int gebruikt, ik check altijd met is_numeric  quote:ceil is beter omdat je ander items niet gaat laten zien (die vallen eraf door de floor). Daar kwam ik ook achter idd, floor is naar beneden en ceil is omhoog  |
WyriHaximus | donderdag 27 december 2007 @ 08:52 |
quote: Wat dacht je van een pastebin? |
SuperRembo | donderdag 27 december 2007 @ 11:03 |
quote: Dan doe jij het goed en doet colourAgga het fout is_int() met een string als input (in dit geval uit $_GET) geeft altijd false!
[ Bericht 9% gewijzigd door SuperRembo op 27-12-2007 11:22:37 ] |
Chandler | donderdag 27 december 2007 @ 11:20 |
quote: wat dacht je van apieceofcode.net  quote:Op donderdag 27 december 2007 11:03 schreef SuperRembo het volgende:[quote] Op donderdag 27 december 2007 08:48 schreef Chandler het volgende:Leuk dat je is_int gebruikt, ik check altijd met is_numeric  /quote] Dan doe jij het goed en doet colourAgga het fout  is_int() met een string als input (in dit geval uit $_GET) geeft altijd false! Damn, doe ik nog eens iets goed  |
colourAgga | donderdag 27 december 2007 @ 16:06 |
Helemaal gelijk moet inderdaad is_numeric zijn, zal het even goed zetten. Tijdje al geen PHP gedaan en ik gooi het altijd door mijn verificatie klasse 
In mijn voorbeeld staat inderdaad geen array omdat ik je code las en zag dat je alleen items over pagina's hoeft te verdelen terwijl toen ik het eerste stuk las dacht dat je echt als 'hoofdstukken' door een boek wilde bladeren of iets in die geest. |
WyriHaximus | donderdag 27 december 2007 @ 22:38 |
quote: Ja bijvoorbeeld .
-knip- |
SuperRembo | vrijdag 28 december 2007 @ 00:29 |
Werkt een spoiler-tag om een code-tag heen?SPOILER of anders een quote? (want die heeft tegenwoordig een max height)quote: |
WyriHaximus | vrijdag 28 december 2007 @ 00:49 |
quote:Op vrijdag 28 december 2007 00:29 schreef SuperRembo het volgende:Werkt een spoiler-tag om een code-tag heen? SPOILER[ code verwijderd ] of anders een quote? (want die heeft tegenwoordig een max height) [..] Zo te zien wel alleen hebben ze een max width . Ziet er niet echt netjes uit zo. |
SuperRembo | zondag 30 december 2007 @ 21:41 |
Nog ff wat commentaar op (een deel van) het scriptje van Tarabass in dat niet-centrale php topic met die waardeloze titel.
Ik snap niet helemaal waarom je een tabelnaam variabel zou willen maken. Maar als je dat dan doet, dan lijkt het me handiger om ze in $GLOBALS te zetten, zodat je er altijd bij kunt zonder dat je die variabele aan elke functie hoeft mee te geven. function CheckPostData($mysql_tbn) { $ip = $_SERVER['REMOTE_ADDR']; $ip = ip2long($ip);
Het heeft geen zin om hier een string te escapen, je bent hier nog helemaal niet met sql bezig $data = mysql_real_escape_string($_POST['data']); $date = date('y-m-j H:i:s');
Waarom 2 if-jes? if($data != "Hier je bericht.....") { if($data != "" && is_string($data)) { InsertQuery($mysql_tbn, $ip, $data, $date); } } }
Beetje vreemde functienaam, zegt ook niet veel over wat ie doet. function InsertQuery($table, $ip, $data, $date) { $sql_insert = "INSERT INTO " . $table . " SET "; id is vast een integer, daar past dus geen (lege) string in. Als het een autoincrement id is, dan kan je 'm beter weglaten uit de insert. $sql_insert .= "id = ''"; Hier moet je de string dus wel escapen $sql_insert .= ", ip = '" . $ip . "'"; en hier ook $sql_insert .= ", data = '" . $data . "'"; en hier ook. Is de date kolom een string, een date/datetime of een int? $sql_insert .= ", date = '" . $date . "'";
$result = mysql_query($sql_insert); header("Location: " . $_SERVER['PHP_SELF']); // Waarom is de exit uitgecomment? Na de redirect moet je er voor zorgen dat er geen data meer naar de client wordt gestuurd (dat gebeurt nu wel). //exit; }
Bij A List Apart staat een mooiere oplossing voor de "Hier je bericht....." tekst in de textarea. |
Tarabass | maandag 31 december 2007 @ 10:32 |
Fix-List:
Variable (volgens mij) nu global gemaakt. Escape bij declaratie weggehaald en in de query pas meegegeven If-statements verkort naar 1 if-statement ID-integer uit de query gesloopt, ook geen idee waarom ik hem er bij had gezet (en dan ook nog als string). exit; comment weggehaald.
Waarom moet ik de variable $ip escapen in de query? Dit is een integer, en geen string. $date is een datetime. Waarom vraag je dat?
A List Apart wordt doorgenomen, dank voor de link.
Code na aanpassingen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?php function CheckPostData() { $ip = $_SERVER['REMOTE_ADDR']; $ip = ip2long($ip); $data = $_POST['data']; $date = date('y-m-j H:i:s'); Global $mysql_tbn;
if(($data != "Hier je bericht....." && $data != "") && (is_string($data))) { InsertQuery($ip, $data, $date); } } function InsertQuery($ip, $data, $date) { Global $mysql_tbn;
$sql_insert = "INSERT INTO " . $mysql_tbn . " SET "; $sql_insert .= "ip = " . $ip; $sql_insert .= ", data = '" . mysql_real_escape_string($data) . "'"; $sql_insert .= ", date = '" . $date . "'";
$result = mysql_query($sql_insert); header("Location: " . $_SERVER['PHP_SELF']); exit; } ?> |
|
Geqxon | maandag 31 december 2007 @ 11:30 |
quote: Ik kom er nog steeds niet compleet uit....
Wat ik zoek is een functie die mij de timestamp van de eerste dag van weeknummer X in jaar Y geeft. Ik heb er net weer mee zitten te stoeien, maar ik krijg geen algoritme uit mijn pols geschud die dit voor elkaar krijgt op een manier dat het ook met de jaarwisseling goed gaat.  |
Xcalibur | maandag 31 december 2007 @ 11:34 |
Ik heb het volgende probleem:
Ik ben bezig een Google Sitemap XML bestand te genereren. Lokaal (Windows XP, IIS) werkt dit allemaal, en als ik het bestand in m'n browser open krijg ik netjes een XML tree te zien. Nu upload ik het naar mijn server (Linux, Apache) en daar krijg ik een blanco bestand.
Ik ben er achter gekomen dat dit veroorzaakt wordt door de eerste regel van het XML bestand, namelijk:
1 | <?xml version='1.0' encoding='UTF-8'?> |
Als ik deze regel weghaal krijg ik wel output te zien, maar is het (natuurlijk) geen XML meer... Ik heb werkelijk waar géén idee waarom dit is of wat ik er aan zou moeten doen  |
Arjan321 | maandag 31 december 2007 @ 11:44 |
verstuur je het eea wel als xml? http://nl3.php.net/manual/en/function.header.php |
Geqxon | maandag 31 december 2007 @ 11:49 |
quote:Op maandag 31 december 2007 11:34 schreef Xcalibur het volgende:Ik heb het volgende probleem: Ik ben bezig een Google Sitemap XML bestand te genereren. Lokaal (Windows XP, IIS) werkt dit allemaal, en als ik het bestand in m'n browser open krijg ik netjes een XML tree te zien. Nu upload ik het naar mijn server (Linux, Apache) en daar krijg ik een blanco bestand. Ik ben er achter gekomen dat dit veroorzaakt wordt door de eerste regel van het XML bestand, namelijk: [ code verwijderd ] Als ik deze regel weghaal krijg ik wel output te zien, maar is het (natuurlijk) geen XML meer... Ik heb werkelijk waar géén idee waarom dit is of wat ik er aan zou moeten doen  En Apache parsed de "<?" niet als PHP? |
Xcalibur | maandag 31 december 2007 @ 11:49 |
Ja, ik heb er een
1 | header('Content-type: text/xml; charset=UTF-8'); |
in staan.... lijkt me goed toch? |
Xcalibur | maandag 31 december 2007 @ 11:50 |
quote: Scherp.... dat zou het wel eens kunnen zijn. Lokaal staat short open tags uit, online staat het aan.... eens kijken of ik die kan aanpassen 
Edit: uit de PHP documentatie bij short_open_tagquote:Tells whether the short form (<? ?> ) of PHP's open tag should be allowed. If you want to use PHP in combination with XML, you can disable this option in order to use <?xml ?> inline. Otherwise, you can print it with PHP, for example: <?php echo '<?xml version="1.0"'; ?> . Also if disabled, you must use the long form of the PHP open tag (<?php ?> ).
[ Bericht 34% gewijzigd door Xcalibur op 31-12-2007 11:55:32 ] |
Geqxon | maandag 31 december 2007 @ 11:55 |
quote:Op maandag 31 december 2007 11:50 schreef Xcalibur het volgende:[..] Scherp.... dat zou het wel eens kunnen zijn. Lokaal staat short open tags uit, online staat het aan.... eens kijken of ik die kan aanpassen :) Mocht je het niet aan kunnen passen:
1 2 3 | <?php echo "<?xml ............ ": ?> |
Het kost je wat overhead, maar is dat voor een Google sitemap belangrijk? |
Geqxon | maandag 31 december 2007 @ 12:30 |
quote:Op maandag 31 december 2007 11:30 schreef Geqxon het volgende:[..] Ik kom er nog steeds niet compleet uit.... Wat ik zoek is een functie die mij de timestamp van de eerste dag van weeknummer X in jaar Y geeft. Ik heb er net weer mee zitten te stoeien, maar ik krijg geen algoritme uit mijn pols geschud die dit voor elkaar krijgt op een manier dat het ook met de jaarwisseling goed gaat.  En dat lukt mij inmiddels. Het blijft echter gestoei met de weeknummers. Het is op het moment Week 1 van 2007, en dat is waar het ook gelijk goed fout gaat in het script. Ik ga maar weer even worstelen.  |
Xcalibur | maandag 31 december 2007 @ 12:30 |
ja, ik zag dat dat kon inderdaad.... maar dat is natuurlijk wel een ranzige oplossing  |
Chandler | maandag 31 december 2007 @ 13:15 |
Even snel een klein HTTaccess vraagje.
([a-zA-Z0-9] valideert echter ook "(niets) en ik wil hier een minimum aan vast knopen van bv 4 karakters! en geen maximum? anyone? |
Geqxon | maandag 31 december 2007 @ 13:22 |
Zo uit mijn hoofd:
quote:Using extended regular expressions, you can specify arbitrary pattern occurrence counts using a more verbose syntax than the question-mark, plus-sign, and asterisk quantifiers. The curly-braces ("{" and "}") can surround a precise count of how many occurrences you are looking for. The most general form of the curly-brace quantification uses two range arguments (the first must be no larger than the second, and both must be non-negative integers). The occurrence count is specified this way to fall between the minimum and maximum indicated (inclusive). As shorthand, either argument may be left empty: if so the minimum/maximum is specified as zero/infinity, respectively. If only one argument is used (with no comma in there), exactly that number of occurrences are matched. http://gnosis.cx/publish/programming/regular_expressions.html |
mschol | maandag 31 december 2007 @ 14:43 |
iemand een idee of ik de $_SERVER['SERVER_ADMIN'] kan benaderen met php in CLI? of is dat echt helemaal onmogelijk en zal ik het moeten hardcoden? |
Chandler | maandag 31 december 2007 @ 14:45 |
quote: Tnx, ik had zelf al geprobeerd maar blijkbaar ging het door de * fout  |
Light | maandag 31 december 2007 @ 14:48 |
quote:Op maandag 31 december 2007 12:30 schreef Geqxon het volgende:[..] En dat lukt mij inmiddels. Het blijft echter gestoei met de weeknummers. Het is op het moment Week 1 van 2007, en dat is waar het ook gelijk goed fout gaat in het script. Ik ga maar weer even worstelen.  Het is week 1 van 2008. En met wat code om de eerste dag van die week te bepalen kom ik op 31 december 2007.
Edit - de code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php function firstDayOfWeek($week, $year) { $jan1st = mktime(0,0,0,1,1,$year); if(date('W', $jan1st) == 1) { //Correctie toepassen, alleen voor als 1 januari in week 1 zit // En 1 januari kan soms ook bij week 53 of 52 worden gerekend. $week--; } $weekday = date('N', $jan1st) - 1; //Dag 1 is maandag return strtotime('+'.$week.' weeks -'.$weekday.' days', $jan1st); }
echo date('Y-m-d', firstDayOfWeek(1,2008)); //Levert 2007-12-31 ?> |
[ Bericht 76% gewijzigd door Light op 31-12-2007 14:57:17 ] |
Geqxon | maandag 31 december 2007 @ 15:04 |
quote:Op maandag 31 december 2007 14:48 schreef Light het volgende:[..] Het is week 1 van 2008. En met wat code om de eerste dag van die week te bepalen kom ik op 31 december 2007. Edit - de code: [ code verwijderd ] Dat klopt, en als "date('W-Y')" keurig 01-2008 zou tonen dan zou mijn pagina perfect werken, want ook het algoritme dat ik gebruik geeft dan 31 december weer. Helaas, hij geeft nu 01-2007 weer.
Het is jammer dat de date & time functies van PHP wat rommelig zijn, want "strftime("%W-%Y")" geeft 53-2007 weer, aangezien die weer geen ISO weeknummer geeft. |
Light | maandag 31 december 2007 @ 15:23 |
quote:Op maandag 31 december 2007 15:04 schreef Geqxon het volgende:[..] Dat klopt, en als "date('W-Y')" keurig 01-2008 zou tonen dan zou mijn pagina perfect werken, want ook het algoritme dat ik gebruik geeft dan 31 december weer. Helaas, hij geeft nu 01-2007 weer. Het is jammer dat de date & time functies van PHP wat rommelig zijn, want "strftime("%W-%Y")" geeft 53-2007 weer, aangezien die weer geen ISO weeknummer geeft. Met date("W o") krijg je wel het ISO weeknummer en het ISO jaar. Nadeel is dat je PHP 5.1.0 of nieuwer nodig hebt. |
colourAgga | maandag 31 december 2007 @ 15:29 |
quote:Op maandag 31 december 2007 10:32 schreef Tarabass het volgende:Fix-List: Variable (volgens mij) nu global gemaakt. Escape bij declaratie weggehaald en in de query pas meegegeven If-statements verkort naar 1 if-statement ID-integer uit de query gesloopt, ook geen idee waarom ik hem er bij had gezet (en dan ook nog als string). exit; comment weggehaald. Waarom moet ik de variable $ip escapen in de query? Dit is een integer, en geen string. $date is een datetime. Waarom vraag je dat? A List Apart wordt doorgenomen, dank voor de link. Code na aanpassingen: [ code verwijderd ] Een IP is wel een string, bestaat uit getallen met puntjes.
Kijk voor de grap ook eens naar: http://nl3.php.net/manual/en/function.ip2long.php |
Geqxon | maandag 31 december 2007 @ 15:33 |
Eigenlijk is een IP-adres een array van characters.  |
SuperRembo | maandag 31 december 2007 @ 17:48 |
quote: Kijk voor de grap eens goed naar zijn code  |
Tarabass | maandag 31 december 2007 @ 18:03 |
quote: Dat gebruik ik ook in m'n code. Ik haal hem ook op met long2ip 
En hoe ziet de veiligheid van de code er nu uit? Zijn er nog dingen die ik toe moet voegen, en waar zou het mis op kunnen gaan? Testen kan hier..
wees een beetje zuinig op m'n database ajb |
smesjz | maandag 31 december 2007 @ 18:37 |
quote:Op maandag 31 december 2007 14:43 schreef mschol het volgende:iemand een idee of ik de $_SERVER['SERVER_ADMIN'] kan benaderen met php in CLI? of is dat echt helemaal onmogelijk en zal ik het moeten hardcoden? Die server_admin variabele bevat de waarde uit de apache config ServerAdmin. CLI gebruikt niet de SAPI en die variabele hoort gewoon leeg te zijn in CLI. En ServerAdmin is nou niet iets waar je blindelings op moet vertrouwen. Bij phpinfo() (of php -i) zie je welke variabelen je tot je beschikking hebt, misschien heb je daar wat aan? |
smesjz | maandag 31 december 2007 @ 18:55 |
quote:Op maandag 31 december 2007 10:32 schreef Tarabass het volgende:Code na aanpassingen: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?php function CheckPostData() { $ip = $_SERVER['REMOTE_ADDR']; $ip = ip2long($ip); $data = $_POST['data']; $date = date('y-m-j H:i:s'); Global $mysql_tbn;
if(($data != "Hier je bericht....." && $data != "") && (is_string($data))) { InsertQuery($ip, $data, $date); } } function InsertQuery($ip, $data, $date) { Global $mysql_tbn;
$sql_insert = "INSERT INTO " . $mysql_tbn . " SET "; $sql_insert .= "ip = " . $ip; $sql_insert .= ", data = '" . mysql_real_escape_string($data) . "'"; $sql_insert .= ", date = '" . $date . "'";
$result = mysql_query($sql_insert); header("Location: " . $_SERVER['PHP_SELF']); exit; } ?> |
Wat opmerkingen: * Global $mysql_tbn; heb je niet nodig in CheckPostData * is_string geeft ook true als de invoer ($data) leeg is en dus overbodig. * De opbouw van $sql_insert vind ik vervelend lezen, gebruik OF een prepared statement of iets als sprintf:
* Je doet niks met $result in InsertQuery en als de query. * Waarom geen else clause bij if ($data blabla) ? |
SuperRembo | maandag 31 december 2007 @ 19:33 |
quote:Op maandag 31 december 2007 14:48 schreef Light het volgende:[..] Het is week 1 van 2008. En met wat code om de eerste dag van die week te bepalen kom ik op 31 december 2007. Edit - de code: [ code verwijderd ] Dat kan mooier :P
1 2 3 4 5 6 | function firstDayOfWeek($week, $year) { $jan4th = mktime(0, 0, 0, 1, 4, $year); $weekday = date('N', $jan4th) + 6; return strtotime("+$week weeks -$weekday days", $jan4th); } |
(4 januari valt altijd in week 1) Ik heb niet helemaal gecontroleerd of ie goed is, alleen dat ie dezelfde resultaten geeft als die van Light. |
Geqxon | maandag 31 december 2007 @ 19:49 |
En voor wat ik gebruik:
1 2 3 4 5 6 7 8 9 | <?php function StartOfWeek($year, $week) { $Jan1 = mktime(1,1,1,1,1,$year); $MondayOffset = (11-date('w',$Jan1))%7-3; $desiredMonday = strtotime(($week-1) . ' weeks '.$MondayOffset.' days', $Jan1); return $desiredMonday; } ?> |
http://www.phpbuilder.com/board/showpost.php?s=c26b8729c4b94eadb55d319c3c29bc4a&p=10274032&postcount=5
 |
Tarabass | maandag 31 december 2007 @ 20:24 |
quote: True, rommelig van me maar die had ik laten staan na aanpassingen van de vorige keer (gaf hem toen mee naar de insertquery)quote:* is_string geeft ook true als de invoer ($data) leeg is en dus overbodig. Dit begrijp ik niet 
Zou je dat uit kunnen leggen? Het is toch een 'and' en de string moet dan toch voldoen aan alle drie?quote:* De opbouw van $sql_insert vind ik vervelend lezen, gebruik OF een prepared statement of iets als sprintf: Eens. Is ook niet de manier die ik nu veel gebruik, inderdaad omdat het zo vervelend lezen is.
Nu doe ik meestal dit:
1 2 3 | <?php $sql_insert = "INSERT INTO " . $mysql_tbn . " (ip, data, date) VALUES ('$ip', '" . mysql_real_escape_string($data) . "', '$date')"; ?> |
quote:* Waarom geen else clause bij if ($data blabla) ? Is wel netter, maar had het even snel gebouwd, om de veilig te leren en te testen. Beetje zonde van de tijd dus.
Fix-List:
* Global $mysql_tbn; weggehaald in CheckPostData * Query herschreven naar een nettere en leesbaarder manier * Code opgeschoond
Code na aanpassingen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?php function CheckPostData() { $ip = $_SERVER['REMOTE_ADDR']; $ip = ip2long($ip); $data = $_POST['data']; $data = trim($data); $date = date('y-m-j H:i:s');
if(($data != "Hier je bericht....." && $data != "") && (is_string($data))) { InsertQuery($ip, $data, $date); } } function InsertQuery($ip, $data, $date) { Global $mysql_tbn;
$sql_insert = "INSERT INTO " . $mysql_tbn . " (ip, data, date) VALUES ('$ip', '" . mysql_real_escape_string($data) . "', '$date')"; $sql_insert = mysql_query($sql_insert);
header("Location: " . $_SERVER['PHP_SELF']); exit; } ?> |
@SuperRembo Waarom moet ik de variable $ip escapen in de query? Dit is een integer, en geen string. $date is een datetime. Waarom vraag je dat? Jaja, gezien. Dubbele spatie Hoe kan ik die spaties mooier opschonen?
@All Hoe is de veiligheid van het script nu?
[ Bericht 3% gewijzigd door Tarabass op 31-12-2007 20:52:36 ] |
SuperRembo | maandag 31 december 2007 @ 21:14 |
quote:Op maandag 31 december 2007 20:24 schreef Tarabass het volgende:@SuperRembo Waarom moet ik de variable $ip escapen in de query? Dit is een integer, en geen string. Je had quotjes om $ip staan, dus ik ging er vanuit dat het een string was. Als $ip een int is dan hoef je inderdaad niet te escapen. Waarom zet je het ip om naar een int? Als dat alleen is om 'm in de db te zetten, dan is het logischer om ip2long dicht bij de sql, dus in InsertQuery() te zetten. quote:$date is een datetime. Waarom vraag je dat? Je insert dus eigenlijk een string in een datetime veld. Blijkbaar doet MySQL daar niet zo moeilijk over (MS SqlServer bijvoorbeeld zou 't niet pikken). Je zou ook de MySQL functie now() kunnen gebruiken als je de huidige tijd wil inserten.quote:Jaja, gezien. Dubbele spatie  Hoe kan ik die spaties mooier opschonen? Gewoon geen tekst in een veld zetten die je niet in je db wil hebben. Gewoon een label voor het veld zetten.
Je hebt nog geen controle op de hoeveelheid data die er in het veld staat. Die wordt nu bepaald door de webserver (post_max_size, default 8MB). |
mschol | maandag 31 december 2007 @ 22:45 |
quote:Op maandag 31 december 2007 18:37 schreef smesjz het volgende:[..] Die server_admin variabele bevat de waarde uit de apache config ServerAdmin. CLI gebruikt niet de SAPI en die variabele hoort gewoon leeg te zijn in CLI. En ServerAdmin is nou niet iets waar je blindelings op moet vertrouwen. Bij phpinfo() (of php -i) zie je welke variabelen je tot je beschikking hebt, misschien heb je daar wat aan? ik had eigenlijk echt server_admin adress nodig maar ik heb het maar gehardcode, script genereert nu geen index warnings meer en daar ging het me om (script zelf werkte vlekkeloos alleen gaf hij dus elke keer index warnings, en was te lui om het uittezoeken.. nu maar eens uitgezocht en vervolgens dus maar hardcoded ingezet (kon ook prima, vind het zelf minder netjes maar ach) |
smesjz | dinsdag 1 januari 2008 @ 11:05 |
quote:Op maandag 31 december 2007 20:24 schreef Tarabass het volgende:Zou je dat uit kunnen leggen? Het is toch een 'and' en de string moet dan toch voldoen aan alle drie? Je hebt:
1 2 3 4 5 | <?php if(($data != "Hier je bericht....." && $data != "") && (is_string($data))) { InsertQuery($ip, $data, $date); } ?> |
Mogelijke invoer: - $_POST['data'] = null (data bestaat niet als key in de $_POST array) . Dan geeft $data != "" false. - $data = "" (lege string) . Dan geeft $data != "" false en is_string($data) true. - $data = "Hier je bericht.....". Dan geeft $data != "Hier je bericht....." false. - $data = "blabla". Dan geeft ($data != "Hier je bericht....." && $data != "") al true. - $data = "1234". Dan geeft ($data != "Hier je bericht....." && $data != "") al true.
is_string($data) biedt geen meerwaarde boven $data != "" zoals jij het nu gebruikt. Alles in de $_POST array is een string. Dus dit is altijd false: if ($_POST['abc'] == 1234)
Ik zou eerst maar eens wat gaan lezen over veiligheid in scripts voordat je iedere keer anderen hierover gaat vragen, op deze manier leer je maar weinig. En het beste werkt gewoon door het zelf te proberen door bewust foute waardes in te voeren: met quotes, punt-comma, te lange tekst etc etc. En gebruik voldoende checks met empty() en isset(). |
SuperRembo | dinsdag 1 januari 2008 @ 12:39 |
quote: Nee, "1234" == 1234 geeft true "1234" === 1234 geeft false |
smesjz | dinsdag 1 januari 2008 @ 13:22 |
quote: Je hebt gelijk, my bad.  |
Dzy | dinsdag 1 januari 2008 @ 15:49 |
Ik word helemaal gestoord van met data werken met PHP en MySQL. Kan iemand me even kort uitleggen hoe je dit nu het beste aanpakt? Ik moet het elke keer weer uitzoeken en telkens doe ik het weer anders, is niet echt handig met aanpassen.
Fields voor je database: TIMEDATE ? Welke functies gebruiken in php? date()? Queries in MySQL voor bv de laatste week, welke functies?
Ik kom er nu alweer niet uit -_- |
Geqxon | dinsdag 1 januari 2008 @ 15:52 |
quote:Op dinsdag 1 januari 2008 15:49 schreef Dzy het volgende:Ik word helemaal gestoord van met data werken met PHP en MySQL. Kan iemand me even kort uitleggen hoe je dit nu het beste aanpakt? Ik moet het elke keer weer uitzoeken en telkens doe ik het weer anders, is niet echt handig met aanpassen. Fields voor je database: TIMEDATE ? Welke functies gebruiken in php? date()? Queries in MySQL voor bv de laatste week, welke functies? Ik kom er nu alweer niet uit -_- Ik zelf werk altijd met timestamps, al zweren andere mensen weer aan MySQL data / datums, omdat je dan in de query zelf berekeningen uit kan voeren. Persoonlijke voorkeur.
Met functies als date() kun je van een timestamp weer een fatsoenlijk leesbare datum maken.
Timestamp: Het aantal seconden tussen 01-01-1970 en de datum die je bedoeld. Dat is in MySQL en PHP een simpele integer. |
Light | dinsdag 1 januari 2008 @ 16:31 |
quote:Op dinsdag 1 januari 2008 15:52 schreef Geqxon het volgende:[..] Ik zelf werk altijd met timestamps, al zweren andere mensen weer aan MySQL data / datums, omdat je dan in de query zelf berekeningen uit kan voeren. Persoonlijke voorkeur. Met functies als date() kun je van een timestamp weer een fatsoenlijk leesbare datum maken. Timestamp: Het aantal seconden tussen 01-01-1970 en de datum die je bedoeld. Dat is in MySQL en PHP een simpele integer. Het ligt er een beetje aan waar je de datum voor nodig hebt. Voor data voor 01-01-1970 is een timestamp niet zo geschikt. |
Geqxon | dinsdag 1 januari 2008 @ 16:35 |
quote:Op dinsdag 1 januari 2008 16:31 schreef Light het volgende:[..] Het ligt er een beetje aan waar je de datum voor nodig hebt. Voor data voor 01-01-1970 is een timestamp niet zo geschikt. Negatieve timestamp? |
SuperRembo | dinsdag 1 januari 2008 @ 17:07 |
Het is knap waardeloos dat php (nog steeds) geen fatsoenlijke ondersteuning voor datums heeft. quote:The valid range of a timestamp is typically from Fri, 13 Dec 1901 20:45:54 GMT to Tue, 19 Jan 2038 03:14:07 GMT. (These are the dates that correspond to the minimum and maximum values for a 32-bit signed integer). However, before PHP 5.1.0 this range was limited from 01-01-1970 to 19-01-2038 on some systems (e.g. Windows). |
Geqxon | dinsdag 1 januari 2008 @ 17:14 |
Ik durf het haast niet te zeggen, maar een tof Date object zou niet verkeerd zijn. |
autocue | woensdag 2 januari 2008 @ 00:38 |
quote:Op dinsdag 1 januari 2008 17:14 schreef Geqxon het volgende:Ik durf het haast niet te zeggen, maar een tof Date object zou niet verkeerd zijn. PHP heeft sinds 5.1 een DateTime klasse. Nogal slecht gedocumenteerd en 't biedt niet écht veel functionaliteit maar 't werkt wel goed voor tijdzones en tijdsaanpassingen . Zoals bijvoorbeeld.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?php // Tijd in UTC (als je geen windowssysteem gebruikt en je je klok goed hebt ingesteld) $timestamp = '@'. time();
// De locale tijdzone ... $localTimeZone = new DateTimeZone('Europe/Amsterdam');
// ... en een andere $newyorkTimeZone = new DateTimeZone('EST');
// Maak een date object aan voor de huidige (UTC) tijd $dateTime = new DateTime($timestamp);
// Schuif de datum door naar de volgende ijstijd $dateTime->modify('+10000 years -2 weeks');
// Format de date met binnen verschillende tijdzones echo 'UTC : ' . $dateTime->format(DATE_RFC2822) . "\n"; $dateTime->setTimezone($localTimeZone); echo 'Local time : ' . $dateTime->format(DATE_RFC2822) . "\n"; $dateTime->setTimezone($newyorkTimeZone); echo 'New York time : ' . $dateTime->format(DATE_RFC2822); ?> |
De format methode accepteert een dateformat string zoals bij de date functie, en kan dus ook dates formatten naar bijvoorbeeld ISO8601, wat dus weer handig is bij databases. Verder kan je de tijd en datum ook nog instellen met setTime(h, m, s) respectievelijk setDate(y, m, d). Anyway, er is genoeg over te lezen . |
Agiath | woensdag 2 januari 2008 @ 00:50 |
Ik wil een simpele website maken waar bepaalde mensen rechten krijgen om zelf dingen toe te voegen in een blog. Soort van multi blog dus. Ik ben redelijk handig met computers maar van site's maken weet ik nog maar weinig.
Heeft PHP bijvoorbeeld nou te maken met dit soort multi-upload dingetjes? En wat voor software kan ik het beste gebruiken? Dreamweaver? |
Chandler | woensdag 2 januari 2008 @ 10:11 |
quote:Op woensdag 2 januari 2008 00:50 schreef Agiath het volgende:Ik wil een simpele website maken waar bepaalde mensen rechten krijgen om zelf dingen toe te voegen in een blog. Soort van multi blog dus. Ik ben redelijk handig met computers maar van site's maken weet ik nog maar weinig. Heeft PHP bijvoorbeeld nou te maken met dit soort multi-upload dingetjes? En wat voor software kan ik het beste gebruiken? Dreamweaver? Ik zou beginnen bij www.php.net, dan zie je dat Dreamweaver niet echt handig is  |
mschol | woensdag 2 januari 2008 @ 10:59 |
quote: hmm, DW is, imho, juist een van de beste programma's voor php. (oke, ik doe alles in code view, ik kan me voorstellen dat de design view niet prettig werkt) |
super-muffin | woensdag 2 januari 2008 @ 11:45 |
quote: Waarom zou je dat zien op PHP.net?  |
Chandler | woensdag 2 januari 2008 @ 15:02 |
quote: Omdat ik aanneem dat ze weten welke editors het beste met hun scripting taal omgaan?
Verder even offtopic vraagje; weet iemand hoe je kunt instellen naar welk veld je gaat als je op tab drukt? (zonder JS) |
super-muffin | woensdag 2 januari 2008 @ 15:08 |
quote:Op woensdag 2 januari 2008 15:02 schreef Chandler het volgende:[..] Omdat ik aanneem dat ze weten welke editors het beste met hun scripting taal omgaan? Hm, ben ik het niet met je eens. Het verschilt van persoon tot persoon, dus je kunt het beste zelf een paar programma's uitproberen.  quote:Verder even offtopic vraagje; weet iemand hoe je kunt instellen naar welk veld je gaat als je op tab drukt?  (zonder JS) Dat is meer iets van HTML, maar met het attribuut tabindex.  |
qu63 | woensdag 2 januari 2008 @ 15:10 |
quote:Op woensdag 2 januari 2008 15:02 schreef Chandler het volgende:[..] Omdat ik aanneem dat ze weten welke editors het beste met hun scripting taal omgaan? Verder even offtopic vraagje; weet iemand hoe je kunt instellen naar welk veld je gaat als je op tab drukt?  (zonder JS) tabindex= |
mschol | woensdag 2 januari 2008 @ 21:10 |
wie weet in hoeverre PHP 3 en PHP4 scripts draaien onder PHP5? dit omdat ik em best wil upgraden maar dan moet ik wel zeker weten dat alles het blijft doen  |
Geqxon | woensdag 2 januari 2008 @ 21:34 |
quote:Op woensdag 2 januari 2008 21:10 schreef mschol het volgende:wie weet in hoeverre PHP 3 en PHP4 scripts draaien onder PHP5? dit omdat ik em best wil upgraden maar dan moet ik wel zeker weten dat alles het blijft doen  http://nl2.php.net/manual/en/migration4.php http://nl2.php.net/manual/en/migration5.php http://nl2.php.net/manual/en/migration51.php http://nl2.php.net/manual/en/migration52.php
Stap voor stap.  |
mschol | woensdag 2 januari 2008 @ 23:00 |
quote: nice, thnx. eff in verdiepen.. |
DeKubus | donderdag 3 januari 2008 @ 01:35 |
quote:Op donderdag 27 december 2007 11:03 schreef SuperRembo het volgende:[..] Dan doe jij het goed en doet colourAgga het fout  is_int() met een string als input (in dit geval uit $_GET) geeft altijd false! Nee, bij is_numeric() worden 0x005, +123e2 ook als true gezien, dus ook niet de beste oplossing.Imo beste manier (zie hieronder), sowieso beter om als je een getal verwacht de data type naar int te zetten (stel als je ermee berekeningen gaat uitvoeren), maar omdat PHP vergevingsgezind is geeft dit geen fouten.
 |
Light | donderdag 3 januari 2008 @ 05:47 |
quote:Op donderdag 3 januari 2008 01:35 schreef DeKubus het volgende:[..] Nee, bij is_numeric() worden 0x005, +123e2 ook als true gezien, dus ook niet de beste oplossing.Imo beste manier (zie hieronder), sowieso beter om als je een getal verwacht de data type naar int te zetten (stel als je ermee berekeningen gaat uitvoeren), maar omdat PHP vergevingsgezind is geeft dit geen fouten. [ code verwijderd ] :) intval() levert een integer op, dus is_int(intval()) zal altijd true zijn.
1 2 3 4 5 6 | <?php $blaat = intval($_GET['blaat']; if(0 == $blaat) { //ongeldig! } ?> |
Overigens zou een database ook +123e2 moeten accepteren als numeriek. Het kan lastiger worden als je 123.2 probeert te plaatsen in een integerveld. |
colourAgga | donderdag 3 januari 2008 @ 14:01 |
Zowiezo is een van de dingen die ik het meest hekel in PHP de vergevingsgezindheid en de makkelijkheid voor de typen Dat maakt gewoon beveiliging van scripts etc. zo een stuk lastiger.
Zoals eerder al gezegd gebruik ik altijd hungarian prefixes. Deze werken in combinatie met een klasse die variabelen checkt en ze direct goed cast. Dat gaat goed zolang je als gebruiker van die klasse er ook echt vanuit gaat dat dat erin zit. Ook al kun je met PHP ook gewoon net zo goed iets anders erin gooien, of het als iets anders benaderen.
Over de datums eigenlijk helemaal hetzelfde verhaal, wij slaan op met de timestamps van de server in de database in int velden. Vervolgens kunnen gebruikers daar correctie op loslaten en zelf kiezen hoe ze dit willen laten zien via een uitgebreide Date klasse die ik als ik weer op kantoor ben eens zal vragen of we die ook kunnen publiceren 
Wat denken jullie trouwens, de klasses die je nodig hebt voordat je fatsoenlijk aan een project kan beginnen? Ik denk: - Date - Verify - Authentification - SQL - Template
Dat zijn in ieder geval de 5 die ik het meeste gebruik jullie nog toevoegingen? |
wobbel | donderdag 3 januari 2008 @ 15:39 |
Wij hebben op het werk een administratie programma welke op TPS bestanden draait (TopSpeed database)
Nu lukt het mij prima om er wat gegevens uit te krijgen door te zoeken op klant nummer met onderstaande code:
1 2 3 4 5 6 7 8 | <?php $SQL_Value = "100857"; $ODBC_Klant_Connect = odbc_connect ( "S&S Webfile", "", ""); $ODBC_Klant_Select = "SELECT * FROM BAC5130 WHERE Nr = " . $SQL_Value . ""; $ODBC_Klant_Exec = odbc_exec( $ODBC_Klant_Connect, $ODBC_Klant_Select ); $ODBC_Klant_Assoc = odbc_fetch_array ( $ODBC_Klant_Exec ); // geeft netjes 1 row terug :) ?> |
Nu zou ik ook graag willen zoeken op naam, dat als ik zoek naar "aap" ik alle resultaten krijg zoals "Schaap, Aapjes" etc...dus ik dacht dit:
1 2 3 4 5 6 7 8 | <?php $SQL_Value = "aap"; $ODBC_Klant_Connect = odbc_connect ( "S&S Webfile", "", ""); $ODBC_Klant_Select = "SELECT * FROM BAC5130 WHERE NM = '%" . $SQL_Value . "%'"; $ODBC_Klant_Exec = odbc_exec( $ODBC_Klant_Connect, $ODBC_Klant_Select ); $ODBC_Klant_Assoc = odbc_fetch_array ( $ODBC_Klant_Exec ); // geeft 0 rows weer, maar zou 2 rows moeten teruggeven (Schaap en Aapjes zitten in de DB) ?> |
Maar helaas, dit werkt niet ik krijg dan geen resultaten...als ik de wildcards (%) weglaat en ik vul de exacte naam in dan vind ik het wel 
Hoe kan ik zoeken met wildcards? Hier staat iets meer info over ODBC TopSpeed (PDF) |
PiRANiA | donderdag 3 januari 2008 @ 15:55 |
LIKE in plaats van = ? |
DeKubus | donderdag 3 januari 2008 @ 16:19 |
quote:Op donderdag 3 januari 2008 05:47 schreef Light het volgende:[..] intval() levert een integer op, dus is_int(intval()) zal altijd true zijn. [ code verwijderd ] Overigens zou een database ook +123e2 moeten accepteren als numeriek. Het kan lastiger worden als je 123.2 probeert te plaatsen in een integerveld. My bad, bedoelde zo::
1 2 3 4 5 6 | <?php if (strval(intval($_GET['..'])) == $_GET['..']) { $_id = intval($_GET['..']); .... } ?> |
+123e2 is hetzelfde als 12300, alleen $_GET, $_POST etc. is altijd van type string. Dus dit wordt niet omgezet naar 12300, maar letterlijk +123e2, maak je er int van krijg je 123. Sommige maken ook gebruik van ctype_* (digit dit geval), persoonlijk ben ik daar geen voorstander van.
[ Bericht 9% gewijzigd door DeKubus op 03-01-2008 16:29:29 ] |
colourAgga | donderdag 3 januari 2008 @ 16:33 |
-- stuuk
[ Bericht 98% gewijzigd door colourAgga op 04-01-2008 03:05:56 ] |
SuperRembo | donderdag 3 januari 2008 @ 17:47 |
quote: ...WHERE NM LIKE '%" . $SQL_Value . "%'... |
wobbel | donderdag 3 januari 2008 @ 18:27 |
quote: werkt gedeeltelijk.
Ik heb ook een record met de naam "Mierlo, van"
Als ik als $SQL_Value invul "mierlo" dan vindt ie niks, zoek ik op "Mierlo" (dus met hoofdletter) dan vind ie het wel ineens  |
Fatality | vrijdag 4 januari 2008 @ 00:48 |
Momenteel ben ik bezig met een rich text editor, javascript dus, maar de rtf tekst die wordt gegenereerd in het javascript-textvak wil ik graag als een bruikbare variabele voor phph hebben. Het liefst dat ie bij de 'submit' de rtf als global kan mee geven, aan een andere pagina. Iemand een idee dit aan te pakken? |
Xcalibur | vrijdag 4 januari 2008 @ 09:09 |
quote:Op donderdag 3 januari 2008 18:27 schreef wobbel het volgende:[..] werkt gedeeltelijk. Ik heb ook een record met de naam "Mierlo, van" Als ik als $SQL_Value invul "mierlo" dan vindt ie niks, zoek ik op "Mierlo" (dus met hoofdletter) dan vind ie het wel ineens  kan je niet beter MATCH...AGAINST gebruiken dan? |
wobbel | vrijdag 4 januari 2008 @ 09:35 |
quote: Daar heb ik nog nooit mee gewerkt, hoe werkt dat dan? En bovenal, wordt dat ondersteund? |
Xcalibur | vrijdag 4 januari 2008 @ 11:12 |
quote:Op vrijdag 4 januari 2008 09:35 schreef wobbel het volgende:Daar heb ik nog nooit mee gewerkt, hoe werkt dat dan? En bovenal, wordt dat ondersteund? http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html 
Je moet alleen een index maken op het veld waarin je zoekt geloof ik, maar dat staat er ongetwijfeld bij. Je hebt ook de optie IN BOOLEAN MODE, zodat je ook met + en - kunt zoeken zeg maar. Werkt prima  |
wobbel | vrijdag 4 januari 2008 @ 12:11 |
quote: Ik werk niet met MySQL, ik gebruik een ODBC plugin voor TopSpeed database, zie enkele posts hierboven |
Chandler | vrijdag 4 januari 2008 @ 12:38 |
Beste allemaal,
Ik heb een mailing list manager geschreven voor een van mijn sites en daarmee wil ik mailtjes gaan versturen, echter zit ik met een probleem!.
Als ik een test bericht naar mijn eigen email adres stuur (hotmail) krijg ik de inhoud van het bericht niet direct te zien. Ik snap niet waarom en daarom vraag ik hulp ;)
De headers/bericht
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 | X-Message-Delivery: Vj0zLjQuMDt1cz0wO2k9MDtsPTA7YT0w X-Message-Status: n:0 X-SID-PRA: Maillinglist v1 <eric******@******.com> X-SID-Result: SoftFail X-Message-Info: JGTYoYF78jG9yuoI+h0kJ1x+NrLFHMOQAIfJCH59JzMK4GcsJQglp8wYMw3/yAlCqsYg6byLbCkhuUFqD9aY0P8j+djMM+jf Received: from server28.icehosting.nl ([195.22.100.18]) by bay0-mc9-f9.bay0.******.com with Microsoft SMTPSVC(6.0.3790.2668); Fri, 4 Jan 2008 02:02:57 -0800 Received: from apache by server28.icehosting.nl with local (Exim 4.67) (envelope-from <ericbrug@******.nl>) id 1JAjOC-0001zj-5h for eric******@******.com; Fri, 04 Jan 2008 11:02:56 +0100 To: eric******@******.com Subject: Preview: Meisjes jatten fiets van postbode X-PHP-Script: mailling.******.nl/index.php for 82.73.150.117 From: "Maillinglist v1" <eric******@******.com> Reply-To: "Maillinglist v1" <eric******@******.com> MIME-Version: 1.0 Message-ID: <1199440976-eric******@******.com> X-Mailer: PHP v5.2.3 Date: Fri, 04 Jan 2008 11:02:56 +0100 Return-Path: ericbrug@******.nl X-OriginalArrivalTime: 04 Jan 2008 10:02:58.0225 (UTC) FILETIME=[FB9B0A10:01C84EB8]
Twee meisjes uit Amersfoort en Nieuwegein kregen de politie op hun dak toen ze een fiets steelden. Opzich niet heftig, ware het niet dat de fiets van een postbode was. De 17 en 18 jaar oude dames stalen de fiets bij station Veenendaal-West en fietsten vervolgens naar Overberg.
Aan de fiets hing nog een zak met post. Die dumpten ze onderweg samen met wat fietstassen. De politie hield ze vervolgens aan in Overberg.
Op het bureau gingen de meisjes door de knieën en bekenden ze dat ze de fiets gejat hadden. Met een proces-verbaal in het vooruitzicht zijn de meisjes naar huis gestuurd. De fiets is teruggegeven aan de postbode van dienst. </ |
Heeft iemand een idee wat ik fout doe? |
ViPeRII | vrijdag 4 januari 2008 @ 12:59 |
Wat moet je eerst doen dan , voordat je de inhoud ziet? |
Geqxon | vrijdag 4 januari 2008 @ 13:24 |
quote:Op het bureau gingen de meisjes door de knieën... Naughty girls  |
colourAgga | vrijdag 4 januari 2008 @ 14:13 |
Is het niet gewoon mailinglist met maar 1 L? Verder zie ik zo een twee drie niks fout in de headers van je mail 
Trouwens is je domeinnaam wel erg simpel te raden zo heh meneertje bruggema.nl. |
Chandler | vrijdag 4 januari 2008 @ 14:33 |
colourAgga, klopt 
Ennuh @ViPeRII: klikken op inhoud zien  |
Xcalibur | vrijdag 4 januari 2008 @ 14:55 |
quote:Op vrijdag 4 januari 2008 12:11 schreef wobbel het volgende:Ik werk niet met MySQL, ik gebruik een ODBC plugin voor TopSpeed database, zie enkele posts hierboven Oh sorry, daar had ik overheen gelezen  |
Xcalibur | zaterdag 5 januari 2008 @ 10:31 |
quote:Op donderdag 3 januari 2008 14:01 schreef colourAgga het volgende:Wat denken jullie trouwens, de klasses die je nodig hebt voordat je fatsoenlijk aan een project kan beginnen? Ik denk: - Date - Verify - Authentification - SQL - Template Dat zijn in ieder geval de 5 die ik het meeste gebruik jullie nog toevoegingen? Ik gebruik in grote lijnen hetzelfde lijstje, alleen geen date class: - ADOdb - Authenticator (zelfgeschreven authenticatie class) - Importexport (zelfgeschreven CSV import / export class) - phpMailer - phpThumb - Smarty - UTF-8 - Validator (zelfgeschreven validatie class)
Wat gebruik jij voor date class? Ik heb eerlijk gezegd nooit echt problemen met datums, dus ik ben wel benieuwd waarom die van jou zo handig is?  |
mschol | zaterdag 5 januari 2008 @ 10:49 |
quote:Op vrijdag 4 januari 2008 12:38 schreef Chandler het volgende:Beste allemaal, Ik heb een mailing list manager geschreven voor een van mijn sites en daarmee wil ik mailtjes gaan versturen, echter zit ik met een probleem!. Als ik een test bericht naar mijn eigen email adres stuur (hotmail) krijg ik de inhoud van het bericht niet direct te zien. Ik snap niet waarom en daarom vraag ik hulp  De headers/bericht [ code verwijderd ] Heeft iemand een idee wat ik fout doe? ziet er opzich prima uit als ik et zo lees, maar omdat je een mailinglist hebt: stel je mailinglist headers in anders wordt het mogelijk als spam gezien.. (o.a. een afmeld adres is zeer handig..) |
Chandler | zaterdag 5 januari 2008 @ 11:51 |
quote:Op zaterdag 5 januari 2008 10:49 schreef mschol het volgende:[..] ziet er opzich prima uit als ik et zo lees, maar omdat je een mailinglist hebt: stel je mailinglist headers in anders wordt het mogelijk als spam gezien.. (o.a. een afmeld adres is zeer handig..) Hoe moet ik de headers instellen dan? en afmeld adres kan in de mail vermeld worden waarbij het script de mogelijkheid heeft om gebruikers af te melden.
Iets in dezefde trand, ik ben bezig met een email class, maar deze geeft niet het resultaat wat ik voor ogen heb.
Wat lukt!: Ik kan bestanden invoegen, zelfs als embedded.
Wat lukt niet? Ik krijg de HTML opzet niet als eerste te zien maar als ingevoegd bestand
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 | <?php
// http://www.metalshell.com/view/source/115/ class mailer { var $errors = array(); var $eol = "";
// email settings var $subject = ""; var $content = array();
// added files var $attatchments = array(); // added var $embedded = array(); // for viewing var $headers = array(); var $boundary = ""; var $boundaries = array(); var $contentType = array();
function mailer() { $this->errors = array("nofilefound" => "Sorry, het bestand %s bestaat niet", "cannotreadfile" => "Sorry, het bestand %s kan niet gelezen worden", "contenttypeerr" => "Sorry, het type content '%s' is incorrect (alleen text/html)");
$this->eol = "\r\n"; $this->contentType = array("text", "html"); $this->boundary = substr(md5(time()), 0, 10);
$this->headers = array('MIME-Version:' => '1.0', 'Content-Type:' => 'multipart/mixed; boundary="' . $this->boundary . '"');
$this->charSet = 'iso-8859-1'; } function setHeader($type, $value) { $this->headers[$type.":"] = $value; }
function send($to) { $_body = "This is a multi-part message in MIME format." . $this->eol . $this->eol; $_headers = ""; // content first
foreach ($this->headers AS $key => $value) { $_headers .= $key . " ". $value . $this->eol; }
// werkt niet :( verwijder dit en krijg alleen de text inhoud te zien, niet de html inhoud! $prev .= $this->boundary; foreach ($this->boundaries AS $key) { $_body .= "--" . $prev . $this->eol; $_body .= 'Content-Type: multipart/related; '.$this->eol; $_body .= ' type="multipart/alternative";' . $this->eol; $_body .= ' boundary="--' . $key . '"' . $this->eol; $prev = $key; }
$a = array("content", "embedded", "attatchments"); foreach ($a AS $type) { if (count($this->$type) > 0) { foreach ($this->$type AS $content) { $_body .= $this->eol . $content; } } }
echo '<pre>'; print_r($_headers); print_r($_body);
if (!mail($to, $this->subject, $_body, $_headers)) { return false; } return true; }
function subject($subject) { $this->subject = $subject; } function isEmail($email) { if (!preg_match('/^[A-Z0-9._%-]+@(?:[A-Z0-9-]+\\.)+[A-Z]{2,4}$/i', $email)) { return false; }
return $email; }
function setCharset($charset) { $this->charSet = $charset; }
function setContent($text, $type = "text") { /* $text = content to add to email $type = type of content (text/html) */ if (in_array($type, $this->contentType)) { $contentBuffer = $this->eol . '--' . $this->boundary . $this->eol;
if ($type == "text") { $contentBuffer .= 'Content-Type: text/plain; charset="' . $this->charSet . '"'. $this->eol; } else { $contentBuffer .= 'Content-Type: text/html; charset="' . $this->charSet . '"' . $this->eol; } $contentBuffer .= 'Content-Transfer-Encoding: quoted-printable' . $this->eol . $this->eol; $contentBuffer .= $text . $this->eol;
$this->content[$type] = $contentBuffer; } else { $this->error[] = sprintf($this->errors['contenttypeerr'], $type); } } function clearContent() { /* Clear email content (text/html) */ $this->content = array(); } function addFile($file, $mime = "text/plain", $type = 'attatchment') { /* $file = file to attatch $type = attatchment type (attatchment/embedded)
*/
if (is_file($file)) { $basename = basename($file); $fileinfo = pathinfo($file);
$fd = fopen($file, "rb"); if ($fd) { $filebuffer = fread($fd, filesize($file)); $filebuffer = chunk_split(base64_encode($filebuffer), 72) . $this->eol;
$b = substr(md5(time()), 0, 5) . "xxx"; $this->boundaries[] = $b . $this->boundary; $header = '--' . $b . $this->boundary . $this->eol; if ($type == "embedded") { $ref_id = md5(uniqid(time())) . '.' . $fileinfo['extension'];
$header .= 'Content-Type: ' . $mime . '; name="' . $basename . '"' . $this->eol; $header .= 'Content-Transfer-Encoding: base64' . $this->eol; $header .= 'Content-Disposition: inline; filename="' . $basename . '"' . $this->eol; $header .= 'Content-ID: <' . $ref_id . '>' . $this->eol . $this->eol; $header .= $filebuffer; $header .= $this->eol . $b . $this->boundary . "--" . $this->eol;
$this->embedded[] = $header;
return '<img src=3D"cid:' . $ref_id . '">'; } else { $header .= 'Content-Type: '. $mime . '; name="' . $basename . '"' . $this->eol; $header .= 'Content-Transfer-Encoding: base64' . $this->eol; $header .= 'Content-Disposition: attachment; filename="' . $basename . '"'.$this->eol.$this->eol; $header .= $filebuffer; $header .= $this->eol . $b . $this->boundary . "--" . $this->eol;
$this->attatchments[] = $header; } } else { $this->error[] = sprintf($this->errors['cannotreadfile'], $file); } } else { $this->error[] = sprintf($this->errors['nofilefound'], $file); } } }
$t = new mailer();
// vanaf, reply to etc $t->setHeader("From", '"Eric Bruggema" <****@hotmail.com>'); $t->setHeader("Reply-to", '"Eric Bruggema" <****@hotmail.com>');
// zet onderwerp $t->subject("test bericht van Eric");
$t->addFile("test.txt", "text/plain"); $img = $t->addFile("test.png", "image/png", "embedded");
$t->setContent("hello world"); $t->setContent('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <style type="text/css"> html,body{height:100%;background-color:#F7D708;font-family:verdana;font-size:13px;} #l{float:left;width:200px;height:100%;border-right:5px solid #9CCF31;background-color:#FF9E00;} #logo{text-align:center;width:200px;background-color:#C7EB6E;border-bottom:5px solid #9CCF31;margin:0;} #l h2{margin:0;padding-top:25px;font-size:50px;} #l h3{font-size:15px;padding:0;} #logobot{width:200px;height:100%;text-align:center;} #l UL{list-style-type:none;padding:15px 0 0 0;margin:0;width:100%;} #l LI{padding:0;margin:0;width:100%;text-align:center;font-size:20px;padding-top:10px;font-size:15px} #l a{color:#fff;text-decoration:none;} #l a:hover{font-weight:bold;color:#fff;text-decoration:none;} a{color:#F7D708;text-decoration:none;} a:hover{font-weight:bold;color:#F7D708;text-decoration:none;} #r{float:right;width:495px;height:400px;background-color:#79B837} #c{margin:2%;width:90%;text-align:center;border:5px dotted #9CCF31;margin-top:10px;padding:10px;font-style:italic} p{text-align:left;} .t{padding:5px 10px 0 10px; margin:0;} .t input{width:250px;} #c-c{margin:125px 100px 125px 100px;padding:5px 0px 0 10px;width:275px;background-color:orange;height:150px;border:1px dotted #9CCF31;} </style> </head> <body> <div id="l"> <div id="logo"> <h2>ABC</h2> <h3>DEF</h3> </div> <div id="logobot"> l><li><a href="?p=">Start</a></li><li><a href="?p=i">Informatie</a></li><li><a href="?p=r">Meld je link aan</a></li><li><a href="?p=p">Plugin</a></li><li><a href="?p=z">Zoeken</a></li><li><a href="?p=t">Top 10</a></li><li><a href="?p=c">Contact</a></li></ul></div> </div> <div id="r"> content </div> </body> </html>', "html");
$t->send("****@hotmail.com");
?> |
Uitkomst:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 | X-Message-Delivery: Vj0zLjQuMDt1cz0wO2k9MDtsPTA7YT0w X-Message-Status: sF:0 X-SID-PRA: Eric Bruggema <****@hotmail.com> X-SID-Result: SoftFail X-Message-Info: JGTYoYF78jE+WU0KSdwFVTx6sCmaha1t92n0MUkmdCuLQ3hZoCgNJ7xYuaHWf0hm0arBXeDtbIUENcq9FHju8cl9f9E2pgal Received: from server28.icehosting.nl ([195.22.100.18]) by bay0-mc1-f12.bay0.hotmail.com with Microsoft SMTPSVC(6.0.3790.2668); Sat, 5 Jan 2008 02:43:34 -0800 Received: from apache by server28.icehosting.nl with local (Exim 4.67) (envelope-from <****@bruggema.nl>) id 1JB6V2-0005pP-9d for ****@hotmail.com; Sat, 05 Jan 2008 11:43:32 +0100 To: *****@hotmail.com Subject: test bericht van Eric X-PHP-Script: *****.php for ***** MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="1a97e8797f" From: "Eric Bruggema" <*****@hotmail.com> Reply-to: "Eric Bruggema" <*****@hotmail.com> Message-Id: <E1JB6V2-0005pP-9d@server28.icehosting.nl> Date: Sat, 05 Jan 2008 11:43:32 +0100 Return-Path: *****@bruggema.nl X-OriginalArrivalTime: 05 Jan 2008 10:43:34.0559 (UTC) FILETIME=[D22FDAF0:01C84F87]
This is a multi-part message in MIME format.
--1a97e8797f Content-Type: multipart/related; type="multipart/alternative"; boundary="--1a97exxx1a97e8797f" --1a97exxx1a97e8797f Content-Type: multipart/related; type="multipart/alternative"; boundary="--1a97exxx1a97e8797f"
--1a97e8797f Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
hello world
--1a97e8797f Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <style type="text/css"> html,body{height:100%;background-color:#F7D708;font-family:verdana;font-size:13px;} #l{float:left;width:200px;height:100%;border-right:5px solid #9CCF31;background-color:#FF9E00;} #logo{text-align:center;width:200px;background-color:#C7EB6E;border-bottom:5px solid #9CCF31;margin:0;} #l h2{margin:0;padding-top:25px;font-size:50px;} #l h3{font-size:15px;padding:0;} #logobot{width:200px;height:100%;text-align:center;} #l UL{list-style-type:none;padding:15px 0 0 0;margin:0;width:100%;} #l LI{padding:0;margin:0;width:100%;text-align:center;font-size:20px;padding-top:10px;font-size:15px} #l a{color:#fff;text-decoration:none;} #l a:hover{font-weight:bold;color:#fff;text-decoration:none;} a{color:#F7D708;text-decoration:none;} a:hover{font-weight:bold;color:#F7D708;text-decoration:none;} #r{float:right;width:495px;height:400px;background-color:#79B837} #c{margin:2%;width:90%;text-align:center;border:5px dotted #9CCF31;margin-top:10px;padding:10px;font-style:italic} p{text-align:left;} .t{padding:5px 10px 0 10px; margin:0;} .t input{width:250px;} #c-c{margin:125px 100px 125px 100px;padding:5px 0px 0 10px;width:275px;background-color:orange;height:150px;border:1px dotted #9CCF31;} </style> </head> <body> <div id="l"> <div id="logo"> <h2>ABC</h2> <h3>DEF</h3> </div> <div id="logobot"> l><li><a href="?p=">Start</a></li><li><a href="?p=i">Informatie</a></li><li><a href="?p=r">Meld je link aan</a></li><li><a href="?p=p">Plugin</a></li><li><a href="?p=z">Zoeken</a></li><li><a href="?p=t">Top 10</a></li><li><a href="?p=c">Contact</a></li></ul></div> </div> <div id="r"> content </div> </body> </html>
--1a97exxx1a97e8797f Content-Type: image/png; name="test.png" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="test.png" Content-ID: <bc5b21505784b333b98f32c09225bda2.png>
iVBORw0KGgoAAAANSUhEUgAAAzAAAAAmCAYAAAAbb34AAAAABGdBTUEAAK/INwWK6QAAABl0 RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAiPSURBVHja7J1Lkts2EIbZspzk Dl6mcohsffBss8oRsvQZUqmU2RE1ogiCeDQepDie7yvTGlEiAAJgo3+gSYmqDhO/fvkyvchj uzjb9bF9vm0/3bafb9sv0/b7169/DR+Mqb7udfb2b5C5xqaXx77p//tXdBzG7zqMt1cdb3+/ 7RzmOn+muc7gkZgsf8e+6x0jItHvi3usm0fiePW/56aVyHPOVywVGjnP1eeBMktN4zllnc8h Vv50MtKlL50tHQCAHmPkWdN005HYeHp0mfxxubIsoXEgNTZIYGzPleuej/PZqg4MFZrzC1bt cytb0DcK+SruOUX8F794kvI/IvUiofLOacz5OO/F91n8fdN79zjn9TK9uj7L7e9Pnz79cPbi zz/++O328s9j+/e2/Xfbvk/V+/e3b2Pq2CvmttxZjBoFWRTgG7fO9nlf51Iyjnq3NBvSF3vl 9kvLkKb06RD90zQKMACAH0L0bD3Z1+a/UxlMKVbmmztKKgRFNH3VrufTvaYjeerhHVtfl/f7 uvzdzcy1IvGqjD6sMd7ZEB9leAEAAAAAOruxo+fOmjTGxZiBZIQ8AAAAAABAiYCpWhS5VGYG AAAAAADQgnhipknAaOI9IWQAAAAAANDCHEJWzCWTqGUfAAAAAABACaOjL7REa1hCyEIrLggZ AAAAAADoiele+0vpAYgYAAAAAABoxF8kMd+icqHuAAAAAADgRRQ/7TgnYDSjlAAAAAAAAFrF y2DVGFfvACkTM/wkDAAAAAAAVDEOB/0ODAAAAAAAQCsyVKyIlDyFzH9PGBkAAAAAAPQUNF0E TErIAAAAAAAAHCJeSgUMAAAAAADAHnR7jLK2JA4AAAAAAGCkOYRMM/sQMQAAAAAAUEP1okjJ TfzamhkAAAAAAICnNboLmG6ZAQAAAAAAtGgMbuIHAAAAAIDTCRWrgMmFh/EbMAAAAAAA0EPA VP1My8WoiNTwHQAAAAAAAKuAmZDSA2t+yJIVGAAAAAAA6ClmzPqi5ndgLJ8BAAAAAAB0FS8W AQMAAAAAALCHcBkfr24YWTak7ErdQdeeqA8BLVIe0Ei9QQUi9LSjR5vh0V+pewAAaBxSQqsv Wafo2pAZHNzCZ3IVsg737XM6CSD+Pm7dv2dxg0gDADjO3A7rlRgTV4PPHLt5H69hZ2HhOwdU OAAgLF97HmcQNGeb0AIAaDBno2tire7u9SPX2NAwCLiDGsIiUjfGMDJm0AFei9UpZ2XiPPZK K9uwVx2wMgUAHU1Z8ZOOW0LITuV13geVCof5vbjOqfM7rQDYMYys+pwlI1sRU9BPFeRNqbZm IS+7nt77xEOs7t6rSDu6PZQQOwBoZxwKQ8dqBczLRizXOPsG8/nZC+67CK027DaQVJ7f+3A0 dHl5tK+GtEeiO3Y5TQQMHNnnjd1tbfKk6NreXkeavKp+HP0ozXbxLLbTPZdZYImco/32qKMW UcTqEMC7EzBVOqMphGzvez9mI3Q3SAknU2rSfxj/VtEhgTLJSwZBXYoRGNjE/Xy3/MVczqRu eLZPla9nyP7VTomil3Zx8o6wTq8Rw+ukCtOVeFoiWnZwsj/Ladp/GjE2964YpkROK7pC48tB tmxdJh2WOTs55bUjT4EnhmxYRQI4iYgpjuy6ZjxRjYyY3a2ma0imbXpf4vjPsy7mYx7GX3cR G2ExIY7xbxcGidWH+yFrj197nlN81OjXO9T+BS1yRDTrogXPUaT+EkCkvEAv6I5+qmQ7jN9d tFkkNDjh2uInqq3YCWf6KGGZbH9vAkQkVl4ptMP7iK7ZCV+yPMbBDjnysTGx18ScuCvuHVdP WsvXuzwAkBQvxVwNFnxXEeMv98aNTt75X93bUmy89D6AiDGvrFOt24FdS8rijJdVwke3g6// TLOg4y6yTUBL87N/uOQZXlWznXeHgSr5iXReKtEKRxIsTmDQjPWfbkn3leL2tMaRhdLVqjoK Xm3PsCSrcOspLKVQDEpG4KXbP94+mhBpGilXS7hTIG9Zjx9rsSVdxdV8DnOduuHYe4WoRUPA G4XHKmKjUHT4IeqhMqTC2AGgeVDtsgJjyaSrMcsZi7KZFV2cYrV73hpZkYkJnbLVhq2AkNAq jV/eZBYaFwDBicVtDJbmR9TotzU3eVnSS0LtXy4Zh7Q7IQWCxd+Fuji15dP+orbckMXyFdth Q+4aENe/7VRHiYmX3PVhuNbLhKUWikE12wO3PGsroXezuK1Qm/hdyuU3zHrJJyfAxBchahOA 6/Px85OKfqHr4msoxLDecZ/LNao6D0loF0mucCkRQXffY8iHfMceo829NgBd8MPHdr8HpouQ sQiXsCHSiK+vi58eO26IiIVQWiupMfjLKhmh8pA57iAX0z0aHsBdoSRJbaF58aRhR1/9iT2t 6wyhcXzVdtGBSvO7jIdZXZs+kwWNDndg1Qmd1CIc1tf1/n6FdTVCO/UkzzWXxu4qxvPynOOn A6cxudFBWAbFYLhtQytJUuCsh+cnNCvSgmFxWjDZ47anRAoi/nnZVvnmybi1zVVnNWfwRrj1 WLFq28SK39INZCvCUuXy9i0iSTbjVk4M3R0RHTMtHxEvmo6MiD6lLuCjIGQAmgSMqyt2+x2Y biswm0cZR2dPFrGiKVGia12ymEQnHGszwCyCQxKiKLlXM45GzIC7Njvh/Ky+FhQEmnf+1eDS ayjXhNBJWP74eG1z5iTtPxU7RZL32iK1vqOoWPV/5UfpmrTkVn3vH5KnSb9fKhSGMRisXAdE LkWplFSqximCgK0I+Xnq11nO4VdDPYpVvElSqNnEmeYbQH2n3/0sIgA01j80Kt5XYW2aE1Pq Cahl31acbC20Oyn2/FOcwVbdELW4xNBY3okwtpVI0/nhlbZQuqldx3FMio5YZEgo/O3ZTxAy ALWD6Vg2y/XG/wIMACQziaAHit+xAAAAAElFTkSuQmCC
1a97exxx1a97e8797f--
--1a97exxx1a97e8797f Content-Type: text/plain; name="test.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="test.txt"
PD9waHANCg0KDQovLyBodHRwOi8vd3d3Lm1ldGFsc2hlbGwuY29tL3ZpZXcvc291cmNlLzEx NS8NCmNsYXNzIG1haWxlcg0Kew0KICAgIHZhciAkZXJyb3JzID0gYXJyYXkoIm5vZmlsZWZv dW5kIiAgICA9PiAiU29ycnksIGhldCBiZXN0YW5kICVzIGJlc3RhYXQgbmlldCIsDQogICAg ICAgICAgICAgICAgICAgICAgICAiY2Fubm90cmVhZGZpbGUiID0+ICJTb3JyeSwgaGV0IGJl c3RhbmQgJXMga2FuIG5pZXQgZ2VsZXplbiB3b3JkZW4iLA0KICAgICAgICAgICAgICAgICAg ICAgICAgImNvbnRlbnR0eXBlZXJyIiA9PiAiU29ycnksIGhldCB0eXBlIGNvbnRlbnQgJyVz JyBpcyBpbmNvcnJlY3QgKGFsbGVlbiB0ZXh0L2h0bWwpIiwNCiAgICAgICAgICAgICAgICAg ICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICB2YXIgJGVvbCA9ICJc clxuIjsNCg0KICAgIC8vIGVtYWlsIHNldHRpbmdzDQogICAgdmFyICRzdWJqZWN0ID0gIiI7 DQogICAgdmFyICRjb250ZW50ID0gYXJyYXkoKTsNCiAgICB2YXIgJGNvbnRlbnRUeXBlcyA9 IGFycmF5KCJ0ZXh0IiwgImh0bWwiKTsNCiAgICANCiAgICAvLyBhZGRlZCBmaWxlcw0KICAg IHZhciAkYXR0YXRjaG1lbnRzID0gYXJyYXkoKTsgLy8gYWRkZWQNCiAgICB2YXIgJGVtYmVk ZGVkICAgICA9IGFycmF5KCk7IC8vIGZvciB2aWV3aW5nDQogICAgDQogICAgdmFyICRib3Vu ZGFyeTsNCiAgICB2YXIgJGNoYXJTZXQgPSAnaXNvLTg4NTktMSc7DQogICAgDQogICAgZnVu Y3Rpb24gbWFpbGVyKCkNCiAgICB7DQogICAgICAgICR0aGlzLT5ib3VuZGFyeSA9ICdfX3Np bXBsZV9tYWlsX2NsYXNzX18nOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHNlbmQoJHRvKQ0K ICAgIHsNCiAgICB9DQogICAgDQogICAgZnVuY3Rpb24gc3ViamVjdCgkc3ViamVjdCkNCiAg ICB7DQogICAgICAgICR0aGlzLT5zdWJqZWN0ID0gJHN1YmplY3Q7DQogICAgfQ0KICAgIA0K ICAgIGZ1bmN0aW9uIGlzRW1haWwoJGVtYWlsKQ0KICAgIHsNCiAgICAgICAgaWYgKCFwcmVn X21hdGNoKCcvXltBLVowLTkuXyUtXStAKD86W0EtWjAtOS1dK1xcLikrW0EtWl17Miw0fSQv aScsICRlbWFpbCkpDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAg ICAgICAgfQ0KDQogICAgICAgIHJldHVybiAkZW1haWw7DQogICAgfQ0KDQogICAgZnVuY3Rp b24gc2V0Q2hhcnNldCgkY2hhcnNldCkNCiAgICB7DQogICAgICAgICR0aGlzLT5jaGFyU2V0 ID0gJGNoYXJzZXQ7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gc2V0Q29udGVudCgkdGV4dCwg JHR5cGUgPSAidGV4dCIpDQogICAgew0KICAgICAgICAvKg0KICAgICAgICANCiAgICAgICAg JHRleHQgPSBjb250ZW50IHRvIGFkZCB0byBlbWFpbA0KICAgICAgICAkdHlwZSA9IHR5cGUg b2YgY29udGVudCAodGV4dC9odG1sKQ0KICAgICAgICANCiAgICAgICAgKi8NCiAgICAgICAg DQogICAgICAgIGlmIChpc1NldCgkY29udGVudFR5cGVzWyR0eXBlXSkpDQogICAgICAgIHsN CiAgICAgICAgICAgIGlmICgkdHlwZSA9PSAidGV4dCIpDQogICAgICAgICAgICB7DQogICAg ICAgICAgICAgICAgJGNvbnRlbnRCdWZmZXIgID0gJHRoaXMtPmVvbCAuICctLScgLiAkdGhp cy0+Ym91bmRhcnkgLiAkdGhpcy0+ZW9sOw0KICAgICAgICAgICAgICAgICRjb250ZW50QnVm ZmVyIC49ICdDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9IicgJHRoaXMtPmNo YXJTZXQgLiAnIicuICR0aGlzLT5lb2w7DQogICAgICAgICAgICAgICAgJGNvbnRlbnRCdWZm ZXIgLj0gJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUnIC4g JHRoaXMtPmVvbCAuICR0aGlzLT5lb2w7DQogICAgICAgICAgICAgICAgJGNvbnRlbnRCdWZm ZXIgLj0gJHRleHQ7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAg ICAgICB7DQogICAgICAgICAgICAgICAgJGNvbnRlbnRCdWZmZXIgID0gJHRoaXMtPmVvbCAu ICctLScgLiAkdGhpcy0+Ym91bmRhcnkgLiAkdGhpcy0+ZW9sOw0KICAgICAgICAgICAgICAg ICRjb250ZW50QnVmZmVyIC49ICdDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD0i JyAuICR0aGlzLT5jaGFyU2V0IC4gJyInIC4gJHRoaXMtPmVvbDsNCiAgICAgICAgICAgICAg ICAkY29udGVudEJ1ZmZlciAuPSAnQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVk LXByaW50YWJsZScgLiAkdGhpcy0+ZW9sIC4gJHRoaXMtPmVvbDsNCiAgICAgICAgICAgICAg ICAkY29udGVudEJ1ZmZlciAuPSAkdGV4dDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAg ICAgJHRoaXMtPmNvbnRlbnRbJHR5cGVdID0gJHRleHQ7DQogICAgICAgIH0NCiAgICAgICAg ZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICAkdGhpcy0+ZXJyb3JbXSA9IHNwcmludGYo JHRoaXMtPmVycm9yc1snY29udGVudHR5cGVlcnInXSwgJHR5cGUpOw0KICAgICAgICB9DQog ICAgfQ0KICAgIA0KICAgIGZ1bmN0aW9uIGNsZWFyQ29udGVudCgpDQogICAgew0KICAgICAg ICAvKg0KICAgICAgICANCiAgICAgICAgQ2xlYXIgZW1haWwgY29udGVudCAodGV4dC9odG1s KQ0KICAgICAgICANCiAgICAgICAgKi8NCiAgICAgICAgDQogICAgICAgICR0aGlzLT5jb250 ZW50ID0gYXJyYXkoKTsNCiAgICB9DQogICAgDQogICAgZnVuY3Rpb24gYWRkRmlsZSgkZmls ZSwgJHR5cGUgPSAnYXR0YXRjaG1lbnQnKQ0KICAgIHsNCiAgICAgICAgLyoNCiAgICAgICAg DQogICAgICAgICRmaWxlID0gZmlsZSB0byBhdHRhdGNoDQogICAgICAgICR0eXBlID0gYXR0 YXRjaG1lbnQgdHlwZSAoYXR0YXRjaG1lbnQvZW1iZWRkZWQpDQoNCiAgICAgICAgKi8NCg0K ICAgICAgICBpZiAoaXNfZmlsZSgkZmlsZSkpDQogICAgICAgIHsNCiAgICAgICAgICAgICRi YXNlbmFtZSA9IGJhc2VuYW1lKCRmaWxlKTsNCiAgICAgICAgICAgICRmaWxlaW5mbyA9IHBh dGhpbmZvKCRmaWxlKTsNCiAgICAgICAgICAgICRtaW1lICAgICA9IG1pbWVfY29udGVudF90 eXBlKCRmaWxlKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJGZkID0gZm9wZW4oJGZp bGUsICJyYiIpOw0KICAgICAgICAgICAgaWYgKCRmZCkNCiAgICAgICAgICAgIHsNCiAgICAg ICAgICAgICAgICAkZmlsZWJ1ZmZlciA9IGZyZWFkKCRmZCwgZmlsZXNpemUoJGZpbGUpOw0K ICAgICAgICAgICAgICAgICRmaWxlYnVmZmVyID0gY2h1bmtfc3BsaXQoYmFzZTY0X2VuY29k ZSgkZmlsZWJ1ZmZlciksIDcyKSAuICR0aGlzLT5lb2w7DQoNCiAgICAgICAgICAgICAgICBp ZiAoJHR5cGUgPT0gImVtYmVkZGVkIikNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAg ICAgICAgICAgICRyZWZfaWQgPSBtZDUodW5pcWlkKHRpbWUoKSkpIC4gJy4nIC4gJGZpbGVp bmZvWydleHRlbnNpb24nXTsNCg0KICAgICAgICAgICAgICAgICAgICAkaGVhZGVyICA9ICct LScgLiAkdGhpcy0+Ym91bmRhcnkgLiAkdGhpcy0+ZW9sOw0KICAgICAgICAgICAgICAgICAg ICAkaGVhZGVyIC49ICdDb250ZW50LVR5cGU6ICcgLiAkbWltZSAuICc7IG5hbWU9IicgLiAk YmFzZW5hbWUgLiAnIicgLiAkdGhpcy0+ZW9sOw0KICAgICAgICAgICAgICAgICAgICAkaGVh ZGVyIC49ICdDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQnIC4gJHRoaXMtPmVv bDsNCiAgICAgICAgICAgICAgICAgICAgJGhlYWRlciAuPSAnQ29udGVudC1EaXNwb3NpdGlv bjogaW5saW5lOyBmaWxlbmFtZT0iJyAuICRiYXNlbmFtZSAuICciJyAuICR0aGlzLT5lb2w7 DQogICAgICAgICAgICAgICAgICAgICRoZWFkZXIgLj0gJ0NvbnRlbnQtSUQ6IDwnIC4gJHJl Zl9pZCAuICc+JyAuICR0aGlzLT5lb2wgLiAkdGhpcy0+ZW9sOw0KICAgICAgICAgICAgICAg ICAgICAkaGVhZGVyIC49ICRmaWxlYnVmZmVyOw0KDQogICAgICAgICAgICAgICAgICAgICR0 aGlzLT5lbWJlZGRlZFtdID0gJGhlYWRlcjsNCg0KICAgICAgICAgICAgICAgICAgICByZXR1 cm4gJzxpbWcgc3JjPTNEImNpZDonIC4gJHJlZl9pZCAuICciPic7DQogICAgICAgICAgICAg ICAgfQ0KICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICB7DQogICAgICAg ICAgICAgICAgICAgICRoZWFkZXIgID0gJy0tJyAuICR0aGlzLT5ib3VuZGFyeSAuICR0aGlz LT5lb2w7DQogICAgICAgICAgICAgICAgICAgICRoZWFkZXIgLj0gJ0NvbnRlbnQtVHlwZTog Jy4gJG1pbWUgLiAnOyBuYW1lPSInIC4gJGJhc2VuYW1lIC4gJyInIC4gJHRoaXMtPmVvbDsN CiAgICAgICAgICAgICAgICAgICAgJGhlYWRlciAuPSAnQ29udGVudC1UcmFuc2Zlci1FbmNv ZGluZzogYmFzZTY0JyAuICR0aGlzLT5lb2w7DQogICAgICAgICAgICAgICAgICAgICRoZWFk ZXIgLj0gJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSInIC4g JGJhc2VuYW1lIC4gJyInLiR0aGlzLT5lb2wuJHRoaXMtPmVvbDsNCiAgICAgICAgICAgICAg ICAgICAgJGhlYWRlciAuPSAkZmlsZWJ1ZmZlcjsNCg0KICAgICAgICAgICAgICAgICAgICAk dGhpcy0+YXR0YWNobWVudFtdID0gJGhlYWRlcjsNCiAgICAgICAgICAgICAgICB9DQogICAg ICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAg ICAgICAgJHRoaXMtPmVycm9yW10gPSBzcHJpbnRmKCR0aGlzLT5lcnJvcnNbJ2Nhbm5vdHJl YWRmaWxlJ10sICRmaWxlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBl bHNlDQogICAgICAgIHsNCiAgICAgICAgICAgICR0aGlzLT5lcnJvcltdID0gc3ByaW50Zigk dGhpcy0+ZXJyb3JzWydub2ZpbGVmb3VuZCddLCAkZmlsZSk7DQogICAgICAgIH0NCiAgICB9 DQp9DQoNCj8+DQo=
1a97exxx1a97e8797f--
</pr |
Iemand? :D |
mschol | zaterdag 5 januari 2008 @ 12:11 |
quote:Op zaterdag 5 januari 2008 11:51 schreef Chandler het volgende:[..] Hoe moet ik de headers instellen dan? en afmeld adres kan in de mail vermeld worden waarbij het script de mogelijkheid heeft om gebruikers af te melden. ik pak even de headers , die er toe lijken te doen, van de nieuwsbrief van m'n broer:quote:Precedence: list List: lists List-Unsubscribe: <http://domein.com/lists> List-Owner: <lists@domein.com> X-Priority: 3 X-Mailer: mailer List-ID: <http://domein.com/lists> List-Subscribe: <http://domein.com/lists> List-URL: <http://domein.com/lists> die staan er extra in, en kennelijk zorgt dit er voor dat een mailing in princiepe altijd om een spamfilter komt (mits de headers netjes worden gevolgd door het anti-spam middel). |
Farenji | zaterdag 5 januari 2008 @ 13:06 |
quote:Op donderdag 3 januari 2008 14:01 schreef colourAgga het volgende:Wat denken jullie trouwens, de klasses die je nodig hebt voordat je fatsoenlijk aan een project kan beginnen? Ik denk: - Date - Verify - Authentification - SQL - Template Dat zijn in ieder geval de 5 die ik het meeste gebruik jullie nog toevoegingen? Mijn basisklassen voor een webapplicatie zijn meestal:
- Configuration - waar de config wordt uitgelezen uit een file, in een object wordt gezet en die dmv een singleton pattern beschikbaar is in de hele applicatie; - Database - waar de db connectie wordt gemaakt (username/password ed komt uit het Configuration object) en die als een wrapper werkt zodat je flexibel bent en je makkelijk van db backend kan switchen; - User - waar een userobject wordt gemaakt met alle user specifieke dingen, ook authenticatie en permissies wordt hier geregeld; - Session - voor alle data die persistent moet zijn. Een Session object wordt geencapsuleerd in een User object aangezien het altijd aan een user is gekoppeld; - View - een wrapper class voor een template engine; - Request - alle userinput uit GET parameters en form submits wordt hier beschikbaar gemaakt en gevalideerd; - Log - een generieke logging module voor foutmeldingen uit de applicatie, en voor debugging doeleinden. |
colourAgga | zaterdag 5 januari 2008 @ 16:20 |
quote:Op zaterdag 5 januari 2008 10:31 schreef Xcalibur het volgende:[..] Ik gebruik in grote lijnen hetzelfde lijstje, alleen geen date class: - ADOdb - Authenticator (zelfgeschreven authenticatie class) - Importexport (zelfgeschreven CSV import / export class) - phpMailer - phpThumb - Smarty - UTF-8 - Validator (zelfgeschreven validatie class) Wat gebruik jij voor date class? Ik heb eerlijk gezegd nooit echt problemen met datums, dus ik ben wel benieuwd waarom die van jou zo handig is?  Ik gebruik een date class om alle mogelijke berekeningen met tijd te doe en dat in alle mogelijke tijdsformaten in en uit te lezen 
Overigens werkt het bij mij zo:
Ik heb een core, deze laadt de module config in vanuit XML bestanden in de config directory of uit de database, vervolgens worden alle modules binnen de core beschikmaar gemaakt waarna ik vervolgens vanuit elke module met de core kan praten en via de core met andere modules.
Hier zit uitgebreide logging op en ook afhandeling van fouten via een eigen error code systeem (je ziet dus nooit PHP fouten in principe ). Best heel hip etc en ook iets wat ik voor mijn werk heb gemaakt en waarvan grote delen dus gewoon proprietary zijn.
Wel heel handig:
1 2 3 4 5 | <?php $Core->mod_Template->replace( 'tieten', 'borsten' ); //Aanspreken van module $Core->mod_Gallery->store( 'plaatje' ); //Standaard spul opslaan bij een module $Core->mod_Gallery->config( 'thumbnails', '120x120' ); //Override van settings ?> |
Verder zijn er nog plugins (deze hangen onder de modules waarmee ik specifieke functionaliteit voor een specifieke klant kan toevoegen En als je via de Core iets input/output wordt dit altijd gevalidate, alsmede dat ALLE database en file gerelateerde dingen via de mod_DB en mod_File gaan (er bestaan shorts voor zodat je dat mod_ niet telkens hoeft te typen )
Allemaal heel hip etc, de Template is een extension op een output klasse, alles zit erin zodat je kan outputten naar een webpage of naar commandline of wat je maar wilt eigenlijk.
Het hele systeem is PHP/Python geschreven waarbij Python alles op het filesystem zelf afhandelt en wat handige interfaces heeft zoals dat wij een SQL klasse hebben die niet met SQL praat maar met de pickle functionaliteit van Python etc. Ook klasses voor verschillende databases. Allemaal heel leuk spul.
Oh en verder zit er nog allerlei Big Brother functionaliteit in
Een echt framework  |
Xcalibur | zondag 6 januari 2008 @ 22:31 |
Nice!  |
wobbel | maandag 7 januari 2008 @ 14:14 |
quote:Op donderdag 3 januari 2008 15:39 schreef wobbel het volgende:Wij hebben op het werk een administratie programma welke op TPS bestanden draait (TopSpeed database) Nu lukt het mij prima om er wat gegevens uit te krijgen door te zoeken op klant nummer met onderstaande code: [ code verwijderd ] Nu zou ik ook graag willen zoeken op naam, dat als ik zoek naar "aap" ik alle resultaten krijg zoals "Schaap, Aapjes" etc...dus ik dacht dit: [ code verwijderd ] Maar helaas, dit werkt niet  ik krijg dan geen resultaten...als ik de wildcards (%) weglaat en ik vul de exacte naam in dan vind ik het wel  Hoe kan ik zoeken met wildcards? Hier staat iets meer info over ODBC TopSpeed (PDF) Schop 
LET OP!! Is geen MySQL, maar een ODBC plugin voor TopSpeed  |
Farenji | maandag 7 januari 2008 @ 14:22 |
In SQL gaat het in ieder geval dmv LIKE. Een procentteken is een wildcard voor 0 of meer tekens, een underscore is een wildcard voor 1 teken. Bijv:
1 | $ODBC_Klant_Select = "SELECT * FROM BAC5130 WHERE NM LIKE '%" . $SQL_Value . "%'"; |
|
markiemark | maandag 7 januari 2008 @ 17:59 |
hoe schrijf ik een functie die uit een string één of meerdere woorden haalt die in een array staan en de rest weg laat? bijvoorbeeld:
$string = "morgen vlieg ik naar new york"; $steden = array("amsterdam", "barcelona", "new york");
dan wil ik dat alleen new york wordt weergegeven, de rest mag wegvallen. en als de waarde niet voor komt in de array dat er ook niks wordt weergegeven.. alvast bedankt |
SuperRembo | maandag 7 januari 2008 @ 18:07 |
quote: Ik denk dat je zelf op zoek moet naar betere / uitgebreidere documentatie over die TopSpeed db. Dat pdfje is wel erg beknopt. |
Light | maandag 7 januari 2008 @ 18:19 |
quote:Op maandag 7 januari 2008 17:59 schreef markiemark het volgende:hoe schrijf ik een functie die uit een string één of meerdere woorden haalt die in een array staan en de rest weg laat? bijvoorbeeld: $string = "morgen vlieg ik naar new york"; $steden = array("amsterdam", "barcelona", "new york"); dan wil ik dat alleen new york wordt weergegeven, de rest mag wegvallen. en als de waarde niet voor komt in de array dat er ook niks wordt weergegeven.. alvast bedankt 1 2 3 4 5 6 7 8 9 | <?php $string = "morgen vlieg ik naar new york"; $steden = array("amsterdam", "barcelona", "new york"); foreach($steden as $stad) { if(false !== strpos($string, $stad)) { echo $stad; } } ?> |
|
markiemark | maandag 7 januari 2008 @ 18:33 |
quote: helemaal top!! dank je wel!
het gaat om een lijst van +/- 5000 steden en het is een vrij druk bezochte site.. gaat dit een probleem worden? |
Geqxon | maandag 7 januari 2008 @ 18:45 |
Is een regular expression dan niet sneller, Light? |
Light | maandag 7 januari 2008 @ 19:07 |
quote: Nee, als je wilt weten of een string in een andere string voorkomt dan is strpos sneller dan een regular expression. Dat staat ook in de PHP handleiding. Overigens kan het wel efficienter want foreach is niet de geheugenvriendelijkste methode. |
Geqxon | maandag 7 januari 2008 @ 19:09 |
Uiteraard, omdat strpos character per character controleert. |
Light | maandag 7 januari 2008 @ 19:09 |
quote:Op maandag 7 januari 2008 18:33 schreef markiemark het volgende:[..] helemaal top!! dank je wel! het gaat om een lijst van +/- 5000 steden en het is een vrij druk bezochte site.. gaat dit een probleem worden? Dan zou ik niet kiezen voor een foreach-methode. Het kan efficienter, zeker als de array is opgebouwd zoals je beschrijft (dus met numerieke keys). |
Arjan321 | maandag 7 januari 2008 @ 19:47 |
Misschien dat een combinatie van str_word_count en array_intersect ook nog wat uithaalt.. Geen idee wat sneller zou zijn
En ik speel hier vals door New York als één woord te typen :p |
Chandler | woensdag 9 januari 2008 @ 10:12 |
Misschien een stom vraagje; maar wil graag weten m.b.t. de preformance van PHP hoe lang het geschat kan duren voor het versturen van 250 mailtjes met PHP (mailtje is max 1kb)
Wil geen simulatie uitvoeren aangezien ik niet 250x dezelfde email wil ontvangen  |
#ANONIEM | woensdag 9 januari 2008 @ 10:17 |
quote:Op woensdag 9 januari 2008 10:12 schreef Chandler het volgende:Misschien een stom vraagje; maar wil graag weten m.b.t. de preformance van PHP hoe lang het geschat kan duren voor het versturen van 250 mailtjes met PHP (mailtje is max 1kb) Wil geen simulatie uitvoeren  aangezien ik niet 250x dezelfde email wil ontvangen  Daar is niks zinnigs over te zeggen zonder specifiek te weten wat:
Voor soort email je uitstuurt Hoe je deze opbouwt Hoe je deze verstuurd |
Chandler | woensdag 9 januari 2008 @ 10:35 |
Je moet het zien als een tekst mailtje met een paar headers... en ik verstuur gewoon met mail($to, $titel, $content, $headers);
 |
WyriHaximus | woensdag 9 januari 2008 @ 10:38 |
quote:Op woensdag 9 januari 2008 10:12 schreef Chandler het volgende:Misschien een stom vraagje; maar wil graag weten m.b.t. de preformance van PHP hoe lang het geschat kan duren voor het versturen van 250 mailtjes met PHP (mailtje is max 1kb) Wil geen simulatie uitvoeren  aangezien ik niet 250x dezelfde email wil ontvangen  Mijn ervaring is dat PHP (afhankelijk hoe snel de SMTP server is) er rustig 2000 mailtjes in een seconden door heen kan knallen van 1KB/ps (per stuk) . |
#ANONIEM | woensdag 9 januari 2008 @ 10:40 |
quote:Op woensdag 9 januari 2008 10:38 schreef WyriHaximus het volgende:[..] Mijn ervaring is dat PHP (afhankelijk hoe snel de SMTP server is) er rustig 2000 mailtjes in een seconden door heen kan knallen van 1KB/ps (per stuk)  . Dan is dit je antwoord. |
Chandler | woensdag 9 januari 2008 @ 10:40 |
Juist, een klant van mij wil ruim 300.000 mailtjes versturen en nu heb ik een script geschreven die om de xxx mailjes de pagina 10 seconden laat wachten en dan op naar de volgende xxx mailtjes gaat.
Maar 1000 mailtjes is dus simpel mogelijk zonder gezeur van PHP/MYSQL en natuurlijk de SMTP server  quote: Dat is duidelijk dan  |
Darkomen | woensdag 9 januari 2008 @ 11:00 |
precies de manier waarop ik het ook doe  |
WyriHaximus | woensdag 9 januari 2008 @ 11:40 |
Enigsinds schamend moet ik zeggen dat ik zelf nog niet met UTF-8 bezig ben geweest, maar hier wel graag mee bezig zou willen gaan (kan ook wel zonder door blijven gaan aangezien ik het eingelijk niet tegenkom dat het nodig is maar goed). Na ben ik bezig me CMS te herschrijven en 1 van de dingen die ik er in moet en zal hebben is UTF-8 support. HEb de hele hotfuzz nog niet door denk want het enigste wat ik vind is dat ik een set andere functies moet gebruiken voor bepaalde acties. Klopt dit of zit er meer achter? |
Xcalibur | woensdag 9 januari 2008 @ 11:52 |
Lees in ieder geval deze eens  http://www.nicknettleton.com/zine/php/php-utf-8-cheatsheet#body
Ik gebruik zelf ook deze UTF-8 class: http://sourceforge.net/projects/phputf8/ |
WyriHaximus | woensdag 9 januari 2008 @ 12:24 |
quote: Ok tof dankje, zat dus zelf iig al een heel eind de goede kant op . |
Light | woensdag 9 januari 2008 @ 18:50 |
quote:Op woensdag 9 januari 2008 10:40 schreef Chandler het volgende:Juist, een klant van mij wil ruim 300.000 mailtjes versturen en nu heb ik een script geschreven die om de xxx mailjes de pagina 10 seconden laat wachten en dan op naar de volgende xxx mailtjes gaat. Maar 1000 mailtjes is dus simpel mogelijk zonder gezeur van PHP/MYSQL en natuurlijk de SMTP server  [..] Dat is duidelijk dan  Ik zou niet graag 300.000 mails versturen met de mail() functie. Die is daar niet zo geschikt voor, omdat de verbinding met de mailserver iedere keer wordt afgesloten en opnieuw geopend. Zie ook mail(). |
Geqxon | woensdag 9 januari 2008 @ 18:55 |
http://www.phpguru.org/static/mime.mail.html
Voor als je wilt weten hoe je via SMTP mail verstuurt. |
PiRANiA | woensdag 9 januari 2008 @ 19:18 |
quote: hij had het toch al over een smtp server?quote:Op woensdag 9 januari 2008 10:40 schreef Chandler het volgende:Juist, een klant van mij wil ruim 300.000 mailtjes versturen en nu heb ik een script geschreven die om de xxx mailjes de pagina 10 seconden laat wachten en dan op naar de volgende xxx mailtjes gaat. Maar 1000 mailtjes is dus simpel mogelijk zonder gezeur van PHP/MYSQL en natuurlijk de SMTP server  [..] Dat is duidelijk dan  |
JortK | woensdag 9 januari 2008 @ 19:19 |
Waaom zou je zoveel berichten niet laten versturen door bedrijven die er tenslotte in specialiseerd zijn  |
Xcalibur | woensdag 9 januari 2008 @ 20:54 |
quote: Nog niet zo heel lang geleden heeft iemand in dit topic (het vorige deel gok ik) een aardig complete opsomming gemaakt.... ik dacht eigenlijk dat jij dat was  |
Tarabass | woensdag 9 januari 2008 @ 21:41 |
Ongelooflijk. Kom er net achter dat als je met mysql in een selectquery een like operator wilt gebruiken om een integer op te halen je dat als een string moet doen om dat werkend te krijgen..
Om de like-operator toe te passen op een integer-dataveld moet je dus dit doen:
1 2 3 | <?php $query = "SELECT * FROM employees WHERE age LIKE '%$age%'"; ?> |
Of zou hij het gewoon pikken en moet ik dit anders doen? |
PiRANiA | woensdag 9 januari 2008 @ 21:45 |
quote:Op woensdag 9 januari 2008 19:19 schreef JortK het volgende:Waaom zou je zoveel berichten niet laten versturen door bedrijven die er tenslotte in specialiseerd zijn  omdat hij het zelf ook kan? |
Light | woensdag 9 januari 2008 @ 22:09 |
quote:Op woensdag 9 januari 2008 21:41 schreef Tarabass het volgende:Ongelooflijk. Kom er net achter dat als je met mysql in een selectquery een like operator wilt gebruiken om een integer op te halen je dat als een string moet doen om dat werkend te krijgen.. Om de like-operator toe te passen op een integer-dataveld moet je dus dit doen: [ code verwijderd ] Of zou hij het gewoon pikken en moet ik dit anders doen? Like is een string-operator, dus is het wel logisch dat het niet werkt met integers. Je zou je ook nog kunnen afvragen of het zinvol is om Like te gebruiken, of dat je de gegevens op een andere manier ook kunt krijgen. |
wobbel | woensdag 9 januari 2008 @ 22:10 |
Ik moet m'n vriendin PHP leren wat is de ALLERMAKKELIJKSTE instap curus voor PHP? (jaja, wat een vertrouwen )
Dus heel simpel echo dingen en hele simpele if en else statements? |
WyriHaximus | woensdag 9 januari 2008 @ 22:15 |
quote:Op woensdag 9 januari 2008 22:10 schreef wobbel het volgende:Ik moet m'n vriendin PHP leren  wat is de ALLERMAKKELIJKSTE instap curus voor PHP? (jaja, wat een vertrouwen  ) Dus heel simpel echo dingen en hele simpele if en else statements? Hahahaha! Ben altijd al fan geweest van de Wrox serie: http://www.wrox.com/WileyCDA/WroxTitle/productCd-0764557831.html |
wobbel | woensdag 9 januari 2008 @ 22:16 |
quote: dat is te moeilijk, dan moet ze 2 talen leren (engels ) en dan kost het me geld 
en nee, ze is geen mongooltje  |
WyriHaximus | woensdag 9 januari 2008 @ 22:22 |
quote:Op woensdag 9 januari 2008 22:16 schreef wobbel het volgende:[..] dat is te moeilijk, dan moet ze 2 talen leren (engels  ) en dan kost het me geld  en nee, ze is geen mongooltje  lol ik ze niks, me eingen vriendin is ook niet al te goed met engels . Dit anders wat? Misschien bij de bied? http://www.nl.bol.com/is-bin/INTERSHOP.enfinity/eCS/Store/nl/-/EUR/BOL_DisplayProductInformation-Start?Section=BOOK&BOL_OWNER_ID=1001004002133647 |
wobbel | woensdag 9 januari 2008 @ 22:26 |
quote: haha die heb ik op 't werk wel liggen volgensmij eens meenemen  |
Tarabass | woensdag 9 januari 2008 @ 23:09 |
quote:Op woensdag 9 januari 2008 22:10 schreef wobbel het volgende:Ik moet m'n vriendin PHP leren  wat is de ALLERMAKKELIJKSTE instap curus voor PHP? (jaja, wat een vertrouwen  ) Dus heel simpel echo dingen en hele simpele if en else statements? w3schools Tizag ? |
Tarabass | woensdag 9 januari 2008 @ 23:15 |
quote:Op woensdag 9 januari 2008 22:09 schreef Light het volgende:[..] Like is een string-operator, dus is het wel logisch dat het niet werkt met integers. Je zou je ook nog kunnen afvragen of het zinvol is om Like te gebruiken, of dat je de gegevens op een andere manier ook kunt krijgen. Ik weet inmiddels dat het anders moet (REGEXP?), maar het is toch absurd dat hij (mysql-server) het allemaal pikt. Echt raar. Met een string-operator een integer ophalen. Hoe weet je dan dat je het goed doet, als alles werkt
dacht dat dit subforum voor dummies was, maar krijg steeds meer het idee dat dit het expert-subforum is |
SuperRembo | woensdag 9 januari 2008 @ 23:55 |
quote: Wat wil je eigenlijk bereiken? Een REGEXP is net als LIKE een string operator, dus die is ook niet bedoeld om naar een int te zoeken. Waarom kan je geen =, <, > of BETWEEN gebruiken? |
Dzy | donderdag 10 januari 2008 @ 00:31 |
Ja inderdaad, wat voor gegevens sla je op en waarop wil je zoeken? Ik denk dat je behoorlijk verkeerd aan het zoeken bent  |
qu63 | donderdag 10 januari 2008 @ 07:24 |
quote:Op woensdag 9 januari 2008 23:15 schreef Tarabass het volgende:[..] Ik weet inmiddels dat het anders moet (REGEXP?), maar het is toch absurd dat hij (mysql-server) het allemaal pikt. Echt raar. Met een string-operator een integer ophalen. Hoe weet je dan dat je het goed doet, als alles werkt dacht dat dit subforum voor dummies was, maar krijg steeds meer het idee dat dit het expert-subforum is dummie meldt  |
WyriHaximus | donderdag 10 januari 2008 @ 08:08 |
quote:Op woensdag 9 januari 2008 23:15 schreef Tarabass het volgende:[..] dacht dat dit subforum voor dummies was, maar krijg steeds meer het idee dat dit het expert-subforum is Expert meld . (*WyriHaximus walgt even van zichzelf en gaat weer verder. *WyriHaximus schaamt zich nog steeds dat hij niet echt eerder met UTF-8 aan de gang is gegaan !) Maar goed zonder experts is het ook weer zo saai voor de dummies .quote:Op woensdag 9 januari 2008 20:54 schreef Xcalibur het volgende:[..] Nog niet zo heel lang geleden heeft iemand in dit topic (het vorige deel gok ik) een aardig complete opsomming gemaakt.... ik dacht eigenlijk dat jij dat was  Hehe nee dat was ik niet . Maar goed dit heeft me aan het denken gezet aan gezien UTF-8 best wel een pre is als je echt internationaal wilt gaan werken. Nu zat ik te denken om een aantal nuttige posts in de OP er bij te zetten aangezien die nu wat karig is. Wat denken jullie er van? |
Geqxon | donderdag 10 januari 2008 @ 08:30 |
Och, en ik schaam mij weer dood omdat ik mijn Unix timestamps zonder tijdzone markering in de database hebt zitten.  |
Tarabass | donderdag 10 januari 2008 @ 10:11 |
quote:Op woensdag 9 januari 2008 23:55 schreef SuperRembo het volgende:[..] Wat wil je eigenlijk bereiken? Een REGEXP is net als LIKE een string operator, dus die is ook niet bedoeld om naar een int te zoeken. Waarom kan je geen =, <, > of BETWEEN gebruiken? Ik ben met ajax bezig en wil dat als je een cijfer ingeeft in een tekstbox 'age' hij alle records ophaalt die dat getal bevatten. Als je een 1 intypt moet hij dus de leeftijden 1 ophalen, maar ook 14 of 51. Als ik de integer $age tussen quotes zet werkt dat gewoon op een integer-veld. En op de mysql-site vond ik dat regexp ook zou werken.quote:A character class “[...]” matches any character within the brackets. For example, “[abc]” matches “a”, “b”, or “c”. To name a range of characters, use a dash. “[a-z]” matches any letter, whereas “[0-9]” matches any digit. Balen dat alles bij mysql werkt, want op die manier weet je geeneens of het de juiste manier is, en wil het zo graag goed doen. Maar alles werkt aarggh. Wat zou ik voor een integer moeten gebruiken?
Voorbeeld |
mschol | donderdag 10 januari 2008 @ 13:37 |
quote:Op woensdag 9 januari 2008 23:15 schreef Tarabass het volgende:[..] Ik weet inmiddels dat het anders moet (REGEXP?), maar het is toch absurd dat hij (mysql-server) het allemaal pikt. Echt raar. Met een string-operator een integer ophalen. Hoe weet je dan dat je het goed doet, als alles werkt dacht dat dit subforum voor dummies was, maar krijg steeds meer het idee dat dit het expert-subforum is semi-dummy/expert meld...  |
Tarabass | donderdag 10 januari 2008 @ 14:18 |
quote: Je bedoelt semi-expert  |
Dzy | donderdag 10 januari 2008 @ 14:23 |
quote:Op donderdag 10 januari 2008 10:11 schreef Tarabass het volgende:[..] Ik ben met ajax bezig en wil dat als je een cijfer ingeeft in een tekstbox 'age' hij alle records ophaalt die dat getal bevatten. Als je een 1 intypt moet hij dus de leeftijden 1 ophalen, maar ook 14 of 51. Als ik de integer $age tussen quotes zet werkt dat gewoon op een integer-veld. En op de mysql-site vond ik dat regexp ook zou werken. [..] Balen dat alles bij mysql werkt, want op die manier weet je geeneens of het de juiste manier is, en wil het zo graag goed doen. Maar alles werkt aarggh. Wat zou ik voor een integer moeten gebruiken? Voorbeeld Waarom wil je als je een 1 invult ook 51 hebben? Klinkt me vrij onlogisch in de oren. Dat is hetzelfde als je bij autocomplete een P invult je dan ook AAP als voorbeeld krijgt. Als je dit niet doet kun je dit ook op een veel elegantere manier doen.
Stel je vult een 2 in. Dan zijn de mogelijkheden dus 2, 20-29, 200-299. Verder dan dat hoef je niet te gaan. Dan kun je dus een SELECT query met een paar ORs en met BETWEEN werken.
Vul je ook een 2e cijfer in, bijvoorbeeld 14, dan kun je dus een query bouwen met 14, en 140-149. Dit gaat een stuk sneller, weet je zeker dat het goed gaat en heb je geen lelijke string searches op een integer field. Helaas kun je het dus niet zo oplossen als je ook wilt dat je 51 kunt vinden met een 1. |
Tarabass | donderdag 10 januari 2008 @ 14:34 |
quote:Op donderdag 10 januari 2008 14:23 schreef Dzy het volgende:[..] Waarom wil je als je een 1 invult ook 51 hebben? Klinkt me vrij onlogisch in de oren. Dat is hetzelfde als je bij autocomplete een P invult je dan ook AAP als voorbeeld krijgt. Als je dit niet doet kun je dit ook op een veel elegantere manier doen. Stel je vult een 2 in. Dan zijn de mogelijkheden dus 2, 20-29, 200-299. Verder dan dat hoef je niet te gaan. Dan kun je dus een SELECT query met een paar ORs en met BETWEEN werken. Vul je ook een 2e cijfer in, bijvoorbeeld 14, dan kun je dus een query bouwen met 14, en 140-149. Dit gaat een stuk sneller, weet je zeker dat het goed gaat en heb je geen lelijke string searches op een integer field. Helaas kun je het dus niet zo oplossen als je ook wilt dat je 51 kunt vinden met een 1. Het gaat niet om een autocomplete maar om een zoek-functie. Als je dus zoekt op 7 wil ik alle leeftijden met een 7 erin hebben. Waarom? Eigenlijk gewoon daarom 
Dus om dit te bewerkstelligen wil ik een like-manier hebben, maar dan voor een integer.. |
#ANONIEM | donderdag 10 januari 2008 @ 14:39 |
Een like operator is per definitie een string operator hoor, dat is basis SQL kennis. |
Dzy | donderdag 10 januari 2008 @ 14:58 |
Je kunt natuurlijk ook je PHP scriptje een set laten maken en daar een mooie query door uit laten poepen. Nog steeds voelt het wat ranzig aan maarja, niet heel veel aan te doen. Stel dat de leeftijd maximaal 100 is, kun je bijvoorbeeld bij een 2 invullen zo'n query laten maken:
1 | SELECT * FROM users WHERE (age = 2) OR (age BETWEEN 20 AND 29) OR (age IN (12,22,32,42,52,62,72,82,92) |
Dan krijg je alsnog alle goede leeftijden terug en gebruik je geen ranzige LIKE operators die bedoeld zijn voor strings. De php code om zo'n query te maken is ook niet zo moeilijk. |
markiemark | donderdag 10 januari 2008 @ 15:28 |
met welk boek leer ik het snelste object georienteerd programmeren in php? ik kan wel aardig programmeren in php, maar nog niet object oriented. nu wil ik dit wel leren en een boek kopen daar voor, maar welke kan ik het beste nemen? |
Farenji | donderdag 10 januari 2008 @ 15:33 |
quote: Maar mysql is slim genoeg om een integer gewoon te casten naar een string als je er string operators op loslaat. Ik zie het probleem niet. Like met een integer werkt gewoon. |
WyriHaximus | donderdag 10 januari 2008 @ 15:58 |
quote:Op donderdag 10 januari 2008 15:28 schreef markiemark het volgende:met welk boek leer ik het snelste object georienteerd programmeren in php? ik kan wel aardig programmeren in php, maar nog niet object oriented. nu wil ik dit wel leren en een boek kopen daar voor, maar welke kan ik het beste nemen? Wat ik eerder ook al voor wobbel ze GF suggereerde is de P2P serie van Wrox erg goed om eens naar te kijken . |
JortK | donderdag 10 januari 2008 @ 16:10 |
Even een offtopic vraagje wobbel heb jij niet vroeger R3 gehad als bedrijf? |
Tarabass | donderdag 10 januari 2008 @ 16:28 |
quote:Op donderdag 10 januari 2008 14:58 schreef Dzy het volgende:Je kunt natuurlijk ook je PHP scriptje een set laten maken en daar een mooie query door uit laten poepen. Nog steeds voelt het wat ranzig aan maarja, niet heel veel aan te doen. Stel dat de leeftijd maximaal 100 is, kun je bijvoorbeeld bij een 2 invullen zo'n query laten maken: [ code verwijderd ] Dan krijg je alsnog alle goede leeftijden terug en gebruik je geen ranzige LIKE operators die bedoeld zijn voor strings. De php code om zo'n query te maken is ook niet zo moeilijk. Hier ga ik even mee stoeien. Bedankt.. |
BugWorks | donderdag 10 januari 2008 @ 17:30 |
Beste allemaal,
Ik ben bezig met een gastenboek te maken, dit werkt allemaal prima. Nu wilde ik daar als toevoeging smilies aan toe voegen, ook dit werkt prima.
Nu geef ik van iedere smilie de locatie map aan, dit wil ik verkorten door het gebruik van een variabele.
Even een voorbeeld hoe het nu is:
1 | $text = str_replace( ':)','<img src="./files/images/smiles/icon_smile.gif" border="0" alt="" />',$text); |
Wat ik dus graag zou willen wijzigen is "./files/images/smiles" vervangen door een variabele ($dir_smiles). Dit wil me dus niet lukken aangezien de wijzingen overgenomen als zijnde tekst.
Wie kan en wil me hiermee helpen. Alvast bedankt :Y |
PiRANiA | donderdag 10 januari 2008 @ 17:35 |
quote:Op donderdag 10 januari 2008 17:30 schreef BugWorks het volgende:Beste allemaal, Ik ben bezig met een gastenboek te maken, dit werkt allemaal prima. Nu wilde ik daar als toevoeging smilies aan toe voegen, ook dit werkt prima. Nu geef ik van iedere smilie de locatie map aan, dit wil ik verkorten door het gebruik van een variabele. Even een voorbeeld hoe het nu is: [ code verwijderd ] Wat ik dus graag zou willen wijzigen is "./files/images/smiles" vervangen door een variabele ($dir_smiles) . Dit wil me dus niet lukken aangezien de wijzingen overgenomen als zijnde tekst.Wie kan en wil me hiermee helpen. Alvast bedankt  wat bedoel je? |
Xcalibur | donderdag 10 januari 2008 @ 18:18 |
ik denk dat het pad hard als tekst in al z'n entries staat, en hij deze dus niet meer kan aanpassen? |
Geqxon | donderdag 10 januari 2008 @ 18:20 |
-Nevermind-. |
SuperRembo | donderdag 10 januari 2008 @ 18:52 |
quote:Op donderdag 10 januari 2008 14:34 schreef Tarabass het volgende:[..] Het gaat niet om een autocomplete maar om een zoek-functie. Als je dus zoekt op 7 wil ik alle leeftijden met een 7 erin hebben. Waarom? Eigenlijk gewoon daarom :) Dus om dit te bewerkstelligen wil ik een like-manier hebben, maar dan voor een integer.. Ok, je wil dus gewoon zoeken alsof het tekst is. Een regexp is nergens voor nodig (is alleen langzamer), een LIKE is wat je nodig hebt. Als je het echt netjes wil doen, dan converteer je de INT kolom eerst naar VARCHAR voordat je de LIKE vergelijking gebruikt:
1 | ... WHERE Cast(age AS VARCHAR) LIKE '%2%' |
(Zie http://dev.mysql.com/doc/refman/5.1/en/cast-functions.html) |
Light | donderdag 10 januari 2008 @ 18:58 |
quote: Volgens mij moet je een heel eind kunnen komen met
1 | SELECT * FROM users WHERE age MOD 10 = 1 |
|
qu63 | donderdag 10 januari 2008 @ 19:01 |
quote: waar staat de MOD 10 voor? |
Light | donderdag 10 januari 2008 @ 19:09 |
quote: Modulo 10. Ofwel delen door 10 en als antwoord de rest teruggeven.
Als voorbeeld: 27 MOD 10 = 7 |
HuHu | donderdag 10 januari 2008 @ 19:09 |
quote: Zie: http://dev.mysql.com/doc/(...)ns.html#function_mod
Oftewel: de modulo operator, geeft de rest terug na een deling.
20 / 7 = 2 20 MOD 7 = 6 |
Light | donderdag 10 januari 2008 @ 19:14 |
Er zit (uiteraard) ook een modulo-operator in PHP. Daar gebruik je dan %
1 2 3 4 | <?php echo floor(20 / 7); // 2 echo 20 % 7; // 6 ?> |
|
Dzy | donderdag 10 januari 2008 @ 19:18 |
quote: Zo kun je het inderdaad ook aanpakken, nog wel een mooiere oplossing dan die van mij. Wist niet dat dat in MySQL kon Weer wat geleerd.
Heeft iemand hier ervaring met CakePHP? Ik heb me door de manual heen geworsteld maar ik denk dat ik nog wel wat vraagjes ga hebben nu ik ga beginnen met een nieuw projectje.
EDIT: Je moet uiteraard in die query ook nog gewoon de between en de waarde zelf meenemen. |
SuperRembo | donderdag 10 januari 2008 @ 19:19 |
quote: Met alleen MOD 10 ben je er niet, en het is onnodig ingewikkeld.quote: Waarom zou je zo ingewikkeld doen? Vergeet ook niet dat je input uit een textbox komt. En het moet natuurlijk ook resultaat geven als je een getal van 2 cijfers invoert... daar ga je dan met je modulo 10. |
Light | donderdag 10 januari 2008 @ 19:25 |
quote: Ik reageerde op een deel van een post, namelijk dat het niet mogelijk zou zijn om alles te pakken met een bepaald eindcijfer. Daarvoor heb je genoeg aan een MOD 10. Om de hele vraag te beantwoorden heb je meer nodig, da's waar. Maar dat is al meerdere keren voorbij gekomen, dus dat stuk sloeg ik over  |
Dzy | donderdag 10 januari 2008 @ 19:31 |
quote:Op donderdag 10 januari 2008 19:19 schreef SuperRembo het volgende:[..] Waarom zou je zo ingewikkeld doen? Vergeet ook niet dat je input uit een textbox komt. En het moet natuurlijk ook resultaat geven als je een getal van 2 cijfers invoert... daar ga je dan met je modulo 10. Je hebt gelijk, misschien is mijn oplossing toch wel beter Maar met dat typecasten, ik denk dat het een stuk sneller gaat als je het gewoon op mijn manier doet, omdat MySQL dan van elke rij de age column moet gaan omzetten terwijl je het op mijn manier maar een paar instructies in php kost en MySQL gewoon kan doen waar het goed in is. |
Dzy | donderdag 10 januari 2008 @ 19:38 |
quote:Op donderdag 10 januari 2008 14:58 schreef Dzy het volgende:Je kunt natuurlijk ook je PHP scriptje een set laten maken en daar een mooie query door uit laten poepen. Nog steeds voelt het wat ranzig aan maarja, niet heel veel aan te doen. Stel dat de leeftijd maximaal 100 is, kun je bijvoorbeeld bij een 2 invullen zo'n query laten maken: [ code verwijderd ] Dan krijg je alsnog alle goede leeftijden terug en gebruik je geen ranzige LIKE operators die bedoeld zijn voor strings. De php code om zo'n query te maken is ook niet zo moeilijk. 1 | SELECT * FROM users WHERE (age = 2) OR (age BETWEEN 20 AND 29) OR (age IN (12,22,32,42,52,62,72,82,92)) |
Om zo'n query te laten schrijven is dus geen moeilijk php scriptje nodig, zoiets bijvoorbeeld:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <? $query = "SELECT * FROM users WHERE (age = ".$age.")"; if ($age<10) { $query .= " OR (age BETWEEN " . $age*10 . " AND ". $age *10+9 . ") OR (age IN (" for ($i=1;$i<10;$i++) { if ($i<>1) $query .= ","; $query .= 10*$i+$age; } $query .= "))"; } $result = mysql_query($query); |
|
Geqxon | donderdag 10 januari 2008 @ 19:39 |
Dat kan denk ik netter met een range(0,10) die je met implode tot een string samenvoegt. 
geef:
1 | 19,29,39,49,59,69,79,89,99 |
|
BugWorks | donderdag 10 januari 2008 @ 19:40 |
quote: Zo zou het eruit moeten zien: "./files/images/smiles/icon_smile.gif"
Met wat ik geprobeerd heb ziet het er als volgt uit (als ik de paginabron bekijk): "$dir_smiles/icon_smile.gif" "$dir_smiles./icon_smile.gif" "<?=$dir_smiles;?>/icon_smile.gif" |
Dzy | donderdag 10 januari 2008 @ 19:44 |
quote: Heh. Dat is inderdaad mooier. Dit ga ik vaak gebruiken denk ik Ik kende de range function niet, en gebruik toch wel redelijk vaak set queries. |
Geqxon | donderdag 10 januari 2008 @ 19:48 |
quote:Op donderdag 10 januari 2008 19:44 schreef Dzy het volgende:[..] Heh. Dat is inderdaad mooier. Dit ga ik vaak gebruiken denk ik :P Ik kende de range function niet, en gebruik toch wel redelijk vaak set queries. Range is best een handige functie als je een array met nummertjes wilt hebben. Ik gebruik het wel eens als ik bijvoorbeeld een pull-down menutje met alle weeknummers wil genereren, dan is dat best wel makkelijk. :)
1 2 3 4 5 | <?php foreach (range(1,52) as $weeknumber){
} ?> |
Overigens is de derde parameter van de functie range wel enkel voor php 5.0.0 en hoger. |
Tarabass | donderdag 10 januari 2008 @ 19:49 |
quote:Op donderdag 10 januari 2008 17:30 schreef BugWorks het volgende:Beste allemaal, Ik ben bezig met een gastenboek te maken, dit werkt allemaal prima. Nu wilde ik daar als toevoeging smilies aan toe voegen, ook dit werkt prima. Nu geef ik van iedere smilie de locatie map aan, dit wil ik verkorten door het gebruik van een variabele. Even een voorbeeld hoe het nu is: [ code verwijderd ] Wat ik dus graag zou willen wijzigen is "./files/images/smiles" vervangen door een variabele ($dir_smiles). Dit wil me dus niet lukken aangezien de wijzingen overgenomen als zijnde tekst. Wie kan en wil me hiermee helpen. Alvast bedankt  1 2 3 4 | <?php $path = "./files/images/smiles/"; $text = str_replace(':)','<img src="'.$path.'icon_smile.gif" border="0" alt="" />',$text); ?> |
Bedoel je dit? Mooier is natuurlijk zelf een functie te schrijven die de parameter-input (de ':)') omzet naar de image-tag en dat weer returned. En de border met css meegeven.. |
Tarabass | donderdag 10 januari 2008 @ 19:53 |
quote:Op donderdag 10 januari 2008 19:48 schreef Geqxon het volgende:[..] Range is best een handige functie als je een array met nummertjes wilt hebben. Ik gebruik het wel eens als ik bijvoorbeeld een pull-down menutje met alle weeknummers wil genereren, dan is dat best wel makkelijk.  [ code verwijderd ] Overigens is de derde parameter van de functie range wel enkel voor php 5.0.0 en hoger. Dit deed ik altijd met een for-loopje. Dit is inderdaad mooier
Zitten trouwens leuke functies tussen hierboven. Morgen maar eens proberen allemaal  |
BugWorks | donderdag 10 januari 2008 @ 20:00 |
quote:Op donderdag 10 januari 2008 19:49 schreef Tarabass het volgende:[..] [ code verwijderd ] Bedoel je dit? Mooier is natuurlijk zelf een functie te schrijven die de parameter-input (de ':)') omzet naar de image-tag en dat weer returned. En de border met css meegeven.. Datgene wat jij gepost heb lijkt hier niet te werken, helaas. Heeft namelijk hetzelfde effect als wat ik geprobeerd heb. (edit) Afbeelding niet zichtbaar, maar in de broncode is alleen het volgende te zien "/icon_smile.gif".
Overigens worden de ':)' codes omgezet middels een functie, leek me niet relevant om die te posten vandaar alleen die ene regel. |
Tarabass | donderdag 10 januari 2008 @ 20:06 |
quote:Op donderdag 10 januari 2008 20:00 schreef BugWorks het volgende:[..] Datgene wat jij gepost heb lijkt hier niet te werken, helaas. Heeft namelijk hetzelfde effect als wat ik geprobeerd heb. (edit) Afbeelding niet zichtbaar, maar in de broncode is alleen het volgende te zien "/icon_smile.gif". Overigens worden de ':)' codes omgezet middels een functie, leek me niet relevant om die te posten vandaar alleen die ene regel. Dan heb je een '/' teveel, waarschijnlijk heb je die nog voor 'icon_smile.gif' staan en die moet je dan even weghalen..
Dit doet het namelijk perfect, dus zou het ergens anders in moeten zitten:
1 2 3 4 5 | <?php $text = ':)'; $path = "./files/images/smiles/"; echo $text = str_replace(':)','[img src="'.$path.'icon_smile.gif" border="0" alt="" /]',$text); ?> |
[ Bericht 25% gewijzigd door Tarabass op 10-01-2008 20:28:41 ] |
markiemark | donderdag 10 januari 2008 @ 21:19 |
quote:Op donderdag 10 januari 2008 15:58 schreef WyriHaximus het volgende:[..] Wat ik eerder ook al voor wobbel ze GF suggereerde is de P2P serie van Wrox erg goed om eens naar te kijken  . ok maar ik zag dat er een beginners en een pro versie is van dit boek. bij het pro boek want zo zag ik mezelf tot nu toe staat dat het verder gaat op de oo inleiding van het beginners boek. aangezien ik nog echt niks weet van oo wil ik geen stappen over slaan. ik vind het denk ik een beetje zonde om het beginners boek te kopen terwijl ik al veel weet.. |
Dzy | donderdag 10 januari 2008 @ 21:50 |
Kijk het boek eens in in de betere boekhandel, dan kun je kijken hoe ver dat gaat. Overigens heb ik mezelf alles qua programmeren aangeleerd via tutorials en uitproberen. Behalve Turbo Pascal (5.5), dat leerde ik van m'n vader long, long time ago  |
PiRANiA | donderdag 10 januari 2008 @ 22:07 |
[TEL *HIER* AF] Unix Timestamp verjaardag! de timestamp is bijna bij de 120 miljoen  |
qu63 | donderdag 10 januari 2008 @ 22:29 |
quote: das wel heel erg nerderig  |
SuperRembo | donderdag 10 januari 2008 @ 23:36 |
quote: Tel eens opnieuw  |
PiRANiA | vrijdag 11 januari 2008 @ 08:03 |
quote:  |
Chandler | vrijdag 11 januari 2008 @ 08:48 |
quote:  |
SuperRembo | vrijdag 11 januari 2008 @ 13:05 |
quote: De 120 miljoen timestamp was lang geleden... |
PiRANiA | vrijdag 11 januari 2008 @ 13:16 |
zit ik er een nul naast?:P |
Tarabass | vrijdag 11 januari 2008 @ 13:31 |
quote: |
Flaccid | vrijdag 11 januari 2008 @ 16:20 |
hallo. ik wil zelf een klein systeempje schrijven om de inhoud van pagina's te beheren. maar heeft de inhoud van een mysql row een maximale waarde aan tekens? Stel dat ik 2500 tekens erin wil, kan dat dan? Of wat is de max? heb gezocht en kwam op mediumtext uit, is die slim? |
Farenji | vrijdag 11 januari 2008 @ 16:30 |
quote:Op vrijdag 11 januari 2008 16:20 schreef Flaccid het volgende:hallo. ik wil zelf een klein systeempje schrijven om de inhoud van pagina's te beheren. maar heeft de inhoud van een mysql row een maximale waarde aan tekens? Stel dat ik 2500 tekens erin wil, kan dat dan? Of wat is de max? De max is in principe het datatype dat je in mysql gebruikt voor elke kolom. Als die 2500 tekens kan bevatten dan is het dus geen probleem. |
HuHu | vrijdag 11 januari 2008 @ 16:33 |
De maximale inhoud van een cel hangt af van het datatype dat die cel heeft. Is 't een VARCHAR(50), dan kun je er maar 50 tekens in kwijt. Beetje inschatten wat je wilt hebben en wat er beschikbaar is.
Een MEDIUMTEXT kan 16 miljoen tekens bevatten, is wellicht wat overkill. Je kunt ook voor een TEXT gaan (65000 tekens). |
LeeHarveyOswald | vrijdag 11 januari 2008 @ 17:07 |
CSS vraagje Denk dat die ook wel hier kan?
Hoe een DIV layer laten zweven? Dus bij wijze van spreken de banner hier rechts van fok ALTIJD rechts in beeld houden op een vaste positie - ook als je het topic door scrolled?
hopen dat Danny niet meeleest |
Geqxon | vrijdag 11 januari 2008 @ 17:12 |
quote:Op vrijdag 11 januari 2008 17:07 schreef LeeHarveyOswald het volgende:CSS vraagje  Denk dat die ook wel hier kan? Hoe een DIV layer laten zweven? Dus bij wijze van spreken de banner hier rechts van fok ALTIJD rechts in beeld houden op een vaste positie - ook als je het topic door scrolled? hopen dat Danny niet meeleest Iets zegt mij dat dat ook met Javascript gedaan is.  |
LeeHarveyOswald | vrijdag 11 januari 2008 @ 17:15 |
quote: Die hiernaast doet niet wat ik wil
Ik wil die hiernaast, maar dan zwevend  |
HuHu | vrijdag 11 januari 2008 @ 17:23 |
In CSS een position:fixed opgeven. Werk alleen in moderne browsers. |
Geqxon | vrijdag 11 januari 2008 @ 17:26 |
quote: Al las ik hier wel wat over IE6 support: http://www.howtocreate.co.uk/fixedPosition.html
 |
LeeHarveyOswald | vrijdag 11 januari 2008 @ 17:53 |
quote: zo simpel 
Dat had ik zelf ook nog wel kunnen bedenken 
Dat het niet altijd werkt is niet van levensbelang Als het bij het gros van de users maar goed gaat 
Dank  |
LeeHarveyOswald | vrijdag 11 januari 2008 @ 19:29 |
Hmm waar ik alleen tegenop loop is dat mn hele layout compleet verneukt is in IE. Niet alleen die banner dinges, maar echt ALLES. 
www.boeroendoek.nl gaat het om  |
Xcalibur | vrijdag 11 januari 2008 @ 19:45 |
ja, die is best verneukt  |
LeeHarveyOswald | vrijdag 11 januari 2008 @ 20:25 |
Volgens mij heeft de link van Geqxon ook volledig met dit probleem te maken
(althans, die gaat er over, veroorzaakt het niet ). |
Flaccid | vrijdag 11 januari 2008 @ 21:23 |
Hoe kan je het beste een BBCODE dingetje maken? Zijn die dingen er kant en klaar? |
LeeHarveyOswald | vrijdag 11 januari 2008 @ 21:33 |
quote: Ja, en anders zijn er vrij simpele "replace" codes. Dit is wat ik gebruik om in een chat bericht te filteren op 'codes' die ik wil replacen met een emoticon ( dus : ) met :) vervangen, zeg maar):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php // Laden van lijst met emoticons. Deze lijst direct toepassen!
$sql = "SELECT * FROM Emotibase";
$query = mysql_query($sql) or die(mysql_error());
while ($result = mysql_fetch_array($query)) {
$emotitext = $result['EmoticonText']; $emotihtml = $result['EmoticonHTML'];
$bericht = str_replace ($emotitext, $emotihtml, $bericht); } ?> |
Dit kan je dus ook doen door in de database jou 'bbcode' te zetten :)
Mijn bug lijkt te zitten in:
1 2 3 4 | #container { width: 600px; margin: 1 auto; } |
Is dat mogelijk? In IE word volgens mij de hele container gewoon naar links geduwd... (www.boeroendoek.nl nogsteeds. Mooi in FF, gaar in IE...) |
Flaccid | vrijdag 11 januari 2008 @ 22:12 |
quote:Op vrijdag 11 januari 2008 21:33 schreef LeeHarveyOswald het volgende:[..] Ja, en anders zijn er vrij simpele "replace" codes. Dit is wat ik gebruik om in een chat bericht te filteren op 'codes' die ik wil replacen met een emoticon ( dus : ) met  vervangen, zeg maar): [ code verwijderd ] Dit kan je dus ook doen door in de database jou 'bbcode' te zetten Mijn bug lijkt te zitten in: [ code verwijderd ] Is dat mogelijk? In IE word volgens mij de hele container gewoon naar links geduwd... (www.boeroendoek.nl nogsteeds. Mooi in FF, gaar in IE...) Hoe ziet die database eruit precies? (sql)
Op jouw probleem: Wazig. Mss wat klooien met het defineren van de width van de body, 100%?
Ik zit ff met een ander dingetje ondertussen: ik heb een form waarin je een post maakt, met 3 knoppen : Submit (gaat naar createpost.php) Reset (spreekt voor zich) en Preview. Bij preview wil ik dat hij het form submit in een popup met een andere action dan het form eigenlijk is. Hoe kan ik dat voor elkaar krijgen. het lukt me wel om createpost.php in het popupje te krijgen, maar niet preview.php erin.
code:
1 2 3 4 5 6 7 8 | <SCRIPT> function openTarget (form, features, windowName) { if (!windowName) windowName = 'formTarget' + (new Date().getTime()); form.target = windowName; open ('', windowName, features); } </SCRIPT> |
Hoe ik hem aanroep
1 | <input name="preview" value="Preview" class="submit" type="submit" onClick="openTarget(this, 'width=700,height=600,resizable=1,scrollbars=1'); return true;" target="newpopup" /> |
|
LeeHarveyOswald | vrijdag 11 januari 2008 @ 22:16 |
Database heeft enkel een veld EmoticonText (Prim key) en EmoticonHTML.
In jou geval zou je daar dus BB en HTML voor kunnen gebruiken  |
LeeHarveyOswald | vrijdag 11 januari 2008 @ 22:25 |
Ik zit te denken om een stukje browser detectie er in te gooien, en indien IE te beginnen met <p align = center> en te eindigen met </p>....
margin: 1 auto; >>> dat lijkt het stuk waar hij op botst! |
Flaccid | vrijdag 11 januari 2008 @ 22:28 |
quote:Op vrijdag 11 januari 2008 22:16 schreef LeeHarveyOswald het volgende:Database heeft enkel een veld EmoticonText (Prim key) en EmoticonHTML. In jou geval zou je daar dus BB en HTML voor kunnen gebruiken  dan staat er dus in jouw geval:
1 | :P - <img src='tongue.gif'> |
hoe ging dat ookalweer met een newline in een text area?
Weet iemand hoe ik slim zon submit + preview kan maken?
Het is javascript maar whatever: Hoe kan ik net als google doet tijdens het schrijven van een mail als je hem wegklikt: Wilt u op de pagina blijven of doorgaan? Hoe doe ik dat met een submit: Wilt u submitten of nog even wachten ofzo?
[ Bericht 7% gewijzigd door Flaccid op 11-01-2008 22:34:38 ] |
LeeHarveyOswald | vrijdag 11 januari 2008 @ 23:38 |
Ik heb echt álles geprobeerd, maar zelfs als ik het hele PHP document leeg laat, alleen <div id="container"> er in zet, met daarin een tekstje, gaat IE over de kop en FF doet alles goed.
Wat wel weer staaft dat het aan
1 2 3 4 | #container { width: 600px; margin: 1 auto; } |
ligt, maar ik los er alleen niets mee op :') |
Light | vrijdag 11 januari 2008 @ 23:52 |
quote: Je kunt het beste altijd een eenheid vermelden, dus 1px of 1em ipv alleen 1. Alleen bij 0 is de eenheid niet noodzakelijk, maar ook daar kan het geen kwaad. |
LeeHarveyOswald | vrijdag 11 januari 2008 @ 23:55 |
Heb er 0 van gemaakt op 'aanraden' van css validator. |
Light | zaterdag 12 januari 2008 @ 00:00 |
quote:Op vrijdag 11 januari 2008 22:28 schreef Flaccid het volgende:[..] dan staat er dus in jouw geval: [ code verwijderd ] hoe ging dat ookalweer met een newline in een text area? nl2br() ? |
Flaccid | zaterdag 12 januari 2008 @ 00:29 |
quote: werkt dat dan wel? |
LeeHarveyOswald | zaterdag 12 januari 2008 @ 00:32 |
quote:  |
Tarabass | zaterdag 12 januari 2008 @ 09:50 |
@LeeHarveyOswald
Stuur mij de html en css eens via pm, dan knap ik het even op voor je als je dat wilt. Moet geen probleem zijn lijkt me.. |
Xcalibur | zaterdag 12 januari 2008 @ 10:31 |
Ik heb een dilemma 
Ik heb ooit eens een CSV-import functie geschreven en op zich werkt die prima. Door middel van een unieke index in mijn tabel zorg ik er met INSERT IGNORE INTO / REPLACE INTO voor dat er geen dubbele records in mijn database komen.
Als gevolg daarvan worden er dus records geweigerd. Omdat ik eerst alle data verzamel in 1 grote query die ik in 1x insert weet ik achteraf alleen hoeveel records er zijn geweigerd, maar niet wélke. Om erachter te komen welke records het zijn zou ik ze 1 voor 1 moeten inserten, en dan de mislukte verzamelen in een array. Maar dat levert nogal veel queries op als je een beetje een flink bestand hebt...
Wat zijn jullie ideeën hierover? Staat het uitvoeren van 30.000 queries ipv 1 in verhouding tot de extra informatie die het oplevert?  |
autocue | zaterdag 12 januari 2008 @ 11:06 |
quote:Op zaterdag 12 januari 2008 10:31 schreef Xcalibur het volgende:Ik heb een dilemma :) Ik heb ooit eens een CSV-import functie geschreven en op zich werkt die prima. Door middel van een unieke index in mijn tabel zorg ik er met INSERT IGNORE INTO / REPLACE INTO voor dat er geen dubbele records in mijn database komen. Als gevolg daarvan worden er dus records geweigerd. Omdat ik eerst alle data verzamel in 1 grote query die ik in 1x insert weet ik achteraf alleen hoeveel records er zijn geweigerd, maar niet wélke. Om erachter te komen welke records het zijn zou ik ze 1 voor 1 moeten inserten, en dan de mislukte verzamelen in een array. Maar dat levert nogal veel queries op als je een beetje een flink bestand hebt... Wat zijn jullie ideeën hierover? Staat het uitvoeren van 30.000 queries ipv 1 in verhouding tot de extra informatie die het oplevert? :) Een manier om zowel de performance te houden van een grote batch queries als het kunnen achterhalen is het zetten van een flag (of een timestamp) op je duplicaat tabelrow. Je zou bijvoorbeeld zoiets kunnen doen als :
1 2 3 4 5 6 7 8 | // Breidt VALUES uit voor je gehele insert INSERT INTO csv (field, value) VALUES (?, ?) ON DUPLICATE KEY UPDATE duplicate_inserted = 1;
// Haal alle duplicaten op SELECT c.field FROM csv c WHERE c.duplicate_inserted = 1;
// Reset alle duplicaten weer UPDATE csv SET duplicate_insert = 0; |
Niet supernetjes en het werkt alleen onder MySQL, maar 't doet (als 't goed is) z'n werk :) . |
LeeHarveyOswald | zaterdag 12 januari 2008 @ 12:49 |
quote:Op zaterdag 12 januari 2008 09:50 schreef Tarabass het volgende:@LeeHarveyOswald Stuur mij de html en css eens via pm, dan knap ik het even op voor je als je dat wilt. Moet geen probleem zijn lijkt me.. Done  |
Tarabass | zaterdag 12 januari 2008 @ 16:57 |
quote: Check je inbox  |
LeeHarveyOswald | zaterdag 12 januari 2008 @ 19:00 |
quote: Je bent helemaal geweldig!!!!!!! |
Tarabass | zaterdag 12 januari 2008 @ 19:23 |
quote: Let op, want hij is nu niet meer goed in firefox. Wees voorzichtig met veranderingen en probeer in verschillende browsers hoe het er uit ziet. Let ook op dat f5 drukken soms niet de css vernieuwd, doe dat dus met ctrl-f5 
En graag gedaan natuurlijk.. |
LeeHarveyOswald | zaterdag 12 januari 2008 @ 19:41 |
Hier (ook firefox) issie wel goed?  |
Tarabass | zaterdag 12 januari 2008 @ 19:47 |
quote: Ja, hier is 'ie nu ook weer goed. Ik had trouwens de <p>-tags gecommentariseerd maar als je in css de p-tag een margin van 0 meegeeft moet het wel goed gaan in beide browsers. Margin wordt standaard in verschillende browsers per tag in verschillende afstanden weergegeven wat de site lelijk kan maken. Door de margin zelf in te stellen voorkom je dat en is de margin overal hetzelfde. Succes verder met je site! |
Geqxon | zaterdag 12 januari 2008 @ 20:06 |
Om mijn layout te maken heb ik hetvolgende geschreven:
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 | <?php class HTML{ private $title; private $content; private $disable_menu; public function HTML($title = '', $disable_menu = false){ } public function addHTML($html){ $this->content .= $html; } public function addHeader($text, $level = 2){ // voeg een header (h1 tot h7) aan de pagina toe } public function addParagraph($text, $class = ""){ // voeg een paragraaf aan de pagina toe } public function addAnchor($name){ // voeg een <a name="$name"> aan de pagina toe } private function getMenu(){ // returned op basis van de ingelogde user een menu } public function getContent(){ return $this->content; } public function getOutput(){ $header = "<!DOCT ...... "; $footer = ".....</html>";
return $header . $this->getMenu() . $this->getContent() . $footer; } } ?> |
Het aanmaken van een pagina gaat nu als volgt:
1 2 3 4 5 6 7 8 9 10 | <?php $template = new HTML("Logfile"); $template->addHeader("Recent activity",2); $template->addParagraph("In the .... place:");
[...]
$template->addHTML($log_table); echo $template->getOutput(); ?> |
Mijn vragen: Maak ik nu correct gebruik van OO in PHP? Is dit een fatsoenlijke manier om een template systeem op te zetten? |
ralfie | zaterdag 12 januari 2008 @ 21:09 |
OO in php is voornamelijk om het de scripters zelf makkelijk te maken. Dus of het correct gebruik van OO is, hangt ervan af of jij of je gebruikers het zelf makkelijk te gebruiken vind/-en 
wat jij hebt gemaakt lijkt me niet echt een template systeem (ik versta daar onder een html achtige file die ingeladen wordt door het template object, waarna je een zooi variabelen in datzelfde object gooit en dan $object->parse() doet om de output te verkrijgen.). Ik krijg de indruk dat jouw code meer een verzameling functies is die html uitpoept? Ik kan het mis hebben en zelf het verschil niet helemaal zien, ik vind het moeilijk om uit te leggen  |
Geqxon | zaterdag 12 januari 2008 @ 21:18 |
Juist, maar ik was even bang dat ik de syntax verkeerd had. Ik heb hier ooit eens een OO stukje code gezet, maar toen werd hij verteld dat dat achterhaald was en het tegenwoordig met PHP 5.0 mooier kan. :)
En ja, wat dit doet is een object aanmaken, daar gooi ik wat gegevens naartoe (html-headers, paragrafen, tabellen), en als ik getOutput() uitvoer krijg ik een string met HTML. Hij laad inderdaad geen externe template in, aangezien dat voor mij onnodig is. Mijn opmaak en HTML zijn toch gescheiden, een voorbeeld van bovenstaande logfile pagina:
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 | <!DOCTYPE [...]> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="nl"> <head> <title>Portfolio - Logfile</title> <link rel="stylesheet" type="text/css" href="include/stylesheet.css" /> <script type="text/javascript" src="include/javascript.js"></script> </head> <body> <h1>Mijn portfolio</h1> <ul class="menu"> [...] <li><a href="logfile.php">Logfile</a></li> [...] </ul> <h2>Recent activity</h2> <p>In the [...] place:</p> <table> [...] </table> <p class="footer">© 2008</p> </body> </html> |
Om daar nou een template voor te parsen. :P |
ralfie | zaterdag 12 januari 2008 @ 22:03 |
Ja, ok, daar heb je gelijk in 
wat syntax betreft, geen idee, dat is voor mij meestal gwn proberen, ik gebruik persoonlijk niet zoveel OO
php5 heeft wel wat geile OO functies en regeltjes erbij gekregen, maar geen waarvan ik denk dat jij er voor een gebruik als dit iets aan zal hebben. |
Farenji | zaterdag 12 januari 2008 @ 22:12 |
quote:Op zaterdag 12 januari 2008 20:06 schreef Geqxon het volgende:Om mijn layout te maken heb ik hetvolgende geschreven: [ code verwijderd ] Het aanmaken van een pagina gaat nu als volgt: [ code verwijderd ] Mijn vragen: Maak ik nu correct gebruik van OO in PHP? Is dit een fatsoenlijke manier om een template systeem op te zetten? Ik begrijp je functies niet, bijv "addParagraph", waar voegt ie dan een paragraaf toe? Aan het einde? Aan het begin? Ergens in het midden? Lijkt me weinig flexibel, hoe dan ook.
En een header, dat is voor mij meestal een http header (bijv "Content-type: text/html"), de doctype is gewoon deel van de html.
Ik heb het idee dat je het jezelf moeilijker maakt dan noodzakelijk, waarom niet gewoon een template gebruiken die je inlaadt? Hier loop je jezelf alleen maar te beperken. Object georienteerd programmeren is niet iets dat "moet" maar het is iets dat je leven als programmeur makkelijker maakt en zorgt voor duidelijke structuur die je later ook makkelijk kan hergebruiken. De structuur die je hier hebt is veel te specifiek en te beperkt - misschien bruikbaar voor die ene applicatie maar voor een andere mag je het weer opnieuw doen. Dat is zonde. |
Geqxon | zaterdag 12 januari 2008 @ 22:24 |
quote:Op zaterdag 12 januari 2008 22:12 schreef Farenji het volgende:[..] Ik begrijp je functies niet, bijv "addParagraph", waar voegt ie dan een paragraaf toe? Aan het einde? Aan het begin? Ergens in het midden?  Lijkt me weinig flexibel, hoe dan ook. En een header, dat is voor mij meestal een http header (bijv "Content-type: text/html"), de doctype is gewoon deel van de html. Ik heb het idee dat je het jezelf moeilijker maakt dan noodzakelijk, waarom niet gewoon een template gebruiken die je inlaadt? Hier loop je jezelf alleen maar te beperken. Object georienteerd programmeren is niet iets dat "moet" maar het is iets dat je leven als programmeur makkelijker maakt en zorgt voor duidelijke structuur die je later ook makkelijk kan hergebruiken. De structuur die je hier hebt is veel te specifiek en te beperkt - misschien bruikbaar voor die ene applicatie maar voor een andere mag je het weer opnieuw doen. Dat is zonde. Bedankt, hier heb ik wat aan. 
De opmaak gaat via CSS, dus een template inladen is hier niet nodig.
[ Bericht 4% gewijzigd door Geqxon op 12-01-2008 22:29:52 ] |
Xcalibur | zaterdag 12 januari 2008 @ 22:26 |
quote:Op zaterdag 12 januari 2008 11:06 schreef autocue het volgende:Een manier om zowel de performance te houden van een grote batch queries als het kunnen achterhalen is het zetten van een flag (of een timestamp) op je duplicaat tabelrow. Je zou bijvoorbeeld zoiets kunnen doen als : [ code verwijderd ] Niet supernetjes en het werkt alleen onder MySQL, maar 't doet (als 't goed is) z'n werk  . Ik begrijp niet precies wat je bedoelt, maar ik vind op zich de timestamp-suggestie niet onaardig.... Alleen heb ik dan juist alle niet-gewijzigde records te pakken, wat niet per se hetzelfde is als alle duplicaten... |
Farenji | zaterdag 12 januari 2008 @ 22:52 |
quote: De opmaak gaat eigenliijk per definitie via css, daar is css voor, maar de structuur... hoe doe je dat dan? |
Geqxon | zaterdag 12 januari 2008 @ 23:02 |
quote:Op zaterdag 12 januari 2008 22:52 schreef Farenji het volgende:[..] De opmaak gaat eigenliijk per definitie via css, daar is css voor, maar de structuur... hoe doe je dat dan? Die kwak ik van top-to-bottom in de body neer, en geef ik een passende class-naam mee. Dat gaat voor nu prima, een stukje hierboven staat een voorbeeld hoe ik met deze class een pagina opbouw.  |
Tarabass | zaterdag 12 januari 2008 @ 23:38 |
quote:Op zaterdag 12 januari 2008 23:02 schreef Geqxon het volgende:[..] Die kwak ik van top-to-bottom in de body neer, en geef ik een passende class-naam mee. Dat gaat voor nu prima, een stukje hierboven staat een voorbeeld hoe ik met deze class een pagina opbouw.  Als je niet gaat positioneren via je class maar dat static via css gaat doen wat is dan nog het doel van de class? Imo wordt het pas bruikbaar als je alle css-styles meegeeft in de tags in het html-bestand. Anders kun je beter een template aanmaken en die elke keer gebruiken.
Laat maar en niet goed gelezen, classes meegeven in de tag kan natuurlijk ook al krijg je dan wel enorm stylesheets als je alle opties sowieso moet aanmaken.. |
autocue | zondag 13 januari 2008 @ 02:14 |
quote:Op zaterdag 12 januari 2008 22:26 schreef Xcalibur het volgende:[..] Ik begrijp niet precies wat je bedoelt, maar ik vind op zich de timestamp-suggestie niet onaardig.... Alleen heb ik dan juist alle niet-gewijzigde records te pakken, wat niet per se hetzelfde is als alle duplicaten... Als je de MySQL ON DUPLICATE functionaliteit gebruikt kun je juist de duplicaten markeren en deze dus later selecteren, daar doelde ik op . |
saban | zondag 13 januari 2008 @ 02:22 |
Heeft het nut om LIMIT 1 te gebruiken bij een UPDATE wanneer je zeker bent dat de limit ook altijd 1 is? Of is het overbodig? |
Geqxon | zondag 13 januari 2008 @ 02:23 |
quote:Op zondag 13 januari 2008 02:22 schreef saban het volgende:Heeft het nut om LIMIT 1 te gebruiken bij een UPDATE wanneer je zeker bent dat de limit ook altijd 1 is? Of is het overbodig? Depends. Want als er dan toch stiekem ooit 2 records zijn, weet je niet zeker of hij wel de goede van de twee update. Als je dan toch een LIMIT 1 doet, gelijk ook maar even een ORDER BY erbij, zodat hij wel de "beste" van de twee pakt.
Verder kan het handig zijn voor als er ooit iets goed fout gaat, en hij maar 1 record verpest, in plaats van je complete tabel.  |
saban | zondag 13 januari 2008 @ 02:32 |
Het kan niet zo zijn dat er twee zelfde records zijn, hij zoekt/select op een uniek id. Mijn vraag was meer van, heeft het snelheidswinst, dus wanneer hij de eerste record heeft gevonden niet meer naar een tweede zoekt (die is er toch niet). |
Xcalibur | zondag 13 januari 2008 @ 11:39 |
Het zoeken op een geindexeerd ID gaat echt onwaarschijnlijk snel, dus ik vermoed dat de UPDATE zelf de bottleneck is zeg maar.... het toevoegen van een LIMIT zal wellicht *iets* uitmaken, maar dan heb je het toch wel over (tien?)duizenden van seconden denk ik...
Maak anders een een benchmarkje, waarin je beide varianten 10.000 draait en de tijd bijhoudt  |
Xcalibur | zondag 13 januari 2008 @ 11:41 |
quote:Op zondag 13 januari 2008 02:14 schreef autocue het volgende:Als je de MySQL ON DUPLICATE functionaliteit gebruikt kun je juist de duplicaten markeren en deze dus later selecteren, daar doelde ik op  . Ik ga d'r even naar kijken  Maar voor het goede moet je dan wel de duplicaten overschijven in je database, omdat je anders de oude informatie uit je database haalt, terwijl die niet per se hetzelfde is als de informatie in je CSV (de unieke combinatie is wel hetzelfde natuurlijk, maar de andere velden misschien niet). En eigenlijk wil je de informatie uit je CSV weten...
Aan de andere kant: ik heb nu een unieke index op firstname + lastname + email, dus als ik dat laat zien weet je op zich ook wel genoeg 
Edit: heb er inmiddels naar gekeken. Volgens mij ontkom je er niet aan om een extra kolom, zoals in jouw voorbeeld? Op zich geen ramp, maar ook niet de mooiste oplossing ... Wat had jij voor ideeën over het bijhouden met een timestamp? Dat lijkt me niet zo betrouwbaar?
[ Bericht 13% gewijzigd door Xcalibur op 13-01-2008 12:05:28 ] |
LeeHarveyOswald | zondag 13 januari 2008 @ 13:42 |
quote:Op zaterdag 12 januari 2008 19:47 schreef Tarabass het volgende:[..] Ja, hier is 'ie nu ook weer goed. Ik had trouwens de <p>-tags gecommentariseerd maar als je in css de p-tag een margin van 0 meegeeft moet het wel goed gaan in beide browsers. Margin wordt standaard in verschillende browsers per tag in verschillende afstanden weergegeven wat de site lelijk kan maken. Door de margin zelf in te stellen voorkom je dat en is de margin overal hetzelfde. Succes verder met je site! Ik zag het! Anders viel in IE het menu over de titelkop...
Nogmaals heel erg bedankt  |
saban | zondag 13 januari 2008 @ 18:29 |
quote:Op zondag 13 januari 2008 11:39 schreef Xcalibur het volgende:Het zoeken op een geindexeerd ID gaat echt onwaarschijnlijk snel, dus ik vermoed dat de UPDATE zelf de bottleneck is zeg maar.... het toevoegen van een LIMIT zal wellicht *iets* uitmaken, maar dan heb je het toch wel over (tien?)duizenden van seconden denk ik... Maak anders een een benchmarkje, waarin je beide varianten 10.000 draait en de tijd bijhoudt  Duidelijk, thanks  |
Flaccid | maandag 14 januari 2008 @ 12:54 |
Als ik een simpel php servertje op mn pc wil instaleren, is dat dan mogelijk zonder dat dat ding altijd loopt? Dat ik hem alleen run wanneer nodig? Zijn er nog verschillende manieren om zon php server te maken? Ik wil hem gewoon om wat scriptjes te testen... |
Farenji | maandag 14 januari 2008 @ 13:09 |
quote:Op maandag 14 januari 2008 12:54 schreef Flaccid het volgende:Als ik een simpel php servertje op mn pc wil instaleren, is dat dan mogelijk zonder dat dat ding altijd loopt? Dat ik hem alleen run wanneer nodig? Zijn er nog verschillende manieren om zon php server te maken? Ik wil hem gewoon om wat scriptjes te testen... Je kan de server als een service installeren en daarvan kun je aangeven of die automatisch of handmatig gestart moet worden. |
#ANONIEM | maandag 14 januari 2008 @ 13:11 |
quote:Op maandag 14 januari 2008 12:54 schreef Flaccid het volgende:Als ik een simpel php servertje op mn pc wil instaleren, is dat dan mogelijk zonder dat dat ding altijd loopt? Dat ik hem alleen run wanneer nodig? Zijn er nog verschillende manieren om zon php server te maken? Ik wil hem gewoon om wat scriptjes te testen... www.wampserver.com, voor windows, bevat alles wat nodig is om gelijk te beginnen. Kan je zelf aan/uit zetten. |
Flaccid | maandag 14 januari 2008 @ 13:37 |
quote: Bedankt, ga het zo eens uitchecken!
Als je in een mysql table een row met auto_increment hebt, kan je deze waarde dan updaten naar iets anders zonder die auto increment?
[ Bericht 13% gewijzigd door Flaccid op 14-01-2008 14:01:31 ] |
DaFrenk | maandag 14 januari 2008 @ 14:07 |
Iemand een tip hoe ik een eenvoudige taalkeuze mogelijkheid kan bouwen?
Op het moment include ik een van de 2 mogelijke talen door middel van de controle van een sessie. In die sessie sla ik de keuze van de taal op.
Echter moet ik dus een knopje krijgen die een bepaalde waarde toekent aan die sessie. Ik zat te denken aan een ?language=nl in de URL toe te voegen, en die uit te lezen in de top van de code door te submitten naar PHP_SELF. Echter hebben enkele pagina's weer bepaalde waardes in de URL meegegeven, en anderen weer niet.
Dus dacht ik aan een 'toggle' pagina. De huidige URL wordt opgeslagen in een sessie waarna je naar een pagina gaat die aan de hand van de ?language=XX in de url de sessie waarde veranderd en hij je weer terug redirect naar de URL in de sessie.
Dat moet in principe werken, maar misschien is er nog een veel betere manier die ik niet ken  |
HuHu | maandag 14 januari 2008 @ 14:14 |
Opslaan in een sessie is een goede optie. Als je het via de URL wilt meegeven kan dat bijvoorbeeld middels de http_build_query() functie. Het resultaat daarvan kun je gebruiken na de ? in de URL.
1 2 3 4 5 6 7 8 | <?php $data = array('foo'=>'bar', 'baz'=>'boom', 'cow'=>'milk', 'php'=>'hypertext processor');
echo http_build_query($data); // foo=bar&baz=boom&cow=milk&php=hypertext+processor ?> |
Bron: http://php.net/http_build_query |
Flaccid | maandag 14 januari 2008 @ 14:40 |
quote:Op maandag 14 januari 2008 14:14 schreef HuHu het volgende:Opslaan in een sessie is een goede optie. Als je het via de URL wilt meegeven kan dat bijvoorbeeld middels de http_build_query() functie. Het resultaat daarvan kun je gebruiken na de ? in de URL. [ code verwijderd ] Bron: http://php.net/http_build_query Kan je een login systeem ook het beste met sessies doen? Want ik wil nog een login systeem in mijn cms doen uiteraard. |
DaFrenk | maandag 14 januari 2008 @ 14:42 |
Ik denk trouwens dat ik i.p.v. de taal in de sessie op te slaan gebruik ga maken van een cookie, dan blijft de keuze natuurlijk onthouden.
En ik denk dat ik dan toch maar gebruik ga maken van een toggle pagina die dan weer redirect naar de pagina waar hij vandaan kwam. Ik zou het anders ook niet weten. |
DaFrenk | maandag 14 januari 2008 @ 14:44 |
quote:Op maandag 14 januari 2008 14:40 schreef Flaccid het volgende:[..] Kan je een login systeem ook het beste met sessies doen? Want ik wil nog een login systeem in mijn cms doen uiteraard. Zelf maak ik ook gebruik van een sessie bij een zelfgebouwd CMS. Ik controleer dan of die sessie bestaat en of de waarde juist is, en dan geef ik pas de content weer. |
Flaccid | maandag 14 januari 2008 @ 15:08 |
quote:Op maandag 14 januari 2008 14:44 schreef DaFrenk het volgende:[..] Zelf maak ik ook gebruik van een sessie bij een zelfgebouwd CMS. Ik controleer dan of die sessie bestaat en of de waarde juist is, en dan geef ik pas de content weer. Ik heb ooit es iets met sessies gedaan maar snapte er niets van. Weet iemand goede tut? |
Farenji | maandag 14 januari 2008 @ 16:15 |
quote:Op maandag 14 januari 2008 14:07 schreef DaFrenk het volgende:Iemand een tip hoe ik een eenvoudige taalkeuze mogelijkheid kan bouwen? Op het moment include ik een van de 2 mogelijke talen door middel van de controle van een sessie. In die sessie sla ik de keuze van de taal op. Echter moet ik dus een knopje krijgen die een bepaalde waarde toekent aan die sessie. Ik zat te denken aan een ?language=nl in de URL toe te voegen, en die uit te lezen in de top van de code door te submitten naar PHP_SELF. Echter hebben enkele pagina's weer bepaalde waardes in de URL meegegeven, en anderen weer niet. Dus dacht ik aan een 'toggle' pagina. De huidige URL wordt opgeslagen in een sessie waarna je naar een pagina gaat die aan de hand van de ?language=XX in de url de sessie waarde veranderd en hij je weer terug redirect naar de URL in de sessie. Dat moet in principe werken, maar misschien is er nog een veel betere manier die ik niet ken  Zoals ik het laatst opgelost heb: klikken op een vlaggetje laadt het script met als enige param language=blaat. Het script ziet de language param, zet de juiste taal in de sessie, en doet een redirect naar de referrer (die lees je gewoon uit uit de server vars), waar wel voor de zekerheid een evt language param uit is gefilterd (een eeuwige circulaire redirect is niet zo fijn namelijk). Op deze manier hoef je je geen zorgen te maken om eventuele andere params die al in de url staan.
Bovenaan lees je dan gewoon de taal uit uit de sessie et voila. |
FrozenOne23 | maandag 14 januari 2008 @ 16:15 |
quote:Op maandag 14 januari 2008 13:37 schreef Flaccid het volgende:[..] Bedankt, ga het zo eens uitchecken! Als je in een mysql table een row met auto_increment hebt, kan je deze waarde dan updaten naar iets anders zonder die auto increment? Kan wel, maar dan gaat hij de volgende keer verder tellen vanaf dat nummer. Laten we zeggen dat je 2 records er in hebt staan met ID 1 en ID 2, en je voegt er een in met ID 5, dan gaat hij bij de volgende rij verder met ID 6. |
DaFrenk | maandag 14 januari 2008 @ 16:37 |
quote:Op maandag 14 januari 2008 16:15 schreef Farenji het volgende:[..] Zoals ik het laatst opgelost heb: klikken op een vlaggetje laadt het script met als enige param language=blaat. Het script ziet de language param, zet de juiste taal in de sessie, en doet een redirect naar de referrer (die lees je gewoon uit uit de server vars), waar wel voor de zekerheid een evt language param uit is gefilterd (een eeuwige circulaire redirect is niet zo fijn namelijk). Op deze manier hoef je je geen zorgen te maken om eventuele andere params die al in de url staan. Bovenaan lees je dan gewoon de taal uit uit de sessie et voila. Aight! Zo heb ik het nu ook gedaan. Vroeg me gewoon af of er betere methodes waren. Zijn er misschien wel, maar dit functioneerd eigenlijk prima. |
Pizzahut | maandag 14 januari 2008 @ 17:15 |
zeg ik heb een vraagje.
dit is mijn huidig inlog systeem:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php session_start(); if(!empty($_POST)){ include("dbcon.php"); $wachtwoord_md = md5($_POST["wachtwoord"]); $query = "SELECT * FROM gebruiker WHERE Gebruikersnaam='" . $_POST["gebruikersnaam"] ."' AND Wachtwoord='". $wachtwoord_md ."'";
$result = mysql_query($query);
if(mysql_num_rows($result) > 0){ $user = $_POST["gebruikersnaam"]; $_SESSION['user'] = $user; $_SESSION['wachtwoord'] = $wachtwoord_md; header("Location: shout.php"); exit(); } else{ header("Location: index.php"); } } ?> |
nu werk ik met sessies om te controleren of iemand een pagina mag zien. nu wil ik dit veranderen dmv een rank. dus niet
1 | $_SESSION['user'] == "pizzahut" |
maar
1 | $_SESSION['rank'] == "admin" |
nu heb ik in de database een rank veld aangemaakt en geprobeert deze een sessie te geven maar wil niet lukken. kan iemand mij verder helpen? |
Flaccid | maandag 14 januari 2008 @ 17:20 |
quote:Op maandag 14 januari 2008 16:15 schreef FrozenOne23 het volgende:[..] Kan wel, maar dan gaat hij de volgende keer verder tellen vanaf dat nummer. Laten we zeggen dat je 2 records er in hebt staan met ID 1 en ID 2, en je voegt er een in met ID 5, dan gaat hij bij de volgende rij verder met ID 6. ok. Het gaat bij mij om de volgorde van een aantal items. stel ik heb items met ID1 ,2 en 3, en ik wil van 3 -> 1 maken en van 1 -> 3 maken, dan gaat dat toch goed?
Hoe kan ik trouwens makkelijk checken of een rij variables een value heeft? laten we zeggen ik heb $a $b $c $d. Hoe kan ik makeklijk kijken of ze iets bevatten? Is daar een handig ding voor? met 1 tegelijk is het nog met if te doen, maar ik heb er 7, dus dat wordt een warboel! Dit is mijn functie tot nu toe:
1 2 3 4 5 6 7 8 9 10 11 | <?php function checkvalue($variable,$text) { if($variable==''){ echo $text; } else{ echo $variable; } } ?> |
waarbij $text de tekst is om te weergeven of ie leeg is. functies zijn handig!
[ Bericht 15% gewijzigd door Flaccid op 14-01-2008 17:26:58 ] |
super-muffin | maandag 14 januari 2008 @ 17:37 |
Ik heb een heel klein vraagje: Hoe kan ik er voor zorgen dat als iemand mijn website bezoek door http://mijnsite.nl in te tikken op http://www.mijnsite.nl terecht komt? |
mschol | maandag 14 januari 2008 @ 17:42 |
quote: http://www.neohide.com/ht(...)w-domain-name-prefix htaccess + mod_rewrite  |
DaFrenk | maandag 14 januari 2008 @ 17:42 |
quote: Hm, bij PCExtreme kon je dat apart aangeven ergens op hun site. Dus misschien moet je even bij je hoster vragen?
Edit: Ah, er is al een ander antwoord  |
Muzic.nl | maandag 14 januari 2008 @ 17:44 |
quote:Op maandag 14 januari 2008 17:20 schreef Flaccid het volgende:[..] ok. Het gaat bij mij om de volgorde van een aantal items. stel ik heb items met ID1 ,2 en 3, en ik wil van 3 -> 1 maken en van 1 -> 3 maken, dan gaat dat toch goed? Hoe kan ik trouwens makkelijk checken of een rij variables een value heeft? laten we zeggen ik heb $a $b $c $d. Hoe kan ik makeklijk kijken of ze iets bevatten? Is daar een handig ding voor? met 1 tegelijk is het nog met if te doen, maar ik heb er 7, dus dat wordt een warboel! Dit is mijn functie tot nu toe: [ code verwijderd ] waarbij $text de tekst is om te weergeven of ie leeg is. functies zijn handig! Array maken en met een loop langsgaan of er lege values bijzitten. |
Flaccid | maandag 14 januari 2008 @ 17:56 |
ik heb nu een stukje code: dit is nogal rommelig gecode denk ik. Hoe kan ik dit slimmer aanpakken?
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 | <?php $name = $_POST['name']; $title = $_POST['title']; $shortlink = $_POST['shortlink']; $linkname = $_POST['linkname']; $content = $_POST['content']; $homepage = $_POST['homepage']; $showlink = $_POST['showlink'];
function checkvalue($variable,$text) { if($variable==''){ echo '<span class="warning">'.$text.'</span>'; } else{ echo $variable; } };
function createrow($coltitle,$colvar) { echo '<tr>'; echo '<td>'.$coltitle.'</td>'; echo '<td>'; checkvalue($colvar,$coltitle.' niet ingevoerd'); echo '</td>'; echo '</tr>';
}
$varlist = array(); $varlist['name'] = 'Naam'; $varlist['title'] = 'Title'; $varlist['shortlink'] = 'Shortlink'; $varlist['linkname'] = 'Linkname';
echo' <table width="100%" border="0" cellspacing="0" cellpadding="0">'; foreach($varlist as $var => $caption) { createrow($caption,$name); } echo' </table> ' ?> |
ik php nog niet zo lang
[ Bericht 2% gewijzigd door Flaccid op 14-01-2008 18:01:53 ] |
HuHu | maandag 14 januari 2008 @ 18:09 |
Ik vind 't er niet zo beroerd uit zien hoor Flaccid. Je zou wel wat meer witruimte kunnen gebruiken, bijvoorbeeld binnen je if's:
1 2 3 4 5 6 7 8 9 10 | <?php function checkvalue($variable,$text) { if($variable=='') { echo '<span class="warning">'.$text.'</span>'; } else { echo $variable; } } ?> |
De ; aan het einde van de functie hoort daar niet en de inspringing is zo wat beter. Een lijstje variabelen kun je nog zo doen:
1 2 3 4 5 6 | <?php $name = $_POST['name']; $title = $_POST['title']; $shortlink = $_POST['shortlink']; $linkname = $_POST['linkname']; ?> |
Meer over coding-stanards vind je hier: http://pear.php.net/manual/en/standards.php |
super-muffin | maandag 14 januari 2008 @ 18:13 |
quote: Bedankt. Tis gelukt. |
Flaccid | maandag 14 januari 2008 @ 18:18 |
quote:Op maandag 14 januari 2008 18:09 schreef HuHu het volgende:Ik vind 't er niet zo beroerd uit zien hoor Flaccid. Je zou wel wat meer witruimte kunnen gebruiken, bijvoorbeeld binnen je if's: [ code verwijderd ] De ; aan het einde van de functie hoort daar niet en de inspringing is zo wat beter. Een lijstje variabelen kun je nog zo doen: [ code verwijderd ] Meer over coding-stanards vind je hier: http://pear.php.net/manual/en/standards.php bedankt voor de tips. ik had het ook over de manier waarop het geprogrammeerd is. Want nu weet ik zelf ff niet meer wat ik doe.
Dit heb ik er nu van gemaakt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 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 | <?php $name = $_POST['name']; $title = $_POST['title']; $shortlink = $_POST['shortlink']; $linkname = $_POST['linkname']; $content = $_POST['content']; $homepage = $_POST['homepage']; $showlink = $_POST['showlink'];
function checkvalue($variable,$text) { if($variable=='') { echo '<span class="warning">'.$text.' niet ingevoerd</span>'; } else { echo $variable; } };
function createrow($coltitle,$colvar) { echo '<tr>'; echo '<td>'.$coltitle.'</td>'; echo '<td>'; checkvalue($colvar,$coltitle); echo '</td>'; echo '</tr>';
}
$varlist = array(); $varlist[$name] = 'Naam'; $varlist[$title] = 'Titel'; $varlist[$shortlink] = 'Shortlink'; $varlist[$linkname] = 'Linkname'; $varlist[$content] = 'Content';
echo' <table width="100%" border="0" cellspacing="0" cellpadding="0">';
foreach($varlist as $var => $caption) { createrow($caption,$var); }
echo' <tr> <td>Homepage</td> <td>'; if($homepage=='on'){echo'Ja';}else{echo'Nee';} ;echo '</td> </tr> <tr> <td width="40%">Showlink</td> <td>'; if($showlink=='on'){echo'Ja';}else{echo'Nee';} ;echo '</td> </tr> </table> ' ?> |
Nu vallen al die rijen weg. :{ Heel wazig. Waarom is dat? (de tabbelrijen die die aanmaakt he) |
Light | maandag 14 januari 2008 @ 18:23 |
quote:Op maandag 14 januari 2008 16:15 schreef Farenji het volgende:[..] Zoals ik het laatst opgelost heb: klikken op een vlaggetje laadt het script met als enige param language=blaat. Het script ziet de language param, zet de juiste taal in de sessie, en doet een redirect naar de referrer (die lees je gewoon uit uit de server vars), waar wel voor de zekerheid een evt language param uit is gefilterd (een eeuwige circulaire redirect is niet zo fijn namelijk). Op deze manier hoef je je geen zorgen te maken om eventuele andere params die al in de url staan. Bovenaan lees je dan gewoon de taal uit uit de sessie et voila. Uiteraard moet je controleren of de taal wel een geldige waarde krijgt. En of de referrer wel meegegeven is bij de aanroep (en naar je eigen server verwijst). De meeste waarden in $_SERVER moet je net zo wantrouwend behandelen als $_GET en $_POST. |
cablegunmaster | maandag 14 januari 2008 @ 19:11 |
ik ben net begonnen met een phpnuke ^^ iemand tips? :p ik weet dat het een brak systeem is maar het is redelijk complex en een stuk beter dan een html site ( code die ik wel beheers) >.> iemand nog ideeen voor als ik bezig ga of proggies die ik mss kan instaleren of leuk zijn ? |
Geqxon | maandag 14 januari 2008 @ 19:15 |
1 2 3 4 5 6 7 8 9 10 | <?php if($variable=='') { echo '<span class="warning">'.$text.' niet ingevoerd</span>'; } else { echo $variable; } ?> |
naar
1 2 3 | <?php echo (empty($variable)) ? '<span class="warning">'.$text.' niet ingevoerd</span>' : $variabele; ?> |
Korter, maar minder leesbaar. Eventueel:
1 2 3 4 5 6 | <?php if(empty($variable)) echo '<span class="warning">'.$text.' niet ingevoerd</span>'; else echo $variable; ?> |
Verder vind ik het niet netjes als functies zelf maar wat gaan echo-en, ik vind het mooier als ze een return waarde hebben. Voorbeeld:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?php function checkvalue($variable,$text) { if($variable=='') { echo '<span class="warning">'.$text.' niet ingevoerd</span>'; } else { echo $variable; } }; function createrow($coltitle,$colvar) { echo '<tr>'; echo '<td>'.$coltitle.'</td>'; echo '<td>'; checkvalue($colvar,$coltitle); echo '</td>'; echo '</tr>';
} ?> |
word dan:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?php function checkvalue($variable,$text) { if($variable=='') { return '<span class="warning">'.$text.' niet ingevoerd</span>'; } else { return $variable; } }; function createrow($coltitle,$colvar) { return ' <tr> <td>'.$coltitle.'</td> <td>' . checkvalue($colvar, $coltitle) . '</td> </tr> '; } ?> |
Edit
Ook hier valt wat aan te pimpen:
1 2 3 | <?php echo ($homepage=='on') ? 'Ja' : 'Nee'; ?> |
|
Flaccid | maandag 14 januari 2008 @ 20:20 |
Het enige wat er nu uit komt, uit die foreach, wat heer vaag is, is Content. De laatste uit mn array. |
Farenji | maandag 14 januari 2008 @ 20:38 |
quote:Op maandag 14 januari 2008 19:15 schreef Geqxon het volgende:[ code verwijderd ] naar [ code verwijderd ] Korter, maar minder leesbaar. Eventueel: [ code verwijderd ] Verder vind ik het niet netjes als functies zelf maar wat gaan echo-en, ik vind het mooier als ze een return waarde hebben. Voorbeeld: [ code verwijderd ] word dan: [ code verwijderd ] EditOok hier valt wat aan te pimpen: [ code verwijderd ] Ik vind het heel lelijk als er html tussen de applicatiecode staat. Die hoort daar niet. Functies geven (references naar) variabelen terug, die je vervolgens in een template object plempt. In die templates staat al je html, nergens anders. En in die templates komt weer geen php/andere applicatie logica voor. Maar aan de andere kant is php juist ontworpen om tussen de html te staan en andersom, daarom vind ik het ook zo'n ranzig taaltje. Het zou niet moeten mogen. Dat soort praktijken zorgen voor rampzalige onderhoudbaarheid van je applicaties. |
Dzy | maandag 14 januari 2008 @ 22:17 |
Ja dat is wel zo, maar als je nog niet zo lang PHP gebruikt is dat misschien nog wat teveel van het goede vind je niet  |
Geqxon | maandag 14 januari 2008 @ 22:21 |
quote:Op maandag 14 januari 2008 20:38 schreef Farenji het volgende:[..] Ik vind het heel lelijk als er html tussen de applicatiecode staat. Die hoort daar niet. Functies geven (references naar) variabelen terug, die je vervolgens in een template object plempt. In die templates staat al je html, nergens anders. En in die templates komt weer geen php/andere applicatie logica voor. Maar aan de andere kant is php juist ontworpen om tussen de html te staan en andersom, daarom vind ik het ook zo'n ranzig taaltje. Het zou niet moeten mogen. Dat soort praktijken zorgen voor rampzalige onderhoudbaarheid van je applicaties. Mooi en aardig, maar of het in de praktijk haalbaar is? Dan zou je elk klein stukje HTML code ergens in een template hebben moeten zitten, en heb je enorm veel classes danwel objecten... |
Dzy | maandag 14 januari 2008 @ 22:25 |
Hangt een beetje van je applicatie af maar bij de meeste dingen probeer ik nu standaard frameworks te gebruiken, dan houd je het allemaal heel mooi gescheiden en echt duizend keer onderhoudbaarder. |
Geqxon | maandag 14 januari 2008 @ 22:55 |
Of je doet het als Smarty, maar dat is nog lelijker dan PHP in je opmaak:
1 2 3 4 5 6 7 8 9 | {section name=outer loop=$FirstName} {if $smarty.section.outer.index is odd by 2} {$smarty.section.outer.rownum} . {$FirstName[outer]} {$LastName[outer]} {else} {$smarty.section.outer.rownum} * {$FirstName[outer]} {$LastName[outer]} {/if} {sectionelse} none {/section} |
|
Light | maandag 14 januari 2008 @ 23:07 |
quote:Op maandag 14 januari 2008 22:21 schreef Geqxon het volgende:[..] Mooi en aardig, maar of het in de praktijk haalbaar is? Dan zou je elk klein stukje HTML code ergens in een template hebben moeten zitten, en heb je enorm veel classes danwel objecten... Je zult altijd wat logica nodig hebben om te bepalen wat je laat zien. Met IF-structuren en wat loopjes moet je een heel eind kunnen komen, al dan niet in combinatie met opmaakfuncties. Maar HTML en het verzamelen van data hoort niet echt bij elkaar, naar mijn mening dan. |
Farenji | maandag 14 januari 2008 @ 23:10 |
quote:Op maandag 14 januari 2008 22:21 schreef Geqxon het volgende:[..] Mooi en aardig, maar of het in de praktijk haalbaar is? Dan zou je elk klein stukje HTML code ergens in een template hebben moeten zitten, en heb je enorm veel classes danwel objecten... Uiteraard is het haalbaar, kwestie van een beetje nadenken over je applicatie, je templates goed opzetten en content goed scheiden van opmaak en structuur. Templates hoeven niet ingewikkeldere dingen te doen dan wat variabelen weer te geven, wat simpele if/then statements en misschien een array in een loopje in html omzetten. Het is niet moeilijk, het is een manier van denken, het wordt er juist simpeler door. JUIST beginners zouden het beste meteen zo kunnen beginnen, slechte gewoontes zijn moeilijker af te leren dan goede gewoontes aan te leren zijn. |
Xcalibur | maandag 14 januari 2008 @ 23:21 |
quote:Op maandag 14 januari 2008 23:07 schreef Light het volgende:Je zult altijd wat logica nodig hebben om te bepalen wat je laat zien. Met IF-structuren en wat loopjes moet je een heel eind kunnen komen, al dan niet in combinatie met opmaakfuncties. Maar HTML en het verzamelen van data hoort niet echt bij elkaar, naar mijn mening dan. Dat dus  Verder vind ik Smarty een prima systeem  |
Xcalibur | maandag 14 januari 2008 @ 23:25 |
quote:Op maandag 14 januari 2008 17:20 schreef Flaccid het volgende:ok. Het gaat bij mij om de volgorde van een aantal items. stel ik heb items met ID1 ,2 en 3, en ik wil van 3 -> 1 maken en van 1 -> 3 maken, dan gaat dat toch goed? Als je de volgorde wilt bepalen moet je een kolom toevoegen om dit in te doen. Je autoincrement id hiervoor misbruiken is een slecht plan. Records hebben een uniek ID met een reden, het is nou net niet de bedoeling dat je die gaat veranderen  |
Farenji | maandag 14 januari 2008 @ 23:35 |
quote:Op maandag 14 januari 2008 23:07 schreef Light het volgende:[..] Je zult altijd wat logica nodig hebben om te bepalen wat je laat zien. Met IF-structuren en wat loopjes moet je een heel eind kunnen komen, al dan niet in combinatie met opmaakfuncties. Maar HTML en het verzamelen van data hoort niet echt bij elkaar, naar mijn mening dan. Ik ben op zich een vrij erge "MVC nazi" geworden, in de zin dat ik zelf bijv never nooit html in mijn code meer zet en die dingen gescheiden houd, maar dat ben ik niet zomaar geworden. Als je een keer een echt grote applicatie hebt moeten onderhouden en uitbouwen waar die scheiding tussen html en applicatie absoluut niet is doorgevoerd, dan word je dat vanzelf. Tering wat is dat naar. Nachtmerries heb ik er van gehad. Voor een klein scriptje of een beginnersprojectje is het niet zo van belang maar als je iets geeft om onderhoudbaarheid en uitbreidbaarheid dan is het essentieel. Maar dat zijn meestal dingen waar mensen pas later the hard way achter komen (ik ook dus). |
Geqxon | maandag 14 januari 2008 @ 23:38 |
quote:Op maandag 14 januari 2008 23:07 schreef Light het volgende:[..] Je zult altijd wat logica nodig hebben om te bepalen wat je laat zien. Met IF-structuren en wat loopjes moet je een heel eind kunnen komen, al dan niet in combinatie met opmaakfuncties. Maar HTML en het verzamelen van data hoort niet echt bij elkaar, naar mijn mening dan. Wat ik in mijn geval doe:
Data ophalen en in diverse arrays stoppen '/template/the_name_of_the_current_file.php' includen, die met de opgehaalde data een HTML pagina in elkaar zet, door constant stukjes HTML aan een object te voeren, en deze op het laatst uit te putten.
Dit kan vast ook prima met Smarty, echter wel met een hoop overhead. Voor iets simpels is wat ik nu doe meer dan genoeg. Het ligt maar net aan de grootte van het project.  |
Geqxon | maandag 14 januari 2008 @ 23:41 |
Maar Farenji, wat als je 'even vlug' bij elk menu-item dat begint met het woord "Maan", een zonnetje moet tonen, die geel is als de gebruiksnaam eindigt op een D, en groen als de gebruikersnaam eindigt op een T. Mag je dan niet bakken aan code aan je template gaan toevoegen? |
Farenji | maandag 14 januari 2008 @ 23:42 |
De overhead van smarty is behoorlijk laag hoor, templates worden gecompileerd en gecached, uiteindelijk is het gewoon vrij geoptimaliseerde php wat je uitvoert en dus echt niet langzamer dan een oplossing die je zelf inelkaar sleutelt. Wel veel krachtiger. |