在数据库

时间:2015-06-24 08:58:44

标签: php mysql ajax

这是我第一次尝试使用AJAX将数据发送到php,我认为我做错了,因为我无法在mysql中看到任何新数据,这是我尝试过的。

此脚本通过单击img:

调用ajax
$s .= "\n\t<td>";
$canEdit = getPermission('tasks', 'edit', $a['task_id']);
$canViewLog = getPermission('task_log', 'view', $a['task_id']);
if ($canEdit) {
    $s .= ("\n\t\t".'<a href="#">'
           . "\n\t\t\t".'<img src="./images/icons/tick.png" alt="' . $AppUI->_('Check') 
           . '" border="0" width="12" height="12" onclick="javascript:insertData()" />' . "\n\t\t</a>");
}
$s .= "\n\t</td>";
$currentTasken=$a['task_id'];
$currentUser=$AppUI->user_id;

这是我的ajax函数,它将数据发送到php文件:

?>
<script type="text/javascript">

    function insertData()
    {
    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp.open("POST","datafile.php",true);
xmlhttp.send("<?php echo $currentUser; ?>");
xmlhttp.send("<?php echo $currentTasken; ?>")
    }

</script>

这是从AJAX接收数据的PHP文件:

<?php
$currentUser = $_POST['$currentUser'];
$currentTasken = $_POST['$currentTasken'];
$con = mysql_connect("localhost", "root", "") or die(mysql_error());
if(!$con)
    die('Could not connectzzz: ' . mysql_error());
mysql_select_db("foxi" , $con) or die ("could not load the database" . mysql_error());

$check = mysql_query("SELECT * FROM dotp_task_log");
$numrows = mysql_num_rows($check);
if($numrows == 0)
{
    $pass = md5($pass);

        $ins = mysql_query("INSERT INTO dotp_task_log (`task_log_creator`,`task_log_Task`) VALUES ('$currentUser' , '$currentTasken')" ) ;

   if($ins)
        die("Succesfully Created Log!");

    else
        die("ERROR");

}
else
{
    die("Log already exists!");
}

?>

2 个答案:

答案 0 :(得分:1)

更改如下:

<?php
$currentUser = $_POST['currentUser'];
$currentTasken = $_POST['currentTasken'];
$con = mysql_connect("localhost", "root", "") or die(mysql_error());
if(!$con)
    die('Could not connectzzz: ' . mysql_error());
mysql_select_db("foxi" , $con) or die ("could not load the database" . mysql_error());

$check = mysql_query("SELECT * FROM dotp_task_log");
$numrows = mysql_num_rows($check);
if($numrows == 0)
{
    $pass = md5($pass);

        $ins = mysql_query("INSERT INTO dotp_task_log (`task_log_creator`,`task_log_Task`) VALUES ('$currentUser' , '$currentTasken')" ) ;

   if($ins)
        die("Succesfully Created Log!");

    else
        die("ERROR");

}
else
{
    die("Log already exists!");
}

?>

您的脚本也是:

    <script type="text/javascript">

    function insertData()
    {
    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp.open("POST","datafile.php",true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send("currentUser=<?php echo $currentUser; ?>&currentTasken=<?php echo $currentTasken; ?>");
    }
    </script>

答案 1 :(得分:1)

使用ajax需要不同的思考方式。我会给你一些概念(如果你还没有),这将有助于你不仅解决这个问题,还可以解决未来的问题并节省时间:

  • 编写服务器端和客户端逻辑后,必须单独测试。所以,首先测试服务器端(php部分):如何?制作一个简单的sily静态表单,仅用于将数据发布到服务器端逻辑,以测试它是否在数据库中正确保存数据并撤回已用数据。

  • 在测试服务器端之后,您确定如果您的应用程序不能正常工作,那么问题肯定在客户端。所以,我们需要测试它。你是否已经知道如何使用Browser的控制台?在Firefox中MacOS是[命令] + [选项] + [k]在Windows应该是[ctrl] + [shift] + [k]它将在浏览器底部打开,你应该标记[网络]以保持记录网络请求,如果您的客户端正在运行,您可以看到您通过ajax 请求的页面及其http状态代码(应为200)。

  • 如果客户端能够通过ajax调用服务器端并且您确定它正在执行,因为您在浏览器的控制台上看到了post请求但仍然没有在数据库上正确保存数据,那么您可能遇到问题数据正在发送,或者它不是由ajax发送的。您也可以在浏览器的日志中进行测试,点击日志中显示的页面右键并标记该选项,也许用英文写成:“存储请求/响应内容”(我的浏览器是葡萄牙语。 标记此选项后,再次发出请求并使用左键单击所请求的页面。您将看到通过ajax发送到服务器端的所有标头和数据。所以,检查一下是否没有错误

这就是全部。但是,考虑使用jQuery,它并不难理解,而且它的ajax工作方式更加简单。看看这个样本:

var request = $.ajax({
  url: "script.php",
  method: "POST",
  data:$('#form-id').serialize(), // gets all form fields serialized creating a string fieldName1=value1&fieldName2=value2...
  dataType: "html"
}).done(function( msg ) { // after it's done
  $( "#log" ).html( msg );
  alert(msg)
}).fail(function( jqXHR, textStatus ) {
  alert( "Request failed: " + textStatus );
});

顺便说一下,如果你必须在html的任何部分回应一些php值,包括javascript部分,就像你在:

xmlhttp.send("$currentUser");
xmlhttp.send("$currentTasken");

要获取变量值,您应将其回显为:

xmlhttp.send("<?=$currentUser?>");
xmlhttp.send("<?=$currentTasken?>");
祝你好运!