传递字段未定义错误的值

问题描述:

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 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