emediastudios Posted October 28, 2007 Share Posted October 28, 2007 Hi everyone. I have made a code that adds properties to a website, it uploads images, and inserts all the data(property details and image paths) to my database. It works well except for one thing, i cant get the auto_increment to work. I had the auto_increment field as "hidden" in my add_property.php file and it wouldnt work. If i had the field not hidden and added a number it works, and if that number is the same as as a other property id it replaces it. Do i need that field in my file at all? and should i even have it in my insert statement? Shouldnt that insert automatically my id in an auto increment. I am unable also to set a default value in my id field. here is my table structure. # Table structure for table `employees` # DROP TABLE IF EXISTS `employees`; CREATE TABLE `employees` ( `id` int(4) NOT NULL auto_increment, `name` varchar(100) default NULL, `rank` int(10) default NULL, `suburb` varchar(100) default NULL, `price` varchar(100) default NULL, `content` text, `content2` text, `agentmobile` varchar(100) default NULL, `agentemail` varchar(100) default NULL, `photo1` varchar(100) default NULL, `photo2` varchar(100) default NULL, `photo3` varchar(100) default NULL, `photo4` varchar(100) default NULL, `photo5` varchar(100) default NULL, `photo6` varchar(100) default NULL, `photo7` varchar(100) default NULL, `photo8` varchar(100) default NULL, `photo9` varchar(100) default NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=80 DEFAULT CHARSET=latin1 AUTO_INCREMENT=80 ; # This is my add_property code. <input name="id" type="text" id="id" size="3" /> and this is my proccess file code <?php if (!isset($_SESSION)) { session_start(); } $MM_authorizedUsers = ""; $MM_donotCheckaccess = "true"; // *** Restrict Access To Page: Grant or deny access to this page function isAuthorized($strUsers, $strGroups, $UserName, $UserGroup) { // For security, start by assuming the visitor is NOT authorized. $isValid = False; // When a visitor has logged into this site, the Session variable MM_Username set equal to their username. // Therefore, we know that a user is NOT logged in if that Session variable is blank. if (!empty($UserName)) { // Besides being logged in, you may restrict access to only certain users based on an ID established when they login. // Parse the strings into arrays. $arrUsers = Explode(",", $strUsers); $arrGroups = Explode(",", $strGroups); if (in_array($UserName, $arrUsers)) { $isValid = true; } // Or, you may restrict access to only certain users based on their username. if (in_array($UserGroup, $arrGroups)) { $isValid = true; } if (($strUsers == "") && true) { $isValid = true; } } return $isValid; } $MM_restrictGoTo = "restricted.php"; if (!((isset($_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers, $_SESSION['MM_Username'], $_SESSION['MM_UserGroup'])))) { $MM_qsChar = "?"; $MM_referrer = $_SERVER['PHP_SELF']; if (strpos($MM_restrictGoTo, "?")) $MM_qsChar = "&"; if (isset($QUERY_STRING) && strlen($QUERY_STRING) > 0) $MM_referrer .= "?" . $QUERY_STRING; $MM_restrictGoTo = $MM_restrictGoTo. $MM_qsChar . "accesscheck=" . urlencode($MM_referrer); header("Location: ". $MM_restrictGoTo); exit; } ?> <?php //***FUNCTIONS //filter extensions function valid_ext($file_name) { $valid = array("jpeg","jpg","png","gif"); $extension = strtolower(substr($file_name,-3,3)); return (in_array($extension, $valid)); } //filter by size, function valid_size($size) { return ($size <= 1048576); } //This is the directory where images will be saved $path = '../images/'; //This gets all the other information from the form $id=$_POST['id']; $name=$_POST['name']; $rank=$_POST['rank']; $suburb=$_POST['suburb']; $price=$_POST['price']; $content=$_POST['content']; $content2=$_POST['content2']; $agentmobile=$_POST['agentmobile']; $agentemail=$_POST['agentemail']; $uploadFile0=($_FILES['uploadFile0']['name']); $uploadFile1=($_FILES['uploadFile1']['name']); $uploadFile2=($_FILES['uploadFile2']['name']); $uploadFile3=($_FILES['uploadFile3']['name']); $uploadFile4=($_FILES['uploadFile4']['name']); $uploadFile5=($_FILES['uploadFile5']['name']); $uploadFile6=($_FILES['uploadFile6']['name']); $uploadFile7=($_FILES['uploadFile7']['name']); $uploadFile8=($_FILES['uploadFile8']['name']); // Connects to your Database mysql_connect("localhost", "root", "5050888202") or die(mysql_error()) ; mysql_select_db("gcproperty") or die(mysql_error()) ; //Writes the information to the database mysql_query("INSERT INTO `employees` VALUES ('$id','$name', '$rank', '$suburb', '$price', '$content', '$content2','$agentmobile', '$agentemail','$uploadFile0','$uploadFile1', '$uploadFile2', '$uploadFile3', '$uploadFile4', '$uploadFile5', '$uploadFile6', '$uploadFile7', '$uploadFile8')"); // Uploads Images $uploadNeed = $_POST['uploadNeed']; // start for loop $copied = 0;//the number of files successfully uploaded for($x=0;$x<$uploadNeed;$x++) { $file_name = $_FILES['uploadFile'. $x]['name']; //test $Size = $_FILES['uploadFile'. $x]['size']; //Test Check $Valid = false; if(valid_ext($file_name)) { echo " {$file_name} valid ext"; $Valid = true; }else{ print "<meta http-equiv=\"refresh\" content=\"0;URL=invalid_extension.php\">"; exit(); } echo "</br>"; if(valid_size($Size)) { echo " {$file_name} valid size</br>"; }else{ $Valid = false; print "<meta http-equiv=\"refresh\" content=\"0;URL=invalid_size.php\">"; exit(); } if($Valid) { // strip file_name of slashes $file_name = stripslashes($file_name); $file_name = str_replace("'","",$file_name); if(file_exists($path . $file_name) ) { print "<meta http-equiv=\"refresh\" content=\"0;URL=file_exists.php\">"; exit(); }else { $copy = move_uploaded_file($_FILES['uploadFile'. $x]['tmp_name'], $path . $file_name); $copied++;//increment our counter } } } if($copied > 0) { //do your insert stuff if($copied != $uploadNeed) { $not_uploaded = $uploadNeed - $copied; print "<meta http-equiv=\"refresh\" content=\"0;URL=upload_error.php\">"; exit(); } } // check if successfully copied if($copied == $uploadNeed) { print "<meta http-equiv=\"refresh\" content=\"0;URL=property_added_successfully.php\">"; }else{ echo "<br>$file_name The File(s) could not be uploaded!<br>The file must be under 1 meg and be of a valid extension type, jpeg, jpg, png or gif!<br /> <br /> Please go <a href=\"property_add.php\">back</a> and try again"; } // end of loop ?> Quote Link to comment https://forums.phpfreaks.com/topic/75052-solved-auto_increment/ Share on other sites More sharing options...
Barand Posted October 28, 2007 Share Posted October 28, 2007 You can omit the auto_inc column from the insert or you can specify NULL as its value. E.G. INSERT INTO table (username, password) VALUES ('abc', 'def') or INSERT INTO table (id, username, password) VALUES (null, 'abc', 'def') Quote Link to comment https://forums.phpfreaks.com/topic/75052-solved-auto_increment/#findComment-379538 Share on other sites More sharing options...
emediastudios Posted October 28, 2007 Author Share Posted October 28, 2007 So do i still need a hidden (id) field? and do i need the id in my proccess file? <?php //This gets all the other information from the form $id=$_POST['id']; // do i need this?///////////////////////////////////////////////////////////// $name=$_POST['name']; $rank=$_POST['rank']; $suburb=$_POST['suburb']; $price=$_POST['price']; $content=$_POST['content']; $content2=$_POST['content2']; $agentmobile=$_POST['agentmobile']; $agentemail=$_POST['agentemail']; $uploadFile0=($_FILES['uploadFile0']['name']); $uploadFile1=($_FILES['uploadFile1']['name']); $uploadFile2=($_FILES['uploadFile2']['name']); $uploadFile3=($_FILES['uploadFile3']['name']); $uploadFile4=($_FILES['uploadFile4']['name']); $uploadFile5=($_FILES['uploadFile5']['name']); $uploadFile6=($_FILES['uploadFile6']['name']); $uploadFile7=($_FILES['uploadFile7']['name']); $uploadFile8=($_FILES['uploadFile8']['name']); ?> Do i just do the code for the auto increment in this part of my code? //Writes the information to the database mysql_query("INSERT INTO `employees` VALUES ('$id','$name', '$rank', '$suburb', '$price', '$content', '$content2','$agentmobile', '$agentemail','$uploadFile0','$uploadFile1', '$uploadFile2', '$uploadFile3', '$uploadFile4', '$uploadFile5', '$uploadFile6', '$uploadFile7', '$uploadFile8')"); // Sorry im stil learning, this is my first php/mysql project, thanks for your help Is my id field setup correctly? Should it be a "primary key" It has a key beside it in dreamweaver and says that it is required? Quote Link to comment https://forums.phpfreaks.com/topic/75052-solved-auto_increment/#findComment-379551 Share on other sites More sharing options...
Barand Posted October 28, 2007 Share Posted October 28, 2007 $id=$_POST['id']; // do i need this? If you are inserting a new employee then you don't know the id, so you don't need it. If you are updating an existing employee then you need to identify which record to update, so you need it (and it is usual in this case to store it in a hidden field) Quote Link to comment https://forums.phpfreaks.com/topic/75052-solved-auto_increment/#findComment-379558 Share on other sites More sharing options...
emediastudios Posted October 28, 2007 Author Share Posted October 28, 2007 ok, i get a drift of what u are saying, i deleted the input field and the get from form $id But in the insert statement it is formatted as <?php //Writes the information to the database mysql_query("INSERT INTO `employees` VALUES ('$id','$name', '$rank', '$suburb', '$price', '$content', '$content2','$agentmobile', '$agentemail','$uploadFile0','$uploadFile1', '$uploadFile2', '$uploadFile3', '$uploadFile4', '$uploadFile5', '$uploadFile6', '$uploadFile7', '$uploadFile8')"); // ?> Should it be a different insert statement as $id now no longer exists in my files? Should it read mysql_query("INSERT INTO `employees` VALUES ('id','$name', '$rank', '$suburb', '$price', '$content', '$content2','$agentmobile', '$agentemail','$uploadFile0','$uploadFile1', '$uploadFile2', '$uploadFile3', '$uploadFile4', '$uploadFile5', '$uploadFile6', '$uploadFile7', '$uploadFile8')"); // Quote Link to comment https://forums.phpfreaks.com/topic/75052-solved-auto_increment/#findComment-379566 Share on other sites More sharing options...
emediastudios Posted October 28, 2007 Author Share Posted October 28, 2007 I changed it all so that there is no reference to (id) anywhere in my code. And changed my insert statement to mysql_query("INSERT INTO `employees` VALUES ('id','$name', '$rank', '$suburb', '$price', '$content', '$content2','$agentmobile', '$agentemail','$uploadFile0','$uploadFile1', '$uploadFile2', '$uploadFile3', '$uploadFile4', '$uploadFile5', '$uploadFile6', '$uploadFile7', '$uploadFile8')"); And it does nothing. It says property added successfully but doesnt add the record ??? i removed the $ from the start of id. What am i doing wrong? Is my id field correctly structured, should it have a defult value? and should it be asigned as a primary key? Thanks in advanced Quote Link to comment https://forums.phpfreaks.com/topic/75052-solved-auto_increment/#findComment-379605 Share on other sites More sharing options...
toplay Posted October 28, 2007 Share Posted October 28, 2007 Barand has already given you an answer in his first post here. In your last post, you're still giving a value for the id column of 'id'. You still need: CREATE TABLE `employees` ( `id` int(4) NOT NULL auto_increment, `name` varchar(100) default NULL, . . . PRIMARY KEY (`id`) )... Then the start of your insert should be like this: mysql_query("INSERT INTO `employees` VALUES (NULL, '$name', . . . I always recommend you do it the way Barand shows, by specifying the exact column names before specifying their values. That way it's clear, no assumptions are being made and when you need to insert new columns to your table you can without having to change your code first. So, do it this way: You can omit the auto_inc column from the insert or you can specify NULL as its value. E.G. INSERT INTO table (username, password) VALUES ('abc', 'def') or INSERT INTO table (id, username, password) VALUES (null, 'abc', 'def') Quote Link to comment https://forums.phpfreaks.com/topic/75052-solved-auto_increment/#findComment-379625 Share on other sites More sharing options...
emediastudios Posted October 28, 2007 Author Share Posted October 28, 2007 Thanks i needed the mysql_query("INSERT INTO `employees` VALUES (NULL, '$name', . . . The Null did the trick, thanks so much Quote Link to comment https://forums.phpfreaks.com/topic/75052-solved-auto_increment/#findComment-379640 Share on other sites More sharing options...
toplay Posted October 28, 2007 Share Posted October 28, 2007 You're welcome, but don't thank me, thank Barand, he gave you the example of using NULL right from the beginning. I simply iterated the same thing. Here's Barand's example from his first post again: INSERT INTO table (id, username, password) VALUES (null, 'abc', 'def') Please read replies carefully as it may save you a lot of time and frustration. Happy coding. Quote Link to comment https://forums.phpfreaks.com/topic/75052-solved-auto_increment/#findComment-379644 Share on other sites More sharing options...
emediastudios Posted October 28, 2007 Author Share Posted October 28, 2007 Yes that was a error on my behalf, i will heed your words Quote Link to comment https://forums.phpfreaks.com/topic/75052-solved-auto_increment/#findComment-379669 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.