传递字段未定义错误的值
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:
Test 212345
Notice: Undefined index: id in C:\wamp\www\pageB.php on line 10
1 record added
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 id
and so it produces the undefined index
error.
You could do it like this:
<script>
var id = <?php echo (int)$_GET['id']; ?>;
$(document).ready(function(){
$('#my_form').submit(function(event) {
event.preventDefault();
$.post("pageB.php?id=" + id, {'elm1' : tinyMCE.get('elm1').getContent()}, function (response) {
alert(response)
});
});
});
</script>
As you can see, I have passed the id
from the PHP code into a javascript variable. Then that id
gets sent with the ajax request here "pageB.php?id=" + id
. Using that, you can now grab the id
on page B using
$id = (int)$_GET['id'];
Also have a look into SQL Injection.
You should use this as you are doing a POST data.
$test = $_POST['test'];
UPDATE: This part of your PageA looks funky
<form id="my_form" method="post" action="pageB.php?id=<?php echo (int)id; ?>">
As you are trying to echo an ID there which is not set in the code above it somewhere, atleast I can't find where $id is being set.
$id is set within the form and cannot be called upon in the form header as it doesn not exist yet when you submit the form / call it.
You should set the $id before you call it in the form action.
I also think you should call $id instead of id in the form action.
do this :
first of all remove onchange='doSomething(this)'>
give some id to select
<select id="xyz">
and echo ''.$drow['id'].'';
change
$('#my_form').submit(function(event) {
event.preventDefault();
id=$('#xyz').val();
//get selected value, use id below to pass to pageB.php along with elem1
$.post("pageB.php", {'id':id,'elm1' : tinyMCE.get('elm1').getContent()}, function (response) {
alert(response)
});
});
let me know if it works