Swetsenegger | zaterdag 17 december 2011 @ 20:28 |

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 
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 |
GlowMouse | zaterdag 17 december 2011 @ 20:29 |
De output van EXPLAIN zal verschillen (tabelvolgorde). De beste volgorde hangt van je data af. |
Swetsenegger | zaterdag 17 december 2011 @ 20:36 |
quote: Rly?! Kan je do volgorde ook beinvloeden? En hoe weet je welke volgorde het beste is? Hoe moet je zo'n explain lezen? |
GlowMouse | zaterdag 17 december 2011 @ 20:40 |
dat kan met STRAIGHT_JOIN, proberen/ervaring |
-Datdus- | zaterdag 17 december 2011 @ 22:06 |
Als ik met Curl een fok! profiel pagina probeer te krijgen staat er "Deze functie is momenteel niet beschikbaar. Misschien ben je niet ingelogd of heb je geen toegang tot deze functie.". Komt dit door fok! en is er een weg omheen? Ik wil namelijk een naam en hash uit het profiel halen zodat ik voor een minecraft server kan verifiëren dat de persoon een fok!ker is.
Ik probeer deze pagina te krijgen: -Datdus- |
#ANONIEM | zaterdag 17 december 2011 @ 22:08 |
probeer eens een profiel te bekijken op fok zonder je in te loggen.. dan heb je het antwoord. |
GlowMouse | zaterdag 17 december 2011 @ 22:10 |
wat voor hash? |
-Datdus- | zaterdag 17 december 2011 @ 22:10 |
quote: Ik kan gewoon bij die pagina dan hoor.  |
-Datdus- | zaterdag 17 december 2011 @ 22:11 |
quote: Nou mijn idee was dat mijn scriptje je een random string geeft die je dan in je sig zet. Zo kan mijn script checken of je de goede persoon bent. |
GlowMouse | zaterdag 17 december 2011 @ 22:14 |
De check is niet goed: je kunt altijd iemand bewegen iets in zijn sig te zetten. Daarnaast denk ik niet dat FOK! het goed vindt wanneer jij een database van FOK!kers aanlegt. |
#ANONIEM | zaterdag 17 december 2011 @ 22:20 |
quote: of je doet iets fout in je code of FoK is beveiligd ertegen. Je kunt dan altijd inloggen proberen met je eigen username. |
-Datdus- | zaterdag 17 december 2011 @ 22:26 |
quote: Op zaterdag 17 december 2011 22:14 schreef GlowMouse het volgende:De check is niet goed: je kunt altijd iemand bewegen iets in zijn sig te zetten. Daarnaast denk ik niet dat FOK! het goed vindt wanneer jij een database van FOK!kers aanlegt. Waarom zijn die pagina's dan openbaar als fok! het daar niet mee eens is? Tevens worden de gegevens niet opgeslagen maar alleen gebruikt als check. Zodra het licht groen is moet je je Minecraft naam invullen en dan kan je spelen. |
Danny | zaterdag 17 december 2011 @ 22:44 |
quote: Dat iets openbaar is wil niet zeggen dat het publiek domein is.
quote: Tevens worden de gegevens niet opgeslagen maar alleen gebruikt als check. Zodra het licht groen is moet je je Minecraft naam invullen en dan kan je spelen. Waarom zou je FOK! sigs misbruiken voor je eigen checks en waarom zouden wij dat moeten goedvinden? |
-Datdus- | zaterdag 17 december 2011 @ 23:01 |
quote: Op zaterdag 17 december 2011 22:44 schreef Danny het volgende:[..] Dat iets openbaar is wil niet zeggen dat het publiek domein is. [..] Waarom zou je FOK! sigs misbruiken voor je eigen checks en waarom zouden wij dat moeten goedvinden? Dan doe ik het niet, ook goed. En misbruiken is wel erg overdreven. Gebruikers kiezen er zelf voor omdat te doen.
[ Bericht 0% gewijzigd door -Datdus- op 17-12-2011 23:10:47 ] |
Danny | zaterdag 17 december 2011 @ 23:04 |
quote: De sigs hebben een doel op FOK!. Je kunt er iets van jezelf in kwijt. Het is natuurlijk niet de bedoeling dat anderen jouw je sig laten gebruiken om verificatiedoeleinden oid. En als het daadwerkelijk een keuze is; hoe zit het dan met mensen die kiezen de code NIET in hun sig te plaatsen? Want als het werkelijk een keuze is zou dat voor jou niets uit moeten maken. |
-Datdus- | zaterdag 17 december 2011 @ 23:09 |
quote: Op zaterdag 17 december 2011 23:04 schreef Danny het volgende:[..] De sigs hebben een doel op FOK!. Je kunt er iets van jezelf in kwijt. Het is natuurlijk niet de bedoeling dat anderen jouw je sig laten gebruiken om verificatiedoeleinden oid. En als het daadwerkelijk een keuze is; hoe zit het dan met mensen die kiezen de code NIET in hun sig te plaatsen? Want als het werkelijk een keuze is zou dat voor jou niets uit moeten maken. Dat zou geen probleem zijn. Het idee was bedoeld om nieuwe mensen sneller rechten te geven op de server. Nu moeten ze wachten tot er een admin online is etc en dat is ook prima hoor. |
Crimyclown | zaterdag 17 december 2011 @ 23:10 |
Ik heb nu een database waarin een paar ingevoerde getallen worden opgeslagen en hiervoor een id aangemaakt wordt. Maar hoe kan ik deze gegevens aan een gebruiker/sessie linken zonder dat deze is aangemeld. Zodat deze gegevens in een later venster kunnen worden weergeven.
Nu kan ik alleen op de vervolg pagina gegevens ophalen omdat ik van te voren niet weet onder welk id het opgeslagen wordt.
[ Bericht 40% gewijzigd door Crimyclown op 17-12-2011 23:18:34 ] |
GlowMouse | zaterdag 17 december 2011 @ 23:57 |
quote: Op zaterdag 17 december 2011 23:10 schreef Crimyclown het volgende:Ik heb nu een database waarin een paar ingevoerde getallen worden opgeslagen en hiervoor een id aangemaakt wordt. Maar hoe kan ik deze gegevens aan een gebruiker/sessie linken zonder dat deze is aangemeld. Zodat deze gegevens in een later venster kunnen worden weergeven. Nu kan ik alleen op de vervolg pagina gegevens ophalen omdat ik van te voren niet weet onder welk id het opgeslagen wordt. geef ze een sessie die niet aan een gebruiker is gekoppeld, of sla nog niks in een database op (maar in $_SESSION). |
Crimyclown | zaterdag 17 december 2011 @ 23:59 |
quote: Dank, het werkt. |
VuilnisMetaal | zondag 18 december 2011 @ 15:31 |
Ik heb de volgende query in mijn PHP staan:
1 2 3 4 5 6 7 8 9 10 11 | CREATE TABLE Accounts (
AccountID int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (AccountID),
FirstName varchar(20),
LastName varchar(20)
) |
Dit werkt prima, er wordt een tabel aangemaakt in MySQL en er kan gewoon data in worden gezet, maar zodra ik de query verander in
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 | CREATE TABLE Accounts (
AccountID int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (AccountID),
FirstName varchar(20),
LastName varchar(20)
)
CREATE TABLE Relatives (
RelativeID int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (RelativeID),
FirstName varchar(20),
LastName varchar(20),
AccountID int,
FOREIGN KEY (AccountID) REFERENCES Accounts (AccountID)
)
CREATE TABLE Constructs (
ConstructID int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (ConstructID),
String varchar(255),
AccountID int,
FOREIGN KEY (AccountID) REFERENCES Accounts (AccountID)
)
CREATE TABLE Answers (
AnswerID int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (AnswerID),
String varchar(255),
ConstructID int,
FOREIGN KEY (ConstructID) REFERENCES Constructs (ConstructID)
) |
wordt er geen enkele tabel aangemaakt.
Weet iemand wat ik fout doe? |
Piles | zondag 18 december 2011 @ 15:33 |
Wat zegt mysql_error()? |
VuilnisMetaal | zondag 18 december 2011 @ 15:39 |
quote: Niks, er zit geen error in blijkbaar. Echt heel raar...
Hier is het volledige PHP-script btw:
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 | <?php
$server = '127.0.01';
$username = 'root';
$password = 'root';
$database = 'properdb';
$con = mysql_connect("localhost", $username, $password) or die('Kan niet verbinden met de server: ' . mysql_error());
// Create tables
mysql_select_db($database, $con);
$sql = "
CREATE TABLE Accounts (
AccountID int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (AccountID),
FirstName varchar(20),
LastName varchar(20)
)
CREATE TABLE Relatives (
RelativeID int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (RelativeID),
FirstName varchar(20),
LastName varchar(20),
AccountID int,
FOREIGN KEY (AccountID) REFERENCES Accounts (AccountID)
)
CREATE TABLE Constructs (
ConstructID int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (ConstructID),
String varchar(255),
AccountID int,
FOREIGN KEY (AccountID) REFERENCES Accounts (AccountID)
)
CREATE TABLE Answers (
AnswerID int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (AnswerID),
String varchar(255),
ConstructID int,
FOREIGN KEY (ConstructID) REFERENCES Constructs (ConstructID)
)
";
// Execute query
mysql_query($sql,$con);
mysql_close($con);
?> |
|
Swetsenegger | zondag 18 december 2011 @ 15:46 |
Nu heb ik deze prachtige query om de top 10 verkochte producten van het afgelopen jaar uit mijn DB te trekken:
quote: SELECT produkten.*, count(*) as productcount FROM order_content JOIN orders on (orders.order_id=order_content.order_id) JOIN produkten on (produkten.product_id=order_content.product_id) WHERE produkten.product_menu IS NOT NULL AND produkten.product_menu<>0 AND orders.wishlist=0 AND orders.activated=1 AND orders.orderdate between ('2011-01-01 0:0:0') AND ('2012-01-01 0:0:0') GROUP BY produkten.product_id ORDER BY productcount DESC LIMIT 0, 10
Maar als ik dan dit leesvraag ik me af of ik wel de juiste resultaten terug krijg? |
GlowMouse | zondag 18 december 2011 @ 15:55 |
quote: je vergeet puntkomma's tussen queries, en je vergeet dat mysql_query maar één query uit kan voeren
quote: Op zondag 18 december 2011 15:46 schreef Swetsenegger het volgende:Nu heb ik deze prachtige query om de top 10 verkochte producten van het afgelopen jaar uit mijn DB te trekken: [..] Maar als ik dan dit leesvraag ik me af of ik wel de juiste resultaten terug krijg? dan moet je het nog een keer lezen |
VuilnisMetaal | zondag 18 december 2011 @ 16:15 |
quote: Op zondag 18 december 2011 15:55 schreef GlowMouse het volgende:[..] je vergeet puntkomma's tussen queries, en je vergeet dat mysql_query maar één query uit kan voeren [..] dan moet je het nog een keer lezen Juist! Het werkt nu helemaal! Dankjewel  |
Swetsenegger | zondag 18 december 2011 @ 16:20 |
quote: Hoe bedoel je? |
GlowMouse | zondag 18 december 2011 @ 16:58 |
quote: Het stukje waaruit je opmaakte dat je wellicht niet de juiste resultaten terugkrijgt, heb je niet begrepen. |
Swetsenegger | zondag 18 december 2011 @ 17:01 |
quote: Er staat dat je in je group by all niet aggregate kolommen zou moeten opnemen. Dat heb ik in bovenstaande query toch niet? Of zie ik wat over het hoofd? |
GlowMouse | zondag 18 december 2011 @ 17:10 |
eigenlijk niet (een andere db-server keurt je query af), maar van de oorzaak waardoor in hun voorbeeld verkeerde rijen worden teruggegeven heb jij geen last |
Swetsenegger | zondag 18 december 2011 @ 17:13 |
quote: Op zondag 18 december 2011 17:10 schreef GlowMouse het volgende:eigenlijk niet (een andere db-server keurt je query af), maar van de oorzaak waardoor in hun voorbeeld verkeerde rijen worden teruggegeven heb jij geen last Das mooi 
Kan je uitleggen waarom? Dan ga ik het misschien ook snappen. Tenslotte is dit een 'voor dummies' topic. |
GlowMouse | zondag 18 december 2011 @ 17:31 |
Dummy betekent niet dat je niet hoeft te googlen. http://dev.mysql.com/doc/(...)-hidden-columns.html |
Swetsenegger | zondag 18 december 2011 @ 17:39 |
quote: Moet je wel weten waar je op moet googlen. Gelezen en duidelijk. |
-Datdus- | dinsdag 20 december 2011 @ 21:19 |
Ik ben bezig met wat reguliere expressies en hier loop ik een beetje op stuk.
Dit is mijn code:
1 | return(preg_match('^[0-9]{$min,$max}^', $string))? 1 : 0; |
Ik wil alleen nummers toelaten met een range die wordt bepaald door de $min en $max variabelen. Hij blijft een verkeerde waarde geven behalve als ik het zo doe:
1 | return(preg_match('^[0-9]{0,10}^', $string))? 1 : 0; |
Ik heb dit al geprobeerd maar dit werkt ook niet.
1 | return(preg_match('^[0-9]{'.$min.','.$max.'}^', $string))? 1 : 0; |
Weten jullie hoe ik dit op kan lossen?  |
GlowMouse | dinsdag 20 december 2011 @ 21:24 |
Die laatste werkt weldegelijk. Je kunt ook gewoon preg_match returnen, die ? 1 : 0 is eigenlijk onlogisch. |
-Datdus- | dinsdag 20 december 2011 @ 21:26 |
quote: Je hebt gelijk, bedankt! |
GlowMouse | dinsdag 20 december 2011 @ 21:28 |
En je staat nu asdf1234asdf ook toe. Je zoekt iets als /^[0-9]{0,10}$/ |
GI | woensdag 21 december 2011 @ 08:01 |
Zit hier toevallig een regexp expert die mij een alleen alfanumerieke characters regexp kan vertellen ? Ik heb nu bijvoorbeeld :
1 2 3 | <?php $factuur["levPostalcode"] = preg_replace("/[^0-9\s]/", "", $factuur["levPostalcode"]); ?> |
om de cijfers uit een postcode te plukken. Maar ik wil nu een vergelijkbare hebben die het huisnummer weglaat uit een adres.
Nou kan ik wel valsspelen en de code die ik heb te gebruiken en die daarna uit het adres te replacen met "" maar das net weer niet netjes genoeg  |
GlowMouse | woensdag 21 december 2011 @ 10:11 |
Haal de ^ en de \s uit de regex en rtrim het resultaat. |
uppie83 | woensdag 21 december 2011 @ 12:45 |
Ik heb een stuk code dat controleert of een string aan een aantal eisen voor een kenteken voldoet. Gek genoeg levert de enige juiste string een 'maximum execution time exceeded' op (bij $kent4). Ik zie niet wat het probleem is. Iemand een 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 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 | <?php /* Een autokenteken bestaat altijd uit 8 tekens (XX-XX-XX). Ieder teken is een letter, een cijfer of een ‘-‘-teken. Een letter staat altijd naast een andere letter of naast een ‘-‘-teken. Een cijfer staat altijd naast een ander cijfer of naast een ‘-‘-teken. */
function kenteken($string){ //maakt de functie aan die als parameter de string accepteert $length = strlen($string); //bekijkt de lengte van de string $letters = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'); //array met alle letters $cijfers = array('1','2','3','4','5','6','7','8','9','0'); //array met alle cijfers $which=0; //$which zal later in de loop aangeven in welke categorie het vorige teken viel, 1 = letter, 2 = cijfer, 3 = '-' if($length != 8){ //als de lengte van de string niet gelijk is aan acht wordt aan de eerste voorwaarde al niet voldaan en 'false' gereturned return false; } elseif($string[3]!='-' and $string[5]!='-' ){ //kijkt of op de 3e en 6e plek wel het '-' teken staat return false; } else { for($index = 0; $index < $length; $index++){ //loop om door de stringposities heen te lopen if(in_array(strtoupper($string[$index]),$letters)){ //als aan deze conditie wordt voldaan, dan is het huidige teken een letter if($which != 2){ //als het vorige teken geen cijfer was (dus een 0, een 1 of een 3) wordt $which op 1 gezet $which=1; } else{ //het huidige teken is een letter, terwijl de voorgaande een cijfer was, wat niet is toegestaan return false; } } elseif(in_array($string[$index],$letters)){ //als aan deze conditie wordt voldaan, dan is het huidige teken een cijfer if($which != 1){ //als het vorige teken geen letter was (dus een 0, een 2 of een 3) wordt $which op 2 gezet $which=2; } else{ //het huidige teken is een cijfer, terwijl de voorgaande een letter was, wat niet is toegestaan return false; } } elseif($string[$index]== '-'){ //als aan deze conditie wordt voldaan, dan is het huidige teken een '-' if ($index=2 or $index=5){ //het '-' teken mag alleen op posities 3 en 6 voorkomen $which=3; //$which wordt enkel op 3 gezet wanneer het '-' teken op de juiste positie staat } else{ return false; } } else{ //het huidige teken valt in geen van de toegestane condities, dus een false wordt gereturned return false; } } return true; //als de loop is doorlopen en niet is afgebroken doordat niet aan een van de eisen is voldaan, kan true worden gereturned } }
$kent1="ABCDEFGHI"; $kent2="a3-za-aa"; $kent3="ac-44-@r"; $kent4="ac-pz-44"; $kent5="jhgddest"; $kent6="12345678";
if(kenteken($kent1)){ echo "$kent1 is een kenteken.<br>"; } else { echo "$kent1 is geen kenteken.<br>"; } if(kenteken($kent2)){ echo "$kent2 is een kenteken.<br>"; } else { echo "$kent2 is geen kenteken.<br>"; } if(kenteken($kent3)){ echo "$kent3 is een kenteken.<br>"; } else { echo "$kent3 is geen kenteken.<br>"; } if(kenteken($kent4)){ echo "$kent4 is een kenteken.<br>"; } else { echo "$kent4 is geen kenteken.<br>"; } if(kenteken($kent5)){ echo "$kent5 is een kenteken.<br>"; } else { echo "$kent5 is geen kenteken.<br>"; } if(kenteken($kent6)){ echo "$kent6 is een kenteken.<br>"; } else { echo "$kent6 is geen kenteken.<br>"; } ?> |
|
mstx | woensdag 21 december 2011 @ 12:52 |
quote: Op woensdag 21 december 2011 12:45 schreef uppie83 het volgende:Ik heb een stuk code dat controleert of een string aan een aantal eisen voor een kenteken voldoet. Gek genoeg levert de enige juiste string een 'maximum execution time exceeded' op (bij $kent4). Ik zie niet wat het probleem is. Iemand een idee? [ code verwijderd ] if ($index=2 or $index=5){
Ik zou daar == gebruiken. Als hij 1x bij die regel komt zet hij hem elke keer weer op 2 waardoor hij oneindig door blijft gaan. |
GlowMouse | woensdag 21 december 2011 @ 12:57 |
Op regel 30 moet je $cijfers gebruiken. En je doet nu niks met nieuwe kentekens met een groepje van 3 letters; wat je nu hebt kan ook met een regex. |
uppie83 | woensdag 21 december 2011 @ 13:02 |
quote: Op woensdag 21 december 2011 12:52 schreef mstx het volgende:[..] if ($index=2 or $index=5){ Ik zou daar == gebruiken. Als hij 1x bij die regel komt zet hij hem elke keer weer op 2 waardoor hij oneindig door blijft gaan. Bedankt Dat was idd de truc.
quote: Op woensdag 21 december 2011 12:57 schreef GlowMouse het volgende:Op regel 30 moet je $cijfers gebruiken. En je doet nu niks met nieuwe kentekens met een groepje van 3 letters; wat je nu hebt kan ook met een regex. Ook bedankt, dat loste inderdaad het laatste probleem nog op. Klopt dat ik niets met nieuwe kentekens doe, maar dat was niet de opdracht Regex ken ik niet... De docent gaf als tip om modulo te gebruiken, maar die begreep ik dan weer niet  |
Sitethief | woensdag 21 december 2011 @ 13:38 |
Wat doet jouw systeem met de volgende kentekens:
00-BBB-1 1-VBB-01 DB-001-B D-001-BB
Die zijn namelijk ook gewoon geldig... |
GlowMouse | woensdag 21 december 2011 @ 13:57 |
quote: Heb jij oogjes gekregen van onze goede Heer? |
Sitethief | woensdag 21 december 2011 @ 15:00 |
Je hebt gelijk, ik hoop dat ie niet straks alsnog dat kan inbouwen  |
uppie83 | woensdag 21 december 2011 @ 15:17 |
quote: Geen idee, maar volgens mij zou ik dat oplossen door de condities rondom het '-' teken wat te versoepelen. |
Pizzalucht | woensdag 21 december 2011 @ 15:47 |
Ik heb een master/slave opstelling gemaakt in MySQL, op dit moment loopt hij perfect waarbij de slave tot nu toe elk moment maximaal een seconde achter ligt.
Kan iemand mij vertellen of zo'n opstelling verstandig en stabiel is?
Ja, we weten dat je niet kan schrijven naar een slave dabase(hij schrijft het iig niet weg naar de master). |
GlowMouse | woensdag 21 december 2011 @ 15:53 |
Ligt er net aan wat je ervan verwacht. |
Pizzalucht | woensdag 21 december 2011 @ 16:00 |
Het gaat erom dat we de login gegevens van phpbb gebruiken voor het inloggen op een ander systeem(spel). Nu maken we nog verbinding naar de externe server(de webserver), daar willen we vanaf omdat die voor steeds meer load op die server zorgt en we niet afhankelijk van de webserver willen zijn. |
GlowMouse | woensdag 21 december 2011 @ 16:03 |
Een inlogsysteem dat voor te hoge load zorgt Zorg dat je direct met MySQL verbindt en niet via een webscript communiceert, dan mag er geen enkel probleem zijn. |
Pizzalucht | woensdag 21 december 2011 @ 16:05 |
Je kan wel doen, maar je hebt geen idee hoe het in elkaar zit, dus doe even normaal.
We willen gewoon niet afhankelijk zijn van de webserver, dat als deze eruit ligt mensen nog gewoon in kunnen loggen op het spel. |
GlowMouse | woensdag 21 december 2011 @ 16:08 |
Username en wachtwoord ophalen is een enkele primary key lookup, dat kost zo weinig rekenkracht dat je er een gigabitlijn mee voltrekt. |
Pizzalucht | woensdag 21 december 2011 @ 16:09 |
Hij laad ook profile fields, hij checkt op bans, en haalt wat andere dingen op.
Gameservers doen ook session checks om te kijken of de gebruiker geldig is.
Er zit ook authenticatie op de gameservers om te kijken of deze een geldige key hebben om te hosten.
Is het zo raar dat we de webserver en gameserver gescheiden willen houden?
En je gaat er ook van uit dat de webserver niets anders te doen heeft dan logins regelen voor de gameserver, wat natuurlijk niet waar is. |
GlowMouse | woensdag 21 december 2011 @ 16:12 |
Nog steeds zie ik geen fancy dingen waarvoor je naar een master/slave setup zou willen. Ik zou eerst eens uitzoeken waarom de load zo hoog is. |
#ANONIEM | woensdag 21 december 2011 @ 16:15 |
Zo`n hoge load is ongezond. Beter ga je structureel bekijken waarom de load zo hoog is. |
Pizzalucht | woensdag 21 december 2011 @ 16:16 |
Wat zou jij dan doen? Weet je, laat maar weer lekker zitten Gloeimuisje, je bent weer lekker behulpzaam. Ik vraag alleen of mensen ervaring hebben met een master/slave en of het stabiel is.
Ik zeg dat we niet afhankelijk willen zijn van de webserver, waardoor een simpele verbinding naar de webserver al niet mogelijk is.
Misschien is onze load wel hoog omdat we veel bezoekers/spelers hebben?
Ik zeg niet dat onze load te hoog is, ik wil alleen voorkomen dat hij te hoog wordt als we volledig over gaan op het loginsysteem.
quote: En waar staat wat voor load ik heb? |
#ANONIEM | woensdag 21 december 2011 @ 16:16 |
Daarnaast snap ik de scheiding niet zo goed. |
Pizzalucht | woensdag 21 december 2011 @ 16:16 |
quote:
quote: +Dat een verbinding naar een andere server niet zo optimaal is. |
#ANONIEM | woensdag 21 december 2011 @ 16:17 |
quote: Op woensdag 21 december 2011 16:00 schreef Pizzalucht het volgende:Het gaat erom dat we de login gegevens van phpbb gebruiken voor het inloggen op een ander systeem(spel). Nu maken we nog verbinding naar de externe server(de webserver), daar willen we vanaf omdat die voor steeds meer load op die server zorgt en we niet afhankelijk van de webserver willen zijn. Dat wil je dus niet. Je wilt blijkbaar niet afhankelijk zijn van je webserver. |
#ANONIEM | woensdag 21 december 2011 @ 16:18 |
Dus je hebt straks een gameserver waarop een webserver draait die je los wilt koppelen van je primaire webserver waar het forum e.d. op draait? |
Pizzalucht | woensdag 21 december 2011 @ 16:19 |
quote: Op woensdag 21 december 2011 16:18 schreef Scorpie het volgende:Dus je hebt straks een gameserver waarop een webserver draait die je los wilt koppelen van je primaire webserver waar het forum e.d. op draait? Nee, die gameserver heeft geen webserver?
We hebben 2 fysieke servers, een de webserver, de andere de gameserver. Ze hebben allebei MySQL, en de webserver is de master.
Even voor de duidelijkheid, we hebben het over een desktop game die contact maakt met de gameserver voor login/friendsystem/serverlist/stats |
GlowMouse | woensdag 21 december 2011 @ 16:24 |
quote:

quote: Ik vraag alleen of mensen ervaring hebben met een master/slave en of het stabiel is.
Niemand heeft ervaring, want het is heel onstabiel Grote bedrijven gebruiken MySQL, wat denk je zelf dat het stabiel is  |
#ANONIEM | woensdag 21 december 2011 @ 16:24 |
Maar je primaire login gegevens staan op de webserver? |
Pizzalucht | woensdag 21 december 2011 @ 16:25 |
quote: Inderdaad, mensen loggen in met hun forum account.
quote: Ik heb het over master/slave, niet over MySQL zelf... |
#ANONIEM | woensdag 21 december 2011 @ 16:28 |
quote: Daar zou ik dan sowieso vanaf willen stappen. Maak een apart login systeem voor je game. Scheelt je een hoop gezeik. |
Pizzalucht | woensdag 21 december 2011 @ 16:29 |
quote: Waarom? Waarom zouden mensen 2 verschillende accounts willen hebben? |
#ANONIEM | woensdag 21 december 2011 @ 16:47 |
quote: Je denkt teveel vanuit de gebruiker en te weinig vanuit de techniek.
Je webserver wordt gehacked en je forum database wordt leeggetrokken. Weg spel, weg forum.
Je forum wordt gehacked en je user wachtwoorden worden gekraakt. Weg spel, weg forum.
Je spel login systeem wordt gekraakt en mensen trekken je forum database leeg. Kraken de wachtwoorden en kunnen zo root krijgen op je forum. Weg spel, weg forum.
Ik zou nooit, maar dan ook echt nooit mijn beveiliging in de handen van phpBB leggen voor zo`n spel.
[ Bericht 5% gewijzigd door #ANONIEM op 21-12-2011 16:47:36 ] |
MrNiles | woensdag 21 december 2011 @ 21:29 |
ik heb een fotoalbum(van internet geplukt) in een ?func=fotoalbum gezet alles leek goed te werken, op een browser op het werk maar thuis krijg ik ineens een boel foutmeldingen oa
1 2 3 | <?php Warning: chmod() [function.chmod]: Unable to access /thumbs/klein_ in /xxx/blabla/domains/blabla.nl/public_html/includes/fotos.php on line 78 ?> |
regel 78
1 2 3 | <?php chmod($map . '/thumbs/' . $type . '_' . $bestandsnaam, 0777); ?> |
wat gaat er nu precies fout? alle folders bestaan, script werkt verder zoals het hoort maar ik heb wel 10 foutmeldingen varierent van bovenstaande tot Notice: Undefined offset: 0 |
GlowMouse | woensdag 21 december 2011 @ 21:34 |
$map zal wel leeg zijn |
MrNiles | woensdag 21 december 2011 @ 21:35 |
quote: nope bovenaan in script
1 2 3 | <?php $map = 'fotoalbum'; ?> |
in fotoalbum staat mijn foto's + thumbs deze zie ik ook op scherm kan het iets te maken hebben met schrijfrechten? |
boem-dikkie | woensdag 21 december 2011 @ 21:56 |
Ben je nu niet je bestand aan het chmodden in plaats van je map? |
mstx | woensdag 21 december 2011 @ 21:57 |
quote: Op woensdag 21 december 2011 21:35 schreef MrNiles het volgende:[..] nope bovenaan in script [ code verwijderd ] in fotoalbum staat mijn foto's + thumbs deze zie ik ook op scherm kan het iets te maken hebben met schrijfrechten? Waarom zoekt het script dan naar "/thumbs/klein_" ? Voor zover ik kan zien betekent dat dat zowel $map als $bestandsnaam leeg zijn, anders stond er wel "fotoalbum/thumbs/klein_bestandsnaam.ext". |
MrNiles | woensdag 21 december 2011 @ 22:10 |
quote: Op woensdag 21 december 2011 21:57 schreef mstx het volgende:[..] Waarom zoekt het script dan naar "/thumbs/klein_" ? Voor zover ik kan zien betekent dat dat zowel $map als $bestandsnaam leeg zijn, anders stond er wel "fotoalbum/thumbs/klein_bestandsnaam.ext". kan zijn...vreemd krijg ook de melding Warning: Division by zero de waarde die nul zou zijn is $breedte_origineel die gehaalt wordt uit 1 2 3 | <?php list($breedte_origineel, $hoogte_origineel, $extensie) = getimagesize($map . '/' . $bestandsnaam); ?> |
tja..ik zie m echt niet..nog ff kijken en anders morgen weer een dag |
Pakspul | woensdag 21 december 2011 @ 22:16 |
quote: Op woensdag 21 december 2011 22:10 schreef MrNiles het volgende:[..] kan zijn...vreemd krijg ook de melding Warning: Division by zero de waarde die nul zou zijn is $breedte_origineel die gehaalt wordt uit [ code verwijderd ] tja..ik zie m echt niet..nog ff kijken en anders morgen weer een dag var_dump die bende dan en loop stap voor stap na en kijk wat de variabelen voor waarde hebben en of dit klopt met wat de bedoeling is. Beetje debuggen is toch niet zo complex iets. |
Sitethief | woensdag 21 december 2011 @ 23:06 |
Var_dump?
xdebug + netbeans  |
Pakspul | woensdag 21 december 2011 @ 23:09 |
Notepad de gekste jeweetz  |
MXD | woensdag 21 december 2011 @ 23:16 |
Hoi allen!
Ik heb een site gemaakt met poging tot php-formulier, samen met database. Ik vul mijn tabelletje op mijn site in en krijg de volgende foutmelding: " Er is een fout opgetreden met foutnummer 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 ''' at line 2 "
Dit is mijn code:
SPOILER 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 | <?php // nadat de pagina zichzelf heeft aangeroepen variabelen initialiseren if (!empty($_POST)){ $server = "*"; $user = "*"]; $wachtwoord = "*"; $database = "*"; $query = ""; $bedankt = "bevestiging_toevoegen.php"; // adres van de bedank-pagina. // Database openen. $db = mysql_connect($server, $user, $wachtwoord); // verbinding maken mysql_select_db($database); // database selecteren /* stel een SQL-query op met de gegevens uit het formulier, eerst worden de kolomnamen genoemd, daarna de waarden van de velden. Voor de waarde van "id" vul je een lege waarde in. De operator .= plakt dit allemaal aan elkaar vast. Let daarna goed op de positie van de aanhalingstekens! Na "loopnummer" wordt afgesloten met een haakje. */ $query = "INSERT INTO contact (id, voornaam, tussenvoegsel, achternaam, leeftijd, leerzaam, cijfer) "; $query .= "VALUES ('', '"; $query .= $_POST["voornaam"] . "', '"; $query .= $_POST["tussenvoegsel"] . "', '"; $query .= $_POST["achternaam"] . "', '"; $query .= $_POST["leeftijd"] . "', '"; $query .= $_POST["leerzaam"] . "', '"; $query .= $_POST["cijfer"] . "', '"; // probeer de query (zoek-opdracht) uit te voeren if (!mysql_query($query)){ // als er een fout is opgetreden echo "Er is een fout opgetreden met foutnummer " . mysql_errno() . " : " . mysql_error(); mysql_close($db); // database afsluiten exit; } else{ /* Invoegen is geslaagd. De functie mysql_insert_id() haalt de id van de laatste INSERT opdracht op. Geef het id van de zojuist ingevoegde gegevens mee als querystring aan het adres van de bedank-pagina. Daarna database afsluiten en bezoeker doorsturen naar de bedank-pagina. */ $bedankt .= "?id=" . mysql_insert_id($db); mysql_close($db); header("location:$bedankt"); } } else{ ?> <!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> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> </head>
<body> <!-- De globale variabele $_SERVER["PHP_SELF"] zorgt ervoor dat als het formulier verzonden wordt, de pagina zichzelf weer aanroept. Globale variabelen zijn variabelen die op alle pagina's geldig zijn. De meeste variabelen zijn "Lokale variabelen". Deze zijn slechts geldig op de pagina waar ze gedefinieerd zijn. --> <h2>Vul hier uw gegevens in:</h2> <form method="post" action="<?php echo $_SERVER["PHP_SELF"] ?>"> Voornaam : <input type="text" name="voornaam"><br /> Tussenvoegsel: <input type="text" name="tussenvoegsel"><br /> Achternaam : <input type="text" name="achternaam"><br /> Leeftijd : <input type="text" name="leeftijd"><br /> Vond u deze site leerzaam? : <input type="text" name="leerzaam"><br /> Wat voor cijfer geeft u deze site? : <input type="text" name="cijfer"><br /> <input type="submit" name="verzenden" value="Verzenden"> <input type="reset" name="leegmaken" value="Leegmaken"> <hr /> </form> </body> </html> <?php } // het else-blok afsluiten ?> |
Dingen met een * heb ik voor hier even leeggelaten, staat wel ingevuld.
Wat moet ik doen? Ik ben namelijk niet zo'n PHP-held, en heb dit gekopiëerd uit een bestand dat ik van m'n leraar heb gekregen.
Alvast bedankt! |
GlowMouse | woensdag 21 december 2011 @ 23:17 |
Al eens gekeken hoe de query eruit ziet? |
MXD | woensdag 21 december 2011 @ 23:18 |
Als jij me uitlegt wat dat is en hoe ik ernaar moet kijken?  |
Arcee | woensdag 21 december 2011 @ 23:23 |
Je sluit je INSERT-statement niet af. Na de laatste toevoeging moet geen ,' meer, maar gewoon een sluithaakje.
Vervang
1 | $query .= $_POST["cijfer"] . "', '"; |
Door
1 | $query .= $_POST["cijfer"] . "')"; |
|
MXD | woensdag 21 december 2011 @ 23:28 |
Lost niks op. Heb ik alles wel goed ingevuld?
deze gegevens heb ik van mijn host gekregen: $mysql_host = "mysql4.000webhost.com"; $mysql_database = "a1320523_MVDVR"; $mysql_user = "a1320523_mvdvr"; $mysql_password = "*";
mijn tabel in de database heet contact
1 2 3 4 5 6 7 8 | <?php $server = "mysql4.000webhost.com"; $user = "a1320523_mvdvr"; $wachtwoord = "*"; $database = "a1320523_MVDVR"; $query = ""; $bedankt = "bevestiging_toevoegen.php"; // adres van de bedank-pagina. ?> |
is dit dan goed ingevuld?
* is overigens weer vervangen |
Arcee | woensdag 21 december 2011 @ 23:31 |
1 | $query .= $_POST["cijfer"] . "')"; |
Echt vervangen door bovenstaande? Dus door single quote + sluithaakje.
In het commentaar staat ook nog: Na "loopnummer" wordt afgesloten met een haakje.
In het origineel zat mogelijk nog een veld loopnummer waar het sluithaakje in stond. |
cablegunmaster | woensdag 21 december 2011 @ 23:32 |
quote: Op woensdag 21 december 2011 23:28 schreef MXD het volgende:Lost niks op. Heb ik alles wel goed ingevuld? deze gegevens heb ik van mijn host gekregen: $mysql_host = "mysql4.000webhost.com"; $mysql_database = "a1320523_MVDVR"; $mysql_user = "a1320523_mvdvr"; $mysql_password = "*"; mijn tabel in de database heet contact [ code verwijderd ] is dit dan goed ingevuld? * is overigens weer vervangen Lijkt me goed ingevuld. heb je nog ergens problemen? of een foutmelding? |
MXD | woensdag 21 december 2011 @ 23:40 |
Hij doet het nu. Ik heb geen idee hoe, maar hij doet het!
Alsnog bedankt iedereen!  |
MXD | woensdag 21 december 2011 @ 23:45 |
Nee toch niet.
Ik heb 1x mijn gegevens ingevoerd en die staan nu in de database. Echter, als ik dit nog eens doe (met andere gegevens) krijg ik dit: Er is een fout opgetreden met foutnummer 1062 : Duplicate entry '0' for key 'PRIMARY'
Ik snapt dat het ID dan niet veranderd wordt en er van elk ID maar 1 mag zijn, maar hoe los ik dit op? |
KomtTijd... | woensdag 21 december 2011 @ 23:47 |
Door dat veld te veranderen. |
GlowMouse | woensdag 21 december 2011 @ 23:49 |
leer eerst SQL |
The_Terminator | donderdag 22 december 2011 @ 00:02 |
quote: Op woensdag 21 december 2011 23:45 schreef MXD het volgende:Nee toch niet. Ik heb 1x mijn gegevens ingevoerd en die staan nu in de database. Echter, als ik dit nog eens doe (met andere gegevens) krijg ik dit: Er is een fout opgetreden met foutnummer 1062 : Duplicate entry '0' for key 'PRIMARY' Ik snapt dat het ID dan niet veranderd wordt en er van elk ID maar 1 mag zijn, maar hoe los ik dit op? http://dev.mysql.com/doc/(...)-auto-increment.html |
Pizzalucht | donderdag 22 december 2011 @ 00:16 |
En natuurlijk de input escapen |
cablegunmaster | donderdag 22 december 2011 @ 00:17 |
quote: ik gebruik meestal zo'n soort functie daarvoor .
1 2 3 4 5 | <?php function esc($str){ return mysql_real_escape_string($str); } ?> |
|
Pizzalucht | donderdag 22 december 2011 @ 01:12 |
quote: Ja of PDO. Of een eigen database wrapper. Maakt niet echt uit, als je het maar doet. |
Cue_ | donderdag 22 december 2011 @ 08:31 |
Oke, nieuw probleempje.
Heb een php pagina met daarin verschillende gegevens, opgebouwd met ong 5 blokken als onderstaande:
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 | echo " <a name='Aantallen_te_Matchen_Orders'></a> <b>Aantallen te Matchen Orders</b> Status van ".$datumvandaag." tijdstip ".$tijdnu." <a href='#Top'>Top</a> </div> <br> <table style='text-align: left; width: 644px;' border='1' cellspacing='2' cellpadding='2'> <tbody> <tr> <td style='vertical-align: top; background-color: rgb(255, 204, 153); text-align: center;'>Plangroep<br></td> <td style='vertical-align: top; background-color: rgb(255, 204, 153); text-align: center;'>Totaal<br></td> <td style='vertical-align: top; background-color: rgb(255, 204, 153); text-align: center;'>ap1<br></td> <td style='vertical-align: top; background-color: rgb(255, 204, 153); text-align: center;'>ap2<br></td> <td style='vertical-align: top; background-color: rgb(255, 204, 153); text-align: center;'>ap3<br></td> <td style='vertical-align: top; background-color: rgb(255, 204, 153); text-align: center;'>ap4<br></td> <td style='vertical-align: top; background-color: rgb(255, 204, 153); text-align: center;'>ap5<br></td> <td style='vertical-align: top; background-color: rgb(255, 204, 153); text-align: center;'>ap6<br></td> <td style='vertical-align: top; background-color: rgb(255, 204, 153); text-align: center;'>ap7<br></td> <td style='vertical-align: top; background-color: rgb(255, 204, 153); text-align: center;'>ap8<br></td> <td style='vertical-align: top; background-color: rgb(255, 204, 153); text-align: center;'>ap9<br></td> </tr> <tr> <td style='vertical-align: top; text-align: center;'>Aantal<br></td> "; AantalTeMatchen('lijst'); echo " </tr> </tbody> </table> <br> "; |
Nu moet er nieuwe pagina erbij komen die eigenlijk zorgt dat de verschillende blokken omstebeurten getoond worden. Dus eerst de uitkomst van blok 1, daarna blok 2, blok 3 etc. Zag zoiets wel mbv javascript
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 | ar quote=new Array(); quote[0]='This is quote number one'; /* add as many quotes as you like!*/ quote[1]='This is quote number two'; quote[2]='This is quote number three'; quote[3]='This is quote number four'; quote[4]='This is quote number five'; quote[5]='This is quote number six'; quote[6]='This is quote number seven'; quote[7]='This is quote number eight'; quote[8]='This is quote number nine'; quote[9]='This is quote number ten';
var speed=2000; /*this is the time in milliseconds adjust to suit*/ var q=0;
function showQuote() {
document.getElementById("quotes").innerHTML=quote[q]; q++; if(q==quote.length) { q=0; } } setInterval('showQuote()',speed); //]]> </script> |
Maar hoe ik t van mij erin zal moeten verwerken.. ik heb geen idee Jullie tips? of andere ideeen? |
Swetsenegger | donderdag 22 december 2011 @ 08:49 |
Wat probeer je nu precies te bereiken? Je hebt een pagina waarin je random 1 van de 5 tables toont? Of je wil die 5 tables in willekeurige volgorde parsen?
-edit- Ow wacht, je wil als de pagina geladen is op een bepaalde positie in je pagina elke keer een nieuw blok tonen zonder de pagina te verversen? Dat gaat niet met PHP, dat moet je clientside doen. |
Cue_ | donderdag 22 december 2011 @ 08:52 |
Ik wil dat hij 10 sec table 1 laat zien, vervolgens 10 sec table 2 , tot en met table 5 en dan weer begint bij table 1.
edit:yup dat inderdaad. Zat al te zoeken naar het javascript topic, maar kon ik niet vinden (vaag) dus probeerde het hier even. |
Swetsenegger | donderdag 22 december 2011 @ 08:54 |
Er was vroeger wel een javascript voor dummies topic. |
Swetsenegger | donderdag 22 december 2011 @ 08:57 |
[Javascript] voor dummies (deel 12) |
Cue_ | donderdag 22 december 2011 @ 08:59 |
quote: Er is al 49 dagen niet in dit topic gepost. Bedenk je of het zinvol is dit topic omhoog te schoppen. Klik hier om tóch te reageren.
Geen wonder dat ik hem niet kon vinden. Tnx  |
MrNiles | donderdag 22 december 2011 @ 09:09 |
quote: Op donderdag 22 december 2011 08:59 schreef Cue_ het volgende:[..] Er is al 49 dagen niet in dit topic gepost. Bedenk je of het zinvol is dit topic omhoog te schoppen. Klik hier om tóch te reageren. Geen wonder dat ik hem niet kon vinden. Tnx  [html, css, js] voor dummies #20 is meer actueler |
Light | donderdag 22 december 2011 @ 22:49 |
quote: Op woensdag 21 december 2011 23:45 schreef MXD het volgende:Nee toch niet. Ik heb 1x mijn gegevens ingevoerd en die staan nu in de database. Echter, als ik dit nog eens doe (met andere gegevens) krijg ik dit: Er is een fout opgetreden met foutnummer 1062 : Duplicate entry '0' for key 'PRIMARY' Ik snapt dat het ID dan niet veranderd wordt en er van elk ID maar 1 mag zijn, maar hoe los ik dit op? Door het veld ID niet op te nemen in je query. Hoef je er ook zelf geen waarde voor te verzinnen. |
Light | donderdag 22 december 2011 @ 23:01 |
quote: Op woensdag 21 december 2011 08:01 schreef GI het volgende:Zit hier toevallig een regexp expert die mij een alleen alfanumerieke characters regexp kan vertellen ? Ik heb nu bijvoorbeeld : [ code verwijderd ] om de cijfers uit een postcode te plukken. Maar ik wil nu een vergelijkbare hebben die het huisnummer weglaat uit een adres. Nou kan ik wel valsspelen en de code die ik heb te gebruiken en die daarna uit het adres te replacen met "" maar das net weer niet netjes genoeg  Huisnummer weglaten uit het adres is lastig. Je hebt namelijk ook straten met een nummer in de straatnaam. En je hebt te maken met huisnummers met toevoeging, waarbij die toevoeging uit letters en/of cijfers en/of spaties kan bestaan.  |
The_Terminator | donderdag 22 december 2011 @ 23:09 |
quote: Op donderdag 22 december 2011 23:01 schreef Light het volgende:[..] Huisnummer weglaten uit het adres is lastig. Je hebt namelijk ook straten met een nummer in de straatnaam. En je hebt te maken met huisnummers met toevoeging, waarbij die toevoeging uit letters en/of cijfers en/of spaties kan bestaan.  Een deel kun je al opvangen door de string na de laatste spatie als huisnummer te beschouwen. |
Light | donderdag 22 december 2011 @ 23:14 |
quote: Dus in "Dorpsstraat 5 E" wil je "E" als huisnummer beschouwen? |
KomtTijd... | donderdag 22 december 2011 @ 23:15 |
quote: Maak er de laatste numerieke string van dan  |
The_Terminator | donderdag 22 december 2011 @ 23:16 |
quote: Daarom zeg ik ook 'een deel', ik zeg niet dat mijn methode perfect is natuurlijk. |
Apekoek | vrijdag 23 december 2011 @ 11:57 |
Goed, ik heb deskundige hulp nodig, dat lijkt hier wel snor te zitten .
Ik heb namelijk een plugin in Wordpress die nog niet precies doet wat ik wil. Namelijk de "Contact form 7 to database extension". Graag wil ik de uploads die via het normale contact form zijn voltooid, downloadbaar worden in een post of op een pagina aan de voorkant. Echter zit ik hier met een PHP achtige generator die niet doet wat ik wil, of beter gezegd, welke code ik ook maak, ik kom er simpel weg niet uit. Ik zou namelijk erg graag het e-mail adres met de upload ergens in een post willen tonen.
Wat moet ik hier mee als jullie dit zo zien?
 |
Apekoek | vrijdag 23 december 2011 @ 12:19 |
quote: Op vrijdag 23 december 2011 11:57 schreef Apekoek het volgende:Goed, ik heb deskundige hulp nodig, dat lijkt hier wel snor te zitten  . Ik heb namelijk een plugin in Wordpress die nog niet precies doet wat ik wil. Namelijk de "Contact form 7 to database extension". Graag wil ik de uploads die via het normale contact form zijn voltooid, downloadbaar worden in een post of op een pagina aan de voorkant. Echter zit ik hier met een PHP achtige generator die niet doet wat ik wil, of beter gezegd, welke code ik ook maak, ik kom er simpel weg niet uit. Ik zou namelijk erg graag het e-mail adres met de upload ergens in een post willen tonen. Wat moet ik hier mee als jullie dit zo zien? [ afbeelding ] Ik heb er nu zoiets van gemaakt:
1 2 3 4 5 6 7 | [cfdb-html form="Test formulier" show="your-name,Upload" limit="10" orderby="Submitted desc" filelinks="link"]
<div class="your-headline-style">${your-name}</div>
<div class="download-link">${Upload}</div>
[/cfdb-html] |
Echter zie ik dan alleen de namen van de uploads, geen downloadbare links.  |
Crimyclown | vrijdag 23 december 2011 @ 13:34 |
Hoe submit je session values naar een database? Probeer het nu met een contactformulier maar krijg alleen maar errors. |
Pakspul | vrijdag 23 december 2011 @ 13:40 |
INSERT into database tabel?
Vaag antwoord op een vage vraag. Als je een concreter antwoord wilt dan moet je meer informatie geven. Vooral wat de foutmelding is kan zeer handig zijn. |
Crimyclown | vrijdag 23 december 2011 @ 13:57 |
1 2 3 | <?php session_start(); ?> |
1 2 3 4 5 6 | <form action="scripts/hoi.php" method="post"><table border="0"> <?php $_SESSION['breedte'] = $_POST['breedte']; echo $_SESSION['breedte'] ?> <?php $_SESSION['hoogte'] = $_POST['hoogte']; echo $_SESSION['hoogte'] ?> <input type="text" name="naam" value="testnaam" readonly /></td> <input type="submit" value="Invoeren" id="invoerknop" style="cursor:hand; cursor:pointer;" /> </form> |
hoi.php
1 2 3 4 5 6 7 | <?php include("db.inc.php");
$sql="INSERT INTO crimyclowndb (breedte,hoogte,naam) VALUES('{$_POST['breedte']}','{$_POST['hoogte']}','{$_POST['naam']}');"; mysql_query($sql) or die(mysql_error()); ?> |
foutmelding:
quote: Array ( [naam] => testnaam ) 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 '' at line 2
[ Bericht 10% gewijzigd door Crimyclown op 23-12-2011 14:18:20 ] |
Pakspul | vrijdag 23 december 2011 @ 14:08 |
Je geeft de SESSION waardes weer op het beeld en dan verwacht je dat ze ineens in het formulier terug komen? Dan zou je deze eerst aan een formulier object moeten handen.
1 | <input type=hidden name=hoogte value=10 /> |
bijvoorbeeld.
Of je moet $_SESSION i.p.v. $_POST in je query gebruiken.
[edit]Echo de $sql eens en kijken eens of je rare dingen ziet die niet mogen.[/edit] |
Crimyclown | vrijdag 23 december 2011 @ 14:54 |
quote: Op vrijdag 23 december 2011 14:08 schreef Pakspul het volgende:Je geeft de SESSION waardes weer op het beeld en dan verwacht je dat ze ineens in het formulier terug komen? Dan zou je deze eerst aan een formulier object moeten handen. [ code verwijderd ] bijvoorbeeld. Of je moet $_SESSION i.p.v. $_POST in je query gebruiken. [edit]Echo de $sql eens en kijken eens of je rare dingen ziet die niet mogen.[/edit] SESSIONS op alles gezet behalve de naam die op POST. Nu krijg ik geen errors meer, maar hij doet het ook nog niet. |
Catch22- | vrijdag 23 december 2011 @ 15:02 |
Ga alsjeblieft prepared statements gebruiken. Never, ever, ever, userinput (of post/get info) in je mysql gooien. |
Pakspul | vrijdag 23 december 2011 @ 15:04 |
quote: Begrijp je eigenlijk wat je doet? Als je de query gaat debuggen wat zegt je logica dan?quote: Correct, maar laten we het voor niet te moeilijk maken  |
Crimyclown | vrijdag 23 december 2011 @ 15:29 |
zoiets?
1 2 3 4 5 6 7 8 9 10 | <?php include("db.inc.php"); echo "<pre>"; print_r($_SESSION);
$query = "INSERT into crimyclowndb (hoogte, breedte ) ". "VALUES ('$hoogte', '$breedte')";
mysql_query($query) or die('Error, query failed : ' . mysql_error()); ?> |
|
Catch22- | vrijdag 23 december 2011 @ 15:31 |
http://www.phptuts.nl/view/26/5/ |
Cue_ | vrijdag 23 december 2011 @ 15:36 |
quote: Mag vast wel in Oracle he  hier willen we daar uiteindelijk nog wel naar toe, maar dat is ondertussen al een jaar uitgesteld volgens mij  |
Pakspul | vrijdag 23 december 2011 @ 16:02 |
quote: Je hebt dus absoluut geen idee wat je doet... |
Crimyclown | vrijdag 23 december 2011 @ 16:08 |
quote: Niet bepaalt, zal straks het naslag werk erbij halen. |
GlowMouse | vrijdag 23 december 2011 @ 16:13 |
*bepaald, *naslagwerk |
Apekoek | vrijdag 23 december 2011 @ 19:01 |
Iemand hier die me hier mee kan helpen?
quote: Op vrijdag 23 december 2011 11:57 schreef Apekoek het volgende:Goed, ik heb deskundige hulp nodig, dat lijkt hier wel snor te zitten  . Ik heb namelijk een plugin in Wordpress die nog niet precies doet wat ik wil. Namelijk de "Contact form 7 to database extension". Graag wil ik de uploads die via het normale contact form zijn voltooid, downloadbaar worden in een post of op een pagina aan de voorkant. Echter zit ik hier met een PHP achtige generator die niet doet wat ik wil, of beter gezegd, welke code ik ook maak, ik kom er simpel weg niet uit. Ik zou namelijk erg graag het e-mail adres met de upload ergens in een post willen tonen. Wat moet ik hier mee als jullie dit zo zien? [ afbeelding ]
|
Light | vrijdag 23 december 2011 @ 23:55 |
quote: Alsof PDO lastiger is dan standaard SQL |
Light | vrijdag 23 december 2011 @ 23:58 |
quote: Op vrijdag 23 december 2011 15:36 schreef Cue_ het volgende:[..] Mag vast wel in Oracle he  hier willen we daar uiteindelijk nog wel naar toe, maar dat is ondertussen al een jaar uitgesteld volgens mij 
 |
Ofyles2 | zondag 25 december 2011 @ 18:18 |
quote: Daar ben ik sinds kort op overgestapt. Dit omdat ik MySQL direct gebruiken onpraktischer begon te vinden en ik MySQLi ook zo'n onding vind. |
glasbak | maandag 26 december 2011 @ 21:12 |
Ik loop weer eens te prutsen.
Ik heb (als voorbeeld) in mijn database, een tabel met 5 users, nummer 1,2,3,4 en 5 (hoe logisch).
Ik heb in een andere tabel vragen staan, met in een van de velden de nummers van users die die vraag al gezien hebben. Daar kan dus bijvoorbeeld instaan, 2,4,5
Hoe kan ik nu het beste een vraag selecteren die bijvoorbeeld user nummer 3 nog niet gehad heeft?
WHERE NOT IN (3) werkt niet, of ik moet iets verkeerds doen.
Of moet ik de manier van opslaan anders aanpakken? |
GlowMouse | maandag 26 december 2011 @ 21:43 |
http://explainextended.co(...)ts-nullable-columns/ |
MrNiles | dinsdag 27 december 2011 @ 10:43 |
om maar op 1 plaats te wijzigen heb ik nu een menu gemaakt uit een database
1 2 3 4 5 | <?php $result = mysql_query ("SELECT * FROM hoofdmenu ORDER BY H_id ASC"); while($row = mysql_fetch_array($result)){ echo "<a href = 'index_new.php?func=".$row['H_name']."' class='".$row['H_name']." ' >".$row['H_name']."</a>"; ?> |
maar hoe kan ik hier nu iets active maken? ik gebruik functions voor elke pagina aan te roepen (index.php?func=home of func=pagina2 etc
zelf dat ik iets aan
1 2 3 4 5 6 7 8 9 10 | <?php $result = mysql_query ("SELECT * FROM hoofdmenu ORDER BY H_id ASC"); while($row = mysql_fetch_array($result)){
if ($row['H_actief'] == "1") { echo "<a href = 'index_new.php?func=".$row['H_name']."' class='".$row['H_name']." actief"." ' >".$row['H_name']."</a>"; } else{ echo "<a href = 'index_new.php?func=".$row['H_name']."' class='".$row['H_name']." ' >".$row['H_name']."</a>"; ?> |
maar ben er nog niet helemaal aan uit hoe die 1 en 0 in de database kan updaten
iemand een idee hoe zoiets aan te pakken of moet het helemaal anders opgezet worden? |
mstx | dinsdag 27 december 2011 @ 10:53 |
quote: Op dinsdag 27 december 2011 10:43 schreef MrNiles het volgende:om maar op 1 plaats te wijzigen heb ik nu een menu gemaakt uit een database [ code verwijderd ] maar hoe kan ik hier nu iets active maken? ik gebruik functions voor elke pagina aan te roepen (index.php?func=home of func=pagina2 etc zelf dat ik iets aan [ code verwijderd ] maar ben er nog niet helemaal aan uit hoe die 1 en 0 in de database kan updaten iemand een idee hoe zoiets aan te pakken of moet het helemaal anders opgezet worden? Je bedoelt dat het item met de pagina waar je op bent actief is?
1 2 3 | <?php if ($row['H_name'] == $_GET['func']) { ?> |
|
MrNiles | dinsdag 27 december 2011 @ 11:12 |
quote: maar het wordt eigenlijk iets ingewikkelder :p ik heb een "TOP"menu (een fixed balk bovenin de pagina) met enkele mogelijkheden elk topmenu-item krijgt links op de pagina een submenu. Ik had bedacht om ook daarvoor die func mee te geven..maar dan ben ik dus mijn actief in het topmenu kwijt
is dit iets voor multidimensional arrays? ik wil geen dropdown menu maken maar een topmenu-balk die een submenu opent op het scherm
[ Bericht 4% gewijzigd door MrNiles op 27-12-2011 15:27:52 ] |
Feyenoordlife | vrijdag 30 december 2011 @ 16:40 |
Even geleden dat ik wat met PHP heb gedaan, en ik moet nu even snel iets fixen voor een trainingskamp. Het lukt mij alleen niet meer om meerdere records tegelijk in te voeren. Het was een simpel iets, maar ik kom er zo snel ff niet meer op.
Ik krijg een aantal resultaten uit mijn while loop en deze worden in een tabelletje gegooid (niet erg netjes nu, maar dat maakt hiervoor even niet uit).
1 2 3 4 5 6 7 8 9 10 | <tr><td><?php echo $row[Naam]; ?><input name="Naam[]" value="<?php echo $row[Naam]; ?>" type="hidden"></td> <td><input name="Punten[]" size="2" value="1"></td> <td><input name="Onderdeel" value="<?php echo $Onderdeel; ?>" type="hidden"><input name="ID" value="<?php echo $row[ID]; ?>" type="hidden"></td></tr> <?php } ?> </table> <input type="submit" name="Opslaan" value="Opslaan" /></form><br />
<?php if($_SERVER['REQUEST_METHOD'] == 'POST' AND (!empty($_POST['Opslaan']))) {
$sql = ("INSERT INTO scoretabel VALUES('$Naam', '$Onderdeel', '$Punten')"); mysql_query($sql) or die(mysql_error()); |
Zou iemand dit even snel kunnen (helpen met) oplossen? |
The_Terminator | vrijdag 30 december 2011 @ 17:27 |
quote: Op vrijdag 30 december 2011 16:40 schreef Feyenoordlife het volgende:Even geleden dat ik wat met PHP heb gedaan, en ik moet nu even snel iets fixen voor een trainingskamp. Het lukt mij alleen niet meer om meerdere records tegelijk in te voeren. Het was een simpel iets, maar ik kom er zo snel ff niet meer op. Ik krijg een aantal resultaten uit mijn while loop en deze worden in een tabelletje gegooid (niet erg netjes nu, maar dat maakt hiervoor even niet uit). [ code verwijderd ] Zou iemand dit even snel kunnen (helpen met) oplossen? Je wilt alle gegevens uit de post array halen voor het element: "Naam[]"?
Zo ja;
1 2 3 4 5 | <?php foreach($_POST['naam'] as $k => $v) { //hierin je code om het naar de db te schrijven. variable $v bevat de waarde van de input. Niet vergeten te escapen. } ?> |
|
Feyenoordlife | vrijdag 30 december 2011 @ 18:15 |
quote: Ongeveer ja, alleen moeten de punten er ook nog bij. In ieder geval bedankt al voor dit gedeelte. |
The_Terminator | vrijdag 30 december 2011 @ 21:39 |
quote: Zet dit in de loop om de punten array uit te lezen:
1 2 3 | <?php $punten = $_POST['Punten'][$k]; ?> |
|
Feyenoordlife | vrijdag 30 december 2011 @ 21:47 |
quote: Yes, dat was hem ja. Dankje! |
Feyenoordlife | maandag 2 januari 2012 @ 01:01 |
Nog een vraagje: Waarom sorteert hij nu niet gewoon netjes op Score van hoog naar laag?
1 2 3 4 5 6 7 8 9 10 11 | <?php foreach($_POST['Naam'] as $k => $v) {
$sql = ("SELECT Naam, SUM(Punten) as Punten_totaal FROM scoretabel WHERE Naam = '".$v."' ORDER BY Punten_totaal DESC "); $result = mysql_query($sql) or die(mysql_error()); while ($row = mysql_fetch_array($result)){ echo "$row[Punten_totaal] $row[Naam] <br>";
} ?> |
|
GlowMouse | maandag 2 januari 2012 @ 01:05 |
Van regel 4 t/m 9 doet hij dat wel, maar voor elke nieuwe $k en $v begint een nieuwe sortering. Let bij echo $row['Naam'] op voor XSS aanvallen. |
Feyenoordlife | maandag 2 januari 2012 @ 01:12 |
quote: Op maandag 2 januari 2012 01:05 schreef GlowMouse het volgende:Van regel 4 t/m 9 doet hij dat wel, maar voor elke nieuwe $k en $v begint een nieuwe sortering. Let bij echo $row['Naam'] op voor XSS aanvallen. Bedankt, ga ik ff naar kijken. XSS aanvallen hoef ik voor dit projectje niet naar te kijken, wordt alleen door mij gebruikt draait op localhost. |
Apekoek | maandag 2 januari 2012 @ 02:35 |
Een simpele vraag voor jullie kenners, voor mij echter niet, wie helpt mij uit de brand?
Ik wil downloadbare links tonen op mijn website, dit zijn bestanden die vanuit een upload map moeten komen. Echter krijg ik nu de meldong "forbidden" en de bestanden zijn dus nie letterlijk downloadbaar via de directe link. In dat zelfde mapje zit een .htaccess file waar "deny for all" in staat (dit bestand van contact forms 7 keert zelfs na verwijdering terug).
Hoe de links/uploads downloadbaar te maken zonder de "forbidden" pagina? |
#ANONIEM | maandag 2 januari 2012 @ 10:40 |
quote: Op maandag 2 januari 2012 02:35 schreef Apekoek het volgende:Een simpele vraag voor jullie kenners, voor mij echter niet, wie helpt mij uit de brand? Ik wil downloadbare links tonen op mijn website, dit zijn bestanden die vanuit een upload map moeten komen. Echter krijg ik nu de meldong "forbidden" en de bestanden zijn dus nie letterlijk downloadbaar via de directe link. In dat zelfde mapje zit een .htaccess file waar "deny for all" in staat (dit bestand van contact forms 7 keert zelfs na verwijdering terug). Hoe de links/uploads downloadbaar te maken zonder de "forbidden" pagina? Je haalt nogal wat dingen door elkaar nu. |
The_Terminator | maandag 2 januari 2012 @ 11:19 |
quote: Op maandag 2 januari 2012 02:35 schreef Apekoek het volgende:Een simpele vraag voor jullie kenners, voor mij echter niet, wie helpt mij uit de brand? Ik wil downloadbare links tonen op mijn website, dit zijn bestanden die vanuit een upload map moeten komen. Echter krijg ik nu de meldong "forbidden" en de bestanden zijn dus nie letterlijk downloadbaar via de directe link. In dat zelfde mapje zit een .htaccess file waar "deny for all" in staat (dit bestand van contact forms 7 keert zelfs na verwijdering terug). Hoe de links/uploads downloadbaar te maken zonder de "forbidden" pagina? Als dat bestand steeds terugkomt gaat het nooit lukken natuurlijk. Wat is 'contact forms 7' precies?
Je zou een soort van proxy script kunnen schrijven dat het bestand aanbiedt via de readfile functie, echter is het misschien beter om gewoon de oorzaak te achterhalen waarom dat .htaccess bestand steeds terugkeert na het verwijderen. |
Apekoek | maandag 2 januari 2012 @ 11:32 |
quote: Op maandag 2 januari 2012 11:19 schreef The_Terminator het volgende:[..] Als dat bestand steeds terugkomt gaat het nooit lukken natuurlijk. Wat is 'contact forms 7' precies? Je zou een soort van proxy script kunnen schrijven dat het bestand aanbiedt via de readfile functie, echter is het misschien beter om gewoon de oorzaak te achterhalen waarom dat .htaccess bestand steeds terugkeert na het verwijderen. Zorgt de .htaccess met "Deny for all" voor de forbidden pagina wanneer ik uit dezelfde map een bestand downloadbaar wil maken?
Het gaat trouwens om een Wordpress plugin voor formulieren (http://contactform7.com/), de bestanden die worden upgeload via het formulier wil ik niet alleen per mail krijgen maar ook op mijn server krijgen (deze bestanden wil ik dan downloadbaar maken op een andere sectie op mijn website).
Hoe op te lossen?  |
The_Terminator | maandag 2 januari 2012 @ 11:41 |
quote: Op maandag 2 januari 2012 11:32 schreef Apekoek het volgende:[..] Zorgt de .htaccess met "Deny for all" voor de forbidden pagina wanneer ik uit dezelfde map een bestand downloadbaar wil maken? Het gaat trouwens om een Wordpress plugin voor formulieren ( http://contactform7.com/), de bestanden die worden upgeload via het formulier wil ik niet alleen per mail krijgen maar ook op mijn server krijgen (deze bestanden wil ik dan downloadbaar maken op een andere sectie op mijn website). Hoe op te lossen?  Een .htaccess met daarin de string 'deny for all' zorgt er inderdaad voor dat de directory niet leesbaar is door de webserver. Je zou het op kunnen lossen door een lege .htaccess in de dir te plaatsten en die te chmodden naar bijvoorbeeld 444, dan kan de webserver het bestand niet meer aanpassen, een nette oplossing is het echter niet.
Zoals ik in mijn vorige bericht al aangaf zou je naar de oorzaak kunnen zoeken. Waarschijnlijk staat ergens in de broncode van de plugin een lijn code dat ervoor zorgt dat de .htaccess wordt weggeschreven, als een soort van beveiliging... |
Apekoek | maandag 2 januari 2012 @ 11:46 |
quote: Op maandag 2 januari 2012 11:41 schreef The_Terminator het volgende:[..] Een .htaccess met daarin de string 'deny for all' zorgt er inderdaad voor dat de directory niet leesbaar is door de webserver. Je zou het op kunnen lossen door een lege .htaccess in de dir te plaatsten en die te chmodden naar bijvoorbeeld 444, dan kan de webserver het bestand niet meer aanpassen, een nette oplossing is het echter niet. Zoals ik in mijn vorige bericht al aangaf zou je naar de oorzaak kunnen zoeken. Waarschijnlijk staat ergens in de broncode van de plugin een lijn code dat ervoor zorgt dat de .htaccess wordt weggeschreven, als een soort van beveiliging... Klopt het dient als een beveiliging, dus ik ben ook niet helemaal zeker van of ik hier goed aan doe. Correctie, ik bedoelde deny from all ipv for, maar het idee zal wel hetzelfde zijn. |
Apekoek | maandag 2 januari 2012 @ 11:48 |
quote: Op maandag 2 januari 2012 11:41 schreef The_Terminator het volgende:[..] Een .htaccess met daarin de string 'deny for all' zorgt er inderdaad voor dat de directory niet leesbaar is door de webserver. Je zou het op kunnen lossen door een lege .htaccess in de dir te plaatsten en die te chmodden naar bijvoorbeeld 444, dan kan de webserver het bestand niet meer aanpassen, een nette oplossing is het echter niet. Zoals ik in mijn vorige bericht al aangaf zou je naar de oorzaak kunnen zoeken. Waarschijnlijk staat ergens in de broncode van de plugin een lijn code dat ervoor zorgt dat de .htaccess wordt weggeschreven, als een soort van beveiliging... Helaas, zelfs een lege .htaccess file op een chmod van 444 zorgt voor een 403 Forbidden pagina (wanneer ik een upgeload bestand wil benaderen vanuit mijn website). |
GlowMouse | maandag 2 januari 2012 @ 11:51 |
Zet er Options +Indexes in. |
Apekoek | maandag 2 januari 2012 @ 12:46 |
quote: Nog steeds niet het gewenste resultaat en al heel wat geprobeerd, ik denk dat ik maar eens voor een betaalde plugin met de gewenste functies ga (raden jullie dat ook aan in het geval van een n00b zoals ik?). |
Onnoman | woensdag 4 januari 2012 @ 14:49 |
Goedemiddag,
ik probeer 2 google web translators toe te passen op mijn website, die synchroon werken. Dus gewoon eigenlijk een duplicaat.
dit div element plaatst de google dropdown, maar als je deze elders ook wilt toepassen krijg ik deze niet in zicht.
<div id="google_translate_element"></div>
(zie http://translate.google.com/translate_tools ) |
Ofyles2 | woensdag 4 januari 2012 @ 16:12 |
quote: Op woensdag 4 januari 2012 14:49 schreef Onnoman het volgende:Goedemiddag, ik probeer 2 google web translators toe te passen op mijn website, die synchroon werken. Dus gewoon eigenlijk een duplicaat. dit div element plaatst de google dropdown, maar als je deze elders ook wilt toepassen krijg ik deze niet in zicht. <div id="google_translate_element"></div> (zie http://translate.google.com/translate_tools ) Div-id's kun je maar één keer in een pagina gebruiken, div-classes onbeperkt. |
Vanillax | donderdag 5 januari 2012 @ 00:17 |
Hoi allemaal  Ik ben bezig met een website voor mijn vriend, omdat ik graag meer wil leren qua websites bouwen en omdat ik het gewoon leuk vind.
Ik heb een PHP mail form script van mijn leraar gehad, tijdens het oefenen ging het super maar ik ben nu even helemaal de draad kwijt, en tsja, het is vakantie. Ik heb het script werkende gekregen maar ik snap niet waar ik moet opgeven naar welk adres het bericht verzonden moet worden.. Ik dacht bij 'mail' maar nu krijg ik te zien dat het bericht niet verzonden kan worden. Wat gaat er fout? :s
Dit is de pagina; http://www.lucsenden.nl/contact.php |
Tegan | donderdag 5 januari 2012 @ 00:18 |
Je script? |
Light | donderdag 5 januari 2012 @ 00:24 |
quote: Da's niet echt nuttig op die manier, zo kunnen we de PHP code niet lezen. Beter plaats je de code hier, tussen [php] en [/php]. Dan verschijnt het met regelnummers en allemaal leuke kleurtjes enzo, helpt vaak ook Verder is het handig als je probeert om je code te beperken tot de relevant delen. |
Vanillax | donderdag 5 januari 2012 @ 00:24 |
Ah, ja. Ik heb zojuist geleerd dat je dat niet kan zien via de source. Hier mijn volledige code;
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 | <!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>www.lucsenden.nl - Voor al uw videoproducties.</TITLE>
<META content="text/html; charset=utf-8" http-equiv=Content-Type>
<META name=robots content=index,follow>
<META name=keywords content=" ">
<META name=description content=" ">
<META content=0 http-equiv=Expires><LINK rel=stylesheet type=text/css href="style.css" media=screen>
<script type="text/javascript" src="js/jquery-1.4.2.js"></script> <!--[if IE]> <link type="text/css" href="css/ie.css" rel="stylesheet" media="screen" /> <![endif]--> <!--[if IE 6]> <script type="text/javascript" src="js/pngfix.js"></script> <script type="text/javascript"> DD_belatedPNG.fix('img,#logo'); </script> <![endif]-->
<LINK rel=stylesheet type=text/css href="css/ie.css" media=screen>
</HEAD>
<BODY>
<DIV class=top-bar-wrap> </DIV>
<DIV class=main-bg>
<DIV id=sub-page class=main-wrap>
<DIV id=header class=mod-con>
<H1 id=logo><A href="/#"><IMG alt="" src="/image/luc.png"></A></H1>
<UL id=main-menu>
<LI><A href="/index.html"><STRONG>Home</STRONG></A><A class=cur href="/about.html"><STRONG>Over mij</STRONG></A> </LI>
<LI><A href="/diensten.html"><STRONG>Diensten</STRONG></A> </LI>
<LI><A href="/portfolio.html"><STRONG>Portfolio</STRONG></A> </LI>
<LI><A href="/referenties.html"><STRONG>Referenties</STRONG></A> </LI>
<LI><A href="/contact.html"><STRONG>Contact</STRONG></A> </LI></UL></DIV>
<DIV id=main class=mod-con>
<DIV class="container clearfix">
<DIV style="WIDTH: 861px;HEIGHT: 1006px" id=about-page class=main-con>
<DIV class=title-nav>
<H2>Contact</H2></DIV>
<DIV class=content>
<P>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam et risus non arcu porttitor feugi at in at neque. In hac habitasse platea dictumst. Proin pretium neque at turpis fermentum de aliquet. Ut risus nisi, scelerisque in convallis et, volutpat malesuada elit. Ut nulla libero, condi entum eget scelerisque eget, blandit sit amet metus. Suspendisse potenti. Nulla luctus temus augue dictum cursus. Curabitur non risus dui. In sit amet tellus in lacus fringilla condimentuma t sit amet libero. Fusce purus ligula, hendrerit ut vulputate eget, vestibulum non diam. Vestib ulum facilisis, leo id volutpat vestibulum, eros ligula ornare urna, pellentesque laoreet magna purus ac metus. Nulla facilisi.</P> <?php
echo '';
if(isset($_POST['submit'])) {
$subject = $_POST['naam'].' stuurde een mail via PHP!'; $email = $_POST['xmemorylane@hotmail.com']; $bericht = wordwrap($_POST['bericht'], 70); $versturen_gelukt = mail($email, $subject, $bericht); if($versturen_gelukt) { echo ' <p>De email is verstuurd! <a href="'.$_SERVER['PHP_SELF'].'">Nog een mail sturen</a>.</p>'."\r\n"; } else { echo ' <p>Er is iets mis gegaan, <a href="'.$_SERVER['PHP_SELF'].'">probeer het opnieuw</a>.</p>'."\r\n"; }
} else {
echo ' <form action="'.$_SERVER['PHP_SELF'].'" method="POST" type="text/plain">
<label for="name">Naam</label> <input type="naam" name="naam" id="naam" /> <label for="email">Email</label> <input type="email" name="email" id="email" /> <label for="bericht">Bericht</label> <textarea name="bericht" id="bericht"></textarea> <label for="submit"></label> <input type="submit" name="submit" id="submit" value="Stuur bericht!" /> </form> '; }
echo ' ';
?> </DIV></DIV></DIV></DIV></DIV></DIV>
<DIV class=siteintro-wrap> </DIV> <DIV class=footer-wrap> <DIV id=footer class=mod-con> <DIV class=copyright>© 2012 Copyright Lucsenden.nl. All Rights Reserved. </DIV> <DIV class=hovergallery> <a href="http://facebook.com/lucsenden"><img src="http://i44.tinypic.com/10p9g5i.png" /></a> <a href="http://youtube.com/luckske112"><img src="http://i44.tinypic.com/34rwqdv.png" /></a> <a href="http://twitter.com/lucsenden"><img src="http://i42.tinypic.com/xfst8g.png" /></a> </DIV> </DIV></DIV></BODY></html> |
[ Bericht 21% gewijzigd door Vanillax op 05-01-2012 00:35:19 ] |
Vanillax | donderdag 5 januari 2012 @ 00:25 |
Diepe zucht. Ik kan niet quoten, kan geen tekst in een area zetten, helemaal niks. Wordt er gek van. |
Light | donderdag 5 januari 2012 @ 00:26 |
quote: Dan moet je je adblocker uitzetten. |
Vanillax | donderdag 5 januari 2012 @ 00:27 |
Super. Dankje!  |
GlowMouse | donderdag 5 januari 2012 @ 00:28 |
kijk eens naar http://nl3.php.net/manual/en/function.mail.php |
Vanillax | donderdag 5 januari 2012 @ 00:33 |
quote: Ik had die pagina toevallig net gevonden, ik snap het alleen niet want ze hebben het daar over mails versturen vanuit een script en niet vanuit een form. Ik weet dat mijn script goed is (tenminste, dat mag ik toch hopen als de hele klas het al gebruikt heeft) alleen ik weet niet hoe ik hem werkende krijg..
Als ik nu alles invul en op zenden klik komt er 'Er is iets mis gegaan, probeer het opnieuw'. |
Light | donderdag 5 januari 2012 @ 00:35 |
quote: Op regel 74 wordt $_POST uitgelezen voor een e-mailadres. Het adres staat helemaal niet in $_POST, en al zeker niet met de key die je daar uitleest. |
KomtTijd... | donderdag 5 januari 2012 @ 00:37 |
quote: Op donderdag 5 januari 2012 00:33 schreef Vanillax het volgende:[..] Ik had die pagina toevallig net gevonden, ik snap het alleen niet want ze hebben het daar over mails versturen vanuit een script en niet vanuit een form. Ik weet dat mijn script goed is (tenminste, dat mag ik toch hopen als de hele klas het al gebruikt heeft) alleen ik weet niet hoe ik hem werkende krijg.. Als ik nu alles invul en op zenden klik komt er 'Er is iets mis gegaan, probeer het opnieuw'. Je script is helemaal niet goed. Ga je gewoon eens verdiepen in wat je aan het doen bent, in plaats van (fout) het werk van je klasgenoten te kopieren en dan gelijk hierheen rennen als het niet werkt. Zo leer je nooit wat. |
Vanillax | donderdag 5 januari 2012 @ 00:38 |
quote: Op donderdag 5 januari 2012 00:37 schreef KomtTijd... het volgende:[..] Je script is helemaal niet goed. Ga je gewoon eens verdiepen in wat je aan het doen bent, in plaats van (fout) het werk van je klasgenoten te kopieren en dan gelijk hierheen rennen als het niet werkt. Zo leer je nooit wat. Fout werk van mijn klasgenoten? Het is een bestand dat we gekregen hebben van de leraar om mee te oefenen en om van te leren. Ik ben er al de hele dag mee bezig, heb vanalles gelezen en geprobeerd dus ga nu alsjeblieft niet beginnen over 'gelijk hierheen rennen als het niet werkt'. Bedankt voor je geweldige hulp. |
Tegan | donderdag 5 januari 2012 @ 00:39 |
Post eens het originele bestand van je leraar dan? |
Vanillax | donderdag 5 januari 2012 @ 00:41 |
Dit is zijn volledige 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 | <?php
echo '<!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=utf-8"/> <title>Email formulier</title> <link href="/style/style_normal.css" rel="Stylesheet" type="text/css" media="all" /> </head> <body> <div id="wrapper"> ';
if(isset($_POST['submit'])) {
$subject = $_POST['naam'].' stuurde een mail via PHP!'; $email = $_POST['email']; $bericht = wordwrap($_POST['bericht'], 70); $versturen_gelukt = mail($email, $subject, $bericht); if($versturen_gelukt) { echo ' <p>De email is verstuurd! <a href="'.$_SERVER['PHP_SELF'].'">Nog een mail sturen</a>.</p>'."\r\n"; } else { echo ' <p>Er is iets mis gegaan, <a href="'.$_SERVER['PHP_SELF'].'">probeer het opnieuw</a>.</p>'."\r\n"; }
} else {
echo ' <form action="'.$_SERVER['PHP_SELF'].'" method="POST" type="text/plain">
<label for="name">Naam</label> <input type="naam" name="naam" id="naam" /> <label for="email">Email</label> <input type="email" name="email" id="email" /> <label for="bericht">Bericht</label> <textarea name="bericht" id="bericht"></textarea> <label for="submit"></label> <input type="submit" name="submit" id="submit" value="Stuur bericht!" /> </form> '; }
echo ' </div>
</body> </html> ';
?> |
|
Tegan | donderdag 5 januari 2012 @ 00:47 |
Ok, en wat heb je allemaal aangepast?
Regel 19 bijvoorbeeld. Waarom heb je daar je email ingevuld? |
Light | donderdag 5 januari 2012 @ 00:47 |
Uit jouw versie:
1 2 3 4 5 6 7 8 9 | <?php if(isset($_POST['submit'])) {
$subject = $_POST['naam'].' stuurde een mail via PHP!'; $email = $_POST['xmemorylane@hotmail.com']; $bericht = wordwrap($_POST['bericht'], 70); $versturen_gelukt = mail($email, $subject, $bericht); ?> |
Uit de versie van je docent:
1 2 3 4 5 6 7 8 9 | <?php if(isset($_POST['submit'])) {
$subject = $_POST['naam'].' stuurde een mail via PHP!'; $email = $_POST['email']; $bericht = wordwrap($_POST['bericht'], 70); $versturen_gelukt = mail($email, $subject, $bericht); ?> |
Zoek de verschillen  |
GlowMouse | donderdag 5 januari 2012 @ 00:47 |
quote: Op donderdag 5 januari 2012 00:33 schreef Vanillax het volgende:[..] Ik had die pagina toevallig net gevonden, ik snap het alleen niet want ze hebben het daar over mails versturen vanuit een script en niet vanuit een form. Ik weet dat mijn script goed is (tenminste, dat mag ik toch hopen als de hele klas het al gebruikt heeft) alleen ik weet niet hoe ik hem werkende krijg.. Als ik nu alles invul en op zenden klik komt er 'Er is iets mis gegaan, probeer het opnieuw'. Ergens in jouw code staat mail(...). Uit http://nl3.php.net/manual/en/function.mail.php haal je dat de eerste parameter het e-mailadres is waar de e-mail naartoe wordt gestuurd. Daar vul jij $email in. Kijk eens welke waarde $email heeft. |
Light | donderdag 5 januari 2012 @ 00:49 |
quote:
quote: Op donderdag 5 januari 2012 00:35 schreef Light het volgende:[..] Op regel 74 wordt $_POST uitgelezen voor een e-mailadres. Het adres staat helemaal niet in $_POST, en al zeker niet met de key die je daar uitleest.
|
Vanillax | donderdag 5 januari 2012 @ 00:54 |
Ah, ik vulde daar mijn email in omdat ik dat ergens op google had gelezen, maar dat is dus niet de bedoeling.
Alleen begrijp ik glowmouse niet helemaal.. Ik vul bij de waarde die mijn email adres moet zijn $email in? Maar dat is dus niet goed? Over welke regel heb jij het daar glowmouse?
//Volgensmij komt er rond deze tijd echt niets zinnigs uit me, bedankt voor de hulp alvast en ik spreek jullie hopelijk morgen weer  |
Tegan | donderdag 5 januari 2012 @ 01:12 |
Dat script is gemaakt om een email te sturen naar diegene die je invult bij 'email' in het formulier dus .
Denk niet dat het jou zelfstandig gaat lukken om hem aan te passen naar je eigen wensen. Een script dat een email naar een vast emailadres stuurt. |
Sitethief | donderdag 5 januari 2012 @ 09:40 |
@Vanillax
Even een korte uitleg
1 2 3 4 5 6 7 8 9 10 11 12 | $variable //dit is een variable //in een variable kun je van alles stoppen $variable = 'lala' //nu zit er lala in $variable echo $variable //nu verschijnt er de inhoud van $variable op het scherm $variable = 'lulu' //nu zit er lulu in $variable
//er bestaan ook arrays, dat is een soort lijst met keys en values $test = array(); //hier maak je een array mee aan die leeg is $test['lala'] = 'haha'; //hiermee maak je een array aan met een key die lala heet en een waarde die haha heet
//een speciaal type array is bijvoorbeeld $_POST $_POST['email'] //hier staat de waarde van het veld uit je formulier met de naam 'email' . Het ['email'] achter $_POST is dus niet de plek waar jij je eigen mailadres moet invullen. Dat doe je in het veld zelf. |
|
boem-dikkie | donderdag 5 januari 2012 @ 11:05 |
Dat script van die leraar trouwens. Je hele HTML echo'en.  |
GlowMouse | donderdag 5 januari 2012 @ 11:08 |
quote:
|
Sitethief | donderdag 5 januari 2012 @ 12:01 |
Technisch gezien echo'en de meeste template parsers ook . |
KomtTijd... | donderdag 5 januari 2012 @ 12:02 |
quote: Template parsers júíst niet, over het algemeen. |
#ANONIEM | donderdag 5 januari 2012 @ 12:10 |
Dat hele script  |
The_Terminator | donderdag 5 januari 2012 @ 12:38 |
quote: Erg slordig idd. Waarom makkelijk doen als het moeilijk kan 
@Vanillax: laat je leraar het volgende even zien, die heeft blijkbaar nog veel te leren op PHP gebied...
1 2 3 4 5 6 7 8 | <html> <head> <title>bla</title> </head> <body> <center><?php echo str_repeat('bla ', 1000); ?></center> </body> </html> |
[ Bericht 2% gewijzigd door The_Terminator op 05-01-2012 13:02:22 ] |
GlowMouse | donderdag 5 januari 2012 @ 12:45 |
quote: Op donderdag 5 januari 2012 12:38 schreef The_Terminator het volgende:[..] Erg slordig idd. Waarom makkelijk doen als het moeilijk kan  @Vanillax: laat je leraar het volgende even zien, die heeft blijkbaar nog veel te leren op PHP gebied... [ code verwijderd ] geen echo |
Pakspul | donderdag 5 januari 2012 @ 12:51 |
quote: of = teken i.c.m. shorttags.  |
The_Terminator | donderdag 5 januari 2012 @ 13:02 |
quote: Oeps Toegevoegd  |
Geflipte-Koelkast | donderdag 5 januari 2012 @ 14:06 |
Goedemiddag,
Ik heb het volgende probleem: Ik heb een contact pagina op mijn website gezet in html, en het mail script in PHP. Geen probleem, het word gewoon verzonden en ik ontvang ook een mailtje in de mailbox. Echter, de ingevulde tekstvelden worden niet meegezonden, waardoor ik een witte mail te zien krijg. Wat doet ik fout?
Oja, vroeger nooit problemen gehad met script, maar het trad op na de verhuizing van de bestanden.
SPOILER 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 | <html>
<head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <title>Naam</title> </head>
<body> <form method="post" action="http://walibi.herobo.com/vergelijkdebon/formulierverzenden.php"> <ul> <li>Je voornaam *</li> <li><input type="text" name="voornaam" /></li> <li>Je achternaam *</li> <li><input type="text" name="achternaam" /></li> <li>Je e-mail adres *</li> <li><input type="text" name="email" /></li> <li>Je berichtje *</li> <li><textarea cols="50" rows="12" name="bericht"></textarea></li> <li><input type="reset" value="Begin opnieuw" /> <input type="submit" name="versturen" value="Verstuur bericht" /></li> </ul> <p>Alle velden gemarkeerd met een * zijn verplicht.</p> </form> </body>
</html> |
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 $naar = 'contact@hiereenemailadres.nl'; // Waar moet het naartoe? $onderwerp = 'Contact via Website'; // Het onderwerp van het bericht // Header instellen, zodat nl2br() werkt $headers = "MIME-version: 1.0\r\n"; $headers .= "content-type: text/html;charset=utf-8\r\n"; if(isset($_POST['versturen'])) // Als het formulier verzonden is door op de verzend knop te klikken { $voornaam = trim($_POST['voornaam']); // Alle overbodige spaties uit het voornaam veld verwijderen $achternaam = trim($_POST['achternaam']); // Alle overbodige spaties uit het achternaam veld verwijderen $email = trim($_POST['email']); // Alle overbodige spaties uit het email veld verwijderen $bericht = trim($_POST['bericht']); // Alle overbodige spaties uit het bericht veld verwijderen $fout = false; // Om te kijken straks of er wat fout is } if(empty($email)) // Als het email veld niet is ingevuld { print '<p>Helaas, het email veld is verplicht maar is nu niet ingevuld!</p>'; $fout = true; } if(!filter_var($email, FILTER_VALIDATE_EMAIL)) // Als het email adres niet correct is { print '<p>Helaas, het email adres is niet correct!</p>'; $fout = true; } if($fout == false) // Als er niks fout is (alles is dus netjes ingevuld) { $headers .= 'From: ' . $voornaam . ' ' . $achternaam . '<' . $email . '>'; // Een afzender instellen zodat je kan reageren. if(mail($naar, $onderwerp, nl2br($bericht), $headers)) { print '<p>Het bericht is succesvol verzonden!</p>'; } else { print '<p>Helaas, er is wat fout gegaan tijdens het verzenden van het formulier.</p>'; } } ?> |
|
GlowMouse | donderdag 5 januari 2012 @ 14:11 |
Dat is raar, denk ook niet dat er zo wat over te zeggen valt. Je kunt de bron van de e-mail eens goed bekijken. Let ook op mail header injection. |
Vanillax | donderdag 5 januari 2012 @ 15:17 |
Bedankt voor de hulp allemaal, vooral die uitleg, ik snap nu wat alles is. En ik snap dus ook wat er fout ging bij het script, ik moet dus een totaal ander script hebben.
Weten jullie of het mogelijk is zo'n script kant en klaar van internet te halen? Of heb ik ook daar nog niet genoeg kennis voor? Vriendlief wil wel graag een contact formulier op zn website namelijk.. |
Dokay | donderdag 5 januari 2012 @ 21:40 |
Beste PHP devvers,
Even een vrij basale vraag. Voor mijn werkgever heb ik een php applicatie in elkaar geknutseld waarbij men intern mensen in kan roosteren en mensen extern aan kunnen geven wanneer ze beschikbaar zijn. Ziekte en verlof worden ook allemaal geregeld, iedereen blij. Alleen nu het steeds meer en meer gebruikt wordt door deze middelgrote organisatie begint mijn zorg over de veiligheid te stijgen. Laat ik eerlijk zijn: ik heb het in elkaar gezet met trail en error, heb nooit een PHP boek of cursus gedaan en met frunniken lukt me eigenlijk altijd wel wat ik wil. Maar ik weet ook dat het waarschijnlijk niet de veiligste en meest efficiente manier is.
Waar ik vooral tegen aan loop en wil vragen hoe jullie dat doen;
Als ik variabelen door minimaal 2 verschillende page's moet loodsen, gebruik ik de HTML "hidden input" tag om deze vast te houden en vervolgens weer door te zetten naar de volgende pagina die er wat mee doet.
Nou heb ik er nooit bij stilgestaan dat een kwaadwillende gebruiker deze hidden input tag kan invullen naar wens en vervolgens terug kan sturen naar de server met allerlei kwaadaardige code. In het geval van mijn appje zou dat een catastrofe zijn, want het zit bomvol met dit soort code om de eerder opgegeven waarde vast te houden.
Ik heb gepoogd om een extra SESSION aan te maken om de variable vast te houden, maar er loopt er al een van de gebruiker die ingelogd is en welke zijn ID vasthoud. Het geeft problemen als ik een tweede sessie hiernaast probeer te starten want dan wordt aangegeven dat er al een sessie loopt.
Hoe lossen jullie dit op? Alvast bedankt! |
Ofyles2 | donderdag 5 januari 2012 @ 21:50 |
quote: Deed ik heel vroeger ook (toen ik 16-17 was), nu werk ik volgens OOP en MVC.
Liever een onderhoudsvriendelijk bulkproject dan een klein compact en onoverzichtelijk pakketje. |
Ofyles2 | donderdag 5 januari 2012 @ 22:00 |
quote: Op donderdag 5 januari 2012 21:40 schreef Dokay het volgende:Beste PHP devvers, Even een vrij basale vraag. Voor mijn werkgever heb ik een php applicatie in elkaar geknutseld waarbij men intern mensen in kan roosteren en mensen extern aan kunnen geven wanneer ze beschikbaar zijn. Ziekte en verlof worden ook allemaal geregeld, iedereen blij. Alleen nu het steeds meer en meer gebruikt wordt door deze middelgrote organisatie begint mijn zorg over de veiligheid te stijgen. Laat ik eerlijk zijn: ik heb het in elkaar gezet met trail en error, heb nooit een PHP boek of cursus gedaan en met frunniken lukt me eigenlijk altijd wel wat ik wil. Maar ik weet ook dat het waarschijnlijk niet de veiligste en meest efficiente manier is. Waar ik vooral tegen aan loop en wil vragen hoe jullie dat doen; Als ik variabelen door minimaal 2 verschillende page's moet loodsen, gebruik ik de HTML "hidden input" tag om deze vast te houden en vervolgens weer door te zetten naar de volgende pagina die er wat mee doet. Nou heb ik er nooit bij stilgestaan dat een kwaadwillende gebruiker deze hidden input tag kan invullen naar wens en vervolgens terug kan sturen naar de server met allerlei kwaadaardige code. In het geval van mijn appje zou dat een catastrofe zijn, want het zit bomvol met dit soort code om de eerder opgegeven waarde vast te houden. Ik heb gepoogd om een extra SESSION aan te maken om de variable vast te houden, maar er loopt er al een van de gebruiker die ingelogd is en welke zijn ID vasthoud. Het geeft problemen als ik een tweede sessie hiernaast probeer te starten want dan wordt aangegeven dat er al een sessie loopt. Hoe lossen jullie dit op? Alvast bedankt! Extra sessies zijn eigenlijk ook slechts lapmiddelen.
Ik zou de gegevens gewoon controleren totdat een gebruiker zijn opdracht volledig heeft voltooid.
Dus onder andere: waarden typecasten (in een voor jouw gunstige type), reguliere expressies, htmlentities, strip_tags. Ik stel voor de controlemodellen in een aparte map op te slaan en de bestanden hierin alleen aan te roepen als het echt nodig is.
Desgewenst kun je je projectje ook naar mij toesturen als je het echt niet ziet zitten... |
Dokay | donderdag 5 januari 2012 @ 22:20 |
quote: Op donderdag 5 januari 2012 22:00 schreef Ofyles2 het volgende:[..] Extra sessies zijn eigenlijk ook slechts lapmiddelen. Ik zou de gegevens gewoon controleren totdat een gebruiker zijn opdracht volledig heeft voltooid. Dus onder andere: waarden typecasten (in een voor jouw gunstige type), reguliere expressies, htmlentities, strip_tags. Ik stel voor de controlemodellen in een aparte map op te slaan en de bestanden hierin alleen aan te roepen als het echt nodig is. Desgewenst kun je je projectje ook naar mij toesturen als je het echt niet ziet zitten... Bedankt voor je snelle reactie,
Ik ging ervanuit dat de gebruiker geen manier heeft om te zien wat er in een server sided sessie gebeurt, tegenover de hidden value HTML tag die vanaf de gebruikers' machine wordt verstuurd. Ik strip inderdaad al form input van ongewenste mogelijke injectie input, maar zit nog steeds met het feit dat ik weet dat de verkeerde methode gebruikt wordt om variabelen door te geven.
Wat ook moeilijk is is vanaf een initieel overzicht de waarde aan een php script doorgeven. Wat ik hiermee bedoel (voorbeeld alert..);
Ik heb een lijst met zeg 30 diensten, welk allemaal uit de database worden getrokken en onder elkaar gezet. Elke dienst heeft een unieke "id", waarmee deze word onderscheiden van andere diensten. Deze unieke dienst id word voor elke dienst opgeslagen in een bijbehorende "hidden input" HTML tag. De gebruiker kan zich opgeven voor een openstaande dienst door op de knop "Inschrijven" te drukk die naast elke dienst wordt weergeven. Tot zover goed.
Nou wil een kwaadwillende gebruiker eens het systeem in de war schoppen en besluit deze id aan te passen en wellicht al toegewezen diensten over te schrijven door een al bestaande id van een andere dienst op te geven, of het systeem te laten crashen door sql injectie code in de hidden value te plaatsen of een andere foutieve waarde.
Vraag: Hoe kan ik het systeem laten begrijpen om welke dienst het gaat die de gebruiker selecteert, maar wel dat het veilig is en dat de gebruiker er geen misbruik van zou kunnen maken? |
Ofyles2 | donderdag 5 januari 2012 @ 22:29 |
In dat geval zou ik ook voor de 30 diensten een aparte MySQL-tabel maken. Het id-nummer zou ik meegeven met de URL.
Wat betreft SQL-injecties: deze kun je tegengaan door invoerwaarden te controleren en eventueel te escapen (mysql_real_escape_string).
Off-topic:
Een veel betere aanrader is PDO (hier een tutorial), waarmee je meerdere databasesystemen kunt gebruiken zonder complete codeblokken om te ploegen. |
Pakspul | donderdag 5 januari 2012 @ 22:31 |
quote: Op donderdag 5 januari 2012 22:29 schreef Ofyles2 het volgende:In dat geval zou ik ook voor de 30 diensten een aparte MySQL-tabel maken. Het id-nummer zou ik meegeven met de URL. Wat betreft SQL-injecties: deze kun je tegengaan door invoerwaarden te controleren en eventueel te escapen (mysql_real_escape_string). Off-topic: Een veel betere aanrader is PDO ( hier een tutorial), waarmee je meerdere databasesystemen kunt gebruiken zonder complete codeblokken om te ploegen. Of je verdiept je een keer in classes en bent ook per direct van het gezeik af. Dan ben je nog flexibeler  |
GlowMouse | donderdag 5 januari 2012 @ 22:34 |
quote: Op donderdag 5 januari 2012 21:40 schreef Dokay het volgende:Ik heb gepoogd om een extra SESSION aan te maken om de variable vast te houden, maar er loopt er al een van de gebruiker die ingelogd is en welke zijn ID vasthoud. Het geeft problemen als ik een tweede sessie hiernaast probeer te starten want dan wordt aangegeven dat er al een sessie loopt. Dat gaat in dezelfde sessie, je kunt $_SESSION['blahblah'] met vullen en daarna $_SESSION['user'] met wat anders. |
Dokay | donderdag 5 januari 2012 @ 22:37 |
quote: Bedankt voor je tip, ik ga het morgen meteen uitproberen! Is er ook een mogelijkheid om van te voren gedefinieerde waarden (welke ik nu in hidden HTML tags heb staan) veilig over te dragen tijdens de POST naar de volgende pagina..? (Behalve strip tags, eigenlijk dat er geen wijzingen in welke zin dan ook mogelijk zijn van de huidige waarde..) |
Ofyles2 | donderdag 5 januari 2012 @ 22:40 |
quote: Op donderdag 5 januari 2012 22:37 schreef Dokay het volgende:[..] Bedankt voor je tip, ik ga het morgen meteen uitproberen! Is er ook een mogelijkheid om van te voren gedefinieerde waarden (welke ik nu in hidden HTML tags heb staan) veilig over te dragen tijdens de POST naar de volgende pagina..? (Behalve strip tags, eigenlijk dat er geen wijzingen in welke zin dan ook mogelijk zijn van de huidige waarde..) Yep. |
Sitethief | donderdag 5 januari 2012 @ 23:11 |
Je kunt bepaalde dingen hashen, met een POST/GET meesturen en aan de andere kant checken. Dat kan natuurlijk alleen met dingen waarvan je aan beide kanten weet wat het ongeveer moet zijn, statische data dus. Andere data zou ik, mits dat niet teveel problemen oplevert via de sessie opslaan, mocht het data zijn die je langer nodig hebt dan een sessie idd in de db. |
Ofyles2 | donderdag 5 januari 2012 @ 23:21 |
quote: Klopt, daar ben ik ook zeer grote voorstander van (als onderdeel van MVC- en OOP-programmeren). |
Dokay | donderdag 5 januari 2012 @ 23:41 |
Bedankt voor jullie reacties! Ik ga morgen eens kijken of ik verder kom.  |
Tegan | donderdag 5 januari 2012 @ 23:49 |
Hadden jullie dit al gezien?
http://tweakers.net/nieuw(...)ia-sql-injectie.html
. |
GlowMouse | vrijdag 6 januari 2012 @ 00:44 |
Er zijn teveel amateurs  |
Ofyles2 | vrijdag 6 januari 2012 @ 00:50 |
quote: It wasn't me... |
KomtTijd... | vrijdag 6 januari 2012 @ 00:54 |
quote: *meldt.
Daarom ga ik ook niet datsoort systemen klussen, Maar srsly, een maximale lengte aan het password veld geven om SQL injectie te voorkomen? Echt wtf! Blijkbaar heeft iemand er wel over nagedacht dus, maar toen besloten dat mysql_real_escape() te moeilijk was ofzo Nog even los van de vragen over hoe dat in hemelsnaam gehashed is als die input zo de query in geslingerd wordt... |
GlowMouse | vrijdag 6 januari 2012 @ 00:55 |
quote: Die reden zal wel later bedacht zijn. Als hashing ontbreekt zal de lengte van het db-veld de ware reden achter de beperking tot 12 karakters zijn. |
Ofyles2 | vrijdag 6 januari 2012 @ 00:57 |
quote: Op vrijdag 6 januari 2012 00:54 schreef KomtTijd... het volgende:[..] *meldt. Daarom ga ik ook niet datsoort systemen klussen, Maar srsly, een maximale lengte aan het password veld geven om SQL injectie te voorkomen? Echt wtf! Blijkbaar heeft iemand er wel over nagedacht dus, maar toen besloten dat mysql_real_escape() te moeilijk was ofzo  Nog even los van de vragen over hoe dat in hemelsnaam gehashed is als die input zo de query in geslingerd wordt... Zoiets hoor je eerder op te lossen met preg_match en PDO. |
KomtTijd... | vrijdag 6 januari 2012 @ 00:59 |
quote: Preg_match En ja tegenwoordig doet iedereen dat met PDO of MySQLi (of aanverwanten in andere talen) maar als die website 5 jaar oud is ga je 'm niet helemaal herschrijven daarvoor. |
Ofyles2 | vrijdag 6 januari 2012 @ 01:03 |
quote: Op vrijdag 6 januari 2012 00:59 schreef KomtTijd... het volgende:[..] Preg_match  En ja tegenwoordig doet iedereen dat met PDO of MySQLi (of aanverwanten in andere talen) maar als die website 5 jaar oud is ga je 'm niet helemaal herschrijven daarvoor. Preg_match voor reguliere expressies. Je kunt nooit 100% zeker zijn dat al je bezoekers zo poeslief zijn... |
KomtTijd... | vrijdag 6 januari 2012 @ 01:50 |
Ik weet wat preg_match is.
Maar als tientallen mensen die jarenlang gestudeerd hebben op SQL injectie een functie maken die dagelijks door duizenden kwaadwillende mensen beproefd wordt, om alle mogelijke manieren van SQL injectie te voorkomen, maar jij denkt dat je het beter kunt met een preg_match, ben je wel redelijk naief. |
Ofyles2 | vrijdag 6 januari 2012 @ 01:52 |
quote: Op vrijdag 6 januari 2012 01:50 schreef KomtTijd... het volgende:Ik weet wat preg_match is. Maar als tientallen mensen die jarenlang gestudeerd hebben op SQL injectie een functie maken die dagelijks door duizenden kwaadwillende mensen beproefd wordt, om alle mogelijke manieren van SQL injectie te voorkomen, maar jij denkt dat je het beter kunt met een preg_match, ben je wel redelijk naief. Ik combineer preg_match met string escapen. Overbeveiliging. |
Cue_ | vrijdag 6 januari 2012 @ 09:53 |
Kort vraagje: Ik zit met een formulier dat ik wil opslaan in een oracle database. Maar natuurlijk is dit een vrij invoerveld waar oa een naam meegegeven moet worden. Dus je zit met ' in namen enzo, wekle problemen geven bij de query, dus die moeten eruit.
wat zou de mooiste oplossing hiervoor zijn? Vervangen door een ander teken en die dan weer bij oproep veranderen in een ' ? |
Pakspul | vrijdag 6 januari 2012 @ 10:31 |
1 2 3 4 5 6 | <?php $str = "Is your name O'reilly?";
// Outputs: Is your name O\'reilly? echo addslashes($str); ?> |
Bron: http://php.net/manual/en/function.addslashes.php |
#ANONIEM | vrijdag 6 januari 2012 @ 10:34 |
Bij SQL queries http://php.net/manual/en/function.mysql-real-escape-string.php |
GI | vrijdag 6 januari 2012 @ 10:34 |
quote: Dat dus! |
Cue_ | vrijdag 6 januari 2012 @ 10:42 |
quote: Die zag ik idd voorbij komen. Hij komt bij mij dan gelijk met 2 of 3 slashes aanzetten 
[ Bericht 15% gewijzigd door Cue_ op 06-01-2012 10:49:14 ] |
mstx | vrijdag 6 januari 2012 @ 10:51 |
quote:
quote:
quote: A MySQL connection is required before using mysql_real_escape_string() otherwise an error of level E_WARNING is generated, and FALSE is returned.
|
Cue_ | vrijdag 6 januari 2012 @ 10:55 |
Hmm hij blijkt hem zelf al te escapen. Toch vind mijn query hem niet leuk:
1 | quoted string not properly terminated |
|
Pakspul | vrijdag 6 januari 2012 @ 11:08 |
http://orafaq.com/wiki/SQL_FAQ
How does one escape special characters when writing SQL queries?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | SQL> SELECT 'Frank''s Oracle site' AS text FROM DUAL; TEXT -------------------- Franks's Oracle site
SQL> SELECT 'A ''quoted'' word.' AS text FROM DUAL; TEXT ---------------- A 'quoted' word.
SQL> SELECT 'A ''''double quoted'''' word.' AS text FROM DUAL; TEXT ------------------------- A ''double quoted'' word. |
1 2 3 4 | <?php // hopelijk is het zichtbaar dat een enkele quote wordt vervangen door twee enkele quotes. $name = str_replace("'", "''", "Frank's Oracle site"); ?> |
|
Cue_ | vrijdag 6 januari 2012 @ 11:20 |
Een str_replace (en wss ook die addslashes) werken niet omdat het bij verwerking in quotes komt te staan
|
#ANONIEM | vrijdag 6 januari 2012 @ 11:32 |
quote: Oracle heeft Mysql gekocht remember  |
Pakspul | vrijdag 6 januari 2012 @ 11:35 |
quote: Op vrijdag 6 januari 2012 11:20 schreef Cue_ het volgende:Een str_replace (en wss ook die addslashes) werken niet omdat het bij verwerking in quotes komt te staan [ code verwijderd ] En als je " (dubbele quote) naar " veranderd en ' (enkele quote) naar '
En die dan opslaat wat doet hij dan? |
Geflipte-Koelkast | vrijdag 6 januari 2012 @ 21:18 |
Het is me al gelukt. Op de 1 of andere manier het oude script aan de praat gekregen. Alleen nog 1 vraag. Als ik op verzenden klik, wat moet er dan verandert worden in het script, om hem door te sturen naar de 'bedank' pagina?
SPOILER PHP CODE: 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 | <?php $your_email_address="ahacties@gmail.com";
if(empty($_GET) && empty($_POST)) { die('Ongeldige actie'); }
// Emular register_globals on if (!ini_get('register_globals')) { $superglobales = array($_SERVER, $_ENV, $_FILES, $_COOKIE, $_POST, $_GET); if (isset($_SESSION)) { array_unshift($superglobales, $_SESSION); } foreach ($superglobales as $superglobal) { extract($superglobal, EXTR_SKIP); } }
// to prevent header injection if (eregi("\r",$_POST['your_email_address']) || eregi("\n",$_POST['your_email_address'])){ exit; }
// kick anyone whoever tried to inject a header in the form foreach( $_POST as $value ){ if( strpos($value,'Content-Type:') !== FALSE ){ exit; } }
$fields = array_keys($_POST);
function headfunction($url) { header ("Location: $url"); }
// protect the variable $reserved_vars if(isset($reserved_vars)) { unset($reserved_vars); } $reserved_vars = array("css_file", "background_color", "background_image", "text_color", "link_color", "visited_link_color", "active_link_color", "font_name", "font_size", "highlight_color", "required_fields", "after_url", "check_email_address", "subject", "your_email_address", "env_report", "owner_name", "autoresponse", "response_subject", "response_mail", "dodosmail_header_file", "dodosmail_footer_file");
function include_dodosmail_header($dodosmail_header_file) { global $reserved_vars; foreach($reserved_vars as $reserved_var) { global $$reserved_var; }
if(is_file($dodosmail_header_file)) { include_once($dodosmail_header_file); return; } else { echo "<html>\n"; echo "<head>\n"; echo "<title>\n"; echo "DodosMail\n"; echo "</title>\n"; if($css_file != "") echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"$css_file\">\n"; echo "</head>\n"; echo "<body bgcolor=\"$background_color\" background=\"$background_image\" text=\"$text_color\" link=\"$link_color\" vlink=\"$visited_link_color\" alink=\"$active_link_color\">\n"; echo "<font face=\"$font_name\" size=\"$font_size\">\n"; } }
function include_dodosmail_footer($dodosmail_footer_file) { global $reserved_vars; foreach($reserved_vars as $reserved_var) { global $$reserved_var; } if(is_file($dodosmail_footer_file)) { include_once($dodosmail_footer_file); return; } else { echo "</font>\n</body>\n</html>"; } }
function dodosmail_error_handle($msg) { global $highlight_color; if(isset($highlight_color)) { $extra_begin = "<font color=\"".$highlight_color."\">"; $extra_end = "</font>"; } else { $extra_begin = "<span class=\"DodosMailErrorHighLight\">"; $extra_end = "</span>"; }
return $extra_begin.$msg.$extra_end; }
// checking required fields // in case they used comma and space, replace if(strstr($required_fields, ", ")) { $required_fields = str_replace(", ", ",", $required_fields); } else { $required_fields = $required_fields; } $required_fields = explode(",", $required_fields);
for($i = 0; $i < count($required_fields); $i++) { $required_var_name = $required_fields[$i]; if(empty($$required_var_name)) { include_dodosmail_header($dodosmail_header_file); echo "<p class=\"DodosMailError\">Fout! - het verplichte veld ".dodosmail_error_handle($required_var_name)." is niet ingevuld.\n"; echo "<br /><br /><a href=\"javascript:history.back(1)\">Terug</a>\n"; echo "</p>\n"; include_dodosmail_footer($dodosmail_footer_file); exit; } } if($check_email_address == "yes" && !empty($email)) { if(!check_email($email)) { include_dodosmail_header($dodosmail_header_file); echo "<p class=\"DodosMailError\">Fout - het adres ".dodosmail_error_handle($email)." is niet geldig.\n"; echo "<br /><br /><a href=\"javascript:history.back(1)\">Terug</a>\n"; echo "</p>\n"; include_dodosmail_footer($dodosmail_footer_file); exit; } }
for($i = 0; $i < count($fields); $i++) { $actual_var = $fields[$i]; if(in_array($actual_var, $reserved_vars)) { $inside_mail = $inside_mail; } else { if(is_array($$actual_var)) { $inside_mail.= "$actual_var: "; foreach($$actual_var as $actual_val) { $inside_mail.= "$actual_val "; } $inside_mail.= "\n"; } else { $actual_val = stripslashes($$actual_var); $inside_mail.= "$actual_var: $actual_val\n"; } } }
// getting other information from the form $cname = gethostbyaddr($_SERVER[REMOTE_ADDR]); $inside_mail.= " ----------------------------------------------------------------------- SENDER INFO: IP: $_SERVER[REMOTE_ADDR] Computer Name: $cname Browser Type: $_SERVER[HTTP_USER_AGENT] Page Referer: $_SERVER[HTTP_REFERER] ----------------------------------------------------------------------- ";
$headers .= "MIME-Version: 1.0\r\n"; $headers .= "X-Priority: 3\r\n"; $headers .= "X-MSMail-Priority: Normal\r\n"; $headers .= "X-Mailer: DodosMail 2.0 http://regretless.com/scripts/\r\n"; $headers .= "Content-type: text/plain; charset=\"iso-8859-1\"\r\n"; //$headers .= "Date: ".date("R")."\r\n"; $headers .= "From: $name <$email>\r\n";
$success = mail($your_email_address, $subject, $inside_mail, $headers); if($success) { if($autoresponse == "yes") { $response_subject = stripslashes($response_subject); $response_mail = stripslashes($response_mail); mail($email, $response_subject, $response_mail, "From: $owner_name <$your_email_address>"); } if($after_url == "") { // out put send info include_dodosmail_header($dodosmail_header_file);
echo "<p>\n"; echo header('Location: http://members.quicknet.nl/albertheijn/vergelijkdebon/confirmation.htm'); for($i = 0; $i < count($fields); $i++) { $actual_var = $fields[$i]; if(in_array($actual_var, $reserved_vars)) echo ""; else { if(is_array($$actual_var)) { echo "<li>$actual_var: "; foreach($$actual_var as $actual_val) { echo "$actual_val "; } echo "</li>\n"; } else { $actual_val = stripslashes($$actual_var); echo "<li>$actual_var: $actual_val</li>\n"; } } } echo "</ul>\n<p></p>"; include_dodosmail_footer($dodosmail_footer_file); exit; } else { headfunction($after_url); } } else { include_dodosmail_header($dodosmail_header_file); echo "<p class=\"DodosMailError\">Fout - Het formulier is tijdelijk niet bruikbaar, gebruik ".dodosmail_error_handle($your_email_address)." om contact op te nemen.\n"; echo "<br /><br /><a href=\"javascript:history.back(1)\">Terug</a>\n"; echo "</p>\n"; include_dodosmail_footer($dodosmail_footer_file); exit; }
function check_email($email) { if( (preg_match('/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/', $email)) || (preg_match('/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/',$email)) ) { return true; } return false; }
?> |
Staat deze verkeerd? 1 2 3 | <?php echo header('Location: http://members.quicknet.nl/albertheijn/vergelijkdebon/confirmation.htm') ?> |
|
boem-dikkie | vrijdag 6 januari 2012 @ 21:23 |
quote: Op vrijdag 6 januari 2012 21:18 schreef Geflipte-Koelkast het volgende:Het is me al gelukt. Op de 1 of andere manier het oude script aan de praat gekregen. Alleen nog 1 vraag. Als ik op verzenden klik, wat moet er dan verandert worden in het script, om hem door te sturen naar de 'bedank' pagina? SPOILER PHP CODE: [ code verwijderd ]
Staat deze verkeerd? [ code verwijderd ]
Een header toevoegen naar je bedank pagina nadat de mail succesvol is verzonden. |
Vanillax | vrijdag 6 januari 2012 @ 22:10 |
Ik heb dus wat tijd besteed aan het inlezen in PHP formulieren en mail, nu heb ik dus deze tutorial gevolgd; http://www.xentrik.net/php/email.php
Maar de code werkt niet. Ik krijg constant dat niet alle velden zijn ingevuld terwijl dat wel zo is. En nu alleen de stukken code weggelaten waar hij kijkt of je email adres goed is en of alle velden zijn ingevuld, dan zegt hij dat het verstuurd is maar dan werkt het nog niet..
Ik ben echt op het punt van opgeven, is er nergens gewoon een kant en klare code die ik op die pagina kan gooien zodat het voor nu werkt en ik later in de lessen PHP uit kan gaan zoeken hoe ik zo'n code nu echt moet schrijven? |
Catch22- | vrijdag 6 januari 2012 @ 22:16 |
zo werkt het niet. Ik zou even wat basic tutorials php lezen en ook even wat debug-tutorials doornemen.
Maar die code he, daar staat regel voor regel wat er gebeurt... |
Vanillax | vrijdag 6 januari 2012 @ 23:50 |
quote: Op vrijdag 6 januari 2012 22:16 schreef Catch22- het volgende:zo werkt het niet. Ik zou even wat basic tutorials php lezen en ook even wat debug-tutorials doornemen. Maar die code he, daar staat regel voor regel wat er gebeurt... Ik heb wat basic tutorials doorgenomen, En dus de tutorial gevolgd waarvan ik die link gaf maar het werkt dus niet. En ik snap niet waarom. Dus ik begin me af te vragen of het niet gewoon aan de host ligt ipv aan mijn php skills, want ik doe gewoon letterlijk wat er in die tutorial staat.. |
Light | zaterdag 7 januari 2012 @ 00:03 |
quote: Op vrijdag 6 januari 2012 21:18 schreef Geflipte-Koelkast het volgende:Het is me al gelukt. Op de 1 of andere manier het oude script aan de praat gekregen. Alleen nog 1 vraag. Als ik op verzenden klik, wat moet er dan verandert worden in het script, om hem door te sturen naar de 'bedank' pagina? SPOILER PHP CODE: [ code verwijderd ]
Staat deze verkeerd? [ code verwijderd ]
1 2 3 4 5 6 7 8 9 10 11 12 | <?php // Emular register_globals on if (!ini_get('register_globals')) { $superglobales = array($_SERVER, $_ENV, $_FILES, $_COOKIE, $_POST, $_GET); if (isset($_SESSION)) { array_unshift($superglobales, $_SESSION); } foreach ($superglobales as $superglobal) { extract($superglobal, EXTR_SKIP); } } ?> |
Er is een reden dat register_globals niet meer gebruikt moet worden. Dan moet je niet zelf dat gedrag proberen na te bootsen. |
dirkjo | zondag 8 januari 2012 @ 20:39 |
Jongens; ik heb jullie hulp weer eens nodig. 
Voor een nieuwe website wil ik een systeem maken waarbij je kan zien op welke 'plaats' bepaalde data staat. Dit is gesorteerd bij 'likes' waarbij de hoogste waarde bovenaan staat.
Dat is allemaal geen probleem, maar ik wil dat op de pagina gericht aan die data ook komt te staan op welke plek die staan in de algemene-ranking.
Dus stel je even dit voor:
1 2 3 4 | A = 2 likes B = 3 likes C = 4 likes D = 1 like |
Dan zal de volgorde dus alsvolgt worden:
Stel je voor je zit op de pagina van 'A', dan wil ik dus dat je te zien krijgt dat 'A' op plek 3 staat. Maar hoe doe ik dit?
Hopelijk is het een beetje duidelijk wat ik wil en kunnen jullie me helpen  |
cablegunmaster | zondag 8 januari 2012 @ 20:57 |
Easy... een order by in je query's gebruiken de vraag blijft of dit mogelijk is. Want volgens mij gebruik je hierbij de facebook API? applicatie? ? Corrigeer me als ik het verkeerd heb.
anders een query maken; Select * from TABLE order by aantal_likes desc of hoe je het veld hebt genoemd .
Zie voorbeeld: http://www.w3schools.com/php/php_mysql_order_by.asp
quote: Op vrijdag 6 januari 2012 23:50 schreef Vanillax het volgende:[..] Ik heb wat basic tutorials doorgenomen, En dus de tutorial gevolgd waarvan ik die link gaf maar het werkt dus niet. En ik snap niet waarom. Dus ik begin me af te vragen of het niet gewoon aan de host ligt ipv aan mijn php skills, want ik doe gewoon letterlijk wat er in die tutorial staat.. Wat voor melding geeft het? en heb je die melding door google heen gehaalt? 
[ Bericht 20% gewijzigd door cablegunmaster op 08-01-2012 21:14:46 ] |
dirkjo | zondag 8 januari 2012 @ 21:15 |
quote: Op zondag 8 januari 2012 20:57 schreef cablegunmaster het volgende:Easy... een order by in je query's gebruiken de vraag blijft of dit mogelijk is. Want volgens mij gebruik je hierbij de facebook API? applicatie?  ? Corrigeer me als ik het verkeerd heb. anders een query maken; Select * from TABLE order by aantal_likes desc of hoe je het veld hebt genoemd  . Zie voorbeeld: http://www.w3schools.com/php/php_mysql_order_by.asp[..] Wat voor melding geeft het? en heb je die melding door google heen gehaald? Nee likes staan in mijn eigen database, en wat jij wilt gaat niet lukken  Want op die pagina wil ik niet de complete lijst, maar alleen de positie van het ene element (A in dit geval) uit de lijst. Snap je?  |
cablegunmaster | zondag 8 januari 2012 @ 21:32 |
quote: Op zondag 8 januari 2012 21:15 schreef dirkjo het volgende:[..] Nee likes staan in mijn eigen database, en wat jij wilt gaat niet lukken  Want op die pagina wil ik niet de complete lijst, maar alleen de positie van het ene element (A in dit geval) uit de lijst. Snap je?  Hoe haal je de gegevens van A uit de database zijnde van wat erbij hoort? Dus bijvoorbeeld de rest van de pagina? want dan is het een kwestie van een variabele query. "select * from likes where id = ' ".esc($_GET['id'])." ' "; Met bvb de link index.php?id=50 dan haalt hij de ID eruit van 50 en welke ABCD er bij hoort. |
dirkjo | zondag 8 januari 2012 @ 21:42 |
quote: Op zondag 8 januari 2012 21:32 schreef cablegunmaster het volgende:[..] Hoe haal je de gegevens van A uit de database zijnde van wat erbij hoort? Dus bijvoorbeeld de rest van de pagina? want dan is het een kwestie van een variabele query. "select * from likes where id = ' ".esc($_GET['id'])." ' "; Met bvb de link index.php?id=50 dan haalt hij de ID eruit van 50 en welke ABCD er bij hoort. Oke stel je dit voor: Je hebt de waardes A, B, C en D zoals ik net al zei. Buiten nog veel meer informatie staat er onder andere in de database bij elke waarde (elke rij dus) het aantal likes dat die heeft gekregen (facebook onafhankelijk).
Als ik een lijst wil maken waarbij de waarde met de meeste likes bovenaan komt te staan kan ik inderdaad ORDER BY likes DESC gebruiken, maar dit wil ik niet.
Ik wil namelijk het volgende:
Elke waarde is ook een pagina, stel je voor A heeft ID 1; dan heb ik een waarde met ID 1. Dan kan ik alle waardes van die row pakken door WHERE ID = 1 te gebruiken, waaronder dus ook de likes.
Maar dat heeft allemaal niks te maken met wat ik wil. Ik wil namelijk op die pagina van 'A' dat je kan zien waar 'A' staat in de lijst (dus de lijst waar de meeste likes bovenaan staan).
Ik wil dat mysql dan aan mij teruggeeft op welke plek A zou staan als ik alle waardes sorteer van meeste naar minste likes.
Dus als voorbeeld:
1 2 3 4 | A = 3 likes B = 2 likes C = 4 likes D = 1 like |
Als ik nu de hele lijst zou plaatsen zou 'A' op nummer twee worden geplaatst, hij heeft tenslotte de op een na meeste likes.
Nu wil ik op de pagina van 'A' die plaatst (positie 2) dus laten zien ZONDER de hele zooi te moeten plaatsen.
Ik hoop hiermee een beetje duidelijk te hebben beschreven wat ik wil?  |
cablegunmaster | zondag 8 januari 2012 @ 22:20 |
quote: Op zondag 8 januari 2012 21:42 schreef dirkjo het volgende:[..] Oke stel je dit voor: Je hebt de waardes A, B, C en D zoals ik net al zei. Buiten nog veel meer informatie staat er onder andere in de database bij elke waarde (elke rij dus) het aantal likes dat die heeft gekregen (facebook onafhankelijk). Als ik een lijst wil maken waarbij de waarde met de meeste likes bovenaan komt te staan kan ik inderdaad ORDER BY likes DESC gebruiken, maar dit wil ik niet. Ik wil namelijk het volgende: Elke waarde is ook een pagina, stel je voor A heeft ID 1; dan heb ik een waarde met ID 1. Dan kan ik alle waardes van die row pakken door WHERE ID = 1 te gebruiken, waaronder dus ook de likes. Maar dat heeft allemaal niks te maken met wat ik wil. Ik wil namelijk op die pagina van 'A' dat je kan zien waar 'A' staat in de lijst (dus de lijst waar de meeste likes bovenaan staan). Ik wil dat mysql dan aan mij teruggeeft op welke plek A zou staan als ik alle waardes sorteer van meeste naar minste likes. Dus als voorbeeld: [ code verwijderd ] Als ik nu de hele lijst zou plaatsen zou 'A' op nummer twee worden geplaatst, hij heeft tenslotte de op een na meeste likes. Nu wil ik op de pagina van 'A' die plaatst (positie 2) dus laten zien ZONDER de hele zooi te moeten plaatsen. Ik hoop hiermee een beetje duidelijk te hebben beschreven wat ik wil?  Dus je wil dat de site tegen je zegt Dit nieuwsartikel of letter A Staat op nummer 2 van de hele lijst. en de rest negeren? Dan zou ik een order by desc. doen en vervolgens het eruit halen met echo. een Getal++; in de for lus doen (of welke lus) en als het overeen komt welke positie het is dus als de id te voorschijn komt die nodig is dan laat je het pas Echo'en welke positie het is. Voila? of snap ik het verkeerd ?
Dan krijg je als resultaat : A staat op X positie en heeft 4 likes. |
dirkjo | zondag 8 januari 2012 @ 22:30 |
quote: Op zondag 8 januari 2012 22:20 schreef cablegunmaster het volgende:[..] Dus je wil dat de site tegen je zegt Dit nieuwsartikel of letter A Staat op nummer 2 van de hele lijst. en de rest negeren? Dan zou ik een order by desc. doen en vervolgens het eruit halen met echo. een Getal++; in de for lus doen (of welke lus) en als het overeen komt welke positie het is dus als de id te voorschijn komt die nodig is dan laat je het pas Echo'en welke positie het is. Voila?  of snap ik het verkeerd  ? Dan krijg je als resultaat : A staat op X positie en heeft 4 likes. Je snapt het  Dat is inderdaad waar ik aan dacht, maar vroeg me of daar geen makkelijkere oplossing voor was. Kennelijk niet; dus ga dit maar erin gooien, bedankt!  |
GlowMouse | zondag 8 januari 2012 @ 22:37 |
Select count(*) op de rijen met meer likes als het aantal rijen klein is, anders denormaliseren en de positie ook in de rij opslaan |
dirkjo | zondag 8 januari 2012 @ 22:44 |
quote: Op zondag 8 januari 2012 22:37 schreef GlowMouse het volgende:Select count(*) op de rijen met meer likes als het aantal rijen klein is, anders denormaliseren en de positie ook in de rij opslaan Positie moet altijd up-to-date blijven omdat users hem kunnen bepalen (door middel van de likes). Heb nu de volgende functie in elkaar gezet, verbetering welkom ofcourse.
1 2 3 4 5 6 7 8 9 10 11 12 | <?php function songRank($songID){ $rank = 0; $getrank = mysql_query("SELECT songID FROM songs ORDER BY `likes` DESC"); while($row = mysql_fetch_array($getrank)){ $rank++; if($songID == $row['songID']){ return $rank; } } } ?> |
|
GlowMouse | zondag 8 januari 2012 @ 22:48 |
Dat is een domme query, net alsof je niet snapt wat COUNT(*) en WHERE doen. |
dirkjo | zondag 8 januari 2012 @ 22:50 |
quote: Nog nooit gebruik gemaakt van COUNT(*), maar ik zal er eens naar kijken. |
The_Terminator | zondag 8 januari 2012 @ 22:52 |
quote:
1 | SELECT COUNT(*) AS aantal FROM songs WHERE songID = '" . mysql_real_escape_string($songID) . "' ORDER BY `likes` DESC |
Het aantal zit dan in: $row['aantal']
Edit: is songID numeriek of een string? |
dirkjo | zondag 8 januari 2012 @ 22:52 |
--- laat --
[ Bericht 46% gewijzigd door dirkjo op 08-01-2012 22:59:38 ] |
dirkjo | zondag 8 januari 2012 @ 22:56 |
quote: songID is nummeriek, maar je query geeft geen positie terug. Ik krijg overal '1' terug  |
The_Terminator | zondag 8 januari 2012 @ 22:58 |
quote: Oeps... Onderstaande fixt het:
1 | SELECT COUNT(*) AS aantal, songID FROM songs WHERE songID = " . mysql_real_escape_string($songID) . " ORDER BY `likes` DESC |
|
dirkjo | zondag 8 januari 2012 @ 22:59 |
quote: Nee hoor |
GlowMouse | zondag 8 januari 2012 @ 23:01 |
 |
dirkjo | zondag 8 januari 2012 @ 23:02 |
quote: Doe eens lief; kom eens met jouw oplossing. |
GlowMouse | zondag 8 januari 2012 @ 23:02 |
Welke rijen moet je tellen om de rank te bepalen. |
GlowMouse | zondag 8 januari 2012 @ 23:04 |
De oplossing van T_T is alleen daarom al niet goed omdat hij mysql_real_escape_string en intval door elkaar haalt. |
dirkjo | zondag 8 januari 2012 @ 23:06 |
quote: Geen rijen, maar één kolom in een rij. (Ja ik weet; dat heb ik een paar keer verkeerd gezegd zie ik net ).
De kolom 'likes' vertelt me de positie, die kolom bevat een getal. Met COUNT ga je alle rijen tellen die `songID` '$songID' bevatten, ofniet?  |
The_Terminator | zondag 8 januari 2012 @ 23:07 |
quote: Daarom vroeg ik of songid een numerieke waarde zou zijn. Ik gebruikt meestal is_numeric om te bepalen of de ingevoerde waarde ook daadwerkelijk numeriek is en als dat zo is voer ik het aan de query zonder de escape_string functie te gebruiken. En ik heb een vermoeden dat ik in mijn query een group by ben vergeten  |
GlowMouse | zondag 8 januari 2012 @ 23:13 |
quote: Op zondag 8 januari 2012 23:06 schreef dirkjo het volgende:[..] De kolom 'likes' vertelt me de positie, die kolom bevat een getal. Met COUNT ga je alle rijen tellen die `songID` '$songID' bevatten, ofniet?  Of niet, want je weet toch al dat dat precies één rij is. Je wilt juist tellen hoeveel rijen een hogere score hebben. Je functie zou dus "songRank($likes)" moeten zijn.
quote: Op zondag 8 januari 2012 23:07 schreef The_Terminator het volgende:[..] Daarom vroeg ik of songid een numerieke waarde zou zijn. Ik gebruikt meestal is_numeric om te bepalen of de ingevoerde waarde ook daadwerkelijk numeriek is en als dat zo is voer ik het aan de query zonder de escape_string functie te gebruiken. En ik heb een vermoeden dat ik in mijn query een group by ben vergeten  Probeer het niet goed te praten . Je stopt output van mysql_real_escape_string in een query zonder quotes om die output en dat is onveilig. |
dirkjo | zondag 8 januari 2012 @ 23:23 |
quote: Op zondag 8 januari 2012 23:13 schreef GlowMouse het volgende:[..] Of niet, want je weet toch al dat dat precies één rij is. Je wilt juist tellen hoeveel rijen een hogere score hebben. Je functie zou dus "songRank($likes)" moeten zijn. [..] Probeer het niet goed te praten  . Je stopt output van mysql_real_escape_string in een query zonder quotes om die output en dat is onveilig. Maar wat gebeurd er dan als meerdere nummers hetzelfde aantal likes hebben? Dan pakt die de eerste de beste rij die het gegeven aantal likes heeft. |
The_Terminator | zondag 8 januari 2012 @ 23:24 |
quote: Op zondag 8 januari 2012 23:13 schreef GlowMouse het volgende:Probeer het niet goed te praten  . Je stopt output van mysql_real_escape_string in een query zonder quotes om die output en dat is onveilig. Ik probeer niets goed te praten . Ik ben vergeten die escapefunctie te verwijderen, de quotes had ik wel weggehaald waardoor het lijkt dat ik de functie gebruik in een query zonder quotes.
Zoals ik al aangaf gebruik ik de functie is_numeric en return false mocht dat niet zo zijn. In de query gebruik ik dan geen quotes om de variable (het is immers numeriek) en laat het escapen achterwege aangezien de waarde al is geverifieerd. |
GlowMouse | zondag 8 januari 2012 @ 23:25 |
quote: Op zondag 8 januari 2012 23:23 schreef dirkjo het volgende:[..] Maar wat gebeurd er dan als meerdere nummers hetzelfde aantal likes hebben? Dan pakt die de eerste de beste rij die het gegeven aantal likes heeft. Heb je die vraag eens bij je eigen query gesteld?
Ik definieer de plek als 1+[het aantal songs met meer likes]. Het aantal songs met meer likes kun je met één query tellen. |
dirkjo | zondag 8 januari 2012 @ 23:27 |
quote: Op zondag 8 januari 2012 23:25 schreef GlowMouse het volgende:[..] Heb je die vraag eens bij je eigen query gesteld? Ik definieer de plek als 1+[het aantal songs met meer likes]. Het aantal songs met meer likes kun je met één query tellen. Jazeker, maar als ik mijn manier gebruik garandeer ik wel dat de plek die de pagina over het nummer aangeeft gelijk is aan de plek die staat in de pagina waar de complete lijst van alle nummers staat. |
GlowMouse | zondag 8 januari 2012 @ 23:29 |
quote: Op zondag 8 januari 2012 23:27 schreef dirkjo het volgende:[..] Jazeker, maar als ik mijn manier gebruik garandeer ik wel dat de plek die de pagina over het nummer aangeeft gelijk is aan de plek die staat in de pagina waar de complete lijst van alle nummers staat. Dat is niet waar, het resultaat berust op toeval. |
dirkjo | zondag 8 januari 2012 @ 23:30 |
En dat zou het niet doen in jouw geval, of valt zoiets niet te vermijden? |
GlowMouse | zondag 8 januari 2012 @ 23:30 |
quote:
quote: Op zondag 8 januari 2012 23:25 schreef GlowMouse het volgende:[..] Ik definieer de plek als 1+[het aantal songs met meer likes]. Het aantal songs met meer likes kun je met één query tellen.
|
dirkjo | zondag 8 januari 2012 @ 23:35 |
quote: Oke, dus (even snel) zou jouw query er ongeveer zo uitzien:
1 2 3 | <?php mysql_query("SELECT COUNT(*) AS rank FROM songs WHERE likes > ". $likes. " "); ?> |
Correct my if I'm wrong |
GlowMouse | zondag 8 januari 2012 @ 23:37 |
Precies zo. Alleen dan nog eentje bij het resultaat optellen. |
dirkjo | zondag 8 januari 2012 @ 23:40 |
quote: Oke, bedankt!  je houdt het trouwens wel lang vol om iemand niet het antwoord te geven, maar zelf te laten maken  |
Diabox | zondag 8 januari 2012 @ 23:46 |
quote: Op zondag 8 januari 2012 23:40 schreef dirkjo het volgende:[..] Oke, bedankt!  je houdt het trouwens wel lang vol om iemand niet het antwoord te geven, maar zelf te laten maken  Veel doeltreffender.  |
dirkjo | zondag 8 januari 2012 @ 23:48 |
quote: Er is nu alleen wel één probleempje. Ik vertelde net dat die oude query mij dezelfde waarde geeft als wanneer ik de hele lijst zou echo'en. Deze doet dat niet
Je zei dat dat bij die oude query toevallig zo gebeurde, maar na een flink aantal refreshes blijft die lijst precies hetzelfde.
//edit
Deze manier geeft zelfs bij meerdere nummers dezelfde rank, terwijl dit toch echt iets is wat niet mag gebeuren  |
dirkjo | zondag 8 januari 2012 @ 23:49 |
quote: Compleet waar  |
GlowMouse | zondag 8 januari 2012 @ 23:50 |
quote: Op zondag 8 januari 2012 23:48 schreef dirkjo het volgende:[..] Er is nu alleen wel één probleempje. Ik vertelde net dat die oude query mij dezelfde waarde geeft als wanneer ik de hele lijst zou echo'en. Deze doet dat niet  Dan moet je die andere lijst aanpassen zodat hij zo wordt: 1. song12 met een socore van 34 2. song3 met een socore van 24 2. song6 met een socore van 24 4. song3 met een socore van 3
quote: Je zei dat dat bij die oude query toevallig zo gebeurde, maar na een flink aantal refreshes blijft die lijst precies hetzelfde. En toch heb je geen garantie dat het niet verandert. |
dirkjo | zondag 8 januari 2012 @ 23:55 |
Check je ook even m'n edit. Heb ik iets fout gedaan dat dit gebeurd? |
The_Terminator | zondag 8 januari 2012 @ 23:55 |
quote: Op zondag 8 januari 2012 23:48 schreef dirkjo het volgende:[..] Er is nu alleen wel één probleempje. Ik vertelde net dat die oude query mij dezelfde waarde geeft als wanneer ik de hele lijst zou echo'en. Deze doet dat niet Je zei dat dat bij die oude query toevallig zo gebeurde, maar na een flink aantal refreshes blijft die lijst precies hetzelfde. //edit Deze manier geeft zelfs bij meerdere nummers dezelfde rank, terwijl dit toch echt iets is wat niet mag gebeuren Je doet het nu door te selecteren op het aantal likes?
1 2 3 4 5 6 7 8 | SET @rownum := 0;
SELECT * FROM ( SELECT @rownum := @rownum+1 AS song_rank, likes FROM songs ORDER BY likes DESC ) AS song_score WHERE songID = " . $songID |
Bovenstaande zou je de rank terug moeten geven adhv het songid.
[ Bericht 6% gewijzigd door The_Terminator op 09-01-2012 00:06:46 ] |
dirkjo | zondag 8 januari 2012 @ 23:57 |
quote: Op zondag 8 januari 2012 23:55 schreef The_Terminator het volgende:[..] Je doet het nu door te selecteren op het aantal likes? [ code verwijderd ] Bovenstaande zou je de rank terug moeten geven adhv het songid. Ik gebruik nu de manier van GM, een paar posts terug. |
GlowMouse | maandag 9 januari 2012 @ 00:02 |
Wijzig SELECT songID FROM songs ORDER BY `likes` DESC in SELECT songID FROM songs ORDER BY `likes` DESC,songID DESC
En SELECT COUNT(*) AS rank FROM songs WHERE likes > ... in SELECT COUNT(*) AS rank FROM songs WHERE likes > ... OR (likes = .... ANDS songID > ....) |
The_Terminator | maandag 9 januari 2012 @ 00:07 |
quote: Ah, ok. Ik heb mijn code zojuist wat aangepast en getest. Het functioneerd goed en geeft de positie terug adhv een gegeven songID, zoals je dat in je eerste versie had. |
dirkjo | maandag 9 januari 2012 @ 00:08 |
quote: Op maandag 9 januari 2012 00:02 schreef GlowMouse het volgende:Wijzig SELECT songID FROM songs ORDER BY `likes` DESC in SELECT songID FROM songs ORDER BY `likes` DESC,songID DESC En SELECT COUNT(*) AS rank FROM songs WHERE likes > ... in SELECT COUNT(*) AS rank FROM songs WHERE likes > ... OR (likes = .... ANDS songID > ....) Held  |
dirkjo | maandag 9 januari 2012 @ 00:08 |
quote: Op maandag 9 januari 2012 00:07 schreef The_Terminator het volgende:[..] Ah, ok. Ik heb mijn code zojuist wat aangepast en getest. Het functioneerd goed en geeft de positie terug adhv een gegeven songID, zoals je dat in je eerste versie had. Dit gebruik ik nu en werkt:
1 2 3 | <?php $rankQuery = mysql_query("SELECT COUNT(*) AS rank FROM songs WHERE `likes` > ". $likes. " OR (`likes` = '". $likes ."' AND `songID` > ". $songID .")"); ?> |
Still, thanks.  |
GlowMouse | maandag 9 januari 2012 @ 00:09 |
Die van T_T werkt ook, maar die van mij is uiteraard sneller. |
The_Terminator | maandag 9 januari 2012 @ 00:13 |
quote: True. |
dirkjo | maandag 9 januari 2012 @ 00:15 |
Nooit verwacht dat m'n zondag avond nog leerzaam zou zijn  |
dirkjo | maandag 9 januari 2012 @ 21:10 |
Als we dan toch over COUNT hebben. Is het verstandiger om gebruik te maken van de COUNT functie om te kijken of een user bestaat, dan gebruik je maken van mysql_num_rows? Ik gebruik nu die laatste, maar dit lijkt me (nu ik een beetje door heb hoe COUNT werkt) vrij omslachtig. |
GlowMouse | maandag 9 januari 2012 @ 21:13 |
Dat is het inderdaad. Als jij een query zonder COUNT(*) doet dan gaan alle rijen van MySQL naar PHP zodat PHP ze kan tellen. |
dirkjo | maandag 9 januari 2012 @ 21:21 |
quote: Op maandag 9 januari 2012 21:13 schreef GlowMouse het volgende:Dat is het inderdaad. Als jij een query zonder COUNT(*) doet dan gaan alle rijen van MySQL naar PHP zodat PHP ze kan tellen. Oke, duidelijk!  |
Swetsenegger | dinsdag 10 januari 2012 @ 08:53 |
Ik heb de volgende query
1 2 3 4 5 | SELECT Naam, Challenge, Voortgang, ( Voortgang / ( Challenge /100 ) ) AS Percentage FROM hardlopen ORDER BY Naam |
Maar Percentage is dan tot 8 decimalen achter de komma. Kan ik dit eenvoudig beperken tot 2? |
#ANONIEM | dinsdag 10 januari 2012 @ 08:54 |
round gebruiken.
http://www.w3schools.com/sql/sql_func_round.asp |
Tijn | dinsdag 10 januari 2012 @ 08:55 |
Beetje detail is niet verkeerd toch, Swets?  |
Swetsenegger | dinsdag 10 januari 2012 @ 08:56 |
quote: Ik had de 2e parameter bij ROUND gemist in mijn zoektocht, bedankt! |
Pakspul | dinsdag 10 januari 2012 @ 09:15 |
Dit had je anders ook kunnen gebruiken: http://nl.php.net/number_format |
GI | dinsdag 10 januari 2012 @ 09:31 |
Of http://php.net/manual/en/function.round.php in php als je de db server niet je rekenwerk wil laten doen  |
Swetsenegger | dinsdag 10 januari 2012 @ 09:39 |
Ja de op functie ken ik, maar in dit geval was het makkelijker in mysql. |
Pakspul | dinsdag 10 januari 2012 @ 10:41 |
quote: Ik zou dit soort taken niet bij de database server neerleggen. Queries moet je zo licht mogelijk schrijven, zodat je de database server zo min mogelijk lastig valt. |
Swetsenegger | dinsdag 10 januari 2012 @ 10:43 |
quote: Op dinsdag 10 januari 2012 10:41 schreef Pakspul het volgende:[..] Ik zou dit soort taken niet bij de database server neerleggen. Queries moet je zo licht mogelijk schrijven, zodat je de database server zo min mogelijk lastig valt. Geloof me, m'n server krijgt het er echt niet warm van  |
Pakspul | dinsdag 10 januari 2012 @ 10:49 |
quote: Dat begrijp ik, maar het gaat er om dat je begrijpt waarom je die dingen daar niet moet neerleggen Je kunt het je beter direct goed aanleren  |
Tijn | dinsdag 10 januari 2012 @ 10:50 |
quote: Op dinsdag 10 januari 2012 10:49 schreef Pakspul het volgende:[..] Dat begrijp ik, maar het gaat er om dat je begrijpt waarom je die dingen daar niet moet neerleggen  Je kunt het je beter direct goed aanleren  Het is niet fout om je query zo te formuleren dat de data die eruit komt zo nuttig mogelijk is in je applicatie. |
GI | dinsdag 10 januari 2012 @ 10:51 |
quote: Op dinsdag 10 januari 2012 10:49 schreef Pakspul het volgende:[..] Dat begrijp ik, maar het gaat er om dat je begrijpt waarom je die dingen daar niet moet neerleggen  Je kunt het je beter direct goed aanleren  Swets is al een paar stapjes verder dan aanleren 
En ik ben het met Tijn eens. Het is niet per definitie fout om de DB server te laten rekenen. |
Pakspul | dinsdag 10 januari 2012 @ 10:54 |
quote: Op dinsdag 10 januari 2012 10:50 schreef Tijn het volgende:[..] Het is niet fout om je query zo te formuleren dat de data die eruit komt zo nuttig mogelijk is in je applicatie. Het is niet fout, maar kwa belasting wil je het gewoon niet. Bij hobby projecten maakt het uiteraard niets uit waar je het doet en als die het makkelijkste voor je is dan moet je het vooral doen. Maar als je grote projecten draait dan kunnen dit wel winst punten zijn.
Zelfde als in hobby projecten kun je best: SELECT * doen, maar het is beter om alleen de velden op te halen die nodig zijn. |
#ANONIEM | dinsdag 10 januari 2012 @ 10:55 |
quote: Op dinsdag 10 januari 2012 10:51 schreef GI het volgende:[..] Swets is al een paar stapjes verder dan aanleren  En ik ben het met Tijn eens. Het is niet per definitie fout om de DB server te laten rekenen. Dat dus. |
#ANONIEM | dinsdag 10 januari 2012 @ 10:56 |
quote: Op dinsdag 10 januari 2012 10:54 schreef Pakspul het volgende:[..] Het is niet fout, maar kwa belasting wil je het gewoon niet. Bij hobby projecten maakt het uiteraard niets uit waar je het doet en als die het makkelijkste voor je is dan moet je het vooral doen. Maar als je grote projecten draait dan kunnen dit wel winst punten zijn. Zelfde als in hobby projecten kun je best: SELECT * doen, maar het is beter om alleen de velden op te halen die nodig zijn. Definieer 'belasting'. |
GlowMouse | dinsdag 10 januari 2012 @ 10:57 |
quote: Op dinsdag 10 januari 2012 10:41 schreef Pakspul het volgende:[..] Ik zou dit soort taken niet bij de database server neerleggen. Queries moet je zo licht mogelijk schrijven, zodat je de database server zo min mogelijk lastig valt. Als je round door je db-clients wilt laten uitrekenen, ben je verkeerd bezig. |
Tijn | dinsdag 10 januari 2012 @ 11:00 |
quote: Ik denk eigenlijk dat de database een stuk efficiënter z'n eigen data kan manipuleren dan de applicatie die deze data verder verwerkt. |
#ANONIEM | dinsdag 10 januari 2012 @ 11:02 |
quote: Op dinsdag 10 januari 2012 11:00 schreef Tijn het volgende:[..] Ik denk eigenlijk dat de database een stuk efficiënter z'n eigen data kan manipuleren dan de applicatie die deze data verder verwerkt.
quote: Indeed. |
GI | dinsdag 10 januari 2012 @ 11:03 |
quote: Op dinsdag 10 januari 2012 11:00 schreef Tijn het volgende:[..] Ik denk eigenlijk dat de database een stuk efficiënter z'n eigen data kan manipuleren dan de applicatie die deze data verder verwerkt. Ja, dat is wel waar. Maar het hangt compleet van de situatie af of je dergelijke dingen laat berekenen door de DBengine of door de applicatie zelf. Als het puur en alleen om weergave gaat zou ik zeggen dat het door de applicatie gedaan moet worden. Als het om tussentabellen gaat of iets in die geest dan kan ik me nog voorstellen dat je het de DBengine laat doen. |
GI | dinsdag 10 januari 2012 @ 11:04 |
quote: Das knap, het eens zijn met twee quotes die elkaar tegenspreken. |
Tijn | dinsdag 10 januari 2012 @ 11:04 |
quote: Nee? |
Pakspul | dinsdag 10 januari 2012 @ 11:06 |
quote: Het is rekenkracht wat je kwijt bent, bij 10 request per minuut maakt het geen fuck uit, maar als je request omhoog gaan dan wil je niet dat je DB server met dit soort dingen bezig is.
quote: Dat probeer ik hier te zeggen. |
Pakspul | dinsdag 10 januari 2012 @ 11:07 |
quote: ja, want deze eerste zegt. Leg het neer bij de DB en de andere zegt doe het niet want dan ben je verkeerd bezig. |
Tijn | dinsdag 10 januari 2012 @ 11:08 |
quote: Je begrijpt het verschil tussen server en client? |
GlowMouse | dinsdag 10 januari 2012 @ 11:10 |
quote: Op dinsdag 10 januari 2012 11:00 schreef Tijn het volgende:[..] Ik denk eigenlijk dat de database een stuk efficiënter z'n eigen data kan manipuleren dan de applicatie die deze data verder verwerkt. Dat is niet altijd een criterium omdat je vaak eenvoudig servers waar de applicatie op draaien kunt bijplaatsen.quote: Op dinsdag 10 januari 2012 11:06 schreef Pakspul het volgende:[..] Het is rekenkracht wat je kwijt bent, bij 10 request per minuut maakt het geen fuck uit, maar als je request omhoog gaan dan wil je niet dat je DB server met dit soort dingen bezig is. Geef me maar root-toegang op een server die 50.000 queries per seconde afhandelt, zal ik je 10 dingen aanwijzen die elk een miljoen keer meer opleveren.
quote: Dat probeer ik hier te zeggen.
Niet waar, jij wilt het van je db-server naar je db-client verplaatsen. |
GI | dinsdag 10 januari 2012 @ 11:14 |
Ah, dan las ik het verkeerd. Ik denk trouwens wel dat er geen gouden regel is voor deze problematiek. |
Tijn | dinsdag 10 januari 2012 @ 11:15 |
quote: Op dinsdag 10 januari 2012 11:14 schreef GI het volgende:Ah, dan las ik het verkeerd. Ik denk trouwens wel dat er geen gouden regel is voor deze problematiek. Dat denk ik ook. Het is ook duidelijk dat je moet proberen een trage query te voorkomen natuurlijk. Maar dat doe je niet door de round-functie van je database te vermijden. |
Pakspul | dinsdag 10 januari 2012 @ 11:26 |
quote: Ik weet niet wat jij bedoelt met DB-server en DB-client.
Maar ik heb even een test uitgevoerd. 100 x een query opgehaald waar 2x50 float in voorkomen. In de ene heb ik hem door PHP laten afronden en in de andere heb ik het door MySQL laten doen. En het verschil is dat PHP er 35% langer over doet wanneer deze zelf de getallen nog moet afronden.
Dan had Tijn het dus toch goed dat de DB-server zelf efficiënter zijn data kan manipuleren.
Nouja, daar zat ik er dus naast ik dacht altijd dat je zulke functie niet daar moest uitvoeren. Vraag ik mij nu alleen af of dit ook geldt voor berekeningen. Straks maar eens doen eerst koffie! |
#ANONIEM | dinsdag 10 januari 2012 @ 11:28 |
Kom op, een DB-server en een DB-client zijn twee hele normale, gangbare begrippen. |
Tijn | dinsdag 10 januari 2012 @ 11:28 |
quote: De machine waar de database zelf op staat is de databaseserver. De machine waar de applicatie op draait die met de database verbinding heeft is de databaseclient. |
#ANONIEM | dinsdag 10 januari 2012 @ 11:28 |
quote: Op dinsdag 10 januari 2012 11:26 schreef Pakspul het volgende:[..] Ik weet niet wat jij bedoelt met DB-server en DB-client. Maar ik heb even een test uitgevoerd. 100 x een query opgehaald waar 2x50 float in voorkomen. In de ene heb ik hem door PHP laten afronden en in de andere heb ik het door MySQL laten doen. En het verschil is dat PHP er 35% langer over doet wanneer deze zelf de getallen nog moet afronden. Dan had Tijn het dus toch goed dat de DB-server zelf efficiënter zijn data kan manipuleren. Nouja, daar zat ik er dus naast ik dacht altijd dat je zulke functie niet daar moest uitvoeren. Vraag ik mij nu alleen af of dit ook geldt voor berekeningen.  Straks maar eens doen  eerst koffie! 100x zegt niks. Doe hem eens 100.000 keer. |
Pakspul | dinsdag 10 januari 2012 @ 12:07 |
quote: Bij 100.000 keer doet hij er 11% langer over in PHP dan wanneer je MySQL zelf de round functie laat uitvoeren. |