Heb je wel display_errors = On staan in php.ini?quote:Op zaterdag 10 december 2005 20:43 schreef SkaterSam het volgende:
Grmmbblll, op een of andere manier krijg ik nooit errors te zien, maar telkens een standaard blanke pagina, maar dat terzijde...
Ik heb tijdens ontwikkeling altijd error_reporting(E_ALL); aanstaan, maar als ik een curly bracket vergeet krijg ik ook een lege page te zien en geen foutmeldingquote:Op zaterdag 10 december 2005 22:46 schreef SuperRembo het volgende:
[..]
Heb je wel display_errors = On staan in php.ini?
Jup, dat heb ik dus ook ja, dus moet ik altijd de fouten uit de error.log lezen, verder niet zo'n probleem, wel een beetje onhandigquote:Op zaterdag 10 december 2005 22:53 schreef Swetsenegger het volgende:
[..]
Ik heb tijdens ontwikkeling altijd error_reporting(E_ALL); aanstaan, maar als ik een curly bracket vergeet krijg ik ook een lege page te zien en geen foutmelding
Dank, ik nietquote:Op zaterdag 10 december 2005 22:46 schreef SuperRembo het volgende:
[..]
Heb je wel display_errors = On staan in php.ini?
weet iemand een leuke windows apache log file parser?quote:Op zaterdag 10 december 2005 22:54 schreef SkaterSam het volgende:
[..]
Jup, dat heb ik dus ook ja, dus moet ik altijd de fouten uit de error.log lezen, verder niet zo'n probleem, wel een beetje onhandig
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | php session_start(); /* Load main library Files */ require_once ("lib/htconfig.php"); require_once( $GLOBALS['SITE']['LibPath'] . "/main.php"); if(!$_GET['sid']) { $error->Report ("Er is geen (sub)forum ID meegegeven. Bewerking is afgebroken."); } else { $MySQL_Fora_Select = "SELECT IdForumSubCat, ForumCatId, Titel FROM ForumSubCat WHERE IdForumSubCat = '" . addslashes($_GET['sid']) . "' LIMIT 1"; $MySQL_Fora_Query = mysql_query($MySQL_Fora_Select) or die($error->ReportMysqlError(__FILE__, $MySQL_Fora_Select ,__LINE__)); $MySQL_Fora_Numrow = mysql_num_rows($MySQL_Fora_Query); if($MySQL_Fora_Numrow >= 1) { ## Select the main forum Titel and Image $MySQL_Fora_Assoc = mysql_fetch_assoc($MySQL_Fora_Query); $MySQL_Forum_Select = "SELECT IdForumCat, Titel, TitelImage FROM ForumCat WHERE IdForumCat = '" . addslashes($MySQL_Fora_Assoc['ForumCatId']) . "' LIMIT 1"; $MySQL_Forum_Query = mysql_query($MySQL_Forum_Select) or die(mysql_error()); $MySQL_Forum_Assoc = mysql_fetch_assoc($MySQL_Forum_Query); $tml->RegisterVar ("CONTENTTOP", $MySQL_Forum_Assoc['TitelImage']); $tml->RegisterVar ("FORUMTITLE", $MySQL_Forum_Assoc['Titel']); $tml->RegisterVar ("SUBFORUMTITLE", $MySQL_Fora_Assoc['Titel']); ## $MySQL_Topic_Select = "SELECT IdTopic, UserId, Titel, Type FROM ForumTopics WHERE SubCatId = '" . addslashes($_GET['sid']) . "' ORDER BY Date DESC"; $MySQL_Topic_Query = mysql_query($MySQL_Topic_Select) or die(mysql_error()); $MySQL_Topic_Numrow = mysql_num_rows($MySQL_Topic_Query); while($Topic = mysql_fetch_assoc($MySQL_Topic_Query)) { $MySQL_Message_Select = "SELECT TopicId, Datum FROM ForumMessages WHERE TopicId = '" . $Topic['IdTopic'] . "' ORDER BY Datum DESC LIMIT 1"; $MySQL_Message_Query = mysql_query($MySQL_Message_Select) or die(mysql_error() . " op regel: " . __LINE__ . "<br />De betreffende query:" . $MySQL_Message_Select); $MySQL_Message_Assoc = mysql_fetch_assoc($MySQL_Message_Query); $LastPostInTopic = $MySQL_Message_Assoc['Datum']; $MySQL_Reacties_Select = "SELECT COUNT(IdMessage) FROM ForumMessages WHERE TopicId = '" . $Topic['IdTopic'] . "'"; $MySQL_Reacties_Query = mysql_query($MySQL_Reacties_Select); $MySQL_Reacties_Result = mysql_result($MySQL_Reacties_Query, 0); $LoopData = array ( "TITLE" => $Topic['Titel'], "IDTOPIC" => $Topic['IdTopic'], "USERID" => $main->User_Name($Topic['UserId'], 1), "REACTIES" => $MySQL_Reacties_Result, "LASTPOST" => date("d-m-Y H:i:s", $LastPostInTopic), ); $i++; /* Registreren van een Loop */ $tml->RegisterLoop("TOPIC",$i,$LoopData); } /* Load Header file */ $tml->LoadFromFile ("pages/overall_header"); $tml->Parse(); /* Load Page Content */ $tml->LoadFromFile ("pages/forum_subcat"); $tml->Parse(); /* Load Footer file */ $tml->LoadFromFile ("pages/overall_footer"); $tml->Parse(); /* Output Pages */ $tml->Output(); } else { $error->Report ("Het (sub)forum dat je probeert op te vragen is niet gevonden."); } } ?> |
Dat laatste is dus wel de juiste manier, het gaat hier niet om "handig", want misschien gaat het opslaan zo wel sneller, maar het ophalen wel 10x zo traag!quote:Op zondag 11 december 2005 20:15 schreef Swetsenegger het volgende:
Korte vraag,
zoals jullie weten ben ik met een webshop bezig.
Het winkelwagentje is een array, waarbij de key het produkt ID is en de value het aantal.
Nu moet ik deze gegevens op gaan slaan in de db. Zal ik simpelweg de array opslaan in een kolom? Het lijkt me een beetje 'vreemde' oplossing eigenlijk, maar aan de andere kant lijkt het me niet handig wanneer ik elk produkt van de bestelling afzonderlijk in een kolom of rij op ga slaan en vervolgens nog iets van een koppeltable moet maken voor de aantallen.
Je hebt alleen een tabel nodig (inhoud van de winkelwagen) die de gebruiker koppelt aan de gekozen producten en het aantal dat daarbij hoort. Oftwel, een userid, productid en number (aantal producten).quote:Op zondag 11 december 2005 20:15 schreef Swetsenegger het volgende:
Korte vraag,
zoals jullie weten ben ik met een webshop bezig.
Het winkelwagentje is een array, waarbij de key het produkt ID is en de value het aantal.
Nu moet ik deze gegevens op gaan slaan in de db. Zal ik simpelweg de array opslaan in een kolom? Het lijkt me een beetje 'vreemde' oplossing eigenlijk, maar aan de andere kant lijkt het me niet handig wanneer ik elk produkt van de bestelling afzonderlijk in een kolom of rij op ga slaan en vervolgens nog iets van een koppeltable moet maken voor de aantallen.
Hoezo?quote:Op zondag 11 december 2005 20:33 schreef existenz het volgende:
[..]
Dat laatste is dus wel de juiste manier, het gaat hier niet om "handig", want misschien gaat het opslaan zo wel sneller, maar het ophalen wel 10x zo traag!
De tabel moet dan wel userid, product id, order id en number worden.quote:Op zondag 11 december 2005 20:34 schreef JeRa het volgende:
[..]
Je hebt alleen een tabel nodig (inhoud van de winkelwagen) die de gebruiker koppelt aan de gekozen producten en het aantal dat daarbij hoort. Oftwel, een userid, productid en number (aantal producten).
Mocht je het toch als array willen opslaan, dan kan dat het makkelijkst via serialize()
Ophogen van order_id?quote:Op zondag 11 december 2005 20:34 schreef Swetsenegger het volgende:
[..]
De tabel moet dan wel userid, product id, order id en number worden.
Anders weet ik nooit welke rij bij welke bestelling hoort en een klant kan meerdere bestellingen plaatsen.
Hmz, zit ik weer met het ophogen van order_id. Of ik moet me in 'unique' mbt mysql gaan verdiepen. *zucht*.
Je geeft als voorbeeld een tabel met de volgende kolommen:quote:Op zondag 11 december 2005 20:44 schreef JeRa het volgende:
[..]
Ophogen van order_id?
Als een klant een nieuwe bestelling doet maak je (neem ik aan) een nieuwe entry in de tabel met orders. De id van die tabel is dan toch gewoon AUTO_INCREMENT? Vervolgens plaats je in de tabel met de inhoud van een bestelling de id van die bestelling
1 2 3 4 5 | 1 1 1 1 2 2 1 1 4 1 3 2 2 3 1 4 1 3 1 1 |
Zie de edit.quote:Op zondag 11 december 2005 21:18 schreef JeRa het volgende:
Ik snap niet welk probleem je hebt
Je hebt een tabel users met daarin de klantennummers. FK = userid.
Je hebt een tabel orders met daarin de bestellingen. FK = orderid.
Je hebt een tabel products met daarin de producten. FK = productid
Je hebt een tabel winkelwagen (ofzo) met daarin de koppeling van bovenstaande drie tabellen én het aantal producten. Die ziet er dan toch als volgt uit?
id --> unieke verwijzing naar een bestelling in een winkelwagen (AUTO_INCREMENT PRIMARY KEY)
userid --> verwijzing naar klant (mag ook vaker voorkomen)
orderid --> verwijzing naar order. De 'id'-kolom van de tabel 'orders' is AUTO_INCREMENT
productid --> verwijzing naar het product
number --> aantal producten dat gewenst is
Wat is het probleem hiermee?
Ja dat gaat perfect werkenquote:Op zondag 11 december 2005 21:32 schreef JeRa het volgende:
Mja, dat gaat toch werken?sorry dat ik even niet duidelijk aangaf dat ik het over een nieuwe koppeltabel had
Er komt natuurlijk nog veel meer bij kijken; ik noem even het tijdstip van aanmaken of het IP-adres van de klant. Maar dat is aan jouquote:Op zondag 11 december 2005 21:43 schreef Swetsenegger het volgende:
[..]
Ja dat gaat perfect werken
Ik moet nog wel even goed nadenken, want orders moeten nogwel via mail bevestigt worden dus in de order tabel komt nog een activation kolom.
Dat kan met één DELETE door te joinenquote:Indien niet geactiveerd moet ik dus wel de order EN de inhoud wissen.
Ja, dat heb ik allemaal op een rijtje ivm tweedehandsboek, waarbij gebruikers ook hun aanmelding moeten bevestigen. Er moet dus ook een datum/tijd in de order tabelquote:Op zondag 11 december 2005 21:49 schreef JeRa het volgende:
[..]
Er komt natuurlijk nog veel meer bij kijken; ik noem even het tijdstip van aanmaken of het IP-adres van de klant. Maar dat is aan jou
Bedankt voor de tip, daar ga ik mee stoeien.quote:Dat kan met één DELETE door te joinenof meerdere DELETEs die je binnen een LOCK TABLES / UNLOCK TABLES zet.
Dat ligt aan je inlogsysteem. Stel, je hebt een sessie-variabele genaamd 'userid' waarvoor geldt dat als userid groter is dan 0 de user is ingelogd als klant nummer #userid. Dan kun je na het toevoegen van de NAW-gegevens in de usertabel de primary key ophalen (mysql_insertid) en die in je sessie-variabele zetten. Voila, user ingelogdquote:Op zondag 11 december 2005 21:56 schreef Swetsenegger het volgende:
Nu wil ik op deze NAW gegevens pagina nadat een en ander succesvol is ingevuld en naar db is geschreven de klant direkt automatisch inloggen. Maar vanuit PHP Kan ik volgens mij niet automatisch de juiste gegevens (inlognaam en wachtwoord welke bij aanmelden is opgegeven) POSTen naar inlog.php. Uiteraard kan het wel met GET, maar dat lijkt me niet zo veilig
Maar dat is een klein risico als er meerdere gebruikers min of meer teglijk aanmelden. mysql_insertid kan dan hoger zijn dan degene welke ik voor deze klant bedoel toch?quote:Op zondag 11 december 2005 22:00 schreef JeRa het volgende:
[..]
Dat ligt aan je inlogsysteem. Stel, je hebt een sessie-variabele genaamd 'userid' waarvoor geldt dat als userid groter is dan 0 de user is ingelogd als klant nummer #userid. Dan kun je na het toevoegen van de NAW-gegevens in de usertabel de primary key ophalen (mysql_insertid) en die in je sessie-variabele zetten. Voila, user ingelogd
Nope, mysql_insert_id() geeft de waarde terug van de laatste INSERT-operatie van de huidige thread. Zolang je users niet weten hoe ze op de webserver threads moeten overnemen is dat vrij veiligquote:Op zondag 11 december 2005 22:04 schreef Swetsenegger het volgende:
[..]
Maar dat is een klein risico als er meerdere gebruikers min of meer teglijk aanmelden. mysql_insertid kan dan hoger zijn dan degene welke ik voor deze klant bedoel toch?
Of ik moet met lock table gaan werken natuurlijk.
mysql_insert_id() it is dusquote:Note: The value of the MySQL SQL function LAST_INSERT_ID() always contains the most recently generated AUTO_INCREMENT value, and is not reset between queries.
Het verschil tussen beide ontging me even, maar ik lees dat last_insert_id niet gereset wordt tussen queries en dus niet thread gerelateerd is. Begrijp ik het zo goed?quote:Op zondag 11 december 2005 22:05 schreef JeRa het volgende:
[..]
Nope, mysql_insert_id() geeft de waarde terug van de laatste INSERT-operatie van de huidige thread. Zolang je users niet weten hoe ze op de webserver threads moeten overnemen is dat vrij veilig
Nu lees ik op die pagina ook dat je LAST_INSERT_ID kunt gebruikendat is eigenlijk wel heel handig, gegeven dat dat ook de laatste insert id van de huidige thread is.
edit: nee dus.
[..]
mysql_insert_id() it is dus
Klopt.quote:Op zondag 11 december 2005 22:11 schreef Swetsenegger het volgende:
[..]
Het verschil tussen beide ontging me even, maar ik lees dat last_insert_id niet gereset wordt tussen queries en dus niet thread gerelateerd is. Begrijp ik het zo goed?
Klopt ook.quote:Maar ik kan dus save mysql_insert_id gebruiken direkt na de query welke de klantgegevens in de DB zet.
De combinatie orderid, productid is uniek, dus die kan je als PK gebruiken.quote:Op zondag 11 december 2005 21:18 schreef JeRa het volgende:
id --> unieke verwijzing naar een bestelling in een winkelwagen (AUTO_INCREMENT PRIMARY KEY)
userid --> verwijzing naar klant (mag ook vaker voorkomen)
orderid --> verwijzing naar order. De 'id'-kolom van de tabel 'orders' is AUTO_INCREMENT
productid --> verwijzing naar het product
number --> aantal producten dat gewenst is
PK?quote:Op zondag 11 december 2005 22:30 schreef SuperRembo het volgende:
[..]
De combinatie orderid, productid is uniek, dus die kan je als PK gebruiken.
Ik neem aan dat in de tabel met bestellingen bij een order een userid staat. Dan is de kolom userid in deze tabel overbodig.
Klopt helemaal. Over die primary key, ikzelf vind het altijd handig om in elke tabel een unieke waarde te hebben die ik kan toekennen aan elke entry, vandaarquote:Op zondag 11 december 2005 22:30 schreef SuperRembo het volgende:
[..]
De combinatie orderid, productid is uniek, dus die kan je als PK gebruiken.
Ik neem aan dat in de tabel met bestellingen bij een order een userid staat. Dan is de kolom userid in deze tabel overbodig.
Nav JeRa begreep ik 'mquote:
Ik nietsquote:Op zondag 11 december 2005 23:22 schreef Light het volgende:
Huh? Wat voor query doe je dan?
Hmmmz. Dat is weer zo'n vaag iets van MySQLquote:Op zondag 11 december 2005 23:30 schreef Light het volgende:
MySQL (phpmyadmin) geeft bij mij gewoon een melding dat er 0 rijen zijn aangepast. Geen foutmeldingen ofzo.
MySQL redeneert dat als er geen velden worden aangepast, dat er dan ook geen rijen worden aangepast. En het schijnt sneller te zijn om niet opnieuw te schrijven als de waarde voor en na de update gelijk is. Klinkt op zich ook nog wel logisch, ergensquote:Op zondag 11 december 2005 23:43 schreef SuperRembo het volgende:
[..]
Hmmmz. Dat is weer zo'n vaag iets van MySQL
Als je dus 2x het statement "UPDATE MyTable SET name = 'Foo' WHERE id = 1" uitvoert, dat krijg je de eerste keer affected rows = 1, maar daarna affected rows = 0
Het kost veel minder tijd om zo'n waarde niet weg te schrijven (indices hoeven dan ook niet bijgewerkt te worden, query/block cache kan blijven bestaan, etc). Echter zou het wel wat netter zijn als affected rows 1 teruggaf jaquote:Op zondag 11 december 2005 23:43 schreef SuperRembo het volgende:
[..]
Hmmmz. Dat is weer zo'n vaag iets van MySQL
Als je dus 2x het statement "UPDATE MyTable SET name = 'Foo' WHERE id = 1" uitvoert, dat krijg je de eerste keer affected rows = 1, maar daarna affected rows = 0
Je moet dan wel eerst de oude en de nieuwe gegevens vergelijken, dat kost ook tijd.quote:Op zondag 11 december 2005 23:46 schreef Light het volgende:
[..]
MySQL redeneert dat als er geen velden worden aangepast, dat er dan ook geen rijen worden aangepast. En het schijnt sneller te zijn om niet opnieuw te schrijven als de waarde voor en na de update gelijk is. Klinkt op zich ook nog wel logisch, ergens
Ja (heb het hier draaien). Weliswaar niet in de strict-modus, misschien dat dat wat uitmaakt?quote:Op zondag 11 december 2005 23:54 schreef SuperRembo het volgende:
[..]
Je moet dan wel eerst de oude en de nieuwe gegevens vergelijken, dat kost ook tijd.
Het lijkt me geen standaard gedrag. Is dat is MySQL 5 ook zo?
Ik. En eigenlijk moeten die herschreven worden, ze kunnen best zwaar worden voor de server (die het toch al niet makkelijk heeft). En nee, die queries gooi ik hier niet neerquote:Op maandag 12 december 2005 00:05 schreef Ro�a� het volgende:
Wie gebruikt er eik weleens bij sql "replace" ?
Ik niet. Maar even gelezen in de documentation, dan worden alle dubbele rijen gedelete en opnieuw geinsert met een nieuwe primary key. Dat moet je niet te vaak doen op een grote tabelquote:Op maandag 12 december 2005 00:05 schreef Ro�a� het volgende:
Wie gebruikt er eik weleens bij sql "replace" ?
replace into mytable (id, name) values (1, "test")quote:Op maandag 12 december 2005 00:15 schreef JeRa het volgende:
[..]
Ik niet. Maar even gelezen in de documentation, dan worden alle dubbele rijen gedelete en opnieuw geinsert met een nieuwe primary key. Dat moet je niet te vaak doen op een grote tabel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $url = "https://[psp]/[psp].php"; $host = substr($url, 0, strpos($url, "/")); $uri = strstr($url, "/"); $reqbody = ""; foreach($data as $key=>$val) { if (!empty($reqbody)) $reqbody.= "&"; $reqbody.= $key."=".urlencode($val); } $contentlength = strlen($reqbody); $reqheader = "Location: $url\r\n". "POST $uri HTTPS/1.1\r\n". "Host: ssl://$host\n". "User-Agent: PostIt\r\n". "Content-Type: application/x-www-form-urlencoded\r\n". "Content-Length: $contentlength\r\n\r\n". "$reqbody\r\n"; header($reqheader); ?> |
Helaas niet en de support afdeling was vandaag niet aanwezig. Maar ik ga zeker contact met ze opnemen om dit te overleggen. Het enige kant-en-klare 'script' wat ze aanboden was een HTML pagina. En dat is niet echt zo netjes, als je gebruikers eerst op een lege pagina komen alwaar ze een knop moeten indrukken. Ik wil ze gewoon direct doorverwijzen naar de PSP. Het is dan ook niet mogelijk voor de wat slimmere mensen om bijvoorbeeld het bedrag aan te passen.quote:Op maandag 12 december 2005 18:46 schreef Swetsenegger het volgende:
Heeft je PSP geen kant en klaar php script dan?
quote:Op zondag 11 december 2005 23:30 schreef Light het volgende:
MySQL (phpmyadmin) geeft bij mij gewoon een melding dat er 0 rijen zijn aangepast. Geen foutmeldingen ofzo.
Nu post dat HTML scherm toch naar de PSP? Dan moet er in die HTML file toch aan de submit knop een CGI of ander soortig script hangen welke die verbinding opzet.quote:Op maandag 12 december 2005 19:14 schreef HuHu het volgende:
In die HTML page staan alle benodigde variabelen (ordernummer, bedrag, enzovoorts) als hidden FORM fields. En die worden, zodra je op de knop drukt, gepost naar een https server waar vervolgens de betaling wordt afgehandeld en de gebruiker z'n creditcard gegevens invuld.
Het gaat nu dus zo:Gebruiker kiest product en vult ons bestelformulier in.
Mijn PHP script met database handelingen en bevestigingmailtjes
Scherm met: druk op de knop om te betalen
Betalen bij de PSP
Maar ik wil dat nutteloze tussenscherm eruit hebben door de variabelen die daarin staan direct vanuit mijn PHP script naar de server van de PSP te posten. Maar dat moet via SSL, en ik weet niet hoe dat moet.
Dit is de FORM actie:quote:Op maandag 12 december 2005 19:28 schreef Swetsenegger het volgende:
[..]
Nu post dat HTML scherm toch naar de PSP? Dan moet er in die HTML file toch aan de submit knop een CGI of ander soortig script hangen welke die verbinding opzet.
Je kan in je PHP form toch gewoon dezelfde action gebruiken als nu in dat HTML form?
1 |
Hoe versleutelt die HTML ze?quote:Op maandag 12 december 2005 19:38 schreef HuHu het volgende:
[..]
Dit is de FORM actie:
[ code verwijderd ]
Hij post dus naar een beveiligde server. Nu wil ik met PHP naar die beveiligde server posten. Maar hoe versleutel ik mijn variabelen en dergelijke, zodat de server ze accepteerd.
Wil je het per se via php doen dan? Dus niet via een html form aan de client zijde waarin je die variabele echo't?quote:Op maandag 12 december 2005 19:38 schreef HuHu het volgende:
[..]
Dit is de FORM actie:
[ code verwijderd ]
Hij post dus naar een beveiligde server. Nu wil ik met PHP naar die beveiligde server posten. Maar hoe versleutel ik mijn variabelen en dergelijke, zodat de server ze accepteerd.
1 2 3 4 5 6 7 | foreach($_POST['cat'] as $a) { $db->query("DELETE FROM nieuws_categorie WHERE nieuws_categorie_id='$a'"); } $db->closedb(); ?> |
1 |
1 |
Heb die constructie al een behoorlijke tijd gebruikt zonder enige problemenquote:Op dinsdag 13 december 2005 20:41 schreef DionysuZ het volgende:
werkt IN (bla,bla,ba) ook bij MySQL dan?heb er veel problemen mee gehad.
quote:Op dinsdag 13 december 2005 19:47 schreef SuperRembo het volgende:
Vergeet niet om de invoer van de gebruiker te controleren.
Ik zal het niet vergetenquote:Op dinsdag 13 december 2005 19:47 schreef SuperRembo het volgende:
Vergeet niet om de invoer van de gebruiker te controleren.
Een mysql_real_escape_string() heb je nodig als je een waarde in een string gaat zetten in de query. Nu werk je met integers, en is het minste wat je moet doen checken of het daadwerkelijk een getal is (en dat eventueel zo maken met intval() of strval()) en of het in de gewenste range ligt.quote:Op dinsdag 13 december 2005 21:16 schreef SkaterSam het volgende:
[..]
Ik zal het niet vergeten![]()
Er wordt al gekeken of de waarden in de array nummers zijn via is_numeric(), en straks nog even een mysql_real_escape_string() er over heen.![]()
Zo goed?
Haha, weer wat geleerd in ieder geval, dan heb ik dus nu met mijnquote:Op dinsdag 13 december 2005 21:22 schreef JeRa het volgende:
[..]
Een mysql_real_escape_string() heb je nodig als je een waarde in een string gaat zetten in de query. Nu werk je met integers, en is het minste wat je moet doen checken of het daadwerkelijk een getal is (en dat eventueel zo maken met intval() of strval()) en of het in de gewenste range ligt.
1 2 3 4 5 6 7 | if (is_numeric(array_sum($_POST['cat']))) { // voer code uit } else { // stout!!! } ?> |
Nee. Het feit dat array_sum een getal oplevert zegt niets over de afzonderlijke elementen van de array. Het kunnen nog steeds allemaal strings zijn, die worden bij rekenkundige bewerkingen naar de waarde nul omgezet.quote:Op dinsdag 13 december 2005 21:37 schreef SkaterSam het volgende:
[..]
Haha, weer wat geleerd in ieder geval, dan heb ik dus nu met mijn
[ code verwijderd ]
genoeg gecontroleerd? En wat is dan een range? Het zijn gewoon allemaal ID's die ik bij elkaar optel. Ik Google wel even wat een "range" inhoudt.
1 2 3 | echo array_sum(array(2,5,'a','zes')); ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $remove = $_POST['cat']; $b = array(); foreach($remove as $a) { if(!is_numeric($a)) { $a = ''; } else { $b[] = $a; } } //Maak een verbinding met DB $b = implode(',',$b); $db->query("DELETE FROM nieuws_categorie WHERE nieuws_categorie_id IN (" . $b . ")"); ?> |
wat bedoel je daar mee als ik vragen mag?quote:Op dinsdag 13 december 2005 20:50 schreef JeRa het volgende:
[..]
Heb die constructie al een behoorlijke tijd gebruikt zonder enige problemenlijkt me van wel dus. Weet iemand of die operatie atomic is?
Atomic komt van het idee van het 'kleinste deeltje', in dit geval het idee dat een operatie in één geheel kan worden uitgevoerd. Een INSERT is atomic, dit betekent dat men geen SELECT kan uitvoeren terwijl de INSERT halverwege is bijvoorbeeld. Ik vroeg me af of dit ook het geval is bij een DELETE waarbij je meerdere items verwijderd, aangezien een DELETE op één item normaal wel atomic isquote:Op dinsdag 13 december 2005 23:00 schreef Chandler het volgende:
[..]
wat bedoel je daar mee als ik vragen mag?
1 2 3 | SET vieworder = CASE vieworder WHEN 10 THEN 5 ELSE vieworder + 1 END WHERE vieworder BETWEEN 5 AND 10 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | if(!@mysql_num_rows($posts)>0){ home(); return; } $titel = mysql_fetch_assoc($titel); ?> <h4><?php echo $titel['titel']; ?></h4> <?php while($data = mysql_fetch_assoc($posts)){?> <?php $smilies = array(':)', ':(', ':+', '_O_', '(Y)', ';)', ':{', ':P', ':p','(A)'); $images = array('<img src="smilies/smile.gif">', '<img src="smilies/frown.gif">', '<img src="smilies/clown.gif">', '<img src="smilies/worshippy.gif">', '<img src="smilies/thumbsup.gif">', '<img src="smilies/wink.gif">', '<img src="smilies/nosmile.gif">', '<img src="smilies/puh2.gif">', '<img src="smilies/puh2.gif">', '<img src="smilies/hypocrite.gif">'); $content = str_replace($smilies, $images, $data['content']); echo $content; ?><br><br> <?php } ?> |
Dit is een leuke. Bij een topic met 10.000 posts haal je ze dus allemaal op om het totaal te berekenen terwijl je er maar 10 wilt laten zien? Niet erg efficient.quote:Op woensdag 14 december 2005 20:03 schreef SkaterSam het volgende:
1. bereken het totaal aantal resultaten (bijv. mysql_num_rows() )
2. definieer het maximum aantal resultaten per pagina (bijv. $pp = 10 )
3. bereken het aantal pagina's dat je krijgt door het aantal resultaten te delen door het maximum en het op hele naar boven af te ronden
4. creëer een offset (van welk nummer moeten de resultaten verder gaan op de volgende pagina (bijv. door de link show.php?page=3 en dan de offset berekenen door ($page - 1) * 10 te doen.)
5. Deze offset in de query zetten bij LIMIT $offset, 10
En die linkjes er onder kan je dan met allerlei if/else statements maken, bijvoorbeeld als er maar een pagina is zijn vorige en volgende geen links... Dit doe ik altijd in ieder geval![]()
Doe je SELECT count(*) as TOTAL FROM table LIMIT $offset,10 of zoiets? Zo bedoel je? Maar berekent die dan niet alleen maar degene die hij ophaalt (TOTAL zou dan 10 zijn) ? Enlighten mequote:Op woensdag 14 december 2005 20:16 schreef DionysuZ het volgende:
Dit is een leuke. Bij een topic met 10.000 posts haal je ze dus allemaal op om het totaal te berekenen terwijl je er maar 10 wilt laten zien? Niet erg efficient.
Nee, je doet een aparte COUNT(*)-query zodat MySQL snel het aantal rows kan teruggeven en je het totaal aantal posts weet. Dit is snel omdat de MyISAM-tables een rowcounter bijhouden, bij InnoDB gaat dit niet zo gemakkelijk. Vervolgens kun je door een nieuwe query te LIMIT'en bepalen welke posts je precies zietquote:Op woensdag 14 december 2005 20:25 schreef SkaterSam het volgende:
[..]
Doe je SELECT count(*) as TOTAL FROM table LIMIT $offset,10 of zoiets? Zo bedoel je? Maar berekent die dan niet alleen maar degene die hij ophaalt (TOTAL zou dan 10 zijn) ? Enlighten me
Gewoon een SELECT count(*) as TOTAL FROM table.quote:Op woensdag 14 december 2005 20:25 schreef SkaterSam het volgende:
[..]
Doe je SELECT count(*) as TOTAL FROM table LIMIT $offset,10 of zoiets? Zo bedoel je? Maar berekent die dan niet alleen maar degene die hij ophaalt (TOTAL zou dan 10 zijn) ? Enlighten me
quote:Op woensdag 14 december 2005 20:26 schreef JeRa het volgende:
[..]
Nee, je doet een aparte COUNT(*)-query zodat MySQL snel het aantal rows kan teruggeven en je het totaal aantal posts weet. Dit is snel omdat de MyISAM-tables een rowcounter bijhouden, bij InnoDB gaat dit niet zo gemakkelijk. Vervolgens kun je door een nieuwe query te LIMIT'en bepalen welke posts je precies ziet
Voor zover ik zie welquote:Op woensdag 14 december 2005 20:31 schreef SkaterSam het volgende:
COUNT(*) telt dus alle rijen in een DB, terwijl mysql_num_rows() alleen de rijen die uit een query komen telt. Ik snap het denk ik. De rest van de 5 stappen was echter wel 'logisch'?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | function resize_photo($new_name,$new_width,$new_height,$filename){ // Content type header('Content-type: image/jpeg'); // nieuwe resolutie bepalen list($width_orig, $height_orig) = getimagesize($filename); if(empty($new_height)){ $new_height = round(($new_width / $width_orig) * $height_orig); }elseif(empty($new_width)){ $new_width = round(($new_height / $height_orig) * $width_orig); }elseif ($new_width && ($width_orig < $height_orig)) { $new_width = ($new_height / $height_orig) * $width_orig; }else{ $new_height = ($new_width / $width_orig) * $height_orig; } // Resample $image_p = imagecreatetruecolor($new_width, $new_height); $image = imagecreatefromjpeg($filename); imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width_orig, $height_orig); // Output imagejpeg($image_p, $new_name, 80); Imagedestroy($image); } ?> |
1 2 3 4 5 6 7 8 | $filename = $_FILES['photo']['tmp_name']; list($width_orig, $height_orig) = getimagesize($filename); $new_name="../pathnaarfotomap/".$watdanook; $new_width=300; //mag ook leeg izjn $new_height=200; //mag ook leeg zijn resize_photo($new_name,$new_width,$new_height,$filename); ?> |
tx allenquote:Op donderdag 15 december 2005 10:35 schreef Swetsenegger het volgende:
[ code verwijderd ]
Aanroepen met:
[ code verwijderd ]
Alleen voor jpg, maar dat is redelijk eenvoudig aan te passen in de functie.
Je moet wel GD2 op de server hebben staan.
1 2 | header('Content-type: image/jpeg'); |
Komt rechtstreeks van php.net: http://nl3.php.net/manual/en/function.imagecopyresampled.php. Ik heb gewoon die functie gepakt en wat aangepast toen ik 'm nodig hadquote:Op donderdag 15 december 2005 14:22 schreef DionysuZ het volgende:
[ code verwijderd ]
dit is dan toch niet nodig Swetsenegger?
Het is nodig als je rechtstreeks een jpeg als output wil hebben, niet als je een jpg file maakt.quote:Op donderdag 15 december 2005 15:13 schreef Swetsenegger het volgende:
[..]
Komt rechtstreeks van php.net: http://nl3.php.net/manual/en/function.imagecopyresampled.php. Ik heb gewoon die functie gepakt en wat aangepast toen ik 'm nodig had
moet je voor het gemiddelde aantal factuur regels niet eerst alle factuurregels bij elkeer optellen (de aantallen wat in de tabel staan) en dan delen door het aantal factuurnummers.quote:Op donderdag 15 december 2005 16:43 schreef IbeBen het volgende:
Ik begin maar met de meest kneuzige vraag,
Wat is het gemiddelde aantal factuurregels in 2004?
Ik heb (onder andere) de tabel Factuurregel dus daar zal het antwoord wel vandaan moeten komen.
Factuurregel
Factuurnummer
Artikelcode
verkoopaantal
verkoopprijs
Volgens mij moet ik dus gewoon de factuurnummer optellen en dan delen door het aantal "gecounte" factuurnummers.
Zelf kwam ik tot
SELECT factuurnummer/COUNT(factuurnummer)
FROM factuurnummer;
IbeBen
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |