Login Retreive lost passwordRegister
Search

Forum Index / NL Forum / update 2e table onsaved

[ This topic is solved ]

  markla 07 June 10 / 23:08  
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) 

}

  Johan Wiegel (Admin) 08 June 10 / 07:49  
ik zou dat als volgt oplossen

<?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($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"

?>

  markla 08 June 10 / 21:39  
Changed at 08 June 10 / 21:44
Bedankt voor je reactie.

Helaas werkt dit niet.

ik krijg de foutmelding:
Parse error: syntax error, unexpected T_FUNCTION in CMS/admin/newsitem_add.php on line 129

regel 129 is:
<?php
function doRun($data) { 
?>

Kan dat te maken hebben met het feit dat de $id uit

mysql_query( "INSERT INTO af_stats_news (date, newsitem_id, requested ) VALUES (now(), $id,1) " );

nog niet aanwezig is, die wordt nl pas aangemaakt als het newsitem geschreven wordt in zijn eigen table?

  Johan Wiegel (Admin) 08 June 10 / 21:55  
foutje van mij

maak van
<?php
function doRun($data) { 
?>


even

<?php
function doRun($id$data) { 
?>


dan werkt het beter ;)

  markla 08 June 10 / 22:05  
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"

?>


PS
ik heb waarschijnlijk nog een ouder FHversie

  Johan Wiegel (Admin) 08 June 10 / 22:44  
even testen of alle gegevens aanwezig zijn :

<?php
function doRun($id$data) { 
echo 
$id.'<br />';
print_r$data );
die();
    
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"

?>

  markla 09 June 10 / 22:22  
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

  Johan Wiegel (Admin) 10 June 10 / 07:43  
Dat komt omdat je database verbinding niet aanwezig is in functie.

  markla 10 June 10 / 19:43  
En daar loop ik dus vast :-(


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" ,"*****""*****" );  
?>

  Remco van Arkelen (Admin) 11 June 10 / 08:09  
Hi Markla,

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".

  markla 14 June 10 / 20:26  
Oke, klinkt erg interessant. Ga ik me even in verdiepen.

  markla 14 June 10 / 20:44  
Hi Remko

Bedankt voor je tips. Ik ga d'r mee aan de slag.

Maar wat bedoeld met dat laatste over die trigger in de database.

Ik kan me daar even niets bij voorstellen.

  Remco van Arkelen (Admin) 14 June 10 / 20:54  
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:

http://dev.mysql.com/doc/refman/5.1/en/create-trigger.html

  Top


powered by PHP-GLOBE   © 2004 - 2010 FormHandler. All rights reserved.   -   Open source license