View Full Version : multiple variables not working

07-19-2007, 01:12 PM
Hi folks, I know this is a big ask but I have been trying to figure this one out for a few days now and it is starting to drive me mad. I'm sure this is something simple that I have done wrong but I can't for the life of me figure out what is wrong here. I'm just learning PHP so any pointers would be very greatfully appreciated.

Some background.

I decided I needed to learn PHP, I really enjoy it but keep getting stuck on things like this due to my lack of knowledge. So I set myself a challenge to write a PHP CMS system using PHP, mySQL, XHTML and CSS. All was going fine (all be it rather slowly) until I tried to write the page to edit articles in the CMS.

I have the 'ID', 'title', 'venue' and 'article' stored in the database fine. I can pull entries out and display them fine. I now want to edit them using a browser. So I thought I would use the same form I used to add mySQL entries and change ti so that it loads in the article into the form fields depending on the id. (This is chosen through a link saying 'edit).




//$id = $_POST['ID'];


print"<div id=wrapper>";

$result = mysql_query("SELECT * FROM cmsarticles");
while ($row = mysql_fetch_array($result,MYSQL_ASSOC)) {
"<div class=item><div id=gigtxt><h2>".$row{'title'}."</h2>

<a href=delete_article.php?id=".$row{'ID'}."&title=".$row{'title'}."><img src='img/delete.jpg' /></a>

<a href=edit.php?id=".$row{'ID'}."&title=".$row{'title'}."&venue=".$row{'venue'}."&article=".$row{'article'}."><img src='img/edit.jpg' /></a></div></div>";

I'm trying to pass multiple variables using a URL in the form of:


I'm only actually passing the variable;


The delete button works fine BTW Smiley

I need to add the article into the URL as well, but it isn't adding it. I wondered if there is a limit to how many variables can be passed in one URL but I have looked around and found lots of sites with very long and complicated variables. - So this can't be the problem.

I tried re-arranging the variables to see if it was just the last one being removed for some reason. It is not. It is the 'article' variable which never works.

I then tried adding a 'spare' variable in at the end of the url to see if this would force the 'article' variable to work, but this did not work either.

Here is the form:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>edot3 - simpleCMS</title>
<link href="db.css" rel="stylesheet" type="text/css" />





<div id="wrapper">
<form id="form1" name="add" method="post" action="admin/edit_article.php">
<div class="article">
<div class="title">
<h2>Edit an article</h2></div>

<label><p>Title (Date)</p>
<input type="text" name="title" value="
echo $title;

<label><p>Venue (Location)</p>
<input type="text" name="venue" value="
echo $venue;

<label><p>Article (Gig information)</p>
<textarea name="article" cols=30 rows=10><?php echo $article; ?></textarea>
<br />
<input type="submit" name="submit" value="Submit" />

Any help would be amazing. Any eagle-eyes out there can spot what I've done?



07-19-2007, 02:01 PM
Try your code with a one word "title", "venue" and "article", that will probably work, if not you've got more problems!
I think the problem lies in your edit link:

<a href=edit.php?id=".$row{'ID'}."&title=".$row{'title'}."&venue=".$row{'venue'}."&article=".$row{'article'}."><img src='img/edit.jpg' /></a></div></div>";
You aren't encoding any of the variables you are putting into the url. To see the actual link you've created on your page, right click and "view source" then look for your edit link href.

Take a look at the php function urlencode (http://uk.php.net/urlencode). This will probably help, however you should re-assess whether you actually need to pass all that data via the url. Can't you just pass the ID of the article and then have the edit page grab the data from the database? I think this is the normal way to do things.

Oh and for information about url limits check here (http://www.boutell.com/newfaq/misc/urllength.html) or search google for url length limit (http://www.google.co.uk/search?sourceid=navclient&ie=UTF-8&rlz=1T4GFRC_enGB219GB219&q=url+length+limit).

07-19-2007, 02:07 PM
Just spotted you haven't put your url in quotes, so any spaces will result in a truncated url!
try this:

print "
<a href=\"edit.php?id=".$row{'ID'}."&title=".$row{'title'}."&venue=".$row{'venue'}."&article=".$row{'article'}."\"><img src='img/edit.jpg' /></a></div></div>";

07-19-2007, 02:09 PM
Thanks sooo much. I viewed source on the edit link. I thought that was what was causing the problem myself and found that because there was a space in the 'article' the url was being cut at that point.

If I try a one word title it works fine.

Now I have to try and figure out how to allow multiple word titles but still pass it. Actually scratch that. I'm going to simply pass the ID and then select the data from the DB on the next page like you suggested. This must be a better method?

07-19-2007, 02:15 PM
The php function, urlencode, encodes all sorts of charcaters for transmission over a url, including spaces. You should use this function whenever you create a url that includes a php variable.

But in this case you should just pass the ID, it is much easier and more efficient.