Multidesk.be » Forums » PHP » eerste PHP website, enkele vraagjes

  • Pagina
  • 1 van 1
0 gasten lezen dit onderwerp.
^ Onderwerp geschreven door thekid op woensdag 24 februari 2010 om 17:08:40.
thekid's avatar
Multiviteit: 5273
Moderator
Alhoewel ik normaal gezien enkel in asp.net ontwikkel en vroeger heel wat ervaring had in Asp heb ik de laatste weken een PHP website opgezet voor mijn pa.

Nu deze ongeveer af heb, heb ik wel wat vraagjes opgedaan ivm de PHP taal :) en deze wilde ik hier eens voorleggen aan de connaisseurs :)

1. Een eerste vraag, naar updates toe, is de vraag hoe de update kan geautomatiseerd worden. Ik gebruik nu momenteel de priorweb phpmysqladmin om een dump te plaatsen van de db (er staat een lokale mysqldb op mijn pa's pc die deze gegevens bevat en verwerkt worden door een C# programma).

Is er een mogelijkheid om een php pagina te maken waar ik een bestand kan uploaden, zodat mijn pa evt elke week de laatste database dump zou kunnen in plaatsen, waarna ik het upgeloade bestand dan inlees en rechtstreeks in 1 sqlstring naar de database doorstuur? Of bestaat er een gemakkelijkere manier?

2. In verband met de classes in PHP (fantastisch om mee te werken, vanuit het zicht van een C# programmeur btw :D, heeft mijn werk veel vergemakkelijkt). Wat krijgt nu voorrang in de PHP taal, bij bvb volgende statement

PHP
  1.  
  2. class dummy
  3. {
  4.   protected $id;
  5.  
  6.   public function __construct()
  7.   {
  8.       $id = -1;
  9.   }
  10.  
  11.   public function Load()
  12.   {
  13.      // laad de dummy klasse
  14.   }
  15.  
  16.   public function __get($item)
  17.   {
  18.      switch (strtolower($item))
  19.      {
  20.        case 'id':
  21.           return $this->id;
  22.           break;
  23.      }
  24.   }
  25. }
  26.  
  27. class test
  28. {
  29.    protected $id;
  30.    protected $dummy;
  31.  
  32.    public function __construct()
  33.    {
  34.        $id = -1; $dummy = -1// bevat enkel de id naar de in de database gestockeerde dummy klasse
  35.    }
  36.  
  37.    public function Load()
  38.    {
  39.       // load test klasse
  40.    }
  41.  
  42.    public function __get($item)
  43.    {
  44.        switch (strtolower($item))
  45.        {
  46.            case 'id':
  47.              return $this->id;
  48.              break;
  49.            case 'dummy':
  50.              $dd = new dummy();
  51.              $dd->Load(); // normaal zou ik wel nog een ID opgeven, is enkel als vb
  52.              return $dd;
  53.              break;
  54.        }
  55.    }
  56.  
  57.    public function Vraag2()
  58.    {
  59.          return $this->dummy;    // wat krijg ik hier terug?? de id, of de dummy klasse? Ik vermijd het in mijn huidige code voor de zekerheid, maar vroeg het me toch af :)
  60.    }
  61. }
  62.  


bij deze dus mijn 2de vraag, als ik $test->Vraag2() zou oproepen, wat krijg ik dan terug, de dummy id of de dummy klasse? ik zou het kunnen testen natuurlijk, maar vroeg het me af of het 1 vd 2 mogelijkheden voorkeur heeft op de andere :D


3. Mijn derde vraag is dan eerder over hoe het in elkaar zit voor session & dergelijke. Ik heb een inlogscript, deze laadt een Person object in, die ik serialize naar een session object
PHP
  1.  
  2. if (logginsuccesvol)
  3.   $_SESSION['currentUser'] = serialize($currentUser)// waar current user de nieuw ingelogde gebruiker bevat
  4.  


en die ik ophaal via
PHP
  1.  
  2. if (isset($_SESSION['currentUser']))
  3.   $currentUser = unserialize($_SESSION['currentUser']);
  4.  


is dit een correcte manier? de wachtwoorden in het object worden gehashed via de md5() functie bij het laden, zodat deze niet onbeschermd in het session object komen te staan



4. Over forms:

wat is de correcte manier voor de oude form values opnieuw in het input veld te plaatsen. Ik gebruik nu steeds addslashes en stripslashes, enkel komt dit niet goed uit :) als er iemand een ' ingeeft dan staan er wel een aantal \\\\' voor, die steeds toenemen, maar 'k zeg, 'k ga er maar eens voor informeren hoe het het best gaat :)


5. Over de database connectie dan:

ik maak mijn verbinding via een static klasse om bij het starten van de website de database te openen, en deze op het einde af te sluiten. Is dit de correcte manier? Ik deed dit nl vooral omdat ik dan niet steeds een connect moest maken naar de database :D


de website kan steeds bekeken worden hier: http://www.pynoojp.be , het is echter al een werkende versie, dus hou je evt wel wat in met het testen van sql injecties enzo :d geef mij dan liever de correcte info over hoe het probleem op te lossen, indien er zich voor doen :D

merci voor de info allesinds

Opmerking van de crew

Kleine wijziging in de URL zodat die niet vast plakt aan de komma
SMG
Deze tekst werd het laatst bewerkt voor 0.01 % door SMG op woensdag 24 februari 2010 om 17:43:17.
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #1 geschreven door Martijn op woensdag 24 februari 2010 om 17:52:33.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
1. Ik zou een shell script gebruiken en de dump rechtstreeks aan de mysql executable feeden.
2. Aangezien $dummy een protected variabele is, kan je deze perfect rechtstreeks aanspreken en gaat je magic method __get() in feite niet aangesproken worden.
3. Waarom zou je de wachtwoorden mee hashen? Enkel de profielgegevens (username, userid, timestamps, IP address etc.) zijn toch voldoende?
4. Probeer stripslashes te vermijden, zorg dat magic_quotes_gpc uitstaat in feite en regel de security zelf (zie [url=http://www.multidesk.be/artikels/artikel/166/Wat-is-magic-quotes-en-hoewanneer-gebruik-ik-addslashes.html]hier[/a]).
5. Bedoeling is inderdaad dat je maar één keer een connect maakt per pagina per database user.

SQL injections: zorg er gewoon voor dat je data altijd "clean" is. Bijvoorbeeld SQL queries in je DAO laag. Je kan daarvoor steunen op magic_quotes_gpc, maar dat is echt geen best practice. Best is de controle zelf in de hand te houden m.i.
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #2 geschreven door thekid op woensdag 24 februari 2010 om 18:03:45.
thekid's avatar
Multiviteit: 5273
Moderator
1. Ok :) 'k ga er eens voor kijken :)

2. merci, 'k gebruik dit op sommige momenten om mijn foreignlinks te veranderen naar de klasse in de output, maar wist dan niet meer als ik ergens intern het id nodig had van de foreignlink welke er voorkeur zou krijgen, en heb dat dan beetje veranderd door in de __get de oproepingsnaam wat te wijzigen, maar intressant voor de toekomst, merci :)

3. Mja, idd, ik heb het wachtwoord niet nodig, 'k ga dit er dan wel weer eens uithalen :D 't was gewoon omdat deze als basis in de klasse zat omdat ik in het begin deze erbij had geschreven, 'k ga die property members dan wel weer wissen, maakt toch geen verschil uit :)

4. Merci, 'k ga dat eens bekijken :)


over uw opmerking :) hoe bedoel je, kan je een klein voorbeeld geven?

In mijn klasses gebeuren de loads via een mysql_query("select [fields] from [ table ] where username = '".$username."' and wachtwoord = '".$wachtwoord."' limit 0, 1")

niet goed?
Deze tekst werd het laatst bewerkt voor 0.58 % door thekid op woensdag 24 februari 2010 om 18:04:37.
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #3 geschreven door Martijn op woensdag 24 februari 2010 om 22:19:17.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
Als je op dat ogenblik reeds zeker bent dat uw variabelen veilig zijn (dus geescaped), is dit in orde.
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #4 geschreven door thekid op woensdag 24 februari 2010 om 22:27:12.
thekid's avatar
Multiviteit: 5273
Moderator
bij puntje 2 btw, als ik dan $this->dummy->id zou oproepen zou ie dan wel via de __get() method gaan?

'k heb wat basic injections geprobeerd, maar die werkten gelijk niet, dus denk dat da wel redelijk in orde is :)
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #5 geschreven door Martijn op woensdag 24 februari 2010 om 22:53:02.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
Neen nog niet. __get() wordt enkel gebruikt voor aanroepen naar functies die niet bestaan. Dus stel dat je $this->foo deed, dan ging je wel in die method terecht komen.
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #6 geschreven door thekid op woensdag 24 februari 2010 om 23:51:28.
thekid's avatar
Multiviteit: 5273
Moderator
got it, merci :D
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
  • Pagina
  • 1 van 1

Snel-antwoordformulier
Toon uitgebreid antwoordformulier Bericht nalezen Bericht plaatsen