In een form zou ik graag willen dat de als er daadwerkelijk een $form->onSaved is er los van de dat insert in de "basis" tabel er in een 2e tabel ook drie velden worden ge-update
Maar ik denk dat ik wat fout doe
dit is een del van de code en het gaat op de insert in af_stats_news
[// set the data handling function
$form->onSaved ( "doRun" , "updatecounter");
// display the form
$form->flush();
$objForm
// the data handling function
// NOTE: 2 arguments! This differs from the function onCorrect!!
function doRun($data) {
$url = "newsitem_list.php";
echo
"<script language='javascript'>\n".
"document.location.href='".$url."';\n".
"</script>\n";
}
function updatecounter( $id )
{
INSERT INTO af_stats_news (date, newsitem_id, requested ) VALUES (now(), $id,1)
[// set the data handling function
$form->onSaved ( "doRun" );
// display the form
$form->flush();
$objForm
// the data handling function
// NOTE: 2 arguments! This differs from the function onCorrect!!
function doRun($data) {
mysql_query( "INSERT INTO af_stats_news (date, newsitem_id, requested ) VALUES (now(), $id,1) " );
$url = "newsitem_list.php";
echo
"<script language='javascript'>\n".
"document.location.href='".$url."';\n".
"</script>\n";
}
?>
Changed at 08 June 10 / 22:05
helaas :-(
nog steeds
syntax error, unexpected T_FUNCTION
<?PHP
// set the data handling function
$form->onSaved ( "doRun" );
// display the form
$form->flush();
$objForm
// the data handling function
// NOTE: 2 arguments! This differs from the function onCorrect!!
function doRun($id, $data) {
mysql_query( "INSERT INTO af_stats_news (date, newsitem_id, requested ) VALUES (now(), $id,1) " );
$url = "newsitem_list.php";
echo
"<script language='javascript'>\n".
"document.location.href='".$url."';\n".
"</script>\n";
}
?>
Changed at 09 June 10 / 22:53
Als ik dat doe krijg ik deze output
6237
Array ( [NewsItem_seasonID] => 106 [NewsItem_Date] => 09-06-2010 [NewsItem_Time] => 22:20 [NewsItem_Publist] => N [Newsitem_OnFrontpage] => N [af_searchable] => Y [NewsSource_ID] => 0001 [NewsItem_Category] => 01 [NewsItem_Titel] => a [NewsItem_Intro] => a [af_newsitemtags] => [NewsItem_Content] => a [Author_ID] => 0004 )
en dat zijn alle waardes die ik verwacht voor de basi tabel maar de insert in de tweede table zie ik niet in de array zitten
In het form set ik een VAR voor te benodigde table een daar na connect ik naar FH
In mijn geval kan ik per form maar één table connectie maken.
Ik heb in diverse andere onderwerpen op het forum zitten zoeken, Maar ik kom er helaas niet uit.
<?php
$table = 'newsitems';
include "FH3/fh_connect.php"; //verbinding maken
?>
de fh_connect.php ziet er zo uit
<?php
//define('FH_FHTML_DIR', '/FHTML');
// include the class
include("FH3/class.FormHandler.php");
// create a new FormHandler object
$form =& new FormHandler();
// create a new FormHandler object
$form =& new FormHandler();
include("FH3/class.dbFormHandler.php");
// create new db formhandler object
$form = new dbFormHandler();
// Set the database info and connect!
$form->DBInfo( "newsdatabase" , $table , "mysql");
$form->DBConnect("localhost" ,"*****", "*****" );
?>
Ik denk dat je FormHandler en de databaseconnectie even los van elkaar moet zien, zoals je nu je fh_connect.php hebt gemaakt is erg omslachtig/overbodig.
Mijn advies is om de verbinding met de database in een apart bestand te zetten, bijvoorbeeld connect.php. In dat bestand zet je iets als het volgende:
<?php
// Maak verbinding met de MySQL server
$connection = @mysql_connect( 'localhost', 'username', 'password');
if( !$connection )
{
echo 'Kon geen verbinding maken met de database';
exit;
}
// Verbinding geslaagd, probeer de database te selecteren
else
{
if( !mysql_select_db( 'naam_database', $connection ) )
{
echo 'Kon de database niet selecteren';
exit;
}
}
?>
Dit bestand kun je via include / require gebruiken waar je een verbinding met de database nodig hebt.
In de doRun functie kun je gebruik maken van de $connection uit dit script. Voorbeeld (niet getest)
<?php
include 'FH3/class.dbFormHandler.php';
include 'connect.php';
function doRun( $id, $data )
{
// Maak de actieve databaseverbinding bekend in de functie
global $connection;
// Hier is de opgeslagen data en het nieuwe id van basistabel bekend
// Stel de extra query voor de af_stats_news tabel samen
$qryInsert = "INSERT INTO af_stat_news(date, newsitem_id, requested) VALUES(NOW(), ".$id.", 1)";
// Voer de query uit op de connectie
if( !mysql_query( $qryInsert, $connection ) )
{
return 'Opslaan in af_stat_news is mislukt!';
}
// Ga naar andere pagina via header() of script of whatever
}
$form = new dbFormHandler();
$form->setConnectionResource( $connection, 'basistabel', 'mysql' );
// Hier al je formuliervelden
$form->submitButton( 'Opslaan' );
$form->onSaved( 'doRun' );
?>
Het gebruik van de connection identifier ($connection) is optioneel maar altijd aan te raden. Zie bijvoorbeeld PHPFreakz Wiki voor een mooie uitleg.
Overigens zou ik er persoonlijk voor kiezen om de insert op af_stat_news via een trigger in de database op te lossen...op die manier kun je het nooit vergeten en blijft je PHP-code relatief "schoon".
Een trigger is een actie in de database, die kan afgaan op bepaalde events zoals een INSERT, UPDATE of DELETE. Doordat je dit op databaseniveau programmeert kan het je dus nooit vergeten. Je hebt in triggers alle informatie vna je database beschikbaar, zie de MySQL manual: