I am getting Undefined error and I don’t understand why…
“Notice: Undefined index: test in …”
Here is pageA Full source code:
<?php
if(isset($_POST['save'])) {
print "<pre>";
print_r($_POST);
print "</pre>";
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$('#my_form').submit(function(event) {
event.preventDefault();
$.post("pageB.php", {'elm1' : tinyMCE.get('elm1').getContent()}, function (response) {
alert(response)
});
});
});
</script>
<!-- TinyMCE -->
<script type="text/javascript" src="jscripts/tiny_mce/tiny_mce.js"></script>
<script type="text/javascript">
tinyMCE.init({
// General options
mode : "textareas",
theme : "advanced",
plugins : "safari,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,wordcount",
// Theme options
theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak",
theme_advanced_toolbar_location : "top",
theme_advanced_toolbar_align : "left",
theme_advanced_statusbar_location : "bottom",
theme_advanced_resizing : true,
// Example content CSS (should be your site CSS)
content_css : "css/content.css",
// Drop lists for link/image/media/template dialogs
template_external_list_url : "lists/template_list.js",
external_link_list_url : "lists/link_list.js",
external_image_list_url : "lists/image_list.js",
media_external_list_url : "lists/media_list.js",
// Replace values for the template plugin
template_replace_values : {
username : "Some User",
staffid : "991234"
}
});
</script>
<!-- /TinyMCE -->
<script>
function doSomething(elem) {
var currentval = elem.options[elem.selectedIndex].value;
// you could navigate away at that point ?
window.location = currentval;
}
</script>
</head>
<body>
<?php
$con = mysql_connect('localhost', 'root', 'dev');
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("myDB");
$request = mysql_query("select id FROM pages");
echo "<select onchange='doSomething(this)'>";
while ($drow = mysql_fetch_assoc($request))
{
echo '<option value="view.php?id='.$drow['id'].'">'.$drow['id'].'</option>';
}
echo "</select>";
?>
<form id="my_form" method="post" action="pageB.php?id=<?php echo (int)id; ?>">
<div>
<h3>View Page</h3>
<!-- Gets replaced with TinyMCE, remember HTML in a textarea should be encoded -->
<div>
<textarea id="elm1" name="elm1" rows="15" cols="80" style="width: 80%">
<?php
$con = mysql_connect('localhost', 'root', 'dev');
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("myDB");
$id = (int)$_GET['id'];
$query = "SELECT * FROM pages where id=$id";
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
$contents = $row['content'];
echo $contents;
?>
</textarea>
</div>
<br />
<input id="submit_page_changes" type="submit" name="save" value="Submit" />
<input type="reset" name="reset" value="Reset" />
</div>
</form>
</body>
</html>
THIS IS THE FULL CODE OF PAGEB
<?php
$con = mysql_connect("localhost","root","dev");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("myDB");
$id = (int)$_GET['id']; //ERROR POINTS TO HERE
$sql="UPDATE pages SET content=('$_POST[elm1]') WHERE id='.$id.'";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "1 record added";
$query = "SELECT * FROM pages where id=1";
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
$contents = $row['content'];
echo $contents;
mysql_close($con)
?>
ERROR IS:
Notice: Undefined index: id in C:\wamp\www\pageB.php on line 10
1 record added
Test 212345
Edit:
Now that I’ve seen the code I can see the problem. On page A you are doing an ajax request and cancelling the original form submission. In the ajax post, you don’t supply the
idand so it produces theundefined indexerror.You could do it like this:
As you can see, I have passed the
idfrom the PHP code into a javascript variable. Then thatidgets sent with the ajax request here"pageB.php?id=" + id. Using that, you can now grab theidon page B usingAlso have a look into SQL Injection.