Jump to content

Help a PHP newbie


rob893

Recommended Posts

Ok, I am currently at Uni, with one of my units needing me to build a content management system. I have been learning PHP for about 2 months, so go easy on me.

 

So I was developing happily, I was able to use the CMS to add a product, edit that product and delete it. I load it up today to carry on working on it, but find that adding a product no longer works. I investigate further and find that the HTML form on the "Add a product" section's processing page (createProduct.php) is not receiving the values from the form using the $_POST method, therefore the mysql query was containing empty values. I found this confusing as I had not changed any of the code. So i investigate further, creating a test php page, copying the $_POST method into here and echoing the variables. And.. it worked. Even more confused, I delved deeper and found that the culprit for the $_POST method not working was one of my includes. connection.php.

 

Here is the connection.php include:

<?php
//1. Create database connection
$connection = mysql_connect("localhost", "root"); //No password on the DB yet as it is only local.
if (!$connection) {
	die("Database connection failed: " . mysql_error());
}

//2. Select database to use
$db_select = mysql_select_db("cms",$connection);
if (!$db_select) {
	die("Database selection failed: " . mysql_error());
}
?>

 

And here is createProduct.php;

<?php require_once("../includes/connection.php");?>
<?php require_once("../includes/functions.php");?>
<?php

?>
<?php
//Populating the variables with values from the HTML form
$Product_Name = mysql_prep($_POST['Product_Name']);
$Price = mysql_prep($_POST['Price']);
$Product_Information = mysql_prep($_POST['Product_Information']);
$category_id = $_POST['category'];

echo $Product_Name . "<br />";
echo $Price . "<br />";
echo $Product_Information . "<br />";
echo $category_id . "<br />";
?>
<?php
//Creating and submitting the mysql query
echo $category_id;
$query = "INSERT INTO tblProducts(
			Product_Name, Price, Product_Information, category_id
			) VALUES (
				'{$Product_Name}', {$Price}, '{$Product_Information}', {$category_id}
			)";

echo $query;
if (mysql_query($query, $connection)) {
	header("Location: createProduct.php");
	exit;
}
//error handling
else {
	echo "<p>Product creation failed.</p>";
	echo "<p>" . mysql_error() . "</p>";
}
?>
<?php mysql_close($connection); ?>

 

So my question is.. why, when suddenly loading it up today after a few days absence would the database connection code be conflicting ONLY ON THIS PAGE. editing and deleting a product still work.

 

I am truly stumped as this seems completley illogical and is probably something really obvious. Any help would be greatly appreciated.

Link to comment
Share on other sites

there's too many jumps here:

load it = it's not working

|--> copy content from createProduct.php to test.php, without changing page code or connection.php code = test.php working

    |-->decide connection.php is the problem, even though it works fine on two other different pages = Illogical  :shrug:

 

how about filling in the blanks?

Link to comment
Share on other sites

Sorry I will explain it in more detail.

 

To test it, I copied the contents of createProduct.php into a new file test.php. I stripped it down to the the bare minimum with only its contents being:

$Product_Name = mysql_prep($_POST['Product_Name']);
$Price = mysql_prep($_POST['Price']);
$Product_Information = mysql_prep($_POST['Product_Information']);
$category_id = $_POST['category'];

echo $Product_Name . "<br />";
echo $Price . "<br />";
echo $Product_Information . "<br />";
echo $category_id . "<br />";

 

This was just to see if there was an error in the way I was posting the contents of the form into this PHP page. The variables echoed with the correct values. I then started adding in the parts that I had stripped out ealier to see if I could locate the cause; creating the query, running the query and then the includes. The variables were correct on all occasions until I added in the connection include.

 

I get this error:

Notice: Undefined index: Product_Name in createProduct.php on line 27

Notice: Undefined index: Price in createProduct.php on line 28

Notice: Undefined index: Product_Information in createProduct.php on line 29

Notice: Undefined index: category in createProduct.php on line 30

 

INSERT INTO tblProducts( Product_Name, Price, Product_Information, category_id ) VALUES ( '', , '', )

Product creation failed.

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' '', )' at line 4

 

This is what I was trying to explain earlier. Having the PHP code to create the DB connection causes my POST method to function incorrectly, so it runs a query with empty values thus throwing the error above.

 

The thing is, this only happens on adding a product, every other page with the connection include is fine, including adding a producing category which is exactly the same code except a different database table.

 

I hope this was easier to understand

Link to comment
Share on other sites

HTML Form for adding a product:

<form action="createProduct.php" method="POST">
			<p>Product name:
				<input type="text" name="Product_Name" value="" id="Product_Name" />
				<br />
			<p>Product category: 
			<?
				//Selecting tblCategory data and looping it into an HTML forms drop down list
				$query = "SELECT * FROM tblCategory";
				$result = mysql_query($query);
				echo "<select name='category'>\n";
				while ($data = mysql_fetch_assoc($result)) {
					$name = $data['categoryName'];
					$id = $data['id'];
					echo "<option value=$id>$name</option>\n";
				}
				echo "</select>\n"; 
			?>
			<p>Price: 
				<input type="text" name="Price" value="" id="Price" />
			</p>
			<p>Product Information:</p>
			<textarea cols="50" rows="4" name="Product_Information" id="Product_Information"></textarea>

			<br />
			<br />
			<input type="submit" value="Add Product"/>
			<input type=button onClick="parent.location='http://localhost/458691/CMS/product.php'" value='Cancel'>

 

Adding a product Category:

<?php require_once("../includes/connection.php");?>
<?php require_once("../includes/functions.php");?>
<?php
$Category_Name = mysql_prep($_POST['Category_Name']);

echo $Category_Name . "<br />";

$query = "INSERT INTO tblCategory(
			CategoryName
			) VALUES (
				'{$Category_Name}'
			)";

echo $query;
if (mysql_query($query, $connection)) {
	header("Location: category4.php");
	exit;
}
//error handling
else {
	echo "<p>Product creation failed.</p>";
	echo "<p>" . mysql_error() . "</p>";
} 
?>
<?php mysql_close($connection); ?>

 

And editing a product:

<?php error_reporting (E_ALL ^ E_NOTICE);  //Hide undefined variable warning ?>
<?php require_once("../includes/connection.php");?>
<?php require_once("../includes/functions.php");?>
<?php
//Start a session to allow easy transfer of numerous variables over a number of PHP pages
session_start();

$id = $_SESSION['id'];

//creating the variables with updated values from the HTML form
$Product_Name = mysql_prep($_POST['Product_Name']);
$Price = mysql_prep($_POST['Price']);
$Product_Information = mysql_prep($_POST['Product_Information']);

//Creating the update query to update values in the product table
$query = "UPDATE tblProducts SET
			Product_Name = '{$Product_Name}',
			Price = {$Price},
			Product_Information = '{$Product_Information}'
		WHERE id = {$id}";
echo $query;


if (mysql_query($query, $connection)) {
	header("Location: Product4.php");
	exit;
}
//error handling
else {
	echo "<p>Product update failed.</p>";
	echo "<p>" . mysql_error() . "</p>";
}

?>
<?php mysql_close($connection); ?>

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.