Nee het is niet slim, het is gewoon niet nodig. Je hebt standaard functies in PHP die kunnen kijken of iets een waarde is. Daarnaast staat je HTML vol met fouten.quote:Op zondag 6 april 2014 13:55 schreef Robuustheid het volgende:
[..]
Nou voorruit, voor jou dan:
Je mag het raar vinden, maar het a+0 en vervolgens vergelijken of het gelijk staat aan a, vind ik erg slim bedacht.
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 | <html> <head><title>PHP Web Calc</title></head></html> <body> <?php if(!isset($_POST["value1"])) $_POST["value1"]=0; if(!isset($_POST["value2"])) $_POST["value2"]=0; if(!is_int($_POST['value1'])) { $message="<font color=#FF0000>Value 1 must be a number</font><script>document.forms[0].value1.focus();</script>"; } else if(!is_int($_POST['value2'])) { $message="<font color=#FF0000>Value 2 must be a number</font><script>document.forms[0].value2.focus();</script>"; } if(isset($_POST["oper"]) && !isset($message)) { switch($_POST["oper"]) { case "+": $message=$_POST["value1"]+$_POST["value2"]; break; case "-": $message=$_POST["value1"]-$_POST["value2"]; break; case "*": $message=$_POST["value1"]*$_POST["value2"]; break; case "/": if((int)$_POST["value2"] === 0) { $message="<font color=#FF0000>Division by 0 is impossible...</font><script>document.forms[0].value2.focus();</script>"; } else $message=$_POST["value1"]/$_POST["value2"]; break; default: break; } } else { $message="Enter 2 numbers and press 1 operation button."; } ?> <form action="test.php" method="post"> <table border="0"> <tr><td>Value 1</td><td><input type="text" name="value1" value="<?php echo $_POST["value1"]; ?>"></td> <td>Value 2</td><td><input type="text" name="value2" value="<?php echo $_POST["value2"]; ?>"></td></tr> <tr><td align="center" colspan="4"> <input type="submit" name="oper" value="+"/> <input type="submit" name="oper" value="-" /> <input type="submit" name="oper" value="*"/> <input type="submit" name="oper" value="/" /> </td></tr> <tr><td colspan="4" align="right">$message</td></tr> </table> </form> </body> |
Inderdaad prepared statementsquote:Op zondag 6 april 2014 16:35 schreef DrNick het volgende:
[..]
Wat adviseer je? Dan zal ik daar nog wel naar kijken. Prepared statements in ieder geval, en wat nog?
Ik had overigens naar jouw scriptje gekeken, alleen dat kreeg ik niet werkend. Ik vind dit het prettigst en duidelijkst.
Zal ik ook eens naar kijken.quote:Op zondag 6 april 2014 16:36 schreef bondage het volgende:
[..]
Ah, zo. Vergeet overigens niet de waarden ff door htmlentities te halen voordat ze worden verwerkt in de HTML.
Zal ik doenquote:Op zondag 6 april 2014 16:37 schreef totalvamp het volgende:
Inderdaad prepared statements
Maar wat ik al zei, je script is nu nooit meer goed aan te passen. Daarnaast is het van belang dat je leert omgaan met arrays aangezien je 90% van de tijd data daarin krijgt aangeleverd.
Ook is het handig je code zo netjes mogelijk te maken en als je dingen moet kopieren en plakken weet je dat er iets verkeerd is met je code. (zelfde met col1 col2 col3 in databases).
Zoek op relationele databases, dan zul je zien dat het voor jezelf ook een stuk makkelijker is uiteindelijk
Het is slim gevonden. En dat lijkt mij ook?quote:Op zondag 6 april 2014 16:37 schreef totalvamp het volgende:
[..]
Nee het is niet slim, het is gewoon niet nodig. Je hebt standaard functies in PHP die kunnen kijken of iets een waarde is. Daarnaast staat je HTML vol met fouten.
[ code verwijderd ]
Nee, het is gewoon een gecompliceerde manier om iets te doen wat stukken makkelijker kan. Wat mij meer van toepassing lijkt, is dat de programmeur van het script niet goed wist wat hij deed en zelf ook nog een beginner is.quote:Op zondag 6 april 2014 21:30 schreef Robuustheid het volgende:
[..]
Het is slim gevonden. En dat lijkt mij ook?
En ja ik ben op de hoogte van de functie in PHP om op integers te zoeken, maar daar ging het mij niet om. Het ging mij om dat iemand zoiets creatiefs bedacht heeft.
En wellicht heb je moeite met lezen... Nogmaals: ik heb het niet (er staat niet) gemaakt. Dus het is niet mijn html. Hoezo zitten er fouten in? Het werkt anders prima bij mij.
1 2 3 4 5 6 7 8 9 | <?php //Dit is sowieso een rare manier voor een echo, je gebruikt namelijk altijd ' op een echo te openen dit vanwege het feit dat PHP alles tussen "" parsed op variabelen. echo "<tr><td>Value 1</td><td><input type=text name=value1 value=\"".$_POST["value1"]."\"></td>"; echo '<tr><td>Value 1</td><td><input type="text" name="value1" value="'.$_POST["value1"].'" /></td>'; //Dit zou nooit nodig moeten zijn, omdat je de waarden van te voren controleert. $message=($_POST["value1"]+0)/($_POST["value2"]+0); ?> |
Ik begrijp je opmerking niet zo goed.quote://Dit is sowieso een rare manier voor een echo, je gebruikt namelijk altijd ' op een echo te openen dit vanwege het feit dat PHP alles tussen "" parsed op variabelen.
1 2 3 4 5 | //Onderstaand regel is volgens je dus verkeerd? echo "voorbeeld"; //En onderstaand regel is dus juist? echo 'voorbeeld'; //Waarom is eerste voorbeeld verkeerd dan? Je uitleg over parsen is mij nog vaag. |
Wat moet ik mij daarbij voorstellen?quote://Dit zou nooit nodig moeten zijn, omdat je de waarden van te voren controleert.
Wat zou je anders gaan doen dan?quote:Op zondag 6 april 2014 21:58 schreef Scorpie het volgende:
Sowieso een table echoën met input elementen en shit
Ik zie wel isset staan?quote:
Gewoon even php sluiten? Als je nou 1 dingetje moet doen alè, gewoon in een echo.quote:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php echo "<tr><td>Value 1</td><td><input type=text name=value1 value=\"".$_POST["value1"]."\"></td>"; // zo moet het dus niet ?> <tr> <td> Value 1 </td> <td> <input type="text" name="value1" value="<?php echo $_POST['value1']; ?>" /> </td> </tr> <?php // .. |
Alles wat tussen "hier" staat wordt bekeken of er een variabele bij staat "hier $een $var"quote:Op zondag 6 april 2014 22:03 schreef Robuustheid het volgende:
[..]
Ik begrijp je opmerking niet zo goed.
[ code verwijderd ]
quote:Wat moet ik mij daarbij voorstellen?
En als de font niet gebruikt wordt, dan zie ik niet in hoe je de letters in dit voorbeeld een kleur kunt geven zonder CSS in dit
voorbeeld.
1 | <p style="color:#FF0000">rode text</p> |
2010, die code is sowieso niet meer echt relevant.quote:Ik heb de bovenstaande code daarvandaan. De auteur is ook nog Zend PHP gecertificeerd.
Dat is tegenwoordig geen issue meer.quote:Op zondag 6 april 2014 22:21 schreef totalvamp het volgende:
[..]
Alles wat tussen "hier" staat wordt bekeken of er een variabele bij staat "hier $een $var"
Dat duurt dus langer om op het scherm te tonen.
Hmm, latere versies hebben dit dus verholpenquote:
1 2 3 4 5 6 7 8 9 10 11 12 | begin tran if exists (select * from table with (updlock,serializable) where key = @key) begin update table set ... where key = @key end else begin insert table (key, ...) values (@key, ...) end commit tran |
<?php ?> tags gebruiken.quote:Op maandag 7 april 2014 19:08 schreef DrNick het volgende:
Wellicht dat jullie hier ook kunnen helpen:
Ons programma werkt nu bijna helemaal. Het laatste wat eigenlijk moet gebeuren nu is ervoor zorgen dat de record geüpdate wordt wanneer een leerling met llnr x nogmaals een keuze maakt. Nu zou zo'n leerling namelijk een error krijgen, vanwege de duplicaten. Nu heb ik wel reeds een stukje code gevonden, maar dit is slechts de SQL versie. Hoe doe ik dit in php?
[ code verwijderd ]
http://www.php.net/manual/en/book.pdo.phpquote:Op maandag 7 april 2014 19:19 schreef DrNick het volgende:
[..]
Dus in plaats van de insert query die er nu staat deze gebruiken?
quote:Op zondag 6 april 2014 22:18 schreef CrashO het volgende:
[..]
Gewoon even php sluiten? Als je nou 1 dingetje moet doen alè, gewoon in een echo.
Maar voor zoiets als dit
Krijg je dus zoiets
[ code verwijderd ]
Hmm, ik snap er nog niet veel van, maar is dit wat er moet gebeuren?quote:Op maandag 7 april 2014 19:23 schreef TwenteFC het volgende:
[..]
http://www.php.net/manual/en/book.pdo.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php PDO { public __construct(database,root,usbw); public beginTransaction(); if exists (select * from profielkeuze with (updlock,serializable) where llnr = $llnr) begin update table set profielkeuze where llnr = $llnr end else begin insert into profielkeuze(llnr, Vak00, ...) values ('$llnr', '$Vak00', ...); end public commit(); } ?> |
Hij gebruikt al mysqli, dus laten we dat zo houden... Al ben ik het met je eens dat PDO rocks en cool is en iedereen die het niet gebruikt afgeschoten moet worden.quote:Op maandag 7 april 2014 19:23 schreef TwenteFC het volgende:
[..]
http://www.php.net/manual/en/book.pdo.php
Dus mijn INSERT INTO vervangen door dat zou al afdoende moeten zijn?quote:Op maandag 7 april 2014 19:47 schreef slacker_nl het volgende:
[..]
Hij gebruikt al mysqli, dus laten we dat zo houden... Al ben ik het met je eens dat PDO rocks en cool is en iedereen die het niet gebruikt afgeschoten moet worden.
Overigens kent MySQL een INSERT INTO ON DUPLICATE KEY UPDATE syntax.
Ik heb nu dit geprobeerd, enkel krijg ik deze foutmelding:quote:INSERT INTO table (id,a,b,c,d,e,f,g) VALUES (1,2,3,4,5,6,7,8)
ON DUPLICATE KEY UPDATE a=VALUES(a),b=VALUES(b),c=VALUES(c),d=VALUES(d),e=VALUES(e),f=VALUES(f),g=VALUES(g)
Waarom dat 'a=values(a)' en dergelijke? Ik ken die ON DUPLICATE KEY UPDATE niet maar de syntaxis ziet er een beetje vreemd uit.quote:Op maandag 7 april 2014 20:42 schreef DrNick het volgende:
[..]
Ik heb nu dit geprobeerd, enkel krijg ik deze foutmelding:
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 'Vak00=VALUES(Vak00),Vak01=VALUES(Vak01),Vak02=VALUES(Vak02),Vak03=VALUES(Vak03),' at line 3
Die heb ik overgenomen uit de syntax beschreven in de link 2 posts terug.quote:Op maandag 7 april 2014 20:55 schreef robin007bond het volgende:
[..]
Waarom dat 'a=values(a)' en dergelijke? Ik ken die ON DUPLICATE KEY UPDATE niet maar de syntaxis ziet er een beetje vreemd uit.
1 2 3 | $query = "INSERT INTO keuzes (llnr, Vak00, Vak01, Vak02, Vak03, Vak04, Vak05, Vak06, Vak07, Vak08, Vak09, Vak10, Vak11, Vak12, Vak13, Keuze1, Keuze2, Opmerkingen) VALUES ('$llnr', '$Vak00', '$Vak01', '$Vak02', '$Vak03', '$Vak04', '$Vak05', '$Vak06', '$Vak07', '$Vak08', '$Vak09', '$Vak10', '$Vak11', '$Vak12', '$Vak13', '$Keuze1', '$Keuze2', '$Opmerking') ON DUPLICATE KEY Vak00='Vak00', Vak01='Vak01', Vak02='Vak02', Vak03='Vak03', Vak04='Vak04', Vak05='Vak05', Vak06='Vak06', Vak07='Vak07', Vak08='Vak08', Vak09='Vak09', Vak10='Vak10', Vak11='Vak11', Vak12='Vak12', Vak13='Vak13', Keuze1='Keuze1', Keuze2='Keuze2', Opmerkingen='Opmerkingen'"; |
1 2 3 4 5 6 | INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] {VALUES | VALUE} ({expr | DEFAULT},...),(...),... [ ON DUPLICATE KEY UPDATE col_name=expr [, col_name=expr] ... ] |
Dus die extra regel moet er nog bij?quote:Op maandag 7 april 2014 21:52 schreef slacker_nl het volgende:
Volgens mij is het:
INSERT INTO table (id, a, b, c) VALUES (iets, 1,2,3) ON DUPLICATE KEY UPDATE a = 1, b = 2, c = 3;
Eigenlijk dezelfde syntax als de update zelf:
UPDATE table SET a = 1, b = 2, c = 3 WHERE ID = iets;
Je mist UPDATE na ON DUPLICATE KEY.quote:
Je zag hem gelijk met mijquote:Op maandag 7 april 2014 21:57 schreef slacker_nl het volgende:
[..]
Je mist UPDATE na ON DUPLICATE KEY.
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |