abonnement Unibet Coolblue Bitvavo
pi_61950900
Ik heb even snel een grote dummie vraag :) ik heb nu dit:

1
2
3
4
5
6
7
8
   if($_GET["activatie"] AND $_GET["mail"])
   {
      echo "boe";
   }
   elseif($_POST['submit'] AND $_POST["code"] AND $_POST["mail"])
   {
      echo "boe";
   }


nou wil ik deze bij elkaar voegen, dus in de vorm van: "GETactivatie and GETmail moeten aanwezig zijn" OF "POSTsubmit en POSTcode en POSTmail moeten aanwezig zijn"

nou is het heel makkelijk om dat in een if te zetten, maar ik ben het gewoon kwijt en kan het niet vinden op de phpsite. Wie helpt :)
Ik zeg altijd maar zo, met drie wielen heb je nog geen auto.
  zaterdag 27 september 2008 @ 14:25:53 #122
75592 GlowMouse
l'état, c'est moi
pi_61951320
1
2
3
4
5
6
<?php
if( ( isset($_GET['activatie']) && isset($_GET['mail']) )
  || ( isset(
$_POST['submit']) && isset($_POST['code']) && isset($_POST['mail']) ) ) {
  
// w00t
}
?>
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_61951494
quote:
Op maandag 15 september 2008 16:55 schreef Sitethief het volgende:
Ik kon, ooit, in een ver verleden php scriptjes schrijven.
Nu wou ik laatst een simpele php pagina schrijven maar nu lukt het me niet meer .
[ code verwijderd ]

Nee, lol is niet het echte wachtwoord

Ik krijg deze foutmelding:
[ code verwijderd ]

Waarschijnlijk heb ik de verkeerde functies gebruikt om te doen wat ik wil .
Het is niet mysql_connect, maar $con = mysql_connect(), en dan mysql_select_db("db", $con). voor de rest zitten er geen fouten in je code
pi_61951596
quote:
Op zaterdag 27 september 2008 13:54 schreef aardappel het volgende:
Ik heb even snel een grote dummie vraag ik heb nu dit:
[ code verwijderd ]

nou wil ik deze bij elkaar voegen, dus in de vorm van: "GETactivatie and GETmail moeten aanwezig zijn" OF "POSTsubmit en POSTcode en POSTmail moeten aanwezig zijn"

nou is het heel makkelijk om dat in een if te zetten, maar ik ben het gewoon kwijt en kan het niet vinden op de phpsite. Wie helpt
isset() is hier overbodig

1
2
if (($_GET['activatie'] && $_GET['mail']) || ($_POST['submit'] && $_POST['code'] && $_POST['mail'])) {
}
  zaterdag 27 september 2008 @ 14:54:35 #125
75592 GlowMouse
l'état, c'est moi
pi_61951675
quote:
Op zaterdag 27 september 2008 14:48 schreef illusions het volgende:

[..]

isset() is hier overbodig
[ code verwijderd ]


Wat als iemand code 0 invoert, of het e-mailadresveld leeglaat? Zoiets check je in het algemeen later pas, en dan heb je nu wel isset nodig.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
  zaterdag 27 september 2008 @ 15:13:19 #126
63192 ursel
"Het Is Hier Fantastisch!
pi_61951881
quote:
Op zaterdag 27 september 2008 14:54 schreef GlowMouse het volgende:

[..]

Wat als iemand code 0 invoert, of het e-mailadresveld leeglaat? Zoiets check je in het algemeen later pas, en dan heb je nu wel isset nodig.
Als je 0 invoert of leeg laat is de $_POST of $_GET nog steeds true bij isset, aangezien deze nog wel meegegeven worden. Check dan op empty of hetgeen je er denkt te verwachten.
  zaterdag 27 september 2008 @ 15:20:41 #127
75592 GlowMouse
l'état, c'est moi
pi_61951979
isset is true, $_POST['veld'] niet, exact zoals ik bedoelde.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_61952083
En een check op $_POST['veld'] levert je ook een notice op als dat veld helemaal niet bestaat. Een check op isset($_POST['veld']) werkt gewoon zonder notices.
  zondag 28 september 2008 @ 07:36:03 #129
85919 Likkende_Lassie
Doe eens wat aan je ondertitel
pi_61964866
Ik vind dat hele vereiste van die isset functie maar onzin!
pi_61965745
quote:
Op vrijdag 26 september 2008 19:32 schreef GVRuud het volgende:
Heel simpel gezegd heb ik een database waarin een aantal plugin-namen staan opgeslagen (welke geinstalleerd zijn zegmaar). Er bestaat een map/php bestand met diezelfde naam, en bij het inladen van de plugins word dat bestand geincluded. Dezelfde pluginnaam is ook de daadwerkelijke klasse-naam die je dus kunt aanroepen.

Aan het begin van je script zou je dus alle bestanden kunnen includen die in de plugin-tabel staan, maar in mijn eigen CMS wordt dat pas gedaan wanneer dit daadwerkelijk nodig is zodat ik niet teveel onnodige zooi in hoef te laden.
Dat is ook ongeveer wat ik wil, maar ook wil ik middels de plugins bepaalde gegevens kunnen achterhalen van de hoofdmodule en bepaalde acties kunnen triggeren (bv data validatie, data streams aanpassen etc)
The people who lost my respect will never get a capital letter for their name again.
Like trump...
  zondag 28 september 2008 @ 11:02:43 #131
213087 Nielez
10100111001
pi_61966054
SQL Vraagje:

1
2
3
4
5
SELECT P1.PRES_NAME, P2.PRES_NAME, (SELECT COUNT(*) FROM PRES_HOBBY WHERE P1.PRES_NAME = PRES_NAME)
FROM PRES_HOBBY P1, PRES_HOBBY P2
WHERE (SELECT COUNT(*) FROM PRES_HOBBY WHERE P1.PRES_NAME = PRES_NAME) = (SELECT COUNT(*) FROM PRES_HOBBY WHERE P2.PRES_NAME = PRES_NAME)
AND NOT P1.PRES_NAME = P2.PRES_NAME
AND (SELECT HOBBY FROM PRES_HOBBY WHERE PRES_NAME = P1.PRES_NAME) =ALL (SELECT HOBBY FROM PRES_HOBBY WHERE PRES_NAME = P2.PRES_NAME)


Wil SQL niet.
Dit komt door het laatste regeltje, waar ik wil dat een lijstje hobbies (van de ene president) EXACT hetzelfde is als een lijstje hobbies van de andere president.
Maar,, hij geeft een multiple rows in singleton select.
Hoe implementeer ik de =ALL zodat hij wel werkt?

Andere oplossingen ook gewenst.
  zondag 28 september 2008 @ 11:36:06 #132
75592 GlowMouse
l'état, c'est moi
pi_61966617
Er staat vaak PRES_NAME zonder tabelaanduiding in je queries. Het is mij onduidelijk op welke tabel dat slaat.

Die laatste where zou ik doen met verzamelingen. De ene MINUS de ander, en de ander MINUS de ene moet leeg zijn. Hier je een MINUS implementeert staat hier uitgelegd.

Ik hoop dat je wel doorhebt dat een query als deze de performance sterk beïnvloedt.

[ Bericht 11% gewijzigd door GlowMouse op 28-09-2008 11:44:15 ]
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_61966649
quote:
Op zondag 28 september 2008 07:36 schreef Likkende_Lassie het volgende:
Ik vind dat hele vereiste van die isset functie maar onzin!
Ondanks de argumenten van GlowMouse en mij? Heb je daar een reden voor?
  zondag 28 september 2008 @ 11:53:35 #134
213087 Nielez
10100111001
pi_61966889
quote:
Op zondag 28 september 2008 11:36 schreef GlowMouse het volgende:
Er staat vaak PRES_NAME zonder tabelaanduiding in je queries. Het is mij onduidelijk op welke tabel dat slaat.

Die laatste where zou ik doen met verzamelingen. De ene MINUS de ander, en de ander MINUS de ene moet leeg zijn. Hier je een MINUS implementeert staat hier uitgelegd.

Ik hoop dat je wel doorhebt dat een query als deze de performance sterk beïnvloedt.
Uiteraard maar in de opdracht (is voor school), staat dat niet naar efficientie/performance wordt gekeken.
Maar .. ik snap je uitleg niet helemaal. Snap je wat ik bedoel?

De vraag is:
Give a result table for all presidents (each time their two names) who have exactly the same
hobbies (so e.g. the ones who both like fishing, riding and swimming) and the number of
their mutual hobbies.

De query nogmaals waarin nu iedere Pres_name een naam gegeven (dat bedoelde je?)
1
2
3
4
5
SELECT P1.PRES_NAME, P2.PRES_NAME, (SELECT COUNT(*) FROM PRES_HOBBY P3 WHERE P1.PRES_NAME = P3.PRES_NAME)
FROM PRES_HOBBY P1, PRES_HOBBY P2
WHERE (SELECT COUNT(*) FROM PRES_HOBBY P4 WHERE P1.PRES_NAME = P4.PRES_NAME) = (SELECT COUNT(*) FROM PRES_HOBBY P5 WHERE P2.PRES_NAME = P5.PRES_NAME)
AND NOT P1.PRES_NAME = P2.PRES_NAME
AND (SELECT HOBBY FROM PRES_HOBBY P6 WHERE P6.PRES_NAME = P1.PRES_NAME) =ALL (SELECT HOBBY FROM PRES_HOBBY P7 WHERE P7.PRES_NAME = P2.PRES_NAME)
  zondag 28 september 2008 @ 13:00:02 #135
75592 GlowMouse
l'état, c'est moi
pi_61968159
Ja het is duidelijk. Kijk maar naar wat verzamelingenleer, want die termen maken het praten hierover gewoon makkelijker.
Je hebt al dat het aantal gelijk is, dus mijn vorig antwoord kan wat eenvoudiger zie ik nu. Je moet bereiken dat hobbies die niet bij de ene president horen, geen hobby's zijn van de andere president.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_61968772
quote:
Op zondag 28 september 2008 10:39 schreef Chandler het volgende:

[..]

Dat is ook ongeveer wat ik wil, maar ook wil ik middels de plugins bepaalde gegevens kunnen achterhalen van de hoofdmodule en bepaalde acties kunnen triggeren (bv data validatie, data streams aanpassen etc)
Ik heb zelf een soort van basisplugin-klasse gemaakt via welke alle cms-brede onderdelen/gegevens (zoals db toegang, settings ed) toegankelijk zijn. Op het moment dat ik een nieuwe plugin schrijf, wordt deze afgeleid van de basisklasse en heb ik dus standaard alle basisfunctionaliteit beschikbaar zodat ik meteen aan de daadwerkelijke plugin kan beginnen.
pi_61991796
Maar heb je ook wat leesvoer m.b.t. een plugin systeem te maken? een opzet vanwaaruit ik iets kan proberen te maken?
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_61997114
quote:
Op maandag 29 september 2008 11:19 schreef Chandler het volgende:
Maar heb je ook wat leesvoer m.b.t. een plugin systeem te maken? een opzet vanwaaruit ik iets kan proberen te maken?
Ik was ook eens aan het kijken, wat ik hier o.a. lees over plugins, waarin alles in een database gekwakt wordt.. Nee, niet doen. Interessanter wordt zoals GVRuud zegt, het deriven van een classe. Bijvoorbeeld met een abstracte klasse of een template klasse en wat afgeleide plugins kom je een heel eind.

Ook interessant is het reflection deel van php. Komt erop neer dat je functies, methods, en properties uit een classe kan opvragen (reverse engineren), en dan aanroepen. (Echter vind ik het uiteindelijk niet de meest nette methode van programmeren)

Heb vervolgens eens gekeken op google, maar vind hier weinig over. Maar sowieso zijn de volgende pagina's op php.net wel interessant hierover.

Class Abstraction
Reflection

Succes
hula
pi_62010225
Erg veel leesvoer kan ik er inderdaad ook niet over vinden, maar onderstaande is een beetje het idee, gebaseerd op abstraction en inheritance. De code is uit mijn duim gezogen (gebaseerd op de code in mijn cms), dus kan wat foutjes bevatten.

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
<?php
abstract class BasePlugin
{
    protected 
$db;

    public function 
__construct()
    {
        
$this->db DatabaseSingleton::getInstance();
        
// Etc...
    
}

    abstract public function 
execute();
}

class 
BlaatPlugin extends BasePlugin
{
    public function 
execute()
    {
        
// Via $this->db kan ik vanalles op de database querien
        
echo "BlaatPlugin wordt uitgevoerd!";
    }
}

class 
SchaapPlugin extends BasePlugin
{
    public function 
execute()
    {
        
// Via $this->db kan ik vanalles op de database querien
        
echo "SchaapPlugin wordt uitgevoerd!";
    }
}

$plugins = array();
$plugins[] = new BlaatPlugin();
$plugins[] = new SchaapPlugin();

foreach( 
$plugins as &$plugin )
{
    
$plugin->execute();
}
?>


Uitvoer:

1
2
BlaatPlugin wordt uitgevoerd!
SchaapPlugin wordt uitgevoerd!
pi_62010895
in ieder geval bedankt voor het antwoord, het stukje over de isset() ga ik nog wel even ergens nalezen
Ik zeg altijd maar zo, met drie wielen heb je nog geen auto.
pi_62011952
Zo heb ik het ook opgelost in het plugin systeem een CMS van mijn stage.
Elke plugin had een map met de naam met alle bestanden, zoals templates enzo.

En dan is ook nog een PluginManager die alles uitleest.
pi_62016978
Dat snap ik, maar stel ik wil plugins gebruiken op bepaalde plaatsen, bv om content te veriferen, of data uit te lezen, dan is het niet handig om het zo te executen..

Ik heb zelf nog weer een poging gedaan om hier wat over te vinden qua stof om te lezen maar helaas
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_62019035
Je zou dan zo iets kunnen doen?

1
2
3
4
<?php
$plugin 
$pluginManager->getPluginInstance("VerifyContent");
$content $plugin->execute($content);
?>


In getPluginInstance laad je de betreffende plugin in met een include, en return je een instance van de betreffende class.
pi_62019076
Even een MySQL vraagje..
Ik heb een tabel met verkoop aantallen, sales. die heeft de volgende kolommen:
- keyword
- clicks
- accounts
- trials
- sales

In de tabel zitten inmiddels meer dan 500.000 records. In keyword staan de keywords, behorende bij de sales. Er zijn per keyword meerdere entries. Ik wil een overzicht krijgen van unieke keywords, met bijbehorende sales aantallen. Dus alle clicks (en accounts, trials en trials) opgeteld per uniek keyword. Deze probeer ik te filteren door de volgende query uit te voeren:

1
2
3
4
5
6
7
8
$query = "SELECT 
DISTINCT(keyword) as keyword, 
SUM(clicks) AS clicks, 
SUM(accounts) AS accounts,  
SUM(trials) AS trials,  
SUM(sales) AS sales 
FROM sales 
ORDER BY sales ASC;";


Maar het werkt niet. Ik krijg maar een result. Wat doe ik fout?
Amsterdam, stad van hash en coke,
Waar de vrouwen zich vrouwelijk gedragen..
En de mannen ook..
  dinsdag 30 september 2008 @ 11:11:00 #145
32768 DionysuZ
Respect my authority!
pi_62019268
SUM() is een group by functie. Als je deze zonder GROUP BY gebruikt krijg je uiteraard 1 resultaat terug
□ Reality is merely an illusion,albeit a very persistent one-A.Einstein
■ Of ik ben gek of de rest van de wereld.Ik denk zelf de rest van de wereld-Rudeonline
□ The war is not meant to be won.It is meant to be continuous-G.Orwell
pi_62019319
GROUP BY keyword dan?
Amsterdam, stad van hash en coke,
Waar de vrouwen zich vrouwelijk gedragen..
En de mannen ook..
  dinsdag 30 september 2008 @ 11:13:33 #147
32768 DionysuZ
Respect my authority!
pi_62019331
probeer eens

1SELECT keyword, SUM(clicks) as clicks, SUM(accounts) AS accounts, SUM(trials) AS trials, SUM(sales) AS sales FROM sales GROUP BY sales ORDER BY sales
□ Reality is merely an illusion,albeit a very persistent one-A.Einstein
■ Of ik ben gek of de rest van de wereld.Ik denk zelf de rest van de wereld-Rudeonline
□ The war is not meant to be won.It is meant to be continuous-G.Orwell
pi_62019433
quote:
Op dinsdag 30 september 2008 11:11 schreef DionysuZ het volgende:
SUM() is een group by functie. Als je deze zonder GROUP BY gebruikt krijg je uiteraard 1 resultaat terug
thanks het werkt
Amsterdam, stad van hash en coke,
Waar de vrouwen zich vrouwelijk gedragen..
En de mannen ook..
pi_62021218
quote:
Op dinsdag 30 september 2008 09:18 schreef Chandler het volgende:
Dat snap ik, maar stel ik wil plugins gebruiken op bepaalde plaatsen, bv om content te veriferen, of data uit te lezen, dan is het niet handig om het zo te executen..

Ik heb zelf nog weer een poging gedaan om hier wat over te vinden qua stof om te lezen maar helaas
Daar voor heb je de manager. Als ik thuis ben zal ik eens een voorbeeld posten.
En probeer zelf ook eens wat uit intussen
pi_62026388
quote:
Op dinsdag 30 september 2008 11:00 schreef GVRuud het volgende:
Je zou dan zo iets kunnen doen?
[ code verwijderd ]

In getPluginInstance laad je de betreffende plugin in met een include, en return je een instance van de betreffende class.
Dat zou ik idd kunnen doen, denk dat ik wordpress maar eens ga doornemen qua code, deze gebruikt namelijk ook plugins die echt overal in te gebruiken zijn
quote:
Op dinsdag 30 september 2008 12:51 schreef super-muffin het volgende:
Daar voor heb je de manager. Als ik thuis ben zal ik eens een voorbeeld posten.
En probeer zelf ook eens wat uit intussen
Als je dat eens wilt doen, super!

Ik vond nog een link op Internet

http://codingforums.com/showthread.php?t=85051 alleen bestaat de source niet meer

[ Bericht 10% gewijzigd door Chandler op 30-09-2008 16:54:51 ]
The people who lost my respect will never get a capital letter for their name again.
Like trump...
  dinsdag 30 september 2008 @ 21:17:10 #151
85919 Likkende_Lassie
Doe eens wat aan je ondertitel
pi_62034721
elke mysql query voorzien van addslashes() (magic quotes kan dan op off toch), verhelpt dat het gehele mysql injectie probleem? Of zijn er nog meer dingen om rekening mee te houden?
pi_62035078
mysql_real_escape_string ligt trouwens wel aan je PHP versie

Verder is dit een leuke tutoriaal, verplichte leesvoer zegmaar
http://www.phphulp.nl/php/tutorials/3/244/

[ Bericht 13% gewijzigd door Chandler op 30-09-2008 21:41:16 ]
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_62035723
quote:
Op dinsdag 30 september 2008 21:17 schreef Likkende_Lassie het volgende:
elke mysql query voorzien van addslashes() (magic quotes kan dan op off toch), verhelpt dat het gehele mysql injectie probleem? Of zijn er nog meer dingen om rekening mee te houden?
Bij het doorgeven van id's vooraf controleren of het daadwerkelijk een getal is, is al een prima oplossing.
hula
pi_62036040
quote:
Op dinsdag 30 september 2008 21:48 schreef NikkelCobalt het volgende:

[..]

Bij het doorgeven van id's vooraf controleren of het daadwerkelijk een getal is, is al een prima oplossing.
Als je weet dat ergens een getal in moet dan kun met idd met bijvoorbeeld intval() zorgen dat er een getal in gaat. Maar als ergens een string in moet dan heb je mysql_real_escape_string nodig. Als je strings niet controleert maakt het nauwelijks nog uit hoe goed je integers controleert, een ketting maar zo sterk als de zwakste schakel.
pi_62036103
quote:
Op dinsdag 30 september 2008 21:17 schreef Likkende_Lassie het volgende:
elke mysql query voorzien van addslashes() (magic quotes kan dan op off toch), verhelpt dat het gehele mysql injectie probleem? Of zijn er nog meer dingen om rekening mee te houden?
Nee, blind addslashes() gebruiken is niet genoeg. Dat helpt alleen bij strings, niet bij numerieke waarden.

Je kan beter geparameteriseerde query's gebruiken, bijvoorbeeld met behulp van PDO.
Wil iedereen die in telekinese gelooft nu mijn hand op steken?
| Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
  dinsdag 30 september 2008 @ 22:10:47 #156
85919 Likkende_Lassie
Doe eens wat aan je ondertitel
pi_62036521
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
<?php
PHP
function quote_smart($value$type false$NULL false) {
   if (
$NULL AND (!$value OR $value == '')){
      return 
NULL;
   }else{
      if (
$type == 'num'){
         if (
is_numeric($value)){
            return 
$value;
         }else{
            return 
'';
         }
      }else{
         if (
get_magic_quotes_gpc()) {
            
$value stripslashes($value);
         }
         if(
version_compare(phpversion(),"4.3.0") == "-1") {
            return 
mysql_escape_string($value);
         } else {
            return 
mysql_real_escape_string($value);
         }
      }
   }
}
?>


Is dit al wat? , is het hier 100% mee veilig, als ik het als volgt gebruik?

1
2
3
<?php
mysql_query
("INSERT INTO blabla ('name') VALUES ('".quote_smart($_POST['name'])."')");
?>


EN:

1
2
3
<?php
mysql_query
("SELECT name FROM blabla WHERE id = '".quote_smart($id'num')."' LIMIT 1");
?>


[ Bericht 57% gewijzigd door Likkende_Lassie op 01-10-2008 09:49:45 ]
pi_62036688
quote:
Op dinsdag 30 september 2008 21:56 schreef Light het volgende:

[..]

Als je weet dat ergens een getal in moet dan kun met idd met bijvoorbeeld intval() zorgen dat er een getal in gaat. Maar als ergens een string in moet dan heb je mysql_real_escape_string nodig. Als je strings niet controleert maakt het nauwelijks nog uit hoe goed je integers controleert, een ketting maar zo sterk als de zwakste schakel.
Ik zeg ook niet dat je strings niet moet controleren. Als je het verhaal gelezen had wat ik quotte dan stond daar ook in dat hij naar meer aanvullingen zocht bovenop het escapen.

Overigens zijn mijn ervaringen met databasegestuurde applicaties zijn dat in 90% van de gevallen je gegevens ophaalt (!) aan de hand van een id.
hula
  dinsdag 30 september 2008 @ 22:50:42 #158
85919 Likkende_Lassie
Doe eens wat aan je ondertitel
pi_62037756
Ik kom er net achter als je ipv:

1
2
3
<?php
function quote_smart($value$type$NULL) {
?>


1
2
3
<?php
function quote_smart($value$type false$NULL false) {
?>


doet, dit stukkennnn sneller is
pi_62037808
quote:
Op dinsdag 30 september 2008 22:15 schreef NikkelCobalt het volgende:

Overigens zijn mijn ervaringen met databasegestuurde applicaties zijn dat in 90% van de gevallen je gegevens ophaalt (!) aan de hand van een id.
True. Maar je moet die gegevens er ook een keer instoppen.
pi_62043603
Idd, en je dient gewoon de input te controlleren, je weet namelijk niet wat iedere gebruiker van plan is met je website!
The people who lost my respect will never get a capital letter for their name again.
Like trump...
  woensdag 1 oktober 2008 @ 09:48:30 #161
85919 Likkende_Lassie
Doe eens wat aan je ondertitel
pi_62043971
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
<?php
PHP
function quote_smart($value$type false$NULL false) {
   if (
$NULL AND (!$value OR $value == '')){
      return 
NULL;
   }else{
      if (
$type == 'num'){
         if (
is_numeric($value)){
            return 
$value;
         }else{
            return 
'';
         }
      }else{
         if (
get_magic_quotes_gpc()) {
            
$value stripslashes($value);
         }
         if(
version_compare(phpversion(),"4.3.0") == "-1") {
            return 
mysql_escape_string($value);
         } else {
            return 
mysql_real_escape_string($value);
         }
      }
   }
}
?>


Is dit al wat? , is het hier 100% mee veilig, als ik het als volgt gebruik?

1
2
3
<?php
mysql_query
("INSERT INTO blabla ('name') VALUES ('".quote_smart($_POST['name'])."')");
?>


EN:

1
2
3
<?php
mysql_query
("SELECT name FROM blabla WHERE id = '".quote_smart($id'num')."' LIMIT 1");
?>
  woensdag 1 oktober 2008 @ 11:10:04 #162
75592 GlowMouse
l'état, c'est moi
pi_62045719
Waarom zet je in je tweede query een integer tussen quotes? En bij 'num' verwacht je een integer terug te krijgen, maar krijg je soms een lege string terug.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_62046074
Omdat dat de type moet weergeven als in de functie die er boven staat weergegeven
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_62046484
quote:
Op woensdag 1 oktober 2008 11:25 schreef Chandler het volgende:
Omdat dat de type moet weergeven als in de functie die er boven staat weergegeven
Als ik verwacht een numerieke waarde terug te krijgen, verwacht ik geen lege string.
  woensdag 1 oktober 2008 @ 11:44:21 #165
85919 Likkende_Lassie
Doe eens wat aan je ondertitel
pi_62046524
Zo beter?

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
<?php
PHP
function quote_smart($value$type false$NULL false) {
   if (
$NULL AND (!$value OR $value == '')){
      return 
NULL;
   }else{
      if (
$type == 'num'){
         if (
is_numeric($value)){
            return 
$value;
         }else{
            return 
0;
         }
      }else{
         if (
get_magic_quotes_gpc()) {
            
$value stripslashes($value);
         }
         if(
version_compare(phpversion(),"4.3.0") == "-1") {
            return 
mysql_escape_string($value);
         } else {
            return 
mysql_real_escape_string($value);
         }
      }
   }
}
?>


Is dit al wat? :) , is het hier 100% mee veilig, als ik het als volgt gebruik?

1
2
3
<?php
mysql_query
("INSERT INTO blabla ('name') VALUES ('".quote_smart($_POST['name'])."')");
?>


EN:

1
2
3
<?php
mysql_query
("SELECT name FROM blabla WHERE id = '".quote_smart($id'num')."' LIMIT 1");
?>
  woensdag 1 oktober 2008 @ 11:47:24 #166
75592 GlowMouse
l'état, c'est moi
pi_62046591
quote:
Op woensdag 1 oktober 2008 11:10 schreef GlowMouse het volgende:
Waarom zet je in je tweede query een integer tussen quotes?
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
  woensdag 1 oktober 2008 @ 12:06:08 #167
187069 slacker_nl
Sicko pur sang
pi_62047007
quote:
Op woensdag 1 oktober 2008 11:25 schreef Chandler het volgende:
Omdat dat de type moet weergeven als in de functie die er boven staat weergegeven :)
Het gaat om dit blokje code:

1
2
3
4
5
6
7
8
<?php
      
if ($type == 'num'){
         if (
is_numeric($value)){
            return 
$value;
         }else{
            return 
'';
         }
?>


Ik zou een trigger_error gebruiken, aangezien er duidelijk wat mis is als je een integer verwacht, maar het er geen is.

En je mag een integer gewoon binnen quotes plaatsen, dus op zich is er niks aan de hand.

Overigens zou ik PDO gebruiken voor dit soort shit, maar iedereen leest gewoon over SR's post heen. Dan heb je een deel van deze code niet nodig..

Ik zou je functie zo schrijven..
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
<?php
function quote_smart($value$type false$NULL false) {
        
$value trim($value);

        if (
strlen($value)) {
                
# We have something
                
if ($type == 'num'){
                        if (
is_numeric($value)){
                                return 
$value;
                        } else {
                                
trigger_error(sprintf("%s: '%s' is not a number!"__FUNCTION__$value), E_USER_ERROR);
                                return 
null;
                        }
                }
        } else {
                if (
$NULL) {
                        return 
null;
                }
        }
        return 
$value;

}

var_dump(quote_smart(0'num'true)); # Hier breekt je huidige code blok op
var_dump(quote_smart("Bla"'string'true));
var_dump(quote_smart(" "'string'));
var_dump(quote_smart("Bla"'num'true)); # Error
?>


https://devzone.zend.com/(...)revent-SQL-Injection
http://www.phpro.org/tutorials/Introduction-to-PHP-PDO.html

In reactie op je nieuwe code, ipv if is_numeric else return 0, dan kan je gelijk intval gebruiken, zie de documentatie hiervan: The integer value of var on success, or 0 on failure.
In theory there is no difference between theory and practice. In practice there is.
pi_62047114
quote:
Op woensdag 1 oktober 2008 11:44 schreef Likkende_Lassie het volgende:
Zo beter?
[...]
De functie heet "quote_smart", maar er wordt niets ge-quote. Het is een encoding functie.
De $type parameter heeft alleen betekenis voor 'num', of ongelijk 'num'. Het lijkt me logischer om verschillende functies voor verschillende datatypes te maken.
Dat de functie NULL terug kan geven heeft denk ik weinig nut. Als je de functie zo maakt dat de string inclusief quotes wordt teruggegeven of indien leeg de string NULL, dan kan je 'm wel makkelijk in een sql string gebruiken.
Als een parameter numeriek hoort te zijn maar dat niet is wil ik gewoon een error krijgen. Zo maar omzetten naar 0 kan ook vervelende dingen opleveren.

Geparameteriseerde query's blijf ik een mooiere oplossing vinden
Wil iedereen die in telekinese gelooft nu mijn hand op steken?
| Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
  woensdag 1 oktober 2008 @ 12:56:10 #169
85919 Likkende_Lassie
Doe eens wat aan je ondertitel
pi_62048010
Je hebt gelijk, een foutmelding zou het moeten zijn.
Een oude functie die ik gebruikte, is:

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
<?php
function secureValue($value$html){

   if (!
$html){
     
$value strip_tags($value'<b>,<a>,<i>,<u>,<img>');
   }else{
      
$value htmlnumericentities($value);
   }
   if (!
$value){
      
$value NULL;
   }

   switch (
gettype($value)) {
      case 
'boolean':
         return 
$value '1' '0';
      case 
'integer':
      case 
'double':
         return (string)
$value;
      case 
'string':
         return 
"'".addslashes($value)."'";
      case 
'array':
      case 
'object':
         return 
"'".addslashes($value)."'";
      default:
         
//'resource', 'NULL', 'unknown type'
         
return 'NULL';
         die();
   }
}
?>
pi_62054533
quote:
Op woensdag 1 oktober 2008 12:06 schreef slacker_nl het volgende:

Ik zou een trigger_error gebruiken, aangezien er duidelijk wat mis is als je een integer verwacht, maar het er geen is.
Niet alleen integers zijn numeriek. Ook floats zijn dat, om eens een voorbeeld te noemen.
quote:
En je mag een integer gewoon binnen quotes plaatsen, dus op zich is er niks aan de hand.
Dat het mag en dat het werkt wil niet zeggen dat het good programming practice is en ook niet dat we er geen opmerkingen over mogen maken.
quote:
Overigens zou ik PDO gebruiken voor dit soort shit, maar iedereen leest gewoon over SR's post heen. Dan heb je een deel van deze code niet nodig..
Goed punt. Al vraag ik me af of alle hosters PDO ondersteunen.
quote:
Ik zou je functie zo schrijven..
[ code verwijderd ]

https://devzone.zend.com/(...)revent-SQL-Injection
http://www.phpro.org/tutorials/Introduction-to-PHP-PDO.html

In reactie op je nieuwe code, ipv if is_numeric else return 0, dan kan je gelijk intval gebruiken, zie de documentatie hiervan: The integer value of var on success, or 0 on failure.
Wat doe je dan bij een float?
  woensdag 1 oktober 2008 @ 17:21:29 #171
187069 slacker_nl
Sicko pur sang
pi_62055059
quote:
Op woensdag 1 oktober 2008 17:01 schreef Light het volgende:
Niet alleen integers zijn numeriek. Ook floats zijn dat, om eens een voorbeeld te noemen.
Dan gebruik je is_int().. of je retouneert intval($value);
quote:
Dat het mag en dat het werkt wil niet zeggen dat het good programming practice is en ook niet dat we er geen opmerkingen over mogen maken.
Dit punt vervalt als je PDO gebruikt (en dat gebruik ik alleen maar icm prepared statements). Of ik nou id = '1' of id = 1 invul, zal me verder jeuken.. En je mag er wat van zeggen, maar ik mag toch ook zeggen dat het niet zo hinderlijk is als iemand het doet aangezien het gewoon verwerkt wordt (zonder warning of wat dan ook..).
quote:
Goed punt. Al vraag ik me af of alle hosters PDO ondersteunen.
Andere hoster zoeken die wel met de tijd meegaat.
quote:
Wat doe je dan bij een float?
Zie hierboven, desnoods breidt is z'n functie uit zodat ie alle verschillende datatypes kan checken..

Verder kan je met PDO ook definieren wat een bepaald ding moet zijn:

1
2
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
In theory there is no difference between theory and practice. In practice there is.
pi_62074530
Weet iemand een tootlje om 2 databases met elkaar te vergelijken en dan de verschillen in een statement kan zetten die ik kan gebruiken om een database aan te passen?
The people who lost my respect will never get a capital letter for their name again.
Like trump...
  donderdag 2 oktober 2008 @ 13:16:57 #173
63192 ursel
"Het Is Hier Fantastisch!
pi_62074883
quote:
Op donderdag 2 oktober 2008 13:05 schreef Chandler het volgende:
Weet iemand een tootlje om 2 databases met elkaar te vergelijken en dan de verschillen in een statement kan zetten die ik kan gebruiken om een database aan te passen?
Oe.. dat zou wel flex wezen.. Ben ik ook wel benieuwd naar..
  donderdag 2 oktober 2008 @ 13:58:19 #174
187069 slacker_nl
Sicko pur sang
pi_62076234
In theory there is no difference between theory and practice. In practice there is.
pi_62099147
dat is idd ongeveer wat ik bedoel maar dan nu liefst gratis
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_62134256
Ik weet niet of het om de inhoud van de tabel of om de structuur gaat, maar ik heb ver in het verleden deze wel eens gebruikt:

http://www.mysqldiff.org/index.php
  zondag 5 oktober 2008 @ 00:05:19 #177
63192 ursel
"Het Is Hier Fantastisch!
pi_62139040
quote:
Op zaterdag 4 oktober 2008 20:21 schreef spaceninjapirate het volgende:
Ik weet niet of het om de inhoud van de tabel of om de structuur gaat, maar ik heb ver in het verleden deze wel eens gebruikt:

http://www.mysqldiff.org/index.php
Ik ben altijd wel huiverig met software waarbij de laatste release datum al erg lang geleden is..
quote:
Version 1.5.0 (10/01/2004)
  zondag 5 oktober 2008 @ 00:20:18 #178
75592 GlowMouse
l'état, c'est moi
pi_62139414
quote:
Op zondag 5 oktober 2008 00:05 schreef ursel het volgende:

[..]

Ik ben altijd wel huiverig met software waarbij de laatste release datum al erg lang geleden is..
[..]

http://mirrors.kernel.org/gnu/patch/

Als het doet wat het moet doen, is er weinig reden om het versienummer maar te verhogen om maar een nieuwe versie te hebben.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_62139526
quote:
Op zondag 5 oktober 2008 00:20 schreef GlowMouse het volgende:

[..]

http://mirrors.kernel.org/gnu/patch/

Als het doet wat het moet doen, is er weinig reden om het versienummer maar te verhogen om maar een nieuwe versie te hebben.
Je kunt je natuurlijk afvragen of het nog wel doet wat het moet doen. MySQL is in de afgeloen vier jaar ook behoorlijk veranderd.
pi_62149477
Ik zal het volgende week even testen en dan hier raporteren hoe het werkte!!
The people who lost my respect will never get a capital letter for their name again.
Like trump...
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')