Jump to content
Sign in to follow this  
SoccerGuy3

Module Won't Save Data (using external DB)

Recommended Posts

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.

Share this post


Link to post
Share on other sites

@SoccerGuy3

$this->wire('input')->post->submit_save

Have you tried TracyDebbuger? 

Share this post


Link to post
Share on other sites
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?

Share this post


Link to post
Share on other sites
	/** 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();
		}
	}

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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/

  • Like 2

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...