abonnement Unibet Coolblue Bitvavo
  FOK!-Schrikkelbaas zaterdag 2 september 2006 @ 14:15:24 #241
1972 Swetsenegger
Egocentrische Narcist
pi_41422662
quote:
Op zaterdag 2 september 2006 14:06 schreef smesjz het volgende:
Of je gebruikt sprintf() om van het gezeik af te zijn:

$sql = sprintf("DELETE FROM leden WHERE id=%d",$_GET['id']);

Maar natuurlijk kan sprintf() ook nog helpen (er zijn meerdere mogelijkheden) bij XSS probleempjes omdat je gemakkelijk de lengte en format van een string (of int,float whatever) kan beperken.

Maar aangezien het voorbeeld lijkt te gaan over een CMSachtig iets waar niet iedereen zo maar gebruikersbeheer kan toepassen (of google alle links kan volgen, ook leuk) valt het probleem hier nogal mee.
http://www.php.net/mysql_real_escape_string
pi_41425698
Voor dat soort dingetjes is PDO wel zo handig. Omslachtig, maar handig:

1
2
3
4
5
6
7
8
9
$db = new PDO('mysql:host=mysqlhost;dbname=dbnaam', 'naam', 'ww');

// Prepare statement
$stmt = $db->prepare('DELETE FROM `leden` WHERE `naam` = :naam');
$stmt->bindValue('naam', 'Danny');

// Execute
$stmt->execute();
unset($stmt);


Werkt voor strings, integers, floats, etc. en je hebt nooit meer last van SQL injection (zolang je exceptions maar catcht).
pi_41429448
Lang leve intval() en mysql_real_escape_string().
pi_41430918
Als ik een query als deze heb:

1SELECT COUNT(iets) as aantal FROM orders GROUP BY datum ORDER BY datum DESC


Dan komt daar 1 kolom uit met 100 rijen en in elke cel een getal. Is er een manier om dat simpel om te zetten naar een array? Dus iets als:

1
2
3
<?php
$data
= array (10, 20, 30, 15, 39, 29, 3);
?>


Zodat ik dus het resultaat van die query als array kan gebruiken? Omdat er maar 1 kolom uit komt kan het dus simpel in een 1 dimensionale array, maar ik kan daar zo snel niet een makkelijke functie voor vinden.
  FOK!-Schrikkelbaas zaterdag 2 september 2006 @ 19:47:32 #245
1972 Swetsenegger
Egocentrische Narcist
pi_41430966
$row['aantal'] is toch al een array
pi_41431140
quote:
Op zaterdag 2 september 2006 12:20 schreef Knut het volgende:
Ow, en het is beter gebruik om een status veld toe te voegen aan je database en dat status veld in je query's te gebruiken.
informatie daadwerkelijk deleten komt je nog al eens duur te staan
dat is een goeie

En dan in de mysql_query zeggen dat alleen de actieve worden geselecteerd neem ik aan
-edit-
heel slim, dat is precies wat je zegt
pi_41431401
quote:
Op zaterdag 2 september 2006 19:47 schreef Swetsenegger het volgende:
$row['aantal'] is toch al een array
Die snap ik niet? Als ik het volgende heb:

1
2
3
<?php
$result
= mysql_query("SELECT COUNT(*) as aantal FROM orders GROUP BY datum ORDER BY datum DESC LIMIT 100");
?>


Hoe krijg ik dan daar een array uit?
pi_41431517
quote:
Op vrijdag 1 september 2006 21:22 schreef Piles het volgende:

[..]

Jep (als DATETIME, als dat nog uitmaakt).
Maar MySQL werkt nu gewoon door elkaar. Hij selecteert de laatste datum en zomaar een foto
Ik heb de moed inmiddels opgegeven. Allerlei querys geprobeerd (ook met timestamp), maar ik krijg niet de laatste foto. Ik heb nu gewoon geen GROUP BY erbij staan, maar mocht iemand nog een idee hebben
  FOK!-Schrikkelbaas zaterdag 2 september 2006 @ 20:06:37 #249
1972 Swetsenegger
Egocentrische Narcist
pi_41431555
quote:
Op zaterdag 2 september 2006 20:01 schreef HuHu het volgende:

[..]

Die snap ik niet? Als ik het volgende heb:
[ code verwijderd ]

Hoe krijg ik dan daar een array uit?
mysql_fetch_array of mysql_fetch_assoc?
pi_41431580
quote:
Op zaterdag 2 september 2006 14:06 schreef smesjz het volgende:
Of je gebruikt sprintf() om van het gezeik af te zijn:

$sql = sprintf("DELETE FROM leden WHERE id=%d",$_GET['id']);

Maar natuurlijk kan sprintf() ook nog helpen (er zijn meerdere mogelijkheden) bij XSS probleempjes omdat je gemakkelijk de lengte en format van een string (of int,float whatever) kan beperken.

Maar aangezien het voorbeeld lijkt te gaan over een CMSachtig iets waar niet iedereen zo maar gebruikersbeheer kan toepassen (of google alle links kan volgen, ook leuk) valt het probleem hier nogal mee.
Dit voorbeeld is niet voor een CMS of zo. Maar ik wil het wel gaan gebruiken in een heel erg basis CMS waar voor moet ingelogd worden zo dat niet iedereen er bij kan.
pi_41433225
quote:
Op zaterdag 2 september 2006 20:05 schreef Piles het volgende:

[..]

Ik heb de moed inmiddels opgegeven. Allerlei querys geprobeerd (ook met timestamp), maar ik krijg niet de laatste foto. Ik heb nu gewoon geen GROUP BY erbij staan, maar mocht iemand nog een idee hebben
Je bedoelt dat je gewoon de laatst toegevoegde record wil pakken uit je database?

SELECT * FROM jouwtabel ORDER BY datum DESC LIMIT 1
pi_41433453
quote:
Op zaterdag 2 september 2006 20:57 schreef Tuvai.net het volgende:

[..]

Je bedoelt dat je gewoon de laatst toegevoegde record wil pakken uit je database?

SELECT * FROM jouwtabel ORDER BY datum DESC LIMIT 1
Nee, zie: [PHP/(My)SQL] voor dummies - Deel 31
pi_41433829
Heb je al eens ORDER BY id ASC, datum DESC geprobeerd?
pi_41433943
quote:
Op zaterdag 2 september 2006 21:15 schreef Tuvai.net het volgende:
Heb je al eens ORDER BY id ASC, datum DESC geprobeerd?
Er moet een GROUP BY oid in, want ik heb de volgende tabellen

item
- item_id (uniek)
- item_naam

foto
- foto_id (uniek)
- item_id (zie tabel item)
- link
- datum

Nu wil ik dus de 5 laatste items laten zien waar een foto is toegevoegd + die laatste foto.
Snap je?

[ Bericht 1% gewijzigd door Piles op 03-09-2006 12:42:00 ]
pi_41436636
Als ik deze query uitvoer:

1
2
3
<?php
$result
= mysql_query("SELECT COUNT(*) as aantal FROM orders GROUP BY datum ORDER BY datum DESC LIMIT 100");
?>


Dan krijg ik een resultaat terug met daarin 1 kolom en 100 rijen. Als ik dan dit doe:

1
2
3
4
5
6
<?php
while($row = mysql_fetch_assoc($result))
{
    echo(
$row["aantal"]. "<br />");
}
?>


Dan worden alle 100 resultaten keurig op het scherm getoond.

Maar als ik dit doe:

1
2
3
<?php
print_r
(mysql_fetch_assoc($result));
?>


Dan krijg ik alleen het resultaat in de eerste rij te zien, en niet alle 100. Wat ik wil bereiken is dat ik het resultaat van die query omzet in een array met alle 100 waarden.
pi_41436767
Ik heb het nu zo opgelost:

1
2
3
4
5
6
7
8
9
10
<?php
$result
= mysql_query("SELECT COUNT(*) as aantal FROM orders GROUP BY datum ORDER BY datum DESC LIMIT 100");

$data = array();

while(
$row = mysql_fetch_assoc($result))
{
    
array_push($data, $row["aantal"]);
}
?>


Maar hier moet toch ook wel een standaard-functie voor bestaan?
  zondag 3 september 2006 @ 11:38:01 #257
16625 robh
Lucas & Gea Review Crew ©
pi_41446967
quote:
Op zaterdag 2 september 2006 22:37 schreef HuHu het volgende:
Ik heb het nu zo opgelost:
[ code verwijderd ]

Maar hier moet toch ook wel een standaard-functie voor bestaan?
Volgens mij is daar geen standaard functie voor en daar zijn natuurlijk wel legio redenen voor te verzinnen.

Is het trouwens mogelijk om in PHP objecten te casten naar andere objecten? Ik zie wel dat het mogelijk is om (object) te casten, maar ik wil een "iets" casten naar een object van mijn keuze.
Martin Drent, onze profeet.
Vol gas met Burdy!
.
Pimpen met je FOK!-tag
  zondag 3 september 2006 @ 12:40:34 #258
151527 KaMo
Boem, zei de bas
pi_41448359
phpBB : Critical Error

Could not open DArk template config file

DEBUG MODE

Line : 503
File : functions.php

Nu wil ik dus met PHPmyAdmin alle "DArk" in "ndesign" veranderen

maar dan heb ik hem veranderd en dan zoek ik naar DArk
is het weer veranderd in DArk
Waar ligt dit aan?
pi_41449042
quote:
Op zondag 3 september 2006 11:38 schreef robh het volgende:

[..]

Volgens mij is daar geen standaard functie voor en daar zijn natuurlijk wel legio redenen voor te verzinnen.

Is het trouwens mogelijk om in PHP objecten te casten naar andere objecten? Ik zie wel dat het mogelijk is om (object) te casten, maar ik wil een "iets" casten naar een object van mijn keuze.
PHP4 of PHP5? Dat maakt zeker bij objecten wel uit. Ook de relatie tussen de objecten is handig. Maar ik denk niet dat je zomaar een object naar een ander type kunt casten.

Een hond is geen fiets, dus het zou niet logisch zijn als je objecten van class hond naar class fiets kunt casten.
  zondag 3 september 2006 @ 13:39:22 #260
16625 robh
Lucas & Gea Review Crew ©
pi_41449659
quote:
Op zondag 3 september 2006 13:13 schreef Light het volgende:

PHP4 of PHP5? Dat maakt zeker bij objecten wel uit. Ook de relatie tussen de objecten is handig. Maar ik denk niet dat je zomaar een object naar een ander type kunt casten.

Een hond is geen fiets, dus het zou niet logisch zijn als je objecten van class hond naar class fiets kunt casten.
PHP5.

Ik weet dat het niet logisch is om te doen, maar het zou mooi zijn als het kan. Ik denk dan bijvoorbeeld aan een rij tabeldata uit een db die je zou kunnen casten naar een object (met dezelfde attributen) en dat dan je getters en setters gewoon werken. Tuurlijk is daar wel een andere oplossing voor, maar als het met een cast kon zou het imo netter zijn.
Martin Drent, onze profeet.
Vol gas met Burdy!
.
Pimpen met je FOK!-tag
pi_41450146
quote:
Op zondag 3 september 2006 13:39 schreef robh het volgende:

[..]

PHP5.

Ik weet dat het niet logisch is om te doen, maar het zou mooi zijn als het kan. Ik denk dan bijvoorbeeld aan een rij tabeldata uit een db die je zou kunnen casten naar een object (met dezelfde attributen) en dat dan je getters en setters gewoon werken. Tuurlijk is daar wel een andere oplossing voor, maar als het met een cast kon zou het imo netter zijn.
Het ligt maar net aan je definitie voor 'netter' anyway, jij hebt een bepaalde conversie voor ogen waarbij je keys van een array cast naar een object met member variables van dezelfde naam. Hier is geen eenduidige cast voor te bedenken aangezien anderen wellicht een andere conversie hadden bedacht. Bovendien zou PHP nogal bloated worden als het dit soort casts zou gaan implementeren.

Maar het mooie aan PHP is dat er niets in je weg staat om een kleine functie te schrijven die dit werk voor je doet qua 'netheid' is er imho toch al niets aan te redden als je in PHP werkt, dan zul je een stuk verder komen in bijvoorbeeld Java

edit: een conversie van array -> object bestaat trouwens wel:
1
2
3
4
5
6
7
8
9
<?php

$test = array('blaat' => 2, 3 => 'onzin');

$obj = (object)$test;

print_r($obj);

?>

Maar het voorbeeld dat je aanhaalt is natuurlijk een beetje triviaal omdat er ook een functie is ala mysql_fetch_object()
pi_41451430
Hoe zou je in MySQL een veld waarde met 1 optellen?
Moet je eerst uitlezen wat er in dat veld staat met een select query, en daarna met een update query +1 bij de gevonden waarde doen?

En hoe zit dit dan als er 2 of meer gebruikters dit bijna gelijktijdig doen. Dan lezen ze beide tegelijkertijd bijvoorbeeld het getal 5. Dan schrijft er 1 weg en wordt het zes, en schrijft de ander ook weg, waardoor het 6 blijft, terwijl het 7 had moeten zijn...

Iemand een idee, of weet waar ik ergens moet zoeken?
pi_41451501
quote:
Op zondag 3 september 2006 14:55 schreef Skorpija het volgende:
Hoe zou je in MySQL een veld waarde met 1 optellen?
Moet je eerst uitlezen wat er in dat veld staat met een select query, en daarna met een update query +1 bij de gevonden waarde doen?

En hoe zit dit dan als er 2 of meer gebruikters dit bijna gelijktijdig doen. Dan lezen ze beide tegelijkertijd bijvoorbeeld het getal 5. Dan schrijft er 1 weg en wordt het zes, en schrijft de ander ook weg, waardoor het 6 blijft, terwijl het 7 had moeten zijn...

Iemand een idee, of weet waar ik ergens moet zoeken?
1UPDATE jouwtabel SET jouw_numerieke_veld=jouw_numerieke_veld+1
pi_41451568
quote:
Op zondag 3 september 2006 14:55 schreef Skorpija het volgende:
Hoe zou je in MySQL een veld waarde met 1 optellen?
Moet je eerst uitlezen wat er in dat veld staat met een select query, en daarna met een update query +1 bij de gevonden waarde doen?
1UPDATE tabel SET waarde = waarde + 1 WHERE (conditie);
quote:
En hoe zit dit dan als er 2 of meer gebruikters dit bijna gelijktijdig doen. Dan lezen ze beide tegelijkertijd bijvoorbeeld het getal 5. Dan schrijft er 1 weg en wordt het zes, en schrijft de ander ook weg, waardoor het 6 blijft, terwijl het 7 had moeten zijn...
Het grote concurrency probleem dus gelukkig stelt MySQL dat als je een enkele query uitvoert, deze atomic is. Dit betekent dat geen enkel ander proces/thread de tabellen kan wijzigen waar een huidige query op dat moment mee bezig is. Dus dit is atomic:

1UPDATE tabel SET waarde = waarde + 1;


En dit niet:

1
2
SELECT waarde FROM tabel WHERE naam = 'piet';
UPDATE tabel SET waarde = $waarde + 1;


Bij deze laatste code kun je een ander proces in de weg zitten dat op dat moment exact dezelfde queries uitvoert. Om dit op te lossen kun je zelf tabellen locken:

1
2
3
4
LOCK TABLES `tabel` WRITE;
SELECT waarde FROM tabel WHERE naam = 'piet';
UPDATE tabel SET waarde = $waarde + 1;
UNLOCK TABLES;


Et voila je opvolgende queries tussen LOCK en UNLOCK zijn atomic geworden.
pi_41451650
quote:
Op zondag 3 september 2006 14:58 schreef Tuvai.net het volgende:

[..]
[ code verwijderd ]
-edit- thanks Tuvai en JeRa
pi_41456273
Ik heb eindelijk eens oplossing voor mijn foto-probleem (met dank aan een ander forum )

1
2
3
4
5
SELECT i.item_naam, i.item_id, f.foto_id, f.foto_datum, f.foto_link 
FROM `item` AS i
INNER JOIN foto AS f ON i.item_id=f.item_id 
GROUP BY i.item_id 
ORDER BY f.foto_datum DESC
  zondag 3 september 2006 @ 18:12:55 #267
151527 KaMo
Boem, zei de bas
pi_41456441
quote:
Op zondag 3 september 2006 12:40 schreef KaMo het volgende:
phpBB : Critical Error

Could not open DArk template config file

DEBUG MODE

Line : 503
File : functions.php

Nu wil ik dus met PHPmyAdmin alle "DArk" in "ndesign" veranderen

maar dan heb ik hem veranderd en dan zoek ik naar DArk
is het weer veranderd in DArk
Waar ligt dit aan?
al opgelost
pi_41458478
quote:
Op zondag 3 september 2006 18:00 schreef Piles het volgende:
Ik heb eindelijk eens oplossing voor mijn foto-probleem (met dank aan een ander forum )
[ code verwijderd ]

Eigenlijk hoor je te groeperen op elk veld dat in de select voor komt. Als er meerdere foto's bij een item kunnen horen, dan weet je met jouw query niet welke foto je bij een item krijgt.
Wil iedereen die in telekinese gelooft nu mijn hand op steken?
| Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
pi_41458717
quote:
Op zondag 3 september 2006 19:32 schreef SuperRembo het volgende:

[..]

Eigenlijk hoor je te groeperen op elk veld dat in de select voor komt. Als er meerdere foto's bij een item kunnen horen, dan weet je met jouw query niet welke foto je bij een item krijgt.
Alleen de velden uit de tabel `item` neem ik aan?
Ik heb het aangepast en het werkt nog steeds
pi_41461041
Nee, alle velden die in de select gebruikt worden, behalve velden in functies als sum() en max().
Wil iedereen die in telekinese gelooft nu mijn hand op steken?
| Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')