quote:Op zaterdag 3 juni 2006 18:50 schreef SuperRembo het volgende:
Als je alleen de parent-child relatie vastlegt in je database, dan kan je nooit in 1 query bepalen welke nodes er allemaal bij een bepaalde parent in een tree horen. Tenzij je van te voren vast legt hoe diep de tree maximaal gaat, maar fraai wordt je query dan niet.
quote:Op zaterdag 3 juni 2006 18:52 schreef Swetsenegger het volgende:
[..]
misschien moet je eens hier naar kijken.
Ik gebruik het zelf om hierarchische menu's te maken.
Ik bedoel ook meer; de hele tabel in een array zetten (geen WHERE-statements) en daarna met php de child-parent relatie berekenen en tonen.quote:Op zaterdag 3 juni 2006 18:50 schreef SuperRembo het volgende:
Als je alleen de parent-child relatie vastlegt in je database, dan kan je nooit in 1 query bepalen welke nodes er allemaal bij een bepaalde parent in een tree horen. Tenzij je van te voren vast legt hoe diep de tree maximaal gaat, maar fraai wordt je query dan niet.
Het is helemaal geen overkill. Je tabel bestaat uit niet meer dan 3 velden: name, lft en rgt.quote:Op zaterdag 3 juni 2006 19:07 schreef Nevermind het volgende:
[..]
Ik bedoel ook meer; de hele tabel in een array zetten (geen WHERE-statements) en daarna met php de child-parent relatie berekenen en tonen.
@Swets: Bedankt voor de link. Het ziet eruit als overkill voor waar ik het voor nodig heb. Ik wil alleen een handig overzicht hebben van hoe mijn site in elkaar zit, zoals hieronder:
[afbeelding]
De layout is maar een test. Ik wil er nog wat links in zetten zodat ik makkelijk nodes kan verplaatsen, bewerken of verwijderen.
Ik werd overdonderd door alle uitgebreide queries die er stondenquote:Op zaterdag 3 juni 2006 19:10 schreef Swetsenegger het volgende:
[..]
Het is helemaal geen overkill. Je tabel bestaat uit niet meer dan 3 velden: name, lft en rgt.
En daarmee kan je alles. Met 1 query kan je alles uit je tabel trekken inc parent child relatie, oneindig diep
In het begin lijkt het heel moeilijk, maar het is inderdaad rete simpelquote:Op zaterdag 3 juni 2006 19:14 schreef Nevermind het volgende:
[..]
Ik werd overdonderd door alle uitgebreide queries die er stonden(maar dat is eigenlijk copypastewerk)
Iets beter bekeken, en het ziet er inderdaad erg handig uit. Ik ga het proberen te implementeren
Precies, heb ik ook gedaan in sommige gevallen.quote:Op zaterdag 3 juni 2006 19:15 schreef Roönaän het volgende:
jups, en voor de handigheid kan je een depth field toevoegen om dat "oneindig" diep enigszins te beperken
Wat ik me dan afvraag. Met een directe parent <--> child relatie heb je weinig updates nodig, maar wat ik van dit relationeel model heb begrepen is dat als je ergens een item wilt plaatsen, je bijvoorbeeld alle 'right' waardes moet ophogen? Is dat niet funest als je een grote database hebt met veel updates? (vb; reacties op T.net frontpage)quote:Op zaterdag 3 juni 2006 19:10 schreef Swetsenegger het volgende:
[..]
Het is helemaal geen overkill. Je tabel bestaat uit niet meer dan 3 velden: name, lft en rgt.
En daarmee kan je alles. Met 1 query kan je alles uit je tabel trekken inc parent child relatie, oneindig diep
alle lft EN rgt waardes 'rechts' van het in te voegen produkt inderdaadquote:Op zaterdag 3 juni 2006 22:25 schreef JeRa het volgende:
[..]
Wat ik me dan afvraag. Met een directe parent <--> child relatie heb je weinig updates nodig, maar wat ik van dit relationeel model heb begrepen is dat als je ergens een item wilt plaatsen, je bijvoorbeeld alle 'right' waardes moet ophogen?
Dat denk ik ook, maar reacties op een topic zou ik niet op deze manier hierarchisch opslaan. Ik denk dat dit model mooi is wanneer er meerdere levels zijn, als er alleen direkte parent <-> child relaties zijn kan je beter met een koppeltabelletje werken lijkt me.quote:Is dat niet funest als je een grote database hebt met veel updates? (vb; reacties op T.net frontpage)
quote:![]()
zkersquote:
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 | require('fpdf/fpdf.php'); class PDF extends FPDF { //Page header function Header() { $this->SetFont('Arial'); $this->Cell(0,5,'txt',B,0,'R'); $this->Ln(20); } //Page footer function Footer() { $this->SetFont('Arial','',10); $this->SetY(-15); $this->Cell(0,5,'txt',T,0,'L'); $this->Ln(20); } } //Instanciation of inherited class $pdf = new FPDF(); $pdf->AddPage(); $pdf->SetFont('Times','B',12); $pdf->Cell(40,10,'Hello World!'); $pdf->Output(); ?> |
1 2 3 | $result = mysql_query($sql_query); if(mysql_num_rows($result) < 1) {die($text); } |
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 | Error SQL query: -- phpMyAdmin SQL Dump -- version 2.8.1 -- http://www.phpmyadmin.net -- -- Host: localhost -- Generatie Tijd: 05 Jun 2006 om 19:53 -- Server versie: 5.0.21 -- PHP Versie: 5.1.4 -- -- Database: `test` -- -- -------------------------------------------------------- -- -- Tabel structuur voor tabel `producten` -- CREATE TABLE `producten` ( `item` int( 11 ) NOT NULL AUTO_INCREMENT , `naam` text CHARACTER SET ascii COLLATE ascii_bin NOT NULL , `prijs` text CHARACTER SET ascii COLLATE ascii_bin NOT NULL , PRIMARY KEY ( `item` ) ) ENGINE = MYISAM DEFAULT CHARSET = latin1 COLLATE = latin1_general_ci AUTO_INCREMENT =4; MySQL said: #1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'character set ascii collate ascii_bin NOT NULL, `prijs` text [ Back ] |
Weet je zeker dat je die compatibility goed hebt gezet? MySQL 4.0 verslikt zich in "CHARACTER SET ascii COLLATE ascii_bin".quote:Op maandag 5 juni 2006 20:00 schreef BloodhoundFromHell het volgende:
Ik heb een vraagje. Als ik een mysql database importeer krijg ik de volgende error:
[ code verwijderd ]
Ik snap er geen biet van ,want de export komt gewoon ook van een mysql database die ik lokaal heb geinstalleerd. Ik heb compatabiliy gezet op mysql 4.0 (remote draait mysql 4.0 en lokaal draai ik mysql 5.0)
ben er al uit, forum gebruikt engelse namen voor de velden...quote:Op maandag 5 juni 2006 19:57 schreef Light het volgende:
Het lijkt erop dat er een fout in de query zit. Ik kan alleen niet zien waar precies.
Ik weet niet wat dit doet, maar 'migration toolkit' geeft hoop: http://dev.mysql.com/downloads/migration-toolkit/1.0.htmlquote:Op maandag 5 juni 2006 22:32 schreef BloodhoundFromHell het volgende:
weet iemand een gratis programmatje om access databases over te zetten naar mysql?? ik kan alleen maar betaalde programmas vinden
1 |
quote:Op dinsdag 6 juni 2006 00:03 schreef Light het volgende:
Dit lijkt me een javascript / AJAX probleem, niet een php probleem. En dan preciezer bij
[ code verwijderd ]
IE en FF / Safari gebruiken verschillende methodes om dat xmlHttp ding te maken. Een leuk voorbeeld staat hier.
1 |
1 |
1 |
Hmm... goed puntquote:Op dinsdag 6 juni 2006 00:05 schreef BaggerUser het volgende:
maar FF pakt wel de andere button het enige verschil is dat submitten niet meer kan dan ?
dus i vraag me af of het een echt ajax probleem is hoor ?
hey je hebt gelijk als ik dat weglaat en het met behulp van javascrit eable en disable werkt hetquote:Op dinsdag 6 juni 2006 00:21 schreef DionysuZ het volgende:
het probleem komt me bekend voor. Ik heb het gehad bij input velden die ik had gedisabled. Die werden niet doorgegeven. Probeer eens om disabled='true' weg te laten en mbv javascript te disablen/enablen
1 2 3 | $teller = 1; // geeft niveau aan waarop gezocht gaat worden haal_niveau_lager($getoonde_cpas[$cpa_id], $teller); |
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 | { if ($teller == 5) {// meer dan 5 niveau's diep hoort niet voor te komen return $menu_array; } $vv_id_menu = $menu_array[0]; $sql = "SELECT DISTINCT <zooi velden> FROM menu WHERE hoort_bij='" . $vv_id_menu . "'"; if(!($result = mysql_query($sql))) { fout("database fout: [$sql][" . mysql_error() . "]"); } $menus = array(); while($myrow = mysql_fetch_assoc($result)) { $menus[] = array(<zooi velden>); } reset($menus); if (!empty($menus)) { $menu_array["lagere_menus"] = $menus; } print_r($menu_array); if (isset($menu_array["lagere_menus"])) { for ($j = 0; $j < count($menu_array["lagere_menus"]); $j++) { $menu_array["lagere_menus"][$j] = haal_niveau_lager($menu_array["lagere_menus"][$j], $teller+1); } } return $menu_array; } |
"Other Files" > "Binaries"quote:Op dinsdag 6 juni 2006 17:47 schreef TheUnreal het volgende:
Waar kan ik tegenwoordig de apache webserver voor win32 vinden![]()
Op apache.org staat alleen de source ?! Of ben ik nou blind..
1 2 3 4 5 6 | $configfile .= $line."\r\n"; } $fp=fopen('file.php','w+'); fwrite($fp,$configfile); fclose($fp); |
1 |
1 2 3 | 4 8 |
1 |
Dat is niet wat ik bedoel. Ik gebruik nu URLencode en decode op mijn pagina om het menu op te bouwen en dingen uit de database te halen. Ik heb nu query met een WHERE clasule waarin ik bv naar mijnmenuitems vraag, foto%27s is daar een van. Alleen kan ik deze niet uitvoeren. interpreteert MYSQL %27 als een single quote?quote:Op dinsdag 6 juni 2006 22:08 schreef Swetsenegger het volgende:
urldecode?
1 2 | $result = mysql_query($query); |
Dank je wel dat is de oplossing waar ik naar op zoek was!quote:Op dinsdag 6 juni 2006 23:03 schreef JeRa het volgende:
@ExCibular
Wat er in de URI staat wordt door PHP op de juiste manier geparset, daar hoef je je geen zorgen over te maken. Je krijgt dus gewoon een single quote in plaats van de code hiervoor (%27).
Waar je wel zorgen over moet maken is SQL injection in je queriesje moet zoiets doen:
[ code verwijderd ]
Op die manier wordt de quote op de juiste manier geëscapet
Prima opzet, door de input te valideren met een door jou gedefinieerde array voorkom je ook dat mensen iets in je query kunnen plaatsenquote:Op woensdag 7 juni 2006 00:32 schreef ExCibular het volgende:
Dat was mij idee om SQL injection tegen te gaan.
1 2 3 | echo $key." - ".$value."<br>"; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | function datetotext($date) { $time = substr($date, 11, 15); $date = substr($date, 0, 10); $now = time(); $day_time = 60*60*24; list($post_year, $post_month, $post_day) = explode("-", $date); list($post_hour, $post_minit, $post_second) = explode(":", $time); $post_date = mktime (0, 0, 0, $post_month, $post_day, $post_year); $today_date = mktime (0, 0, 0, date("m"), date("d"), date("y")); $yesterday_date = mktime (0, 0, 0, date("m"), date("d"), date("y")) - $day_time; $week_date = date("w", mktime (0, 0, 0, $post_month, $post_day, $post_year)); $today_year_time = mktime (0, 0, 0, 0, 0, date("y")); $post_year_time = mktime (0, 0, 0, 0, 0, $post_year); $dagen = array("zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"); $maanden = array(1 => "januari", 2 => "februari", 3 => "maart", 4 => "april", 5 => "mei", 6 => "juni", 7 => "juli", 8 => "augustus", 9 => "september", 10 => "oktober", 11 => "november", 12 => "december"); $post_curr_day = $dagen[intval($week_date)]; $post_curr_mnt = $maanden[intval($post_month)]; if ($post_month == "01") { $post_prev_mnt = $maanden[12]; } else { $post_prev_mnt = $maanden[intval($post_month) -1]; } if ($today_date == $post_date) { // vandaag "vandaan om 10:10" return "vandaag om " . date("H:i", mktime($post_hour, $post_minit, $post_second, $post_month, $post_day, $post_year)); } elseif ($post_date == $yesterday_date) { // gisteren " gisteren om 10:10 " return "gisteren om " . date("H:i", mktime($post_hour, $post_minit, 0, 0, $post_month, $post_day, $post_year)); } elseif ($post_year_time == $today_year_time && $post_month == date("m") -1) { // vorige maand " vorige maand op maandag 1 januari om 10:10 " return "vorige maand op " . $post_curr_day . " " . $post_day . " " . $post_prev_mnt . " om " . $post_hour . ":" . $post_minit; } elseif ($post_year_time == $today_year_time) { // zelfde jaar " op Maandag 1 januari om 10:10" return "op " . $post_curr_day . " " . $post_day . " " . $post_curr_mnt . " om " . $post_hour . ":" . $post_minit; } else { // vorig jaar " op Maandag 1 januari 1999 om 10:10" return "op " . $post_curr_day . " " . $post_day . " " . $post_curr_mnt . " " . $post_year . " om " . $post_hour . ":" . $post_minit; } } ?> |
includequote:Op woensdag 7 juni 2006 10:02 schreef Desdinova het volgende:
Ik heb een aantal stukjes code in een database staan in gewoon textformaat. Met welke functie kan ik PHP dit stukje tekst laten verwerken?
dusseh, voorbeeldje:
[ code verwijderd ]
en dan php het laten uitvoeren
function haal_niveau_lager(&$menu_array, $teller)quote:Er staat vast maar 1 klein foutje in, maar ja, wat??
eval() is het waarschijnlijkquote:Op woensdag 7 juni 2006 10:35 schreef Swetsenegger het volgende:
[..]
include
edit, ow in database.... even denken
Maar dat is natuurlijk niet zo netjes?quote:
Dat dus.quote:Op woensdag 7 juni 2006 14:57 schreef fokME2 het volgende:
Waarom heb je eigenlijk phpcode die je wil uitvoeren in je database staan?![]()
Hoe laat je de updates uitvoeren? Via de webserver? Besef dan dat alle bestanden door de webserver schrijfbaar moeten zijn, en dat dit als standaardinstelling natuurlijk niet echt veilig is om een website op te laten draaien. Beter lever je zo'n updatesysteem buiten de webroot om, waarbij er goed wordt gekeken naar de rechten van de bestandenquote:Op woensdag 7 juni 2006 10:54 schreef Swetsenegger het volgende:
Versie controlle tussen website en upgrade server werkt al. Ik zit alleen met het pushen of pullen van de update files en hoe ik dat ga aanpakken.
Op- en aanmerkingen zijn welkom
Nee, de map waar ik denk dat het probleem zit is hoger als de hoogste map waar ik met SSH kan komen...Ik hoop alleen dat er iemand bij die helpdesk zit die weet wat chmodden is, anders zal het nog wel even duren voordat de site weer werktquote:Op woensdag 7 juni 2006 16:01 schreef JeRa het volgende:
@ralfie
Met je SSH-connectie moet je gewoon kunnen inloggen en de rechten weer goed zetten. Jij kunt namelijk alle bestanden en directories waarvan jij de eigenaar bent chmodden. Kun je dit niet, dan moet jouw webhoster nog eens ernstig nadenken over hun opzet
Nee de website trekt een changelog van de update server. en de php moet vervolgens bv function.php aanpassen dmv file() en fwrite endergelijke.quote:Op woensdag 7 juni 2006 16:04 schreef JeRa het volgende:
[..]
Hoe laat je de updates uitvoeren? Via de webserver? Besef dan dat alle bestanden door de webserver schrijfbaar moeten zijn, en dat dit als standaardinstelling natuurlijk niet echt veilig is om een website op te laten draaien. Beter lever je zo'n updatesysteem buiten de webroot om, waarbij er goed wordt gekeken naar de rechten van de bestanden
Dus alle bestanden en directories moeten writable voor de webserver zijn. In het geval van een exploit kunnen kwaadwilligen dan dus eigen PHP-files wegschrijven?quote:Op woensdag 7 juni 2006 16:33 schreef Swetsenegger het volgende:
[..]
Nee de website trekt een changelog van de update server. en de php moet vervolgens bv function.php aanpassen dmv file() en fwrite endergelijke.
De webserver heeft meestal een webroot voor een website wat de hoogst mogelijke directory is waar een bezoeker bestanden mag opvragen. Door een updatescript buiten deze webroot via bv. SSH uit te voeren zou je mogelijke exploits al kunnen voorkomen, maar als je het via de website wilt doen is daar dus geen sprake van.quote:Hoe bedoel je buiten de webroot om?
Neuh, specifieke website bestanden moeten inderdaad writable zijn. Niet alles. Maar dat is inderdaad een risico ja...quote:Op woensdag 7 juni 2006 16:39 schreef JeRa het volgende:
[..]
Dus alle bestanden en directories moeten writable voor de webserver zijn. In het geval van een exploit kunnen kwaadwilligen dan dus eigen PHP-files wegschrijven?
Ik snap nog steeds niet hoe je buiten die webroot bestanden IN de webroot wilt updaten?quote:De webserver heeft meestal een webroot voor een website wat de hoogst mogelijke directory is waar een bezoeker bestanden mag opvragen. Door een updatescript buiten deze webroot via bv. SSH uit te voeren zou je mogelijke exploits al kunnen voorkomen, maar als je het via de website wilt doen is daar dus geen sprake van.
Dit is denk ik zodanig moeilijk (zeker bij meerdere websites tegelijk) dat je echt een gruwelijk goed gedocumenteerde opzet moet hebben om dit vlekkeloos voor elkaar te krijgenquote:Op woensdag 7 juni 2006 16:44 schreef Swetsenegger het volgende:
Het probleem is alleen dat elke website subtiel kan verschillen. Vandaar dat ik de update logica per website wilde schrijven en toevoegen AAN die website.
Daarom maak ik 'generic' files, die zijn voor elke website hetzelfde en zullen het meeste aanpassing vereissen. En daarnaast nog site specifieke files, welke dus met logica OP de website aangepast kunnen worden (de generic files is een kwestie van gewoon overschrijven en kan vanaf de update server).quote:Op woensdag 7 juni 2006 17:12 schreef JeRa het volgende:
[..]
Dit is denk ik zodanig moeilijk (zeker bij meerdere websites tegelijk) dat je echt een gruwelijk goed gedocumenteerde opzet moet hebben om dit vlekkeloos voor elkaar te krijgenje moet namelijk per website weten welke bestanden wat bevatten, en waar je vanaf moet blijven om de boel niet kapot te maken.
Geen, eigenlijk. Gewoon ervoor zorgen dat je geen exploits toestaat door bugvrije scripts te schrijvenquote:Op woensdag 7 juni 2006 17:21 schreef Swetsenegger het volgende:
Maar mbt de exploits, nog ideeen?
group by?quote:Op woensdag 7 juni 2006 18:09 schreef LeeHarveyOswald het volgende:
ik zit weer es vastIk wil 2 velden selecteren, waarvan 1 een naam en 1 een getal. Nu wil ik dat uiteindelijk alle getallen bij elkaar opgeteld zijn, per naam, en gesorteerd. Dus stel ik heb 3 LeeHarveyOswalds, en 2 JeRa's, dan zou ik graag de leeftijden van al deze opgeteld willen zien, gesorteerd ophoeveelheid
![]()
quote:Op woensdag 7 juni 2006 18:09 schreef LeeHarveyOswald het volgende:
ik zit weer es vastIk wil 2 velden selecteren, waarvan 1 een naam en 1 een getal. Nu wil ik dat uiteindelijk alle getallen bij elkaar opgeteld zijn, per naam, en gesorteerd. Dus stel ik heb 3 LeeHarveyOswalds, en 2 JeRa's, dan zou ik graag de leeftijden van al deze opgeteld willen zien, gesorteerd ophoeveelheid
![]()
1 2 3 4 | FROM mensen GROUP BY naam ORDER BY COUNT(naam) ASC |
Ja preciesquote:Op woensdag 7 juni 2006 17:32 schreef JeRa het volgende:
[..]
Geen, eigenlijk. Gewoon ervoor zorgen dat je geen exploits toestaat door bugvrije scripts te schrijven
Een pull vanaf de website lijkt me het beste; omdat je de administrator dan ook inzicht kunt geven in de veranderingen (en bv. een diff kunt tonen als de eigenaar wijzigingen heeft aangebracht in het scriptquote:Op woensdag 7 juni 2006 19:16 schreef Swetsenegger het volgende:
[..]
Ja precies
Of heb je een betere manier voor mij om dit aan te pakken?
Dus, push vanaf update server of pull vanaf website. Of nog iets anders?
Ik wilde de eigenaar inderdaad de mogelijkheid geven om een update niet uit te voeren. wat bedoel je met een diff?quote:Op woensdag 7 juni 2006 19:31 schreef JeRa het volgende:
[..]
Een pull vanaf de website lijkt me het beste; omdat je de administrator dan ook inzicht kunt geven in de veranderingen (en bv. een diff kunt tonen als de eigenaar wijzigingen heeft aangebracht in het script). Bij een push gaat dat nogal geforceerd en geef je de eigenaar weinig vrijheid.
Je moet rekening houden met het feit dat de webserver dus de eigenaar moet zijn van de bestanden die worden gewijzigd; dus ofwel alles onder de user van de webserver scharen of ervoor zorgen dat de webserver draait onder de juiste gebruiker. Zodra je gaat updaten alle directories en files waarbij het nodig is chmodden, aanpassen en weer terug chmodden naar een staat waarbij ze niet aanpasbaar zijn. Mogelijk vóórdat je dit proces uitvoert een .htaccess wegschrijven waarmee het onmogelijk wordt om tijdens het updateproces bestanden op te vragen
Als de eigenaar van een website die door jou wordt verzorgd in een gekke bui iets heeft aangepast in een bestand dat geüpdatet dient te worden, dan gaat dat niet goed natuurlijkquote:Op woensdag 7 juni 2006 19:59 schreef Swetsenegger het volgende:
[..]
Ik wilde de eigenaar inderdaad de mogelijkheid geven om een update niet uit te voeren. wat bedoel je met een diff?
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 | <input type="text" name="q" /> <input type="submit" name="Submit" value="Search" /> </form> <?php // Get the search variable from URL $var = @$_GET['q'] ; $trimmed = trim($var); //trim whitespace from the stored variable // rows to return $limit=10; // check for an empty string and display a message. if ($trimmed == "") { echo "<p>Please enter a search...</p>"; exit; } // check for a search parameter if (!isset($var)) { echo "<p>We dont seem to have a search parameter!</p>"; exit; } //connect to your database ** EDIT REQUIRED HERE ** mysql_connect("localhost","root",""); //(host, username, password) //specify database ** EDIT REQUIRED HERE ** mysql_select_db("mydb") or die("Unable to select database"); //select which database we're using // Build SQL Query $query = "select * from employees where 1st_field like \"%$first%\" order by 1st_field"; // EDIT HERE and specify your table and field names for the SQL query $numresults=mysql_query($query); $numrows=mysql_num_rows($numresults); // If we have no results, offer a google search as an alternative if ($numrows == 0) { echo "<h4>Results</h4>"; echo "<p>Sorry, your search: "" . $trimmed . "" returned zero results</p>"; echo "<p><a href=\"http://www.google.com/search?q=" . $trimmed . "\" target=\"_blank\" title=\"Look up " . $trimmed . " on Google\">Click here</a> to try the search on google</p>"; } // next determine if s has been passed to script, if not use 0 if (empty($s)) { $s=0; } // get results $query .= " limit $s,$limit"; $result = mysql_query($query) or die("Couldn't execute query"); // display what the person searched for echo "<p>You searched for: "" . $var . ""</p>"; // begin to show results set echo "Results"; $count = 1 + $s ; // now you can display the results returned while ($row= mysql_fetch_array($result)) { $title = $row["1st_field"]; echo "$count.) $title" ; $count++ ; } $currPage = (($s/$limit) + 1); //break before paging echo "<br />"; // next we need to do the links to other results if ($s>=1) { // bypass PREV link if s is 0 $prevs=($s-$limit); print " <a href=\"$PHP_SELF?s=$prevs&q=$var\"><< Prev 10</a>  "; } // calculate number of pages needing links $pages=intval($numrows/$limit); // $pages now contains int of pages needed unless there is a remainder from division if ($numrows%$limit) { // has remainder so add one page $pages++; } // check to see if last page if (!((($s+$limit)/$limit)==$pages) && $pages!=1) { // not last page so give NEXT link $news=$s+$limit; echo " <a href=\"$PHP_SELF?s=$news&q=$var\">Next 10 >></a>"; } $a = $s + ($limit) ; if ($a > $numrows) { $a = $numrows ; } $b = $s + 1 ; echo "<p>Showing results $b to $a of $numrows</p>"; ?> |
quote:Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in D:\Program Files\xampp\htdocs\sitesmeets\SITE\php\search.php on line 41
1 |
werkt niet, dan zegt hij dit:quote:
1 |
En wat is lijn 41 in je script?quote:Op woensdag 7 juni 2006 21:53 schreef BloodhoundFromHell het volgende:
[..]
werkt niet, dan zegt hij dit:
[ code verwijderd ]
waar voer ik dat uit?quote:Op woensdag 7 juni 2006 21:55 schreef JeRa het volgende:
@Swetsenegger
chown gaat niet lukken, behalve als je root bentje zult vantevoren al de goede gebruiker moeten zijn. Door een `whoami` uit te voeren kom je erachter als wie de webserver werkt
In een PHP-scriptje dat je via de webserver uitvoert:quote:Op woensdag 7 juni 2006 22:08 schreef Swetsenegger het volgende:
[..]
waar voer ik dat uit?
Ik gebruik nu het ftp alternatief, maar dat is (traag) gepijpzeik.
1 2 3 | echo `whoami`; ?> |
Grappig, die kon ik niet.quote:Op woensdag 7 juni 2006 22:09 schreef JeRa het volgende:
[..]
In een PHP-scriptje dat je via de webserver uitvoert:
[ code verwijderd ]
Je bent vergeten de puntkomma achter mysql_query() weg te halen gok ikquote:Op woensdag 7 juni 2006 22:14 schreef BloodhoundFromHell het volgende:
@jera , nog ideeen? of heeft iemand wellicht anders nog een beter zoekscriptje ergens?
Dat is dus mooi kutquote:Op woensdag 7 juni 2006 22:15 schreef JeRa het volgende:
@Swetsenegger
Je kunt de eigenaar van het bestand niet veranderen zonder dat je root bent. Anders is het een kwestie van een simpele chownEn je moet inderdaad vanuit beginsel de bestanden met een PHP-script vanuit de webserver aanmaken en wegschrijven, anders heb je de verkeerde eigenaar.
Dit soort dingen is de reden waarom ik mod_ruid gebruik op m'n webserver
Dat was meer een compressie en uitpak traject geloof ik.quote:Op woensdag 7 juni 2006 22:24 schreef JeRa het volgende:
Chandler was toch bezig met een project dat precies dat en meer kon doen?
...daar heb je dus rootrechten voor nodig, die de meeste mensen ook niet via FTP hebbenquote:Op woensdag 7 juni 2006 22:27 schreef Swetsenegger het volgende:
de eigenaar veranderen
*vloekt zachtjes*quote:Op woensdag 7 juni 2006 22:30 schreef JeRa het volgende:
[..]
...daar heb je dus rootrechten voor nodig, die de meeste mensen ook niet via FTP hebben
Ehmz... is stap 2 niet het zwakke punt in dit betoog?quote:Op woensdag 7 juni 2006 22:46 schreef JeRa het volgende:
Oh, truuk om van eigenaar te veranderen bestaat wel trouwens.
1) Lees het hele bestand naar het geheugen
2) Verwijder het bestand
3) Maak het bestand opnieuw aan (gebruiker is nu de webserver als je dit via een PHP-script doet)
4) Schrijf de data in het geheugen weer weg naar het bestand
Bestanden verwijderen is mogelijk als je de eigenaar van de bovenliggende directory bentquote:Op woensdag 7 juni 2006 22:53 schreef Swetsenegger het volgende:
[..]
Ehmz... is stap 2 niet het zwakke punt in dit betoog?
Hmz ja dat kan dat ik de file via ftp functies in php verwijder en vervolgens met fwrite weer gewoon schrijf.quote:Op woensdag 7 juni 2006 22:58 schreef JeRa het volgende:
[..]
Bestanden verwijderen is mogelijk als je de eigenaar van de bovenliggende directory bentmiddels FTP moet dat dus lukken.
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 | <input type="text" name="q" /> <input type="submit" name="Submit" value="Search" /> </form> <?php // Get the search variable from URL $var = @$_GET['q'] ; $trimmed = trim($var); //trim whitespace from the stored variable // rows to return $limit=10; // check for an empty string and display a message. if ($trimmed == "") { echo "<p>Please enter a search...</p>"; exit; } // check for a search parameter if (!isset($var)) { echo "<p>We dont seem to have a search parameter!</p>"; exit; } //connect to your database ** EDIT REQUIRED HERE ** mysql_connect("localhost","test",""); //(host, username, password) //specify database ** EDIT REQUIRED HERE ** mysql_select_db("bhfhnet_mydb") or die("Unable to select database"); //select which database we're using // Build SQL Query $query = "select * from employees where first like \"%$trimmed%\" order by first"; // EDIT HERE and specify your table and field names for the SQL query $numresults=mysql_query($query); $numrows=mysql_num_rows($numresults); // If we have no results, offer a google search as an alternative if ($numrows == 0) { echo "<h4>Results</h4>"; echo "<p>Sorry, your search: "" . $trimmed . "" returned zero results</p>"; echo "<p><a href=\"http://www.google.com/search?q=" . $trimmed . "\" target=\"_blank\" title=\"Look up " . $trimmed . " on Google\">Click here</a> to try the search on google</p>"; } // next determine if s has been passed to script, if not use 0 if (empty($s)) { $s=0; } // get results $query .= " limit $s,$limit"; $result = mysql_query($query) or die("Couldn't execute query"); // display what the person searched for echo "<p>You searched for: "" . $var . ""</p>"; // begin to show results set echo "Results "; $count = 1 + $s ; // now you can display the results returned while ($row= mysql_fetch_array($result)) { $title = $row["1st_field"]; echo "$count.) $title" ; $count++ ; } $currPage = (($s/$limit) + 1); //break before paging echo "<br />"; // next we need to do the links to other results if ($s>=1) { // bypass PREV link if s is 0 $prevs=($s-$limit); print " <a href=\"$PHP_SELF?s=$prevs&q=$var\"><< Prev 10</a>  "; } // calculate number of pages needing links $pages=intval($numrows/$limit); // $pages now contains int of pages needed unless there is a remainder from division if ($numrows%$limit) { // has remainder so add one page $pages++; } // check to see if last page if (!((($s+$limit)/$limit)==$pages) && $pages!=1) { // not last page so give NEXT link $news=$s+$limit; echo " <a href=\"$PHP_SELF?s=$news&q=$var\">Next 10 >></a>"; } $a = $s + ($limit) ; if ($a > $numrows) { $a = $numrows ; } $b = $s + 1 ; echo "<p>Showing results $b to $a of $numrows</p>"; ?> |
ik ben erachter gekomen dat ik niet met chmod, maar met dit grapje mijn hele website heb verkloot. Omdat door een foutje geen bestandsnaam is toegevoegd heeft php de rootdirectory ingelezen als bestand, toen de directory verwijdert en daarna een bestand aangemaakt met de inhoud van het mapbestand. Keertje checken op is_dir() is dus geen overbodige luxequote:Op woensdag 7 juni 2006 22:46 schreef JeRa het volgende:
Oh, truuk om van eigenaar te veranderen bestaat wel trouwens.
1) Lees het hele bestand naar het geheugen
2) Verwijder het bestand
3) Maak het bestand opnieuw aan (gebruiker is nu de webserver als je dit via een PHP-script doet)
4) Schrijf de data in het geheugen weer weg naar het bestand
Sorry, maar... LOLquote:Op donderdag 8 juni 2006 10:28 schreef ralfie het volgende:
[..]
ik ben erachter gekomen dat ik niet met chmod, maar met dit grapje mijn hele website heb verkloot. Omdat door een foutje geen bestandsnaam is toegevoegd heeft php de rootdirectory ingelezen als bestand, toen de directory verwijdert en daarna een bestand aangemaakt met de inhoud van het mapbestand. Keertje checken op is_dir() is dus geen overbodige luxe![]()
ja, idd, LOLquote:
Op de manier zoals jij het doet krijg je ofwel een query per woord of een UNION oid, en het wordt lastig om daar een score aan toe te kennenquote:Op donderdag 8 juni 2006 17:18 schreef LeeHarveyOswald het volgende:
Ik ben mezelf behoorlijk vast aan het programmeren... Wat ik in totaal wil (waar ook de eerdere vragen voor waren) is zoiets als dit:
1. Ik selecteer uit database 'words' de id keys van een aantal woorden (keywords die ingevuld zijn in form).
2. Uit een andere tabel ('Sites')ga ik dus opzoek naar die keywords, dit moet in "and" vorm gebeuren, daaruit wil ik de sites selecteren waar En keyword X, en Keyword Y, Z, ... voorkomen. Dit moet per site op punten gegroepeerd worden, en gesorteerd.
Hoe ga ik dit qua query aanpakken?![]()
Voor zover ik weet kan dat niet zomaar; er is in ieder geval erg weinig op Google over te vinden.quote:Op vrijdag 9 juni 2006 13:01 schreef Darkomen het volgende:
Vraagje, ik weet dat je met php pdf files kan maken, maar kan je ook aan een bestaande pdf een wachtwoord toevoegen doormiddel van php?
1 2 3 4 5 6 7 8 9 10 11 12 | php mysql_connect("localhost", "root", ""); mysql_select_db("plaatsen"); $result = mysql_query("SELECT * FROM tbl_plaats ORDER BY starttijd ASC") or die("FUCKING ERROR"); while($row = mysql_fetch_row($result)) { echo "nijmegen: ".$row[1]."<br/>"; } ?> |
En wat is de relatie tussen die 2 tabellen?quote:Op maandag 12 juni 2006 12:31 schreef boebiedoe het volgende:
Mensen, ik heb een php script waarbij hij uit 1 tabel data haalt er neerkalkt, maar nu wil ik dat hij tweede row uit een andere tabel ernaast zet. Dus 2 rijen met gegevens.
[ code verwijderd ]
Iemand?!
quote:Op maandag 12 juni 2006 12:31 schreef boebiedoe het volgende:
Mensen, ik heb een php script waarbij hij uit 1 tabel data haalt er neerkalkt, maar nu wil ik dat hij tweede row uit een andere tabel ernaast zet. Dus 2 rijen met gegevens.
[ code verwijderd ]
Iemand?!
1 2 3 4 5 6 7 8 9 | $i = 0; echo '<tr>'; while($row = mysql_fetch_row($result)) { echo '<td>'.htmlspecialchars($row[1]).'</td>'; if(++%i % 2 == 0) echo '</tr><tr>'; } echo '</tr>'; ?> |
kzie het. Dan wordt het float:leftenquote:Op maandag 12 juni 2006 16:31 schreef JeRa het volgende:
@Roonaan
Dat is niet de bedoeling. Hij wil een tweede kolom met data uit een andere tabel. Wat jij doet is de beschikbare data verspreiden over twee kolommen.
of eerst de data uit de tabellen trekken en daarna pas de output genererenquote:Op maandag 12 juni 2006 16:43 schreef Swetsenegger het volgende:
of met een join in 1 query de data eruit trekken.
Dat zeg ikquote:Op maandag 12 juni 2006 17:46 schreef DionysuZ het volgende:
[..]
of eerst de data uit de tabellen trekken en daarna pas de output genereren
Het is te warm om diep na te denkenquote:Op maandag 12 juni 2006 20:22 schreef Roönaän het volgende:
Nog geen php golf-8 topic?
Helemaal mee eensquote:Op dinsdag 13 juni 2006 16:15 schreef Swetsenegger het volgende:
[..]
Het is te warm om diep na te denken
Ik heb 't oude topic ff een schop gegeven.quote:Op maandag 12 juni 2006 20:22 schreef Roönaän het volgende:
Nog geen php golf-8 topic?
Je geeft in de url, welke door iedereen in zijn browser natuurlijk vrij te veranderen is, gegevens mee welke je in je script gebruikt.quote:Op woensdag 14 juni 2006 19:47 schreef super-muffin het volgende:
Wat heb je nu precies gedaan en hoe zorg ik er voor dat je het niet meer kan doen?
Wat dacht je van een standaard style gebruiken?quote:Op woensdag 14 juni 2006 20:56 schreef super-muffin het volgende:
En wat moet 'ie doen als #style is wat ik verwacht en wat als het iets anders is?
1 2 3 4 5 | $style = $_GET['style']; if (!in_array($style, $allowedStyles)) { $style = $allowedStyles[0]; } |
Kwestie van keuze. Een switch is vaak overzichtelijker dan een ifquote:En waarom switch gebruiken en geen if?
Tuurlijk begin meteen met array'squote:Op woensdag 14 juni 2006 20:59 schreef JeRa het volgende:
[..]
Wat dacht je van een standaard style gebruiken?bijvoorbeeld zo:
[ code verwijderd ]
1 2 3 4 5 6 7 8 9 10 11 | switch($style){ case 'blauw': //blauw enzo break; //etc default: //als het geen van de case's is break; } ?> |
Ik vind een switch meestal fijner werken. Inderdaad doordat het overzichtelijker is.quote:[..]
Kwestie van keuze. Een switch is vaak overzichtelijker dan een if
Zoals de rest zegt.quote:Op woensdag 14 juni 2006 20:56 schreef super-muffin het volgende:
En wat moet 'ie doen als $style is wat ik verwacht en wat als het iets anders is?
En waarom switch gebruiken en geen if?
Dan kan korterquote:Op woensdag 14 juni 2006 20:59 schreef JeRa het volgende:
[..]
Wat dacht je van een standaard style gebruiken?bijvoorbeeld zo:
[ code verwijderd ]
En in dit geval heeft een array mijn voorkeur boven een switch, gewoon omdat je een array makkelijk in een los configbestand kunt zetten en dan alleen die maar hoeft aan te passen als er een nieuwe stijl bij komt.quote:$allowedStyles = array('rood', 'groen');
$style = ( !in_array($_GET['style'], $allowedStyles) ) ? $_GET['style'] : $allowedStyles[0];
quote:Op woensdag 14 juni 2006 22:38 schreef Light het volgende:
[..]
Dan kan korter
[..]
En in dit geval heeft een array mijn voorkeur boven een switch, gewoon omdat je een array makkelijk in een los configbestand kunt zetten en dan alleen die maar hoeft aan te passen als er een nieuwe stijl bij komt.
1 2 3 4 5 6 7 8 9 | $var = (conditie) : '1' ? '2'; // hetzelfde als if(conditie){ $var = '1'; } else { $var = '2'; } ?> |
Ctrl-C, Ctrl-Vquote:Op woensdag 14 juni 2006 22:41 schreef JeRa het volgende:
[..]
Weet ik, maar dan moet ik twee keer $_GET typen en daar heb ik een hekel aan
Wow, dat scheelt 1 toetsaanslagquote:Op woensdag 14 juni 2006 23:54 schreef Roönaän het volgende:
$_G<enter>
De code is:quote:SELECT * FROM Auto WHERE NOT EXISTS (SELECT AutoID FROM Verhuur WHERE Terugbrengdatum => 2006-06-15)
1 2 | Terugbrengdatum => $datum)"; |
Volgens mij heten die dingen subqueries http://dev.mysql.com/doc/refman/5.0/en/subqueries.htmlquote:Op donderdag 15 juni 2006 22:47 schreef LeeHarveyOswald het volgende:
Ik wil een query binnen een query uitvoeren, maar hoe ding dit ook al weer in SQL?
Als ik de query (die geen errors geeft) nu print, is dit wat er staat:
[..]
De code is:
[ code verwijderd ]
In de tabel Auto staat Volvo C70 met ID 1. De tabel verhuur is leeg.
Iemand een idee hoe dit werkend te krijgen?![]()
Subqueries, maar die werken pas vanaf MySQL 5.quote:Op donderdag 15 juni 2006 22:47 schreef LeeHarveyOswald het volgende:
Ik wil een query binnen een query uitvoeren, maar hoe ding dit ook al weer in SQL?
Als ik de query (die geen errors geeft) nu print, is dit wat er staat:
[..]
De code is:
[ code verwijderd ]
In de tabel Auto staat Volvo C70 met ID 1. De tabel verhuur is leeg.
Iemand een idee hoe dit werkend te krijgen?![]()
1 2 3 4 5 | FROM Auto a LEFT JOIN Verhuur v ON a.id = v.AutoID WHERE v.AutoID IS NULL AND v.Terugbrengdatum > '$datum' |
In dit geval kan het inderdaad ook makkelijk met een join in plaats van de subquery. De versie met "where not exists(...)" vertelt wel duidelijker wat er gebeurt.quote:Op donderdag 15 juni 2006 23:15 schreef JeRa het volgende:
Waarom een subquery? Daar zijn JOINs voor:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | elseif (!eregi $email) else { $datum = date("Y-m-d"); include ("my_config.php"); @mysql_select_db("web") or die ("kon geen database selecteren"); $query = "INSERT INTO nieuwsbrief SET naam='$naam', emailadres='$email', datum='$datum', actief='no'"; $result = mysql_query($query); $query2 = "SELECT ID FROM nieuwsbrief WHERE randid='$randid' AND emailadres= '$email'"; $result2 = mysql_query($query2); if ($result) {echo "u ontvangt een email waarmee u uw aanmelding kan voltooien<br/>"; while (list($id) = mysql_fetch_row($result2)) { echo $id;}} else {echo "Uw emailadres is al opgenomen in de database.";}} |
Dank je wel dat deed de truc!quote:Op donderdag 15 juni 2006 23:29 schreef Swetsenegger het volgende:
$id=mysql_insert_id();
1 2 3 | $result = mysql_query($query); if ($result) {echo "U heeft zich succesvol aangemeld! Binnenkort ontvangt u onze nieuwsbrief."; |
1 2 3 4 5 6 7 | $query = "UPDATE nieuwsbrief SET actief='yes' WHERE ID=".$mail_id; $result = mysql_query($query); if ($result) { echo "U heeft zich succesvol aangemeld! Binnenkort ontvangt u onze nieuwsbrief."; } ?> |
1 2 3 | ButtonBar("entry uit database dat geedit of gedelete mag worden", EDIT | DEL); ?> |
1 2 3 4 5 6 7 8 9 | function ButtonBar($string, $flags) { print $string; if ( ($flags & EDIT) == EDIT) print ("[ <a href=\"edit.php\">wijzig</a> ]"); if ( ($flags & DEL) == DEL) print ("[ <a href=\"delete.php\">delete</a> ]"); } ?> |
En dit is me login verwerken script:quote:</style></head>
<html>
<body>
<p>
<h3>Login</h3><br>
</p>
<form action="login-verwerken.php" method="post">
user name: <input type="text" name="username">
<br>
password : <input type="text" name="wachtwoord">
<br>
<br>
<input type="submit" value="Versturen">
</form>
</body>
</html>
quote:<html>
<?php
$host="localhost";
$user="root";
$password="";
$database="leden";
mysql_connect($host,$user,$password);
@mysql_select_db($database) or die( "Unable to select database");
$query = ("select username, wachtwoord FROM leden WHERE username='$_POST[username]' AND wachtwoord='$_POST[wachtwoord]'");
$resultaat= mysql_query($query) or die ("Sorry inloggen niet succesvol");
if(mysql_affected_rows()==0){
exit();
}
else{
$user = $_POST['username'];
session_start();
$_SESSION['username'] = $user;
$_SESSION['counter'] = 0;
header('Location: Index.php');
}
?>
</html>
veranderquote:Op zaterdag 17 juni 2006 15:52 schreef Ajaxfan het volgende:
Ik ben bezig met een simpel login script. Het is me al gelukt om een registratie te laten verwerken in een Mysql database. Alleen nu is het dus de bedoeling dat hij de username en het wachtwoord uit de database haalt. Ik krijg dan de melding die je krijgt als de connectie met de database mislukt is: Sorry kan niet inloggen dus. Ik heb zelf geen idee waar het aan ligt.
Dit is mijn login script:
[..]
En dit is me login verwerken script:
[..]
1 |
1 |
Constants zijn per definitie globals in PHP, dus ik heb echt geen idee waarom het niet zou werkenquote:Op zaterdag 17 juni 2006 15:11 schreef Lynx666 het volgende:
even een PHP only vraag:
Aan het begin van m'n script define ik enkele constants:
[ code verwijderd ]
Deze waardes wil ik gebruiken voor een simpele button bar, kan ik per entry bepalen welke acties erop uitgevoerd mogen worden, gebruik makend van bitwise operators, even versimpeld:
[ code verwijderd ]
Deze moet achter de string de 2 knoppen voor editen en deleten weergeven. De functie ButtonBar controleert de flags als volgt (versimpeld):
[ code verwijderd ]
Probleem is, m'n logs spugen "Use of undefined constant [..]" notices uit, en als ik EDIT of DEL echo dan laat het doodleuk "EDIT" of "DEL" zien in plaats van hun vooraf gedefineerde waardes...
Voor zover ik het begrijp zouden defined constants global te gebruiken moeten zijn dus ook in functies als ButtonBar. Zie ik nu iets over het hoofd dat het script niet werkt zoals het zou moeten?
Dat dacht ik dus ookquote:Op zaterdag 17 juni 2006 18:19 schreef JeRa het volgende:
[..]
Constants zijn per definitie globals in PHP, dus ik heb echt geen idee waarom het niet zou werkenonder welke PHP-versie draait het? Staat de functie in een aparte include?
Als je geen verbinding met de database kunt krijgen zal geen enkele query werkenquote:Op zaterdag 17 juni 2006 19:17 schreef Ajaxfan het volgende:
Ik heb die tip van jou geprobeerd Lynx maar nog steeds blijf ik die melding krijgen.![]()
Die text schrijf je waarschijnlijk naar de afbeelding met de functie imagefttext(), niet? Nou, met imageftbbox() kun je de bounding box (en dus o.a. de breedte) opvragenquote:Op zondag 18 juni 2006 01:57 schreef guitarist.nl het volgende:
[afbeelding]ik heb een marquee gemaakt met php & gd, maar je moet de positie van de text in pixels geven, met een statische text is het geen probleem, maar ik wil iets maken met een dynamische text, hoe moet ik de breedte van een string berekenen??
thanks a lotquote:Op zondag 18 juni 2006 11:29 schreef JeRa het volgende:
@Oldbie
Ja, zo is het prima. Zet de SQL export compatibility nog wel even op de versie van MySQL waar je database op gaat draaien, en zet een vinkje bij opslaan (beneden) zodat je ook daadwerkelijk een bestand krijgt
1 2 3 4 5 6 7 8 | FROM news n LEFT JOIN accounts a ON n.author_id = a.id LEFT JOIN comments c ON n.id = comments.news_id WHERE c.deleted = 0 GROUP BY n.id ORDER BY n.id DESC LIMIT 0, 10 |
1 2 3 4 5 6 7 8 9 10 | FROM news INNER JOIN accounts ON news.author_id=accounts.id INNER JOIN comments ON news.id=comments.news_id WHERE news.deleted=0 GROUP BY news.id ORDER BY news.timestamp DESC LIMIT 0, 10 |
Zo deed ik het eerder ook, maar het leek me 'juister' om die info met een count eruit te halen....quote:Op zondag 18 juni 2006 18:42 schreef JeRa het volgende:
Maar het lijkt me slimmer om gewoon een counter bij te houden in de news-tabel met het aantal reacties ipv telkens een extra JOIN en GROUP BY te doen
Even simpel gezegd: je koppelt tabel a aan tabel b. Met een LEFT JOIN wordt tabel a altijd aan tabel b gekoppeld, ook als er geen verbinding is met tabel b. Dan krijg je NULL-waarden terug voor de kolommen in tabel b. Met een INNER JOIN krijg je alléén de rijen terug waarvoor de ON-clausule kloptquote:Op zondag 18 juni 2006 18:54 schreef Lynx666 het volgende:
Waar jij LEFT JOINs gebruikt heb ik er INNER JOINs staan.. Wat is het wezenlijke verschil daartussen?
Het is ook juister, maar performancetechnisch is het gewoon een stuk sneller om een apart veld bij te houden dat je op bepaalde momenten update (nieuwe comment, comment verwijderen, etc).quote:[..]
Zo deed ik het eerder ook, maar het leek me 'juister' om die info met een count eruit te halen....
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 | $i_width = 60; $i_height = 60; $string = "Hello World, This is an test!"; $pointsize = 11; $font = "./tahoma.ttf"; $im = imagecreate($i_width, $i_height); $black = imagecolorallocate ($im, 0, 0, 0); $string_size = ImageFtBbox($pointsize, 0, $font, $string, array("linespacing" => 1)); $s_width = $string_size[4]; $s_height = $string_size[5]; $y = round($s_width/4);// $y = stringbreedte / 4 $img0 = ImageCreateFromGIF("guitarist.nl.gif"); for ($i = 0; $i <= $y; $i++) { $img[$i] = ImageCreateFromGIF("guitarist.nl.gif"); $red = imageColorAllocate($img[$i], 255, 153, 0); $math = $i_width-($i*4); // $s_ .. is string $i_... is image ImageFtText($img[$i], $pointsize, 0, $math, 0 - $s_height, $red, $font, $string, array("linespacing" => 1)); } en nog een hele hoop code :") ?> |
Geen idee, maar om goed engels te gebruiken moet het zijn: "Hello world, this is a test"quote:Op zondag 18 juni 2006 23:26 schreef guitarist.nl het volgende:
[afbeelding]Ik heb een plaatje van 60px breed, waar ik een text door wil laten scrollen.
Hij begint op 60 (zodat je de text niet ziet) en hij moet scrollen (van rechts naar links) tot dat de text weer uit beeld is, hij verschuift 4px per frame!!
Hij berekend de breedte van de text!!
De huidige code:
[ code verwijderd ]
Ik gok dat je de breedte van het plaatje er nog bij moet optellenquote:Op zondag 18 juni 2006 23:34 schreef guitarist.nl het volgende:
Het is te laat om te rekenen, morgen weer
Duidelijk, thnxquote:Op zondag 18 juni 2006 20:36 schreef JeRa het volgende:
[..]
Even simpel gezegd: je koppelt tabel a aan tabel b. Met een LEFT JOIN wordt tabel a altijd aan tabel b gekoppeld, ook als er geen verbinding is met tabel b. Dan krijg je NULL-waarden terug voor de kolommen in tabel b. Met een INNER JOIN krijg je alléén de rijen terug waarvoor de ON-clausule kloptdus als een rij in tabel b niet bestaat (bv. een useraccount) dan krijg je de bijbehorende rij in tabel a ook niet terug.
ID veld is idd auto_increment, maar wil wel nieuwsberichten kunnen schedulen. Niet elke gepost bericht krijgt dus de timestamp time() mee. Vandaar de timestamp sorteringquote:[..]
Overigens, als je id-veld uit de 'news'-tabel een AUTO_INCREMENT is en dus dezelfde sortering heeft als news.timestamp, dan kun je net zo goed (zoals in mijn query) sorteren op news.iddat is toch al een PRIMARY KEY, en zolang je niet wilt zoeken op de timestamp scheelt dat weer een index (en de daarbij benodigde indexupdates).
waar bij optellenquote:Op zondag 18 juni 2006 23:48 schreef JeRa het volgende:
[..]
Ik gok dat je de breedte van het plaatje er nog bij moet optellen
Hij moet nog 60px verder doorscrollen, maar niet 60 eerder beginnenquote:Op zondag 18 juni 2006 23:45 schreef SuperRembo het volgende:
@guitarist.nl
Wat is je vraag nou eigenlijk?
Waarmee / hoe maak je dat animated gifje?
Bij de totale breedte van de stringquote:
Ja maar hij moet ook ehm ergens beginnen, niet op 0 iigquote:Op zondag 18 juni 2006 23:52 schreef JeRa het volgende:
[..]
Bij de totale breedte van de stringde scrollafstand van die string moet namelijk (breedte string + 2 * breedte plaatje) zijn om te scrollen zoals jij wilt
plaats dan es het hele scriptjequote:Op zondag 18 juni 2006 23:51 schreef guitarist.nl het volgende:
[..]
Hij moet nog 60px verder doorscrollen, maar niet 60 eerder beginnen
van een scriptje van een kammeraad
Internic.net ?quote:Op maandag 19 juni 2006 09:52 schreef Desdinova het volgende:
weet iemand misschien wie de SIDN-variant is van de .com domeinen?
Ook goedquote:Op maandag 19 juni 2006 12:01 schreef Tijn het volgende:
[..]
Volgens mij wordt het tegenwoordig door het ICANN geregeld.
Gevonden.quote:Op maandag 19 juni 2006 12:09 schreef Tijn het volgende:
Ja, InterNIC deed die dingen vroeger. Volgens mij bestaat het ook nog wel, maar is het tegenwoordig onderdeel van het ICANN.
1 |
1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $a = array( ":)" , ":(" , ":|" ); $b = array( '<img src="smilies/blij.gif" alt="blij"/>', '<img src="smilies/nietzoblij.gif" alt="niet zo blij"/>', '<img src="smilies/zwaardepressief.gif" alt="zwaar depressief"/>' ); $output = str_replace($a,$b, $string); ?> |
Je hebt geluk dat ik mijn wachtwoord altijd vergeet en dus op moet zoekenquote:Op maandag 19 juni 2006 13:50 schreef ViPeRII het volgende:
Ik was eerder ;-)
1 2 3 4 5 | $txt = preg_replace("#\[image thumb=\"(*.?)\" prefix=\"(*.?)\" fw=\"(*.?)\" fn=\"(*.?)\" \/\]#sie", make_table('$1','$2','$3','$4'), $txt); ?> |
De str_replace werkt natuurlijk prima, alleen zou ik het doen bij het uitlezen van het bericht.quote:Op maandag 19 juni 2006 13:42 schreef timbastiaansen het volgende:
Ik zoek een functie om een deel van een variabele te vervangen, ik ben namelijk een gastenboek aan het maken en daarbij heeft hij dus een $bericht die hij in een database schrijft, nu wilt ik dat hij bijvoorbeeld
[ code verwijderd ]
vervangt door
[ code verwijderd ]
is hier een speciale code voor of niet??
het is (.*?) en niet (*.?)quote:Op maandag 19 juni 2006 15:34 schreef Lynx666 het volgende:
Ik knal weer tegen een probleem aan..
[ code verwijderd ]
Hiermee wil ik met elke "[image thumb="data" prefix="data" fw="data" fn="data" /]" dat in een stuk tekst voorkomt een tabelletje plaatsen met make_table() m.b.v. de gegeven data fields.
Nu laat mn error log dit zien: PHP Warning: preg_replace(): Compilation failed: nothing to repeat at offset 20 in <php file> on line 78
waarbij line 78 bovenstaande regel is..
Wat klopt er niet aan mijn preg_replace (wat niet meer dan een uitbouwing is van een kortere, wél werkende preg_replace) ??
Ik denk dat dat ook makkelijker is, scheelt ook weer ruimte in de database nl.quote:Op maandag 19 juni 2006 16:31 schreef Swetsenegger het volgende:
[..]
De str_replace werkt natuurlijk prima, alleen zou ik het doen bij het uitlezen van het bericht.
Dus je schrijft de userinput gewoon naar DB en bij uitlezen zet je code om naar smilies.
Dan doe je bij iedere pageview weer die str_replace, en da's niet echt nodig. Dan kun je beter de tekst twee keer in de database zetten, 1 keer niet geparsed (makkelijk voor editen) en 1 keer geparsed (voor weergeven).quote:Op maandag 19 juni 2006 16:31 schreef Swetsenegger het volgende:
[..]
De str_replace werkt natuurlijk prima, alleen zou ik het doen bij het uitlezen van het bericht.
Dus je schrijft de userinput gewoon naar DB en bij uitlezen zet je code om naar smilies.
Besef wel dat je in dit geval meer dan twee keer zoveel databaseruimte nodig hebt. Normaal maakt dit niet zoveel uit, maar hoe meer data de harde schijf in één keer keer opvolgend kan inlezen hoe beter (en hier geldt dus dat als je grote rows hebt, de harde schijf wellicht onnodige seeks uitvoert). Voor een forum dat ik een paar jaar terug had geschreven voerde ik caching uit, die dus geparsede messages opsloeg in een aparte tabel en na een tijdje er weer uit gooide - maar dat is miss wat overdonequote:Op maandag 19 juni 2006 18:28 schreef Light het volgende:
[..]
Dan doe je bij iedere pageview weer die str_replace, en da's niet echt nodig. Dan kun je beter de tekst twee keer in de database zetten, 1 keer niet geparsed (makkelijk voor editen) en 1 keer geparsed (voor weergeven).
Je moet nog een stripslashes() over de variabele string gooien (of de prima methode van Roönaän gebruiken om alle GPC-variabelen te stripslashen), want nu werken strings met een apostrofe erin niet goedquote:Op maandag 19 juni 2006 20:28 schreef guitarist.nl het volgende:
[afbeelding]
Het is me gelukt
http://test.guitarist.nl/width/temp_icon.php?string=test12345678
bij sting kun je zelf wat invoeren, om het plaatje niet te groot te maken is max 75 karakters, alles daarna is foetsie
gewoon stripslashes($string); ?quote:Op maandag 19 juni 2006 20:32 schreef JeRa het volgende:
[..]
Je moet nog een stripslashes() over de variabele string gooien (of de prima methode van Roönaän gebruiken om alle GPC-variabelen te stripslashen), want nu werken strings met een apostrofe erin niet goed
Qua performance zal dit best sneller zijn, maar echt een mooie oplossing is het niet imo. Ik zou dan eerder naar goede cachingmethoden gaan kijken.quote:Op maandag 19 juni 2006 18:28 schreef Light het volgende:
[..]
Dan doe je bij iedere pageview weer die str_replace, en da's niet echt nodig. Dan kun je beter de tekst twee keer in de database zetten, 1 keer niet geparsed (makkelijk voor editen) en 1 keer geparsed (voor weergeven).
Mjup, en de methode van Roönaän vind je ergens op zijn site geloof ikquote:Op maandag 19 juni 2006 20:42 schreef guitarist.nl het volgende:
[..]
gewoon stripslashes($string); ?
Wat is de methode van Roonaan dan ?
timestap van maken, en vervolgens sorteren?quote:Op dinsdag 20 juni 2006 00:03 schreef Woeiii het volgende:
Iemand een idee hoe ik tijd van optredens op volgorde plaats?
van 12 tot 23 is geen probleem, maar van 23 tot 12 wel.. dus bijvoorbeeld:
22:00 tot 23:00
23:00 tot 00:00
01:00 tot 02:00
Bij de 00:00 gaat het telkens mis, want 00 is niets terwijl ie dit moet zien als 12 uur snachts.
er 24 uur van maken kan ook niet, want als het 01 wordt komt 01 onder 24 te staan doordat 01 <24 is.
wie o wie heeft een oplossing.
Werktniet.. 00:00:00 snapt ie niet dat later is dan 23:00:00.. Als ik dat doe komt het er zo uit te zien:quote:Op dinsdag 20 juni 2006 00:08 schreef the_disheaver het volgende:
[..]
timestap van maken, en vervolgens sorteren?
timestamp van datum en tijd?quote:Op dinsdag 20 juni 2006 00:11 schreef Woeiii het volgende:
[..]
Werktniet.. 00:00:00 snapt ie niet dat later is dan 23:00:00.. Als ik dat doe komt het er zo uit te zien:
00:00
01:00
22:00
23:00![]()
stripslashes_deep() staat op php.net en aangepast/verbetert ergens op roonaans site inderdaadquote:Op maandag 19 juni 2006 23:07 schreef JeRa het volgende:
[..]
Mjup, en de methode van Roönaän vind je ergens op zijn site geloof ik
komt het uit database? Want dan kan je simpelweg een `time` kolom opnemen, en daarop sorteren.quote:Op dinsdag 20 juni 2006 00:03 schreef Woeiii het volgende:
Iemand een idee hoe ik tijd van optredens op volgorde plaats?
van 12 tot 23 is geen probleem, maar van 23 tot 12 wel.. dus bijvoorbeeld:
22:00 tot 23:00
23:00 tot 00:00
01:00 tot 02:00
Bij de 00:00 gaat het telkens mis, want 00 is niets terwijl ie dit moet zien als 12 uur snachts.
er 24 uur van maken kan ook niet, want als het 01 wordt komt 01 onder 24 te staan doordat 01 <24 is.
wie o wie heeft een oplossing.
Klopt, zo dacht ik ook, maar alleen time is niet voldoende want hoe moet ie weten dat 00:00 meer is dan 23?quote:Op dinsdag 20 juni 2006 08:21 schreef Swetsenegger het volgende:
[..]
komt het uit database? Want dan kan je simpelweg een `time` kolom opnemen, en daarop sorteren.
nee, niemand?quote:Op maandag 19 juni 2006 17:38 schreef Ewaldus het volgende:
ik ben dus dikke n00b met linux enzo, nu heb ik samen met een vriend een dedicated aangeschaft alleen komen we erachter dat mijn scripts alleen onder php5 draaien.
Wie weet een stap voor stap tutorial waar wordt verteld hoe we goed kunnen upgraden?
We draaien CentOS 4. Ik heb zelf al gezocht maar dat mocht op niets uit lopen..
Bedoel je dat je scripts geschreven zijn voor PHP5 en onder PHP4 draaien, of dat je scripts geschreven zijn voor PHP4 en dat ze nu onder PHP5 draaien? Ik gok het eerste maar even voor de zekerheidquote:Op maandag 19 juni 2006 17:38 schreef Ewaldus het volgende:
ik ben dus dikke n00b met linux enzo, nu heb ik samen met een vriend een dedicated aangeschaft alleen komen we erachter dat mijn scripts alleen onder php5 draaien.
Er zijn best wel wat dingen veranderd sinds PHP5, maar waar je vooral even naar moet kijken zijn waarschijnlijk de superglobals en het gebruik hiervan in je scripts.quote:
Ja dan doe je dus een datetime kolomquote:Op dinsdag 20 juni 2006 10:01 schreef Woeiii het volgende:
[..]
Klopt, zo dacht ik ook, maar alleen time is niet voldoende want hoe moet ie weten dat 00:00 meer is dan 23?De oplossing is date + time 20 juni 00:00 is meer dan 19 juni 23:00
![]()
Werkt goed nu![]()
Dat heeft niet zozeer iets te maken met PHP5 aangezien dit een optie is die je ook in PHP4 kon wijzigen. De defaults zijn gewoon anders sinds PHP5, maar administrators met een beetje verstand hebben de register_globals ook in PHP4 op Off gezet hoor.quote:Op dinsdag 20 juni 2006 12:39 schreef Scorpionsworld het volgende:
[..]
Er zijn best wel wat dingen veranderd sinds PHP5, maar waar je vooral even naar moet kijken zijn waarschijnlijk de superglobals en het gebruik hiervan in je scripts.
zonder php-codequote:Op dinsdag 20 juni 2006 17:45 schreef fokME2 het volgende:
Ik kreeg de opdracht om een site te debuggen. Er wordt een 500 internal server error gegenereerd door php.
Dit komt vrijwel zeker van de mail() functie, heeft iemand een idee hoe dat kan? En bij voorkeur ook hoe ik het op kan lossen?
De error komt al als de functie zo wordt gebruikt:quote:
1 2 3 | mail("mail@domein.tld","onderwerp","inhoud"); ?> |
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 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>danielpunt</title> <?php echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"stijl.css\" />"; ?> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> </head> <body> <div id="navigation"> <ul> <?php if ($page=="1") { echo "<li id=\"currentpage\">pagina 1</li>"; } else { echo "<li><a href=\"index.php?page=1\">pagina 1</li></a>"; } ?> <?php if ($page=="2") { echo "<li id=\"currentpage\">pagina 2</li>"; } else { echo "<li><a href=\"index.php?page=2\">pagina 2</li></a>"; } ?> <?php if ($page=="3") { echo "<li id=\"currentpage\">pagina 3</li>"; } else { echo "<li><a href=\"index.php?page=3\">pagina 3</li></a>"; } ?> </ul> </div> <br /> <p> <?php @ require_once ("$page.html"); ?> </p> </body> </html> |
Wat werkt er niet?quote:Op dinsdag 20 juni 2006 19:57 schreef super-muffin het volgende:
Waarom werkt dit wel op mijn localhost (met PHP5) en niet op mijn webserver (PHP versie weet ik niet)?
Moet ik dan switch gebruiken?
Wat zeggen je Apache2-logs en de configuratie van PHP over het mailen?quote:Op dinsdag 20 juni 2006 18:30 schreef fokME2 het volgende:
[..]
De error komt al als de functie zo wordt gebruikt:
[ code verwijderd ]
superglobalsquote:Op dinsdag 20 juni 2006 19:57 schreef super-muffin het volgende:
Waarom werkt dit wel op mijn localhost (met PHP5) en niet op mijn webserver (PHP versie weet ik niet)?
Moet ik dan switch gebruiken?
[ code verwijderd ]
De pagina zelf: http://danielpunt.nl/huidigepagina/index.php
Geen sendmail(wapper) geinstalleerd op die computer?quote:Op dinsdag 20 juni 2006 18:30 schreef fokME2 het volgende:
[..]
De error komt al als de functie zo wordt gebruikt:
[ code verwijderd ]
Nee, het pad naar sendmail is "/usr/sbin/sendmail -t -i" voor PHP, ongeacht of het geïnstalleerd is of nietquote:Op dinsdag 20 juni 2006 20:53 schreef fokME2 het volgende:
Ik heb geen idee, het is niet mijn hosting etc. Zal het is navragen.
Edit:
Path to sendmail /usr/sbin/sendmail -t -i
Sendmail is dus geinstalleerd neem ik aan.
nou, eerlijk gezegd ben ik redelijk nieuw met Linux en weet niet waar ik moet beginnen met upgraden. Ik ben opzoek naar tutorials maar kan nergens een goede vinden.. Het lijkt mij logisch dat ik eerst php 4 moet unstallen alvorens php 5 te gaan instaleren enz. enz.quote:
Lijkt mij niet logisch, het is geen Windows zegquote:Op dinsdag 20 juni 2006 21:39 schreef Ewaldus het volgende:
[..]
Het lijkt mij logisch dat ik eerst php 4 moet unstallen alvorens php 5 te gaan instaleren enz. enz.
Moet je nagaan wat voor n00bleek ik ben met Linux ... Ik had het trouwens niet verwacht maar wilde geen risico's lopen.quote:Op dinsdag 20 juni 2006 21:50 schreef JeRa het volgende:
[..]
Lijkt mij niet logisch, het is geen Windows zegvoor zover ik weet maakt CentOS gebruik van een RPM package manager. Meestal hoort daar nog een tool bij (zoals yum bijvoorbeeld) om die packages van internet te downloaden en meteen te upgraden, en waarmee je je systeem up-to-date kunt houden. Kun je niets vinden op de supportafdeling van centos.org?
(en dan vooral de fora)
1 2 3 4 5 6 7 8 9 | require_once("CTest.php"); $test = new Test(); $test->setVar(5); echo ($test->getVar()); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | { private $var = 0; public function __construct() { echo "Creating " . $this . "<br>"; } public function __destruct() { echo "Destructing " . $this . "<br>"; } public function setVar($_var) { $this->$var = $_var; } public function getVar() { return $this->$var; } } |
1 2 3 4 5 6 | Notice: Undefined variable: var in /home/martijn/www/CTest.php on line 19 Fatal error: Cannot access empty property in /home/martijn/www/CTest.php on line 19 Destructing Object id #1 |
echo is geen functiequote:Op dinsdag 20 juni 2006 22:21 schreef Tijn het volgende:
Ik wil een beginnetje maken met OOP in PHP5 (PHP 5.1.2 om precies te zijn). Ik kan redelijk met pointers en classes enzo omgaan in C++ en dacht het daarom ook zonder al teveel moeite in PHP te moeten doen.
Maar het wil nog niet echt vlotten. Ik heb eerst even een simpel test-object opgezet die alleen maar een waarde vasthoudt, verder niets. En dat lukt al niet
index.php
[ code verwijderd ]
CTest.php
[ code verwijderd ]
De output hiervan is:
[ code verwijderd ]
Regel 19 gaat dus mis, dat is $this->$var = $_var;. Blijkbaar kan het object Test z'n eigen member $var niet vinden. Ik snap echter niet waarom. Kan iemand me aanwijzen wat ik verkeerd doe?
echo() is een language construct maar kan op beide manieren gebruikt wordenquote:Op dinsdag 20 juni 2006 22:27 schreef Swetsenegger het volgende:
[..]
echo is geen functie
echo ($test->getVar());
echo $test->getVar();
Bedankt!quote:
Ik dacht dat je alleen bij print haakjes kon gebruiken en echo niet. Anyway, dat zal het probleem niet veroorzakenquote:Op dinsdag 20 juni 2006 22:30 schreef JeRa het volgende:
[..]
echo() is een language construct maar kan op beide manieren gebruikt wordenals je echter meerdere argumenten aan echo() wilt meegeven mag je geen haakjes gebruiken geloof ik.
Ja, ik ben een beetje gewend geraakt om om pointer->ding altijd haakjes te zetten, omdat in C++ wel eens foutmeldingen krijg als ik dat niet doe. Maar in PHP is dat blijkbaar niet zo nodig, dus kheb ze weer weggehaald.quote:Op dinsdag 20 juni 2006 22:27 schreef Swetsenegger het volgende:
[..]
echo is geen functie
echo ($test->getVar());
echo $test->getVar();
-edit- Hmz, waarschijnlijk snap ik het gewoon niet.
Het gaat ook over OOP, dus ik kan beter mijn mond houden
Alleen de 'buitenste' variabele heeft altijd een dollarteken, de rest nietquote:Op dinsdag 20 juni 2006 22:31 schreef Tijn het volgende:
[..]
Bedankt!
Ik was er net zelf ook achter gekomen door de voorbeelden op PHP.net eens goed te lezen. Ik vind het wel raar hoor. Ik ben eraan gewend geraakt dat variabelen in PHP een dollarsign ervoor hebben, en nu hebben ze dat opeens weer niet
Ja DIT begrijp ik welquote:Op dinsdag 20 juni 2006 22:33 schreef Tijn het volgende:
Oh en als je nou ff oplet, dan leer je ook OOP in PHP, want simpeler dan dit voorbeeld kom je het niet tegen
De theoretische achtergrond heb ik ook niet echt, maar ik vind de structuur van object-oriented programma's meestal makkelijker te volgen. Het wordt dan niet van die spaghetticode zeg maar.quote:Op dinsdag 20 juni 2006 22:34 schreef Swetsenegger het volgende:
[..]
sowieso ben ik nog steeds niet overtuigt van het nut van OOP. Ja ik weet het, ik ben stronteigenwijs.
Om eerlijk te zijn is OOP in PHP i.c.m. websites nogal overdreven, behalve als je met backends voor de database e.d. gaat werken. Dan kun je namelijk iets heel leuks toepassenquote:Op dinsdag 20 juni 2006 22:34 schreef Swetsenegger het volgende:
sowieso ben ik nog steeds niet overtuigt van het nut van OOP. Ja ik weet het, ik ben stronteigenwijs.
Nou, ik vind het stomquote:Op dinsdag 20 juni 2006 22:34 schreef JeRa het volgende:
[..]
Alleen de 'buitenste' variabele heeft altijd een dollarteken, de rest niethet is dus ook $obj->variabeleObject->variabele, $array['blaat']['ietsanders']->variabele[1], etc. Zoals jij het deed kon je dynamische namen oproepen (hij probeerde namelijk de inhoud van $var te gebruiken als naam voor de variabelen in je object).
Ik ben in 1983 met programmeren begonnen. I love spaghetti.quote:Op dinsdag 20 juni 2006 22:39 schreef Tijn het volgende:
[..]
De theoretische achtergrond heb ik ook niet echt, maar ik vind de structuur van object-oriented programma's meestal makkelijker te volgen. Het wordt dan niet van die spaghetticode zeg maar.
Het probleem is niet zo zeer dat ik het zelf nodig heb op dit moment. Het probleem is wel dat ik een 'incomplete' programmeur ben. En dat kan me opbreken op een gegeven moment, ook in een management functie mbt webdevelopment welke kant ik uiteindelijk toch graag op wil.quote:Op dinsdag 20 juni 2006 22:39 schreef JeRa het volgende:
[..]
Om eerlijk te zijn is OOP in PHP i.c.m. websites nogal overdreven, behalve als je met backends voor de database e.d. gaat werken. Dan kun je namelijk iets heel leuks toepassenclass extending.
Dat houdt in dat je in jouw applicatie één interface hebt om een database aan te spreken ($obj->query bijvoorbeeld) terwijl je op de achtergrond bv. 5 verschillende classes hebt geschreven voor 5 verschillende DB-types. Dán is het erg handig, want dat voorkomt dat je voor al die verschillende types aparte code moet gaan schrijven op elke plek dat je een query wilt uitvoerenik heb dat in vorige projecten gebruikt om zowel PHP-mysql als PHP-mysqli aan te kunnen spreken.
Ja, of een modulair concept, waarbij de ene klant de 'ideal betaling' module wel wil en de ander nietquote:Op dinsdag 20 juni 2006 22:43 schreef JeRa het volgende:
Oh, en OOP is ook heel erg handig als je bijvoorbeeld een applicatie met ondersteuning voor plugins beheert. Dan kun je een interface schrijven en dan kunnen anderen die interface implementeren en een plugin vlekkeloos in je applicatie verwerken
Nee, maar wat je zoekt is waarschijnlijk een interface, zie daarvoor de manualquote:Op dinsdag 20 juni 2006 22:57 schreef Tijn het volgende:
Kun je ook je object scheiden in een header-file waarin alleen definities staan en een file met de daadwerkelijke implementatie?
quote:Police officer: "...and we want you to interface with the local gay community."
Daffyd: "Ah I'm not really interface, I'm more into bum."
Hmm...quote:Op dinsdag 20 juni 2006 23:01 schreef JeRa het volgende:
[..]
Nee, maar wat je zoekt is waarschijnlijk een interface, zie daarvoor de manual
ja, dat klinkt inderdaad wel wat ik wil. Bedankt! Even lezenquote:Object interfaces allow you to create code which specifies which methods a class must implement, without having to define how these methods are handled.
Ik zou de interface in een apart bestand zetten, en in de classes gebruik maken van __autoload (of er zeker van zijn dat de interface op het begin van een mainscript wordt geincludet).quote:Op dinsdag 20 juni 2006 23:01 schreef Tijn het volgende:
Ah, dit heel goed. Wat is de netste manier om dit in m'n files te zetten? Zou ik de interface en de klasse in losse files moeten zetten, de klasse moeten includen in de file die het object wil gebruiken en de interface includen in de klasse? Of Kan ik net zo goed de interface en klasse in 1 file zetten en alleen deze includen vanuit de file die het object wil gebruiken?
Wow, coole feature! Dat ga ik dan zeker gebruikenquote:
Off topic: ik weet uit ervaring dat er genoeg mogelijkheden zijn voor mensen zonder kennis van techniek (die dat zelf niet toe willen geven) die werken op managementniveau in de webdevelopment business. Er is hoopquote:Op dinsdag 20 juni 2006 22:43 schreef Swetsenegger het volgende:
En dat kan me opbreken op een gegeven moment, ook in een management functie mbt webdevelopment welke kant ik uiteindelijk toch graag op wil.
1 2 3 4 5 6 7 8 9 10 11 | if ($name = strstr ($HTTP_USER_AGENT, "MSIE")) { echo '<iframe class="iframe" name="freem" src="home.html" id="freem" ALLOWTRANSPARENCY>'; } else { echo '<iframe class="iframe" name="freem" src="home.html" id="freem">'; } ?> |
Heel erg bedanktquote:Op woensdag 21 juni 2006 00:07 schreef JeRa het volgende:
@Sitethief
Als register_globals op Off staat werkt $HTTP_USER_AGENT niet. Beter gebruik je $_SERVER, dus $_SERVER['HTTP_USER_AGENT'].
Je kunt zo zeker weten welke methodes en variabelen een class moet implementeren zonder vast te leggen hóe ze die methodes implementeren. De applicatiecore hoeft alleen te weten dat een class een interface implementeert om zeker te weten dat het bepaalde methodes en/of variabelen kan aansprekenquote:Op woensdag 21 juni 2006 00:50 schreef fokME2 het volgende:
Ik snap nou niet precies waarom ik zo'n interface zou gebruiken?
Waarvoor is dat handig?
Een van de meest gebruikte voor PHP is http://www.phpdoc.org/quote:Op woensdag 21 juni 2006 01:33 schreef Tijn het volgende:
Woah. Dat is ook erg cool. Ik wist helemaal niet dat er tools waren om automatisch documentatie te genererenToevallig heb ik vorige week documentatie zitten tikken voor een schoolproject wat ik had gedaan en dit had me een hoop werk gescheeld
![]()
Er gaat een wereld voor me open vanavond, mensen
Die zijn er, op de voorwaarde dat je bijna net zoveel tijd aan je comments als aan je code besteedtquote:Op woensdag 21 juni 2006 01:33 schreef Tijn het volgende:
Woah. Dat is ook erg cool. Ik wist helemaal niet dat er tools waren om automatisch documentatie te genereren
Dat weet ik, dat doe ik nu al aan de hardware kantquote:Op dinsdag 20 juni 2006 23:42 schreef CraZaay het volgende:
[..]
Off topic: ik weet uit ervaring dat er genoeg mogelijkheden zijn voor mensen zonder kennis van techniek (die dat zelf niet toe willen geven) die werken op managementniveau in de webdevelopment business. Er is hoop
hangt er af wat van form het is:quote:Op woensdag 21 juni 2006 10:25 schreef liar het volgende:
Weet iemand misschien een goede anti-spam mogelijkheid voor forms?
Ik heb die image validation met CAPTCHA dingen geprobeerd, maar dat is vaak voor GD2.0 en dat kan mijn server niet aan (die heeftwel GD, maar 1 ofzo denk ik)..
http://www.noipo.org/index.php?id=278quote:Op woensdag 21 juni 2006 10:25 schreef liar het volgende:
Weet iemand misschien een goede anti-spam mogelijkheid voor forms?
Ik heb die image validation met CAPTCHA dingen geprobeerd, maar dat is vaak voor GD2.0 en dat kan mijn server niet aan (die heeftwel GD, maar 1 ofzo denk ik)..
Vraagje toevoegen:quote:Op donderdag 22 juni 2006 08:59 schreef liar het volgende:
nou: dat spambots er niet op kunnen posten (voor contact en gbook form)
je hebt van die image validation scripts, maar die lijken niet echt te werken bij mij
heeft iemand een ander idee?
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 | function submit_value($value){ $query="INSERT into TABLE (id,value) VALUES(0,'".$value."')"; if(mysql_query($query)){ return true; }else{ return false; } } $value=0; //Laatste record uit de db $value++; if(submit_value($value)){ //header }else{ /** * recursie * maar dit wordt in deze opzet WEER * if(submit_value($value)){ etc * wat natuurlijk niet werkbaar is */ } ?> |
Ja, maar hoequote:Op donderdag 22 juni 2006 20:51 schreef JeRa het volgende:
@Swetsenegger
Je moet de recursie-aanroep in de functie zelf laten plaatsvinden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | function submit_value($value){ $value++; $query="INSERT into TABLE (id,value) VALUES(0,'".$value."')"; if(mysql_query($query)){ return $value; }else{ submit_value($value); } } $value=0; //Laatste record uit de db $value=submit_value($value); //header ?> |
Voor het toewijzen van een Product Identifierquote:[offtopic]
Mag ik vragen waar je dit in hemelsnaam voor nodig hebt?![]()
Ik laat het je zelf uitzoeken aan de hand van deze recursieve manier om een facultatieve waarde te berekenenquote:Op donderdag 22 juni 2006 21:02 schreef Swetsenegger het volgende:
[..]
Ja, maar hoe![]()
Dan moet ik dus op de een of andere manier ook value weer returnen omdat die global moet zijn
1 2 3 4 5 6 7 8 | { if ($v < 2) { return 1; } else { return fact($v - 1) * $v; } } |
En AUTO_INCREMENT voldoet niet, of MAX() en table locks gebruiken?quote:[..]
Voor het toewijzen van een Product Identifier
En dat begint handmatig wat problematisch te worden.
Nee, want er staan dus al enkele tientallen values in die ik onder geen beding mag gebruiken.quote:Op donderdag 22 juni 2006 21:05 schreef JeRa het volgende:
En AUTO_INCREMENT voldoet niet, of MAX() en table locks gebruiken?
Ik zou dan overigens niet voor de recursieve manier gaan, maar voor een andere, lineaire aanpak. Je kunt bijvoorbeeld met COUNT() en IS BETWEEN bepalen hoeveel id's er in bepaalde ranges liggen (om er zeker van te zijn of er vrije identifiers zijn) en met MAX() de maximale waarde een identifier in alle id's of binnen een range bepalen.quote:Op donderdag 22 juni 2006 21:07 schreef Swetsenegger het volgende:
[..]
Nee, want er staan dus al enkele tientallen values in die ik onder geen beding mag gebruiken.
Want?quote:Op donderdag 22 juni 2006 21:09 schreef JeRa het volgende:
[..]
Ik zou dan overigens niet voor de recursieve manier gaan, maar voor een andere, lineaire aanpak. Je kunt bijvoorbeeld met COUNT() en IS BETWEEN bepalen hoeveel id's er in bepaalde ranges liggen (om er zeker van te zijn of er vrije identifiers zijn) en met MAX() de maximale waarde een identifier in alle id's of binnen een range bepalen.
Recursieve aanroepen nemen veel stack geheugen in beslag. En die is niet zo heel groot; het is volgens mij ook één van de weinige manieren om PHP goed te laten crashenquote:Op donderdag 22 juni 2006 21:11 schreef Swetsenegger het volgende:
[..]
Want?
Voor performance hoef je het niet te doen, want er komt max 50 keer per jaar een nieuw record in
1 2 3 4 5 6 7 8 9 10 | function aargh() { aargh(); } aargh(); ?> |
1 2 | Segmentation fault |
Mjah, maar ik bouw geen infinite loopquote:Op donderdag 22 juni 2006 21:14 schreef JeRa het volgende:
[..]
Recursieve aanroepen nemen veel stack geheugen in beslag. En die is niet zo heel groot; het is volgens mij ook één van de weinige manieren om PHP goed te laten crasheneen lineaire aanpak neemt over het algemeen ook een constante hoeveelheid geheugen in beslag.
edit:
[ code verwijderd ]
[ code verwijderd ]
Er zijn op dit moment max 7 records om doorheen te loopen. Maar hoe is dat over een jaar, als er 50 of 100 records bijgezet zijn?quote:Op donderdag 22 juni 2006 21:40 schreef Swetsenegger het volgende:
[..]
Mjah, maar ik bouw geen infinite loopen er zijn max 7 records achter elkaar waar ik recursief doorheen moet loopen. Maar inderdaad goed om aan te denken.
vanaf heden tel ik gewoon vanaf 1 op hequote:Op donderdag 22 juni 2006 22:08 schreef Light het volgende:
[..]
Er zijn op dit moment max 7 records om doorheen te loopen. Maar hoe is dat over een jaar, als er 50 of 100 records bijgezet zijn?
1 2 3 4 5 6 7 8 9 10 11 | 9 10 11 12 2 3 4 5 7 6 |
1 2 3 4 | SELECT MAX(id) AS max_id FROM tabel INSERT INTO tabel (id) VALUES (max_id + 1) UNLOCK TABLES |
Een AUTO_INCREMENT kun je instellen op een beginwaarde. Als je die zet op de hoogste waarde aanwezig + 1, krijg je altijd unieke waardes.quote:Op donderdag 22 juni 2006 21:07 schreef Swetsenegger het volgende:
[..]
Nee, want er staan dus al enkele tientallen values in die ik onder geen beding mag gebruiken.
Een PID bestaat niet alleen uit een cijfer, dus het is iets ingewikkelder als hier geschetst. Maar ik had die recursieve functie nodigquote:Op donderdag 22 juni 2006 22:19 schreef JeRa het volgende:
@Swetsenegger
Waarom niet dit:
SELECT MAX(id) AS max_id FROM tabel
INSERT INTO tabel (id) VALUES (max_id + 1)
Ook dat gaat niet, want dan loop ik al bijna over de maximaal mogelijke PID heen.quote:Op donderdag 22 juni 2006 22:20 schreef JeRa het volgende:
[..]
Een AUTO_INCREMENT kun je instellen op een beginwaarde. Als je die zet op de hoogste waarde aanwezig + 1, krijg je altijd unieke waardes.
1 2 3 4 5 6 7 8 9 10 11 | $sock = socket_create(AF_INET,SOCK_STREAM,0)or die("could not create socket ".socket_strerror(socket_last_error())); $con = socket_connect($sock, "pop.hccnet.nl", "110") or die("could not connect socket ".socket_strerror(socket_last_error())); socket_write($sock,"user ******"); socket_write($sock,"pass ******"); socket_write($sock,"Retr 2"); echo(socket_read($sock,10000)); socket_write($sock,"quit"); ?> |
hmm imap_open werkt idd "iets" efficenterquote:Op vrijdag 23 juni 2006 13:42 schreef fokME2 het volgende:
@mschol:
Ik ben daar ook een tijdje meet bezig geweest. Heb het toen gedaan met imap_open. Werkt ook met pop3 naar mijn weten.
/ssl werkt ook niet /notls ook nietquote:Warning: imap_open(): Couldn't open stream {pop.hccnet.nl:110/novalidate-cert} in d:\www\mail.php on line 5
Can't open mailbox {pop.hccnet.nl:110/novalidate-cert}: invalid remote specification
1 2 3 4 5 | require_once("CGraph.php"); $grafiek = new Graph(); $grafiek->test(); |
1 2 3 4 5 6 7 8 9 | { public function test() { $image = imagecreatetruecolor(500, 500); $output = imagepng($image); return $output; } } |
1 |
Cursi zijn er genoeg te vinden, ikzelf heb het geleerd door veel scripts te bekijken en veel zelf uit te proberen. Je vind in de OP wel wat materiaal om ermee te beginnenquote:Op vrijdag 23 juni 2006 20:30 schreef Koewam het volgende:
Hoi
Ik wil beginnen met PHP schrijven. Dus niet kopieeren plakken en zo, maar echt zelf maken. Waar kun je dat snel leren? Of een cursusje downloaden?
Doet ie wel iets als je een echo 'blaat' in je test()-methode zet? Je naam voor de $output-variabele is een beetje ongelukkig gekozen, uit imagepng() komt namelijk een boolean die true is als het gelukt is om een plaatje te maken, niet de daadwerkelijke output. Het plaatje wordt namelijk rechtstreeks naar de stdout geschrevenquote:Op vrijdag 23 juni 2006 21:09 schreef Tijn het volgende:
Ik ben een object aan het maken die een grafiek output. Op zich lijkt het te werken (geen errors of warnings), maar het daadwerkelijke plaatje blijft uit. Ik heb m'n object daarom een test-methode gegeven en zelfs daar komt geen plaatje uit.
showGraph.php:
[ code verwijderd ]
CGraph.php:
[ code verwijderd ]
Als ik naar showGraph.php ga, verwacht ik een zwart vierkantje van 500 bij 500 pixels, maar ik zie niets. Wat doe ik fout?
ik heb et geleerd juist door te knippen + plakken en dinegn aan te passen.quote:Op vrijdag 23 juni 2006 20:30 schreef Koewam het volgende:
Hoi
Ik wil beginnen met PHP schrijven. Dus niet kopieeren plakken en zo, maar echt zelf maken. Waar kun je dat snel leren? Of een cursusje downloaden?
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |