Reputation:
I am trying to send a value from my test.php to my backgroundScript.php through the $_POST method and when print out the value that is being sent i get the correct value but when i go to my backgroundScript file to see if the value was sent - nothing gets printed out, it equals null --------------------------------test.php file - main code
try {
# MySQL with PDO_MYSQL
$DBH = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
//$DBH->prepare('SELECT first FROM contacts');
}
catch(PDOException $e) {
echo "I'm sorry, I'm afraid I can't do that.";
file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
}
//get query
$FNresult=$DBH->query('SELECT first FROM contacts');
//set fetch mode
$FNresult->setFetchMode(PDO::FETCH_ASSOC);
$dropdown = "<select name='contacts' id='contacts' >";
while($row =$FNresult->fetch()) {
$dropdown .= "\r\n<option value='{$row['first']}'>{$row['first']}</option>";
// echo getLN();
}
$dropdown .= "\r\n</select>";
echo $dropdown;
//}
/*
// Get last name
function getLN(){
$query = "SELECT last FROM contacts";
$LNresult=mysql_query($query);
$last;
while($row = mysql_fetch_assoc($LNresult)) {
$last = "{$row['last']}";
}
echo $last;
}//end getLN
*/
$DBH = null;
?>
<script type="text/javascript"
src="http://code.jquery.com/jquery-latest.min.js"></script>
<!-- javascript on client-side -->
<script type="text/javascript">
var dropdown = $('#contacts');
document.write(dropdown.val());
dropdown.bind('change', function(){
$.post('backgroundScript.php',
{
first: dropdown.val()
},
function(response) {
$('#first').val(response.first);
$('#last').val(response.last);
$('#phone').val(response.phone);
// Repeat for all of your form fields
},
'json'
);
});
</script>
<form action="insert.php" method="post">
First Name: <input type="text" id="first" ><br>
Last Name: <input type="text" id="last"><br>
Phone: <input type="text" id="phone"><br>
Mobile: <input type="text" id="mobile"><br>
Fax: <input type="text" id="fax"><br>
E-mail: <input type="text" id="email"><br>
Web: <input type="text" id="web"><br>
<input type="Submit">
</form>
backgroundScript.php ------------------------------------------- where value is sent
try {
# MySQL with PDO_MYSQL
$DBH = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
//$DBH->prepare('SELECT first FROM contacts');
}
catch(PDOException $e) {
echo "I'm sorry, I'm afraid I can't do that.";
file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
}
$first= $_POST['first'];
print_r("print value: $first");
//$first = "david";
$sth = $DBH->prepare('SELECT *
FROM contacts
WHERE first = :first');
$sth->bindParam(':first', $first, PDO::PARAM_STR);
$sth->execute();
$row = $sth->fetch();
$returnArray = array(
'first' => $row["first"],
'last' => $row["last"],
'phone' => $row["phone"],
);
//print_r("After pureeing fruit, the colour is: $returnArray");
/*echo "<pre>";
print_r($returnArray);
echo "</pre>";
exit;*/
// background script
// retrieve data based on $_POST variable, set to $returnArray
/*while($row = $sth->fetch(PDO::FETCH_ASSOC)){
// do something with row
}
$returnArray = array(
'first' => $row["first"],
);
echo "<pre>";
print_r($returnArray);
echo "</pre>";
exit;
*/
/****************************
* the structure of returnArray should look something like
array(
'first' => firstName,
'last' => lastName,
)*/
// echo json_encode(array('first' => "hello", 'last' => "Other value"));
//echo json_encode($returnArray);
$DBH = null;
############################ UPDATE TO TEST.PHP
try {
# MySQL with PDO_MYSQL
$DBH = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
//$DBH->prepare('SELECT first FROM contacts');
}
catch(PDOException $e) {
echo "I'm sorry, I'm afraid I can't do that.";
file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
}
//get query
$FNresult=$DBH->query('SELECT first FROM contacts');
//set fetch mode
$FNresult->setFetchMode(PDO::FETCH_ASSOC);
//}
/*
// Get last name
function getLN(){
$query = "SELECT last FROM contacts";
$LNresult=mysql_query($query);
$last;
while($row = mysql_fetch_assoc($LNresult)) {
$last = "{$row['last']}";
}
echo $last;
}//end getLN
*/
$DBH = null;
?>
<script type="text/javascript"
src="http://code.jquery.com/jquery-latest.min.js"></script>
<!-- javascript on client-side -->
<script type="text/javascript">
var dropdown = $('#contacts');
document.write(dropdown.val());
dropdown.bind('change', function(){
$.post('backgroundScript.php',
{
first: dropdown.val()
},
function(response) {
$('#first').val(response.first);
$('#last').val(response.last);
$('#phone').val(response.phone);
// Repeat for all of your form fields
},
'json'
);
});
</script>
<form action="insert.php" method="post">
<?php
$dropdown = "<select name='contacts' id='contacts' >";
while($row =$FNresult->fetch()) {
$dropdown .= "\r\n<option value='{$row['first']}'>{$row['first']}</option>";
// echo getLN();
}
$dropdown .= "\r\n</select>";
echo $dropdown;
?>
First Name: <input type="text" name="first" id="first" ><br>
Last Name: <input type="text" id="last"><br>
Phone: <input type="text" id="phone"><br>
Mobile: <input type="text" id="mobile"><br>
Fax: <input type="text" id="fax"><br>
E-mail: <input type="text" id="email"><br>
Web: <input type="text" id="web"><br>
<input type="Submit">
</form>
Now i get a undefined in javascript when i try to print out value of dropdown
######################################## UPDATE<form action="backgroundScript.php" method="post">
<script type="text/javascript"
src="http://code.jquery.com/jquery-latest.min.js"></script>
<!-- javascript on client-side -->
<script type="text/javascript">
var dropdown = $('#contacts');
document.write(dropdown.val());
dropdown.bind('change', function(){
$.post('backgroundScript.php',
{
first: dropdown.val()
},
function(response) {
$('#first').val(response.first);
$('#last').val(response.last);
$('#phone').val(response.phone);
// Repeat for all of your form fields
},
'json'
);
});
</script>
<?php
$dropdown = "<select name='contacts' id='contacts' >";
while($row =$FNresult->fetch()) {
$dropdown .= "\r\n<option value='{$row['first']}'>{$row['first']}</option>";
}
$dropdown .= "\r\n</select>";
echo $dropdown;
?>
First Name: <input type="text" name="first" id="first" ><br>
Last Name: <input type="text" name="last" id="last"><br>
Phone: <input type="text" name="phone" id="phone"><br>
Mobile: <input type="text" id="mobile"><br>
Fax: <input type="text" id="fax"><br>
E-mail: <input type="text" id="email"><br>
Web: <input type="text" id="web"><br>
<input type="Submit">
</form>
Upvotes: 0
Views: 258
Reputation: 33542
POST uses name
instead of id
to identify parameters. Use name
on your fields - or use both.
<input type="text" name="first" id="first" >
Javascript can make do of IDs nicely with the whole getElementByID
but POST and GET data needs the name
to be used.
Edit: You also need to make sure that the <select....>
statement falls inside the <form>
and </form>
tags, otherwise it isn't sent as part of that form.
Stick this line:
<form action="backgroundScript.php" method="post">
above these lines:
<script type="text/javascript"
src="http://code.jquery.com/jquery-latest.min.js"></script>
<!-- javascript on client-side -->
<script type="text/javascript">
Edit 2: Also, as Herpa points out, your <form action=''>
is set to insert.php
and not backgroundScript.php
. You need to change that as well.
Upvotes: 3
Reputation: 364
Change this in the test.php file:
<form action="backgroundScript.php.php" method="post">
First Name: <input type="text" id="first" ><br>
Last Name: <input type="text" id="last"><br>
Phone: <input type="text" id="phone"><br>
Mobile: <input type="text" id="mobile"><br>
Fax: <input type="text" id="fax"><br>
E-mail: <input type="text" id="email"><br>
Web: <input type="text" id="web"><br>
<?php echo $dropdown; ?>
<input type="Submit">
</form>
The action attribute of the form tag shows where to send the POST data. In your script you were sending it to insert.php. You should also user the name attribute to get the name of the input field through the POST variable. Edit: You were echoing the select outside the form.
Upvotes: 1