Dag lui,

ik ben bezig met een layout,
is wel zo'n beeetje af, in het bovenste menu is een mogelijkheid om de kleur aan te passen van de layout (achtergrond, en later misschien links ofzo)
nu was het nogal standaard met een cookie en wat javascript, maar nu wil ik er PHP achter doen, zodat ik het op kan slaan in een DB
en het dus dieper zit dan een cookie (die veranderd na onunload, zodat php niet overbelast wordt)

cookie enzo werkt prima, javascript ook, het in de database zetten ook, maar updaten werkt niet, dan krijg ik de volgende fout:
"Invalid parameter number: parameter was not defined" op de plek waar deze code staat: [icode]$stmt->bindParam(':ip', $_SERVER['REMOTE_ADDR']);[/icode]


<?php
if($aantal > 0)             // Er zijn rijen aanwezig (Dus UPDATE)
{
    $sql = "UPDATE `layout` SET `hex` = ':hex' AND `kleur` = ':kleur' AND `generated` = ':generated' WHERE `ip` = ':ip'";
}
else                     //Geen rijen aanwezig. (Dus INSERT)
{
    $sql = "INSERT INTO `layout` (`ip`, `hex`, `kleur`, `generated`) VALUES (':ip', ':hex', ':kleur', ':generated')";
}

$stmt = $db->prepare($sql);
        
$stmt->bindParam(':ip', $_SERVER['REMOTE_ADDR']);
$stmt->bindParam(':hex',  $_SESSION['layout']['hex']);
$stmt->bindParam(':kleur', $_SESSION['layout']['kleur']);
$stmt->bindParam(':generated', $_SESSION['layout']['generated']);
    
$beginTransaction = true;
$db->beginTransaction();
$stmt->execute();
$db->commit();
?>
 

de code zit natuurlijk in een trycatch combo.
het bindParam gedeelte is dus hetzelfde voor insert en update.

deze code wordt gedraait in de CSS (die dus een php pagina is, met een header en mod_rewrite, zodat het op elke nodige pagina automatisch zit :))Dag lui,

ik ben bezig met een layout,
is wel zo'n beeetje af, in het bovenste menu is een mogelijkheid om de kleur aan te passen van de layout (achtergrond, en later misschien links ofzo)
nu was het nogal standaard met een cookie en wat javascript, maar nu wil ik er PHP achter doen, zodat ik het op kan slaan in een DB
en het dus dieper zit dan een cookie (die veranderd na onunload, zodat php niet overbelast wordt)

cookie enzo werkt prima, javascript ook, het in de database zetten ook, maar updaten werkt niet, dan krijg ik de volgende fout:
"Invalid parameter number: parameter was not defined" op de plek waar deze code staat: "$stmt->bindParam(':ip', $_SERVER['REMOTE_ADDR']);"


<?php
if($aantal > 0)             // Er zijn rijen aanwezig (Dus UPDATE)
{
    $sql = "UPDATE `layout` SET `hex` = ':hex' AND `kleur` = ':kleur' AND `generated` = ':generated' WHERE `ip` = ':ip'";
}
else                     //Geen rijen aanwezig. (Dus INSERT)
{
    $sql = "INSERT INTO `layout` (`ip`, `hex`, `kleur`, `generated`) VALUES (':ip', ':hex', ':kleur', ':generated')";
}

$stmt = $db->prepare($sql);
        
$stmt->bindParam(':ip', $_SERVER['REMOTE_ADDR']);
$stmt->bindParam(':hex',  $_SESSION['layout']['hex']);
$stmt->bindParam(':kleur', $_SESSION['layout']['kleur']);
$stmt->bindParam(':generated', $_SESSION['layout']['generated']);
    
$beginTransaction = true;
$db->beginTransaction();
$stmt->execute();
$db->commit();
?>

het bindParam gedeelte is dus hetzelfde voor insert en update.

deze code wordt gedraait in de CSS (die dus een php pagina is, met een header en mod_rewrite, zodat het op elke nodige pagina automatisch zit :))

mijn vraag is dus, waarom krijg ik die foutmelding? en hoe kan ik dat oplossen.

alvast bedankt
//Jeroen
Volgens mij hoef je in je query geen quotes meer te gebruiken. Prepared statement zijn immers om query en data te scheiden, en die quotes zijn om data aan te geven. Ze zeggen immers "en nu komt er een string".

$sql = "UPDATE layout SET hex = :hex, kleur = :kleur, generated = :generated WHERE ip = :ip";

Ik weet niet of dat ook automatisch het probleem oplost, al kan ik me wel voorstellen dat MySQL nu je placeholders niet ziet omdat 'ie denkt dat het strings zijn, en daarom boos wordt wanneer je :ip probeert te koppelen.

Je kan trouwens wanneer je MySQL gebruikt (wat je overduidelijk doet :P) ook de REPLACE INTO of beter INSERT ... ON DUPLICATE KEY UPDATE syntax gebruiken. Dan hoef je niet eerst te controleren of de regel al in de database zit.
Bedankt voor je snelle reactie :)
ik had het eerst ook zonder quotes, alleen mijn notepad++ highlighte hex ook, dus ik dacht, laat ik dat maar quoten (`).
en het is alleen ip, de rest komt wel goed door.

ik zal eens kijken naar die links, dat wist ik inderdaad niet :)
ik laat het weten als het gelukt is, of niet..

edit momenteel ligt de mysql server eruit van mijn paid hosting.
op de hoogte gesteld, maar voordat ze er wat aan doen duurt nog wel ff -_-
eindelijk is de mysql server gerepareerd, ze hebben localhost verboden zonder een waarschuwing of mededeling, en natuurlijk krijg ik daar pas na 3 e-mails (na 1 maand) al antwoord op :) houd ik van, service...

ik heb het alleen nog niet op kunnen lossen, momenteel een ander project, ik woeker dit topic later wel aan :)
En dat wil je na 9 jaar weten?!?
Omdat het onnodig is om zo een oud topic omhoog te schoppen, wat verwarring kan veroorzaken bij de leden, sluit ik dit topic. Mochtje met hetzelfde probleem als de topicstarter zitten, gelieve een nieuw topic te openen.

Lees ook even je PM-bericht. :-)

Reageren