2013-10-06 6 views
0

У меня есть эта функция AJAX, которая должна передавать данные в php-код, который затем должен вводить его в данные в базу данных, которая происходит, но AJAX действительно не работает так, как должно.Функция AJAX ведет себя странно

   <?php   
    session_start(); 
    include_once("../engine/database.php"); 
    if (isset($_POST["name"],$_POST["password"])) {  
     $uname = htmlspecialchars(mysql_real_escape_string($_POST["name"])); 
     $passwd = htmlspecialchars(mysql_real_escape_string($_POST["password"])); 
     $query = "SELECT * FROM users WHERE username ='".$uname."' AND password='".$passwd."' LIMIT 1"; 
     $query= mysql_query($query); 
     if(mysql_num_rows($query) == 1) {   
     $_SESSION['admin'] = "Welcome to the Admin Panel {$_POST['name']} "; 
     $_SESSION['onOff'] = 'on'; 
     ?>   
    <!DOCTYPE html> 
     <html> 
     <head> 
      <meta charset="utf-8"> 
      <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
      <link rel="stylesheet" href="http://yui.yahooapis.com/pure/0.3.0/pure-min.css"> 
      <script type="text/javascript" src="//tinymce.cachefly.net/4.0/tinymce.min.js"></script> 
      <script> 
      tinymce.init({ 
       selector: "textarea#postCont", 
       plugins: [ 
        "advlist autolink lists link image charmap print preview anchor", 
        "searchreplace visualblocks code fullscreen", 
        "insertdatetime media table contextmenu paste" 
       ], 
       toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image" 
      }); 
     </script> 
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" type="text/javascript" charset="utf-8" async defer></script> 

      <title>Admin Panel</title>  
     </head> 
     <body>   
     <div class="pure-g-r" style="letter-spacing:0em; padding-left:2em; padding-right:2em;"> 
      <div class="pure-u-5-10">         
       <form class="pure-form pure-form-stacked" action='../engine/engine.php' method='post'> 
       <fieldset>   
        <legend><?php echo $_SESSION['admin']; ?></legend> 
        <div style="margin:0 auto;">      
         <input type='text' name='postTitle' class="pure-input-1" placeholder='Article Title'/>         
        </div> 
        <textarea class="pure-input-1" name='postDes' name='postDes' cols='102' placeholder='Article Summary'></textarea>     
        <textarea id="postCont" name='postCont' cols='60' rows='10'></textarea>     
        <br /> 
        <button type="submit" name="blogsubmit" class="pure-button pure-input-1 pure-button-primary">Submit</button>     
       </fieldset>     
       </form> 
      </div> 
      <div class="pure-u-1-10"> 

      </div> 
      <div class="pure-u-4-10">        
        <h2 style="margin:0 auto;">Posted articles</h2> 
        <dl> 
         <dt>How to create a Text editor</dt> 
         <dd><a href=""><small><a href="">Edit</a></small> | <small><a href=""> Delete</a></small></a> 
         <dt>How to create a Text editor</dt> 
         <dd><a href=""><small><a href="">Edit</a></small> | <small><a href="">Delete</a></small></a>         
        </dl>         
      </div>     
     </div> 
     <script type="text/javascript"> 
       function submit() { 
         var xhr = new XMLHttpRequest(); 
         try { 
         xhr = new new ActiveXObject("Msxml2.XMLHTTP"); 
         } 
         catch (e) { 
         try { 
          xhr = new ActiveXObject("Microsoft.XMLHTTP"); 
         } 
         catch (e) { 
          alert(" Please upgrade your broswer"); 
          return false; 
         } 
         } 

        xhr.onreadystatechange = function() { 
          if (xhr.readyState === 4) { 
           if (xhr.status === 200) { 
            alert(xhr.responseText);             
            } else { 
              alert("dang!!!"); 
              return false; 
             } 
          } else { 
           alert("dang!!!! 2 buahahaha"); 
           return false; 
          } 
         var title = document.getElementById('postTitle').value; 
         var postDes = document.getElementById('postDes').value;           
         var postCont = document.getElementById('postCont').value;           
         var data = "title=" + title + "&summary=" + postDes + "&content=" + postCont;            
         xhr.open("POST", "../engine/engine.php",true); 
         xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
         xhr.send(data);      
        }      

       } 

      </script> 
     </body> 
    </html>   

<?php } 
     else { 
      echo "username or password is incorrect"; 
      die(mysql_error()); 

     } 
    } 

?> 

Предполагается передать его этому коду

    <?php 
include_once('database.php'); 
if (isset($_POST['blogsubmit']) ) { 
    $title = mysql_real_escape_string($_POST['postTitle']); 
    $summary = mysql_real_escape_string($_POST['postDes']); 
    $content = mysql_real_escape_string($_POST['postCont']); 
    insertBlogPost($title,$summary,$content); 
} 

function insertBlogPost($title,$summary,$content) { 
    $query = "INSERT INTO `blogposts` SET 
      `title`  = '$title', 
      `summary` = '$summary',    
      `content` = '$content' ";          
    mysql_query($query) or die(mysql_error()); 
    echo "Yaaaay";  
} 
?> 

Проблема заключается в том, что я получаю страницу, которая печатает Yaaay часть вместо предупреждения. Я испробовал все, что знаю, чтобы решить проблему, поэтому я был бы очень благодарен за помощь. Я также пытался переключиться между истинным и ложным для POST, но это не помогло.

PS: Извините за использование mysql_ *, мне все еще не нравится использовать PDO. Спасибо заранее.

ответ

1

Из того, что я вижу, вы никогда не связываете свою функцию отправки с событием отправки формы. В настоящее время ваша функция никогда не вызывается, и форма делает регулярную запись на странице ../engine/engine.php, поэтому вы видите ее результаты на новой странице.

Вы должны добавить следующий атрибут в ваш тег формы:

onsubmit="return submit()" 

и для того, чтобы переопределить правильную форму поста так что ваша функция может сделать работу вместо этого вы должны вернуть ложные из вашей функции.

+0

спасибо, я попробую и посмотрю, что произойдет. – Bazinga777

3

Где вы на самом деле звоните это функция AJAX? В настоящее время, если вы стираете все хлам, у вас есть это:

<form action='../engine/engine.php' method='post'> 
    <button type="submit" name="blogsubmit">Submit</button> 
</form> 
<script type="text/javascript"> 
    function submit() { 
    } 
</script> 

Вы не используете функцию, только определив его. Форма является нормальной формой, представляющей обычный запрос POST, не связанный с AJAX. И после того, как он подает запрос POST, он показывает только выход дан в ответе:

echo "Yaaaay"; 

Один быстрый способ предотвратить форму от их представления будет не сделать кнопку больше не submit кнопка:

<button name="blogsubmit">Submit</button> 

Тогда вам просто нужно прикрепить обработчик кликов к нему, чтобы вызвать вашу функцию. Что-то вроде этого:

<script type="text/javascript"> 
    function submit() { 
     // the rest of your function 
    } 

    document.getElementsByName('blogsubmit')[0].onclick = submit; 
</script> 

Есть various other ways присоединить обработчик события клика, а также.

+0

Я еще не закончил весь код, и я слишком отсутствовал, чтобы не использовать обработчик события onsubmit. Спасибо за вашу информацию, я узнал от этого что-то новое. – Bazinga777

Смежные вопросы