SoccerGuy3 Posted May 18, 2019 Share Posted May 18, 2019 I am creating (or at least trying) a module to collect some data from a form in the admin that saves that data into a table/database that is not the PW database. Data has to be inserted into a table that is shared among several sites. I have successfully added a menu item, created and displayed the form in the admin, but when I click save, nothing happens, it just returns to the blank form without saving the data. I am new to this and probably missing something obvious, can you help?! <?php class AddSpecialPropertyListing extends Process { public function init() { parent::init(); // always remember to call the parent init } /** Executed when root url for module is accessed */ public function ___execute() { $form = $this->buildForm(); if($this->input->post->submit) { $result = $this->processForm($form); return $result; } else { return $form->render(); } } /** Build the "Listing Input" form */ protected function buildForm() { $form = $this->modules->get("InputfieldForm"); $form->method = 'post'; //Add Property Street Address $f = $this->modules->get("InputfieldText"); $f->label = 'Property Address'; $f->attr('name','prop_add'); $f->columnWidth = 40; $f->requiredLabel = '*'; $f->required = true; $f->requiredAttr = true; $f->placeholder = 'Example: 123 Main Street'; $form->add($f); //Add Lot Size $f = $this->modules->get("InputfieldText"); $f->description = "Input numbers only (ie 1234, not 134 acres). Enter as number of acres."; $f->label = 'Lot Size'; $f->attr('name','prop_acres'); $f->columnWidth = 25; $f->type = number; $f->placeholder = 'Example: 1234'; $f->required = false; $form->add($f); $f = $this->modules->get('InputfieldSubmit'); $f->attr('name', 'submit_save'); $f->attr('value', $this->_('Save')); $f->addClass('head_button_clone'); $f->icon = 'save'; $form->add($f); return $form; } /** Process the form **/ protected function processForm(InputfieldForm $form) { // Connection details $dbhost = 'localhost'; $dbuser = 'xxx'; $dbpass = 'xxx'; $db = 'prop_data'; $conn = mysqli_connect($dbhost,$dbuser,$dbpass,$db); // Check connection if($conn === false){ die("ERROR: Could not connect. " . mysqli_connect_error()); } else { die('success'); } // Attempt insert query execution $sql = 'INSERT INTO listings_res (num_acres, st_address) VALUES ('; $sql .= '"'.mysqli_real_escape_string($conn, $_POST['prop_acres']).'",'; $sql .= '"'.mysqli_real_escape_string($conn, $_POST['prop_add']).'"'; $sql .= ');'; echo $sql; exit(); if(mysqli_query($conn, $sql)){ $success = "Records added successfully."; } else{ $success = "ERROR: Could not able to execute $sql. " . mysqli_error($link); } // Close connection mysqli_close($conn); return $success; } } This is my module.php file. I am running in PW 3.0.123. Link to comment Share on other sites More sharing options...
Zeka Posted May 18, 2019 Share Posted May 18, 2019 @SoccerGuy3 $this->wire('input')->post->submit_save Have you tried TracyDebbuger? Link to comment Share on other sites More sharing options...
SoccerGuy3 Posted May 18, 2019 Author Share Posted May 18, 2019 5 minutes ago, Zeka said: @SoccerGuy3 $this->wire('input')->post->submit_save Have you tried TracyDebbuger? I haven't. I will look into it. Sorry, newbie here, but where would that line you referenced go? Link to comment Share on other sites More sharing options...
Zeka Posted May 18, 2019 Share Posted May 18, 2019 /** Executed when root url for module is accessed */ public function ___execute() { $form = $this->buildForm(); if($this->input->post->submit) { <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< $result = $this->processForm($form); return $result; } else { return $form->render(); } } Link to comment Share on other sites More sharing options...
SoccerGuy3 Posted May 18, 2019 Author Share Posted May 18, 2019 Beautiful!! That was it exactly. Still have some other logic/syntax problems to work out, but they are of the php/mysql variety and I can (hopefully) handle that part! ? Now the big question, can you tell me or point in the direction of WHY that code change you suggested was the solution? What I had before is working in another module I did last year (far simpler and writing to a table within the PW database). Link to comment Share on other sites More sharing options...
Zeka Posted May 18, 2019 Share Posted May 18, 2019 2 hours ago, SoccerGuy3 said: Beautiful!! That was it exactly. Still have some other logic/syntax problems to work out, but they are of the php/mysql variety and I can (hopefully) handle that part! ? Now the big question, can you tell me or point in the direction of WHY that code change you suggested was the solution? What I had before is working in another module I did last year (far simpler and writing to a table within the PW database). @SoccerGuy3 Glad that it helped. The name of your button is not 'submit', but 'submit_name', but in your initial code you check '$this->input->post->submit'. $f->attr('name', 'submit_save'); Also if you want to make your code more PWish you can rewrite it with https://processwire.com/api/ref/wire-database-p-d-o/ 2 Link to comment Share on other sites More sharing options...
SoccerGuy3 Posted May 18, 2019 Author Share Posted May 18, 2019 Doh! < slaps forehead > of course!! I will also look into that PW database interaction stuff. I should be doing it that way, but for some reason have resisted learning the wire framework. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now