Idzik Posted January 24, 2013 Share Posted January 24, 2013 I'm working with a client and setting up this form for them. I'm trying to have the user be able to add a new name and email record into the account table. Once they submit it should display the 10 newest records below the form. Appreciate any help. class account{ function account(){ $this->id = ' '; $this->name = ''; $this->email = ''; } function find_account($id){ $sql="select `id` from `account` where `id`='".$id."'"; $result = mysql_query($sql); while ($row = mysql_fetch_assoc($result)){ $row['id']; //int pk auto incerment $row['name']; //varchar(50) $row['email']; //varchar(50) $row['timestamp']; //varchar(15) } } } <html> <body> <div> <form action='#'> name: <input type='text' name='account_name'> email:<input type='text' id='account_email'> <input type="button" value="submit"> </form> </div> <div style="border:solid 1px #F60;"> Last 10 entry: </div> <div style="border:solid 1px #000;"> <?php echo "id: ".$account->id;?> <?php echo "name: ".$account->name;?> <?php echo "email: ".$account->email;?> </div> </body> </html> Quote Link to comment https://forums.phpfreaks.com/topic/273590-custom-php-code-im-stuck/ Share on other sites More sharing options...
Andy123 Posted January 24, 2013 Share Posted January 24, 2013 To insert, you could do like this: Add a new function to your class which will insert data into the database Either pass data to this function with parameters or use class fields (variables) and access these from within the function Write insert code within the function To get the latest 10 entries, you could do like this: Add a new function to your class which will fetch X entries (X could be a parameter) Write the SQL query to fetch the latest X entries; for instance using ORDER BY and LIMIT Either create a wrapper class for an entry and return an array of objects or return an array of key-value pairs, such as 'entry_id' => 123 Call this function where you want to show the entries Loop through the returned array (perhaps with foreach) and generate the HTML markup to show them - e.g. in a table Here is a bit of code to get you started: class Account { protected $id; protected $name; protected $email; public function __construct($id, $name, $email) { $this->id = $id; $this->name = $name; $this->email = $email; } public static function getLatestEntries($number_to_fetch) { $number_to_fetch = (int) $number_to_fetch; // Ensure it's a number $query = "SELECT * FROM Account ORDER BY date DESC LIMIT 0, " . $number_to_fetch; $result = mysql_query($query); // You should really use mysqli or PDO here! The mysql extension is deprecated $entries = array(); // Fill rows into $entries here return $entries; } public function insert() { // Prevent against SQL injection $id = mysql_real_escape_string($this->id); $name = mysql_real_escape_string($this->name); $email = mysql_real_escape_string($this->email); $query = "INSERT INTO Account VALUES ($id, $name, $email)"; $result = mysql_query($query); return (mysql_affected_rows($result) > 0); // True if successful and false otherwise } public function getId() { return $this->id; } public function setId($id) { $this->id = $id; } public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } public function getEmail() { return $this->email; } public function setEmail($email) { $this->email = $email; } } ?> <p>This is your HTML markup</p> <?php if ($_SERVER['REQUEST_METHOD'] == 'POST') { $account = new Account(-1, $_POST['account_name'], $_POST['account_email']); $result = $account->insert(); if ($result === true) { // Show latest entries $entries = Account::getLatestEntries(10); foreach ($entries as $entry) { // Show entries here } } } ?> Quote Link to comment https://forums.phpfreaks.com/topic/273590-custom-php-code-im-stuck/#findComment-1408014 Share on other sites More sharing options...
chriscloyd Posted January 24, 2013 Share Posted January 24, 2013 Hey, My name is Chris, and I would be more than glad to assist you! First lets create the class in a separate file and include it later. <?php //this is your class file save it and name it as class.account.php class account { var $ten = array(); var $clean_inputs = array(); var $errors = array(); function __construct() { global $_POST; if (isset($_POST['name']) || isset($_POST['email'])) { if ($_POST['name'] == "" || $_POST['email'] == "") { echo "Please fill out both the name and email!"; $this->account_form(); } else { $this->add_account($_POST); } } } function get_ten(){ $sql="select * from `account` WHERE ORDER BY id DESC LIMIT 0, 9"; $result = mysql_query($sql); $i = 1; while ($row = mysql_fetch_assoc($result)){ foreach ($row as $z => $x) { $this->ten[$i][$z] = $x; } $i++; } } function list_ten() { $this->get_ten(); echo "<div style=\"border:solid 1px #F60;\">"; echo "Last 10 entry:"; echo "</div>"; foreach ($this->ten as $z => $x) { echo "<div style=\"border:solid 1px #000;\">"; echo "id: {$x['id']}"; echo "name: {$x['name']}"; echo "email: {$x['email']}"; echo "</div>"; } } function add_account($inputs) { //first lets clean the inputs foreach ($inputs as $z => $x) { $this->clean_inputs[$z] = mysql_real_escape_string($x); } $date = date_create(); //get the date $timestamp = date_format($date, 'U = Y-m-d H:i:s'); //set the timestamp seeing how I do not know what you guys are doing for this $sql = "INSERT INTO account (`name`,`email`,`timestamp`) VALUES ('{$this->clean_inputs['name']}','{$this->clean_inputs['email']}','{$timestamp}')"; if (mysql_query($sql) or die(mysql_error())) { $this->account_form(); $this->list_ten(); } else { echo "Error creating account, try again!" $this->account_form(); } } function account_form() { echo "<div> <form action='#' method='POST'> name: <input type='text' name='account_name'> email:<input type='text' id='account_email'> <input type=\"button\" value=\submit\"> </form> </div>"; } } ?> Include the class file into the main index or .php file <?php session_start(); //include ur config script for ur database //include class file include("class.account.php"); include("class.account.php"); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title></title> <meta name="" content=""> </head> <body> <?php $Account = new account(); ?> </body> </html> WARNING I HAVE NOT TRIED THIS CODE BUT IT SHOULD WORK IF IT DOES NOT WORK NO WORRIES, IT WAS A QUICK AND EASY 5 MINUTE THING Quote Link to comment https://forums.phpfreaks.com/topic/273590-custom-php-code-im-stuck/#findComment-1408019 Share on other sites More sharing options...
Barand Posted January 24, 2013 Share Posted January 24, 2013 Perhaps you should have spent six minutes on it. A quick glance at the "get_ten()" function showed it only getting nine records. A closer look showed a syntax error in the query "WHERE ORDER BY" Try function get_ten(){ $sql="SELECT * FROM `account` ORDER BY timestamp DESC LIMIT 10"; $result = mysql_query($sql); while ($row = mysql_fetch_assoc($result)) { $this->ten[] = $row; } } Quote Link to comment https://forums.phpfreaks.com/topic/273590-custom-php-code-im-stuck/#findComment-1408030 Share on other sites More sharing options...
Christian F. Posted January 24, 2013 Share Posted January 24, 2013 Not to mention the outdated PHP4 OOP syntax, or the completely unnecessary use of the global keyword on the $_POST superglobal. Then there's the fact that while you're using a class, chris, that is sadly not object oriented programming. Look at Andy's example for how to do it. The only comment I have on his example, is that the actual fetching from the DB should have been in a class of its own. Relatively minor, and easy to refactor out. Quote Link to comment https://forums.phpfreaks.com/topic/273590-custom-php-code-im-stuck/#findComment-1408042 Share on other sites More sharing options...
KevinM1 Posted January 24, 2013 Share Posted January 24, 2013 Look at Andy's example for how to do it. The only comment I have on his example, is that the actual fetching from the DB should have been in a class of its own. Relatively minor, and easy to refactor out. That, and no one should use the mysql_* functions any longer. Use MySQLi or PDO. Quote Link to comment https://forums.phpfreaks.com/topic/273590-custom-php-code-im-stuck/#findComment-1408060 Share on other sites More sharing options...
Andy123 Posted January 25, 2013 Share Posted January 25, 2013 Look at Andy's example for how to do it. The only comment I have on his example, is that the actual fetching from the DB should have been in a class of its own. Relatively minor, and easy to refactor out. I was thinking of this, but the code that was posted in the initial post was quite far away from working code, which led me to believe that I was dealing with someone relatively new to PHP and/or programming. I figured that bringing design patterns, DAL, DAO, etc. into this would confuse more than it would do good, so I decided to keep things simple. But thanks for the heads up. That, and no one should use the mysql_* functions any longer. Use MySQLi or PDO. Definitely. I left a comment in the code about this to encourage Idzik to look up either of those. Quote Link to comment https://forums.phpfreaks.com/topic/273590-custom-php-code-im-stuck/#findComment-1408167 Share on other sites More sharing options...
chriscloyd Posted January 25, 2013 Share Posted January 25, 2013 No need to be rude, I was trying to help and I am sorry if I am not as proficient at coding as you "GURUS." Quote Link to comment https://forums.phpfreaks.com/topic/273590-custom-php-code-im-stuck/#findComment-1408214 Share on other sites More sharing options...
Christian F. Posted January 25, 2013 Share Posted January 25, 2013 Rude..? Who was rude? I think you might want to read this article, especially the chapter about "rudeness". Quote Link to comment https://forums.phpfreaks.com/topic/273590-custom-php-code-im-stuck/#findComment-1408223 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.