2012-01-26 289 views
0

我有一個html表單,用戶輸入值/選項。選擇後,這些值將被髮送到服務器中的php腳本。該腳本將根據用戶選擇的值從mysql中檢索一些數據。然後將這些來自mysql的值和數據整理在一起並用於將發送到移動設備的POST請求。我會用curl來做請求。PHP - 腳本沒有執行

但是,我無法做任何POST請求。我沒有看到任何結果或變化。我嘗試在我的PHP腳本中做echo,但它不是在HTML表格上打印出來,即使我使用了GET

我的代碼出錯了嗎?

的.html

<script type="text/javascript"> 

    function doSubmit() { 

     var env = document.frm.Env.value; 
     var appname = document.frm.appname.value; 
     var target = document.frm.target.value; 
     var messages = document.frm.messages.value; 

     var strURL = "sendMessage.php?Env=" +env+ "&appname=" +appname+ "&target=" +target+ "&Message=" +messages; 

     xmlhttp.open("GET",strURL,true); 
     xmlhttp.send(null); 

    } 
</script> 

</head> 

<body> 

    <form action=""> 
     Environment: <div id="Env"> 
      <select name="customers" onchange="showApplications(this.value)"> 
       <option value="Environment">Select an environment</option> 
       <option value="S">Sandbox</option> 
       <option value="P">Production</option> 
      </select> 
     </div> 

     </br> 

     Application Name: <div id="appname"> 
      <select name="appname" onchange="showTargets(this.value)"> 
       <option value="">Select application</option> 
      </select> 
     </div> 

     </br> 

     Target Device : <div id="target"> 
      <select name="target"> 
       <option>Select Device OS</option> 
      </select> 
     </div> 
     </br> 
     Message: <div id="messages"><input type="text" name="Message" maxlength="200" size="50"></input></div> 

     </br> 

     <input type = "button" value="Send" onclick="doSubmit();"> 
    </form> 

    </br> 

</body> 
</html> 

.PHP

<?php 
$env  = mysql_real_escape_string($_POST["env"]); 
$appname = mysql_real_escape_string($_POST["appname"]); 
$target = mysql_real_escape_string($_POST["target"]); 
$messages = mysql_real_escape_string($_POST["messages"]); 


$conn = mysql_connect("127.0.0.1:3306", "root", ""); 
mysql_select_db("PushApplication", $conn); 

if ($target == "All") { 
    echo "Hi"; 
} elseif ($target == "Apple") { 
    echo "Apple"; 
    $query = "select deviceID from Device where DeviceType='$target'"; 
    $result = mysql_query($query); 

    $num = mysql_numrows($result); 

    $i = 0; 
    while ($i < $num) { 
     $myResult = mysql_result($result, $i); 
     $url  = "http://10.28.68.28:8899/?Env='$env'&AppName='$target'&Token='$myResult'&Message=%7B%22aps%22%3A%7B%22alert%22%3A%22'$messages'%22%7D"; 
     echo $url; 
     curl $url 
     ++$i; 
    } 
} 

else 
    echo "Hi!"; 
?> 

</select> 
+0

什麼是'xmlhttp'?你的'

4

您應該使用mysql_real_escape_stringmysql_connect

換句話說

:你應該已經到MySQL的連接服務器的時候你打電話給mysql_real_escape_string或者它會返回false +警告和false被評估爲一個空字符串,這就是爲什麼你沒有在你的代碼後端得到任何真正的值。

UPDATE:它注意到在文件中以mysql_real_escape_stringphp.net爲函數的第二個參數(這是link_identifier(MySQL連接資源)):

MySQL連接。如果未指定鏈接標識符,則假定由mysql_connect()打開的最後一個鏈接 。如果找不到這樣的鏈接,則會嘗試創建一個,就好像調用mysql_connect()時不帶參數一樣使用 。 如果發現或沒有建立連接時,會產生一個E_WARNING 級別的錯誤

好了,這裏有一些更多的問題與您的代碼,以修復做到以下幾點:

HTML

<form name='frm'... 

JS

var env = document.frm.customers.value; 
    ... 
    var messages = document.frm.Message.value; 

PHP

替換所有$_POST$_GET

+0

實際上,它沒有太大的區別...... – Christian

+0

同意,mysql_real_escape_string是一個SQL相關的函數,只有當你連接到數據庫時纔會起作用。 – Eirinn

+0

嗨,我已經改變了它的位置。但無法收到任何迴應。刪除'mysql_real_escape_string'也沒有幫助。任何方式,我可以打印出我的變量來檢查他們的內容? – Hend

2

的Javascript訪問document.frm,但形式不與名稱 'FRM' 定義。我想這是JavaScript停止的地方,不會觸發xhr的事情。

+0

+1指出可能的問題。但是仍然不起作用。不管怎麼說,還是要謝謝你。 – Hend