[ This topic is solved ]
klaasjan
28 May 09 / 22:57
Hoi,
Ik wil twee selectfields vullen uit de DB wat prima gaat. echter ik wil geen gebruik maken van FormHandler voor de verwerking van de $_POST data omdat dit een redelijk complex geheel is met foreign keys ed.
Hoe kan ik nu de $_POST data gewoon gebruiken als had ik geen Formhandler gebruikt?
alvast bedankt
Johan Wiegel (Admin)
29 May 09 / 08:00
Hoi,
De $_POST array is gewoon beschikbaar.
Je kunt deze net als anders gewoon gebruiken.
klaasjan
29 May 09 / 08:56
Johan,
Bedankt voor de snelle reply. Als ik echter opsla gaat FormHandler zelf al met de data aan de slag. Weet je hier ook een oplossing voor?
Het gaat om de volgende code:
$form =& new dbFormHandler();
// set the database info
$cfg = array(
"path" => $dir,
"type" => "pdf PDF",
"name" => "", // <-- keep the original name
"required" => true,
"exists" => "rename"
);
// upload field
$form -> dbInfo ( "XXXXXX", "gebruikers" );
$form -> dbConnect( "XXXXXX", "XXXXXXX", "XXXXXXX" );
$form -> dbSelectField('soort bestand', 'soort_bestand','soort_bestand', array('id','naam'));
$form -> dbSelectField('gebruiker', 'gebruiker','gebruikers', array('id','email'));
$form -> textField( "bestandsnaam", "bestandsnaam", FH_STRING,20,50 );
$form -> uploadField("bestand", "bestand", $cfg);
$form -> submitButton( "Opslaan" );
$form -> oncorrect('doRun');
// laat het form zien
$form -> flush();
function doRun($data){
if($_SERVER['REQUEST_METHOD'] == 'POST'){
echo '<pre>';
print_r($_POST);
echo '</pre>';
$naam = $_FILES['bestand']['name'];
if(isset($_POST['bestandsnaam'])){// kijken of er hernoemd moet worden
$bestandsnaam = $_POST['bestandsnaam'];
$hernoemen = true;
}
if(!isset($_POST['medewerker'])){
$errors[] = '<p>Je moet een werknemer selecteren</p>';
}
if(!is_uploaded_file($_FILES['bestand']['tmp_name'])){
$errors[] = '<p>Er is geen bestand opgegeven</p>';
}
if($_FILES['bestand']['size'] > $maxsize){
$errors[] = '<p>Het bestand is te groot</p>';
}
if(!move_uploaded_file($_FILES['bestand']['tmp_name'], $dir.$naam)){
$errors[] = '<p>Het uploaden is mislukt</p>';
}
$pathinfo = pathinfo($_FILES['bestand']['name']);
// kijken of er hernoemt moet worden
$hernoemen ? $echte_naam = $bestandsnaam.'.pdf' : $echte_naam = $naam.'.pdf';
// nu gaan we de gegevens in de DB zetten
$sql = "INSERT into gebruiker_bestand (gebruiker_id, bestandsnaam)
VALUES(:medewerker,'".$echte_naam."')";
$stmt = $db ->prepare($sql);
$stmt -> bindParam(':medewerker', $_POST['medewerker'], PDO::PARAM_STR);
$result = $stmt ->execute();
$insert_id = $db->lastInsertId();
if(!$result){
$errors[] = '<p>Het invoegen in de database is mislukt</p>';
}
$sql = "UPDATE gebruiker_bestand
SET fake_naam = 'bestand".$insert_id."'
WHERE id = '".$insert_id."'";
$result = $db -> exec($sql);
if(!$result){
$errors[] = '<p>het bijwerken van de naam is mislukt</p>';
}
rename($dir.$naam ,$dir.'bestand'.$insert_id.'.pdf');
if(empty($errors)){
$content[] = '<p>Het bestand: '.$echte_naam.' is succesvol geupload.</p>';
}
} }
Alvast bedankt
Johan Wiegel (Admin)
29 May 09 / 09:06
de checks die ik in je code zie zijn allemaal standaard in FH aanwezig.
FH_NOT_EMPTY voor de medewerker, het uploaden wordt door een upload field geregeld.
eigenlijk zie ik niet wat je met de post array op zou moeten lossen
klaasjan
29 May 09 / 09:18
Ok, stel dat ik de checks door FH laat regelen dan nog moeten de SQLLETJES handmatig lijkt me....
En hoe krijg ik nu de waarden uit de $_POST array in mijn sqlletjes
Johan Wiegel (Admin)
29 May 09 / 09:43
heb je helemaal niet nodig, alles zit in het data array.
doe maar eens een print_r( $data ) in de dorun functie.
klaasjan
29 May 09 / 10:45
Hoi Johan,
Ik begin me nu dom te voelen:
- ik heb de twee selectboxen nu werkend met selectField
Het form ziet er nu zo uit:
<?php
$form -> selectField ( 'soort bestand' , 'soort_bestandje' , $soort_bestand );
$form -> selectField ( 'gebruikers' , 'gebruikers' , $gebruiker_email );
$form -> textField ( "bestandsnaam" , "bestandsnaam" , FH_STRING , 20 , 50 );
$form -> uploadField ( "bestand" , "bestand" , $cfg );
$form -> submitButton ( "Opslaan" );
$form -> onCorrect ( 'doRun' );
$form -> flush ();
function doRun ( $data )
{
print_r ( $data );
}
?>
Als ik echter op opslaan druk krijg ik
"Error class.FormHandler.php at 2276 Error, the onCorrect function "doRun" does not exists!"
Wat doe ik nu fout??
Groeten
Klaasjan
Johan Wiegel (Admin)
29 May 09 / 11:03
dit is niet je hele forumlier, maar hier zit zo te zien geen fout in
klaasjan
29 May 09 / 11:09
dit is mijn hele form
<?php
// voor selectfield soort_bestand
$sql = "SELECT id, naam FROM soort_bestand" ;
$stmt = $db -> prepare ( $sql );
$stmt -> execute ();
while( $row = $stmt -> fetch ( PDO :: FETCH_ASSOC )) {
$soort_bestand [] = $row [ 'naam' ];
}
// voor selectfield gebruiker
$sql = "SELECT DISTINCT(id), email FROM gebruikers" ;
$stmt = $db -> prepare ( $sql );
$stmt -> execute ();
while( $row = $stmt -> fetch ( PDO :: FETCH_ASSOC )) {
$gebruiker_email [] = $row [ 'email' ];
}
$form =& new FormHandler ();
//voor het uploadgedeelte
$cfg = array(
"path" => $dir ,
"type" => "pdf PDF" ,
"name" => "" , // <-- keep the original name
"required" => true ,
"exists" => "rename"
);
$form -> selectField ( 'soort bestand' , 'soort_bestandje' , $soort_bestand );
$form -> selectField ( 'gebruikers' , 'gebruikers' , $gebruiker_email );
$form -> textField ( "bestandsnaam" , "bestandsnaam" , FH_STRING , 20 , 50 );
$form -> uploadField ( "bestand" , "bestand" , $cfg );
$form -> submitButton ();
$form -> onCorrect ( 'doRun' );
$form -> flush ();
function doRun ( $data )
{
print_r ( $data );
}
?>
Johan Wiegel (Admin)
29 May 09 / 11:26
gezien je inspringen staat dit ergens binnen een if else constructie?
haal de dorun functie eens buiten die constructie
klaasjan
29 May 09 / 15:02
Opgelost,
de functie mocht niet hetzelfde script staan.
Bedankt en groeten
Klaasjan