2

Please help me, does anybody know where I am going wrong, this is starting to annoy me.

I am using moodle 2.2 and quick forms, it saves to the database on submit but then returns to the form with error.

mysqli::real_escape_string() expects parameter 1 to be string, array given in /$root/lib/dml/mysqli_native_moodle_database.php

I am also trying to upload a doc in the form to the course context to massively struggling.

<?php

require_once("../../config.php");

$courseid=2;      

if (!$course = $DB->get_record('course', array('id'=>$courseid))) {
    error('Site is misconfigured');
}

$context = get_context_instance(CONTEXT_COURSE, $course->id);

require_login($courseid);

/// Otherwise fill and print the form.
$thetitle = 'Edit Vacancy';

$PAGE->set_title($thetitle);
$PAGE->set_heading($thetitle);
$PAGE->set_pagelayout('base');
$PAGE->navbar->add($thetitle);
$PAGE->set_url('/systems/phones/index.php');

require_once('create_form.php');

//Instantiate simplehtml_form 
$mform = new simplehtml_form();

//Form processing and displaying is done here
if ($mform->is_cancelled()) {
//Handle form cancel operation, if cancel button is present on form
redirect('view.php');

} else if ($fromform = $mform->get_data()) {
//In this case you process validated data. $mform->get_data() returns data posted in form.
$toform = new stdClass();
$toform->title = $fromform->title;
$toform->refno = $fromform->refno;
$toform->closedate = $fromform->closedate;
$toform->hours = $fromform->hours;

$options = array('subdirs'=>1, 'maxbytes'=>$CFG->userquota, 'maxfiles'=>-1, 'accepted_types'=>'*', 'return_types'=>FILE_INTERNAL);

$toform = file_postupdate_standard_filemanager($toform, 'files', $options, $context, 'user', 'private', 0);

$DB->insert_record('systems_jobs', $toform);

} else {
// this branch is executed if the form is submitted but the data doesn't validate and the form should be redisplayed
// or on the first display of the form.

//Set default data (if any)

$mform->set_data();
//displays the form
}

echo $OUTPUT->header();
$mform->display();
echo $OUTPUT->footer();
?>

WITH MY FORM:

<?php

if (!defined('MOODLE_INTERNAL')) {
    die('Direct access to this script is forbidden.');    ///  It must be included from a Moodle page
}

require_once($CFG->libdir.'/formslib.php');


class simplehtml_form extends moodleform {
//Add elements to form
function definition() {
global $CFG;

$mform = $this->_form; // Don't forget the underscore! 

$mform->addElement('text', 'refno', 'Post Number:'); // Add elements to your form
$mform->setType('refno', PARAM_NOTAGS);//Set type of element

$mform->addElement('text', 'title', 'Post Title:'); // Add elements to your form
$mform->setType('title', PARAM_NOTAGS);//Set type of element

$mform->addElement('filepicker', 'reference', 'Specification:', null, array('maxbytes' => $CFG->maxbytes, 'accepted_types' => '*'));
if (empty($entry->id)) {
    $entry = new stdClass;
    $entry->id = null;
}

$mform->addElement('date_selector', 'closedate', 'Close Date:', array(
    'startyear' => 2012, 
    'stopyear'  => 2020
));

$mform->addElement('editor', 'hours', 'Info:');
$mform->setType('hours', PARAM_RAW);

$this->add_action_buttons();
}

//Custom validation should be added here
function validation($data, $files) {
    $errors = parent::validation($data, $files);

    $mform = $this->_form;

    $errors = array();

    if ($mform->elementExists('refno')) {
            $refno = trim($data['refno']);
            if ($refno == '') {
                $errors['refno'] = get_string('required');
            }
    }

    if ($mform->elementExists('title')) {
            $title = trim($data['title']);
            if ($title == '') {
                $errors['title'] = get_string('required');
            }
    }

        return $errors;
    }
}
?>
Codded
  • 1,256
  • 14
  • 42
  • 74
  • Your error has no line number or stack trace. Try installing xdebug, then post the more specific error message it'll give you. – Matt Gibson Aug 07 '12 at 16:21
  • As above, you should provide the exact error message. I notice that you do not have a redirect after your insert: The error must be due to the data associated with mform, so you could try redirecting to the same page if you still want to display this rather than go back to an index of the things that you are editing. – Joseph Cape Mar 07 '13 at 09:15

1 Answers1

3

I have just joined this site and was just going through posts regarding moodle and came across this post. I reckon you might have got the solution to this problem by now but, for anyone else:

When you display a moodle form on any page, this is what you should do:

if($form->is_cancelled()) {
    //Write the code to handle the event where user clicks the cancel 
    //button on the form
    //This is where (generally) you would use the redirect function
} else if($data = $form->get_data(true)) {
    //This is where you can process the $data you get from the form
} else {
    //This is where you should add the commands that display the page when 
    //displaying the form for first time (when page loads)
    echo $OUTPUT->header();
    echo $OUTPUT->heading();
    //Add other commands
    echo $OUTPUT->footer();
}

Cheers Sandeep

Sandeep Gill
  • 573
  • 4
  • 5