Ik ben nog relatief nieuw met PHP en zeker wanneer het OO-programmeren erin betreft. Meestal los ik m'n problemen na kortere of langere tijd altijd zelf wel op. Maar nu zit ik redelijk met de handen in het haar; ik heb geen idee hoe onderstaand probleem tot stand komt en hoe dit op te lossen...
Het ding is namelijk dat ik een PHP script heb opgebouwd als een grote klasse die telkens geinstantieerd wordt vanuit een index-file. Elke nieuwe pagina als het ware in de applicatie maakt gebruik van diezelfde klasse en index. Nu ben ik nog maar net begonnen met het bouwen ervan en wilde nu net een methode toevoegen voor het wegschrijven van data naar een database. Het vreemde is al meteen dat ik telkens duplicaat entries krijg. Toch wanneer ik het het pad van de code naloop lijkt het er gewoon op dat de "INSERT" query slechts eenmaal aangeroepen wordt. Tegen dit probleem ben ik een tijdje geleden ook aangelopen in een andere context, dus misschien heeft het te maken met m'n gebrekkige manier van (OO?) programmeren?
Maar het meest aparte moet nog komen, tenminste zo zie ik het. Wanneer ik het PHP script op een gegeven moment open laat staan, terwijl de executie daarvan zelf beeindigd lijkt te zijn (geen loops of dergelijke), blijven er MySQL entries verschijnen in m'n database met telkens dezelfde inhoud (uitgezonderd van een auto increment ID). Het lijkt dus alsof er in de achtergrond steeds iets in de weer blijft gaan.
Is dit een typisch iets van OO-progammeren wat ik niet begrijp? Als ik het zo zie wordt de "insert"-command sowieso telkens twee keer uitgevoerd en daarna blijft 'ie maar doorgaan als ik de pagina open laat staan...
Ik kan me niet herinneren dat ik dat ooit eerder heb gehad met PHP. Ik werk overigens in een MAMP omgeving (Mac OSX). Code wil ik trouwens best plaatsen, alleen is daar weinig bijzonders aan te zien volgens mij.
EDIT: Toch maar even de code van de klasse toegevoegd.
Het ding is namelijk dat ik een PHP script heb opgebouwd als een grote klasse die telkens geinstantieerd wordt vanuit een index-file. Elke nieuwe pagina als het ware in de applicatie maakt gebruik van diezelfde klasse en index. Nu ben ik nog maar net begonnen met het bouwen ervan en wilde nu net een methode toevoegen voor het wegschrijven van data naar een database. Het vreemde is al meteen dat ik telkens duplicaat entries krijg. Toch wanneer ik het het pad van de code naloop lijkt het er gewoon op dat de "INSERT" query slechts eenmaal aangeroepen wordt. Tegen dit probleem ben ik een tijdje geleden ook aangelopen in een andere context, dus misschien heeft het te maken met m'n gebrekkige manier van (OO?) programmeren?
Maar het meest aparte moet nog komen, tenminste zo zie ik het. Wanneer ik het PHP script op een gegeven moment open laat staan, terwijl de executie daarvan zelf beeindigd lijkt te zijn (geen loops of dergelijke), blijven er MySQL entries verschijnen in m'n database met telkens dezelfde inhoud (uitgezonderd van een auto increment ID). Het lijkt dus alsof er in de achtergrond steeds iets in de weer blijft gaan.
Is dit een typisch iets van OO-progammeren wat ik niet begrijp? Als ik het zo zie wordt de "insert"-command sowieso telkens twee keer uitgevoerd en daarna blijft 'ie maar doorgaan als ik de pagina open laat staan...
Ik kan me niet herinneren dat ik dat ooit eerder heb gehad met PHP. Ik werk overigens in een MAMP omgeving (Mac OSX). Code wil ik trouwens best plaatsen, alleen is daar weinig bijzonders aan te zien volgens mij.
EDIT: Toch maar even de code van de klasse toegevoegd.
PHP:
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
| <?php class app { private $host; private $username; private $password; private $database; function __construct() { // database credentials $this->host = 'localhost'; $this->username = 'root'; $this->password = 'root'; $this->database = 'medb'; // connect to database $this->connect(); $this->showPage(); } private function connect() { mysql_connect($this->host, $this->username, $this->password) or die('Could not connect. ' . mysql_error()); mysql_select_db($this->database) or die('Could not select database. ' . mysql_error()); } private function showPage() { $page = $_SESSION['page']; if (isset($_POST['new'])) { $page = 'new'; } if (isset($_POST['submitCreationGoal'])) { $this->save(); unset($_POST['submitCreationGoal']); $page = 'collabSettings'; } switch ($page) { case 'new': include('inc/view/new.view.php'); break; case 'collabSettings': include('inc/view/collabsettings.view.php'); break; default: include('inc/view/newopen.view.php'); } } private function save() { $creationGoal = $_POST['creationGoal']; if (isset($_POST['submitCreationGoal'])) { mysql_query("INSERT INTO creationgoals (goal) VALUES ('$creationGoal')"); } } } ?> |
[ Voor 27% gewijzigd door CoolJuul op 04-06-2009 10:38 ]