按钮通过PHP POST执行2个操作

时间:2014-05-30 14:48:42

标签: php html function button

我有这个PHP脚本执行两个功能:

  1. 将pray_warriors的XML标记中的计数增加1。
  2. 向适当的用户发送推送通知。
  3. 在我的应用程序中,我可以POST,并执行脚本的所有功能。脚本代码是:

    <?php
    $first_name = $_POST['first_name'];
     $last_name = $_POST['last_name'];
     $title = $_POST['title'];
     $deviceToken = $_POST['iostoken'];
    $xml = simplexml_load_file("/Test.xml") or die("Not loaded!\n");
    
    
    $responses = $xml->xpath("//channel/item[title = '$title' and first_name = '$first_name' and last_name = '$last_name']/prayer_warriors");
    $responses[0][0] = $responses[0] + 1;
    echo($responses);
    $xml->asXML("Test.xml");  
    // Put your device token here (without spaces):
    
    // Put your private key's passphrase here:
    $passphrase = 'Passphrase';
    
    // Put your alert message here:
    $message = 'Someone just pledged to pray for you!';
    
    ////////////////////////////////////////////////////////////////////////////////
    
    $ctx = stream_context_create();
    stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
    stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
    
    // Open a connection to the APNS server
    $fp = stream_socket_client(
        'ssl://gateway.push.apple.com:2195', $err,
        $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
    
    if (!$fp)
        exit("Failed to connect: $err $errstr" . PHP_EOL);
    
    echo 'Connected to APNS' . PHP_EOL;
    
    // Create the payload body
    $body['aps'] = array(
        'alert' => $message,
        'sound' => 'default'
        );
    
    // Encode the payload as JSON
    $payload = json_encode($body);
    
    // Build the binary notification
    $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
    
    // Send it to the server
    $result = fwrite($fp, $msg, strlen($msg));
    
    if (!$result)
        echo 'Message not delivered' . PHP_EOL;
    else
        echo 'Message successfully delivered' . PHP_EOL;
    
    // Close the connection to the server
    fclose($fp);  
    ?>
    

    我使用以下内容从网页POST到此PHP。它会触发部件发送推送通知,但不会将pray_warrior计数增加1。

    $title = $item->title;
    $first_name = $item->first_name;
    $last_name = $item->last_name;
    $iostoken = $item->iostoken;
    Echo "<form action=\"http://Url.php\" method=\"post\">";
    Echo "<input type=\"hidden\" name=\"first_name\" value=".$first_name.">";
    Echo "<input type=\"hidden\" name=\"last_name\" value=".$last_name.">";
    Echo "<input type=\"hidden\" name=\"title\" value=".$title.">";
    Echo "<input type=\"hidden\" name=\"iostoken\" value=".$iostoken.">";
    
     Echo  "<input type=\"submit\" name=\"submit\" value=\"Pledge to pray\" />";
    Echo "</form>";
    

    为什么会这样做?

6 个答案:

答案 0 :(得分:3)

您似乎写的是一个不同于您正在阅读的文件。

$xml = simplexml_load_file("/Test.xml") or die("Not loaded!\n");
                            ^

尝试更改

$xml->asXML("Test.xml");

$xml->asXML("/Test.xml");

如果权限阻止您更新文件

,则会记录错误
if(false === $xml->asXML("/Test.xml")) {
  die('Could not update XML!');
}

答案 1 :(得分:1)

我认为问题出在simplexml_load_file("/Test.xml"); 你想要的是simplexml_load_file("Test.xml");,因为“/ Test.xml”等同于your_site_here.com/Test.xml。或者它可能等同于SYSTEM_ROOT/Test.xml
如果您使用/作为文件名前缀,则文件/文件路径相对于site-root /目录根目录。 ./并且没有前缀与当前目录相关。

答案 2 :(得分:1)

首先调查此代码:

$responses[0][0] = $responses[0] + 1;

可能会将其更改为

var_dump($responses);
var_dump($responses[0][0]);
$responses[0][0]++;
var_dump($responses[0][0]);

如果$ response [0] [0]第二次回显并且它的值为旧值+1,那么你就知道它不是XPath问题,而且它是另一回事与帖子或其他东西。如果需要,请确保$ xml在有效负载中。

我意识到的一件事是你打电话给这行代码:

$xml->asXML("Test.xml");  

应该是$ xml-&gt; asXML($ answers)?如果它必须是一个文件,我觉得好像上面的行是在$ reply没有递增之前的状态下从文件中读取的。尝试在递增pray_warrior之后,但在设置$ xml-&gt; asXML之前,尝试将新的$ response数据写入该文件。

答案 3 :(得分:1)

这可能是由于区分大小写的问题。请检查文件名是Test还是test

答案 4 :(得分:0)

echo($responses);之后添加:

$xml->path->to->prayer_warriors = $responses[0] + 1;
$xml->asXML('/Test.xml');

答案 5 :(得分:0)

您的网络表单中缺少htmlencoding,因为您可能会将无效值直接插入到表单中而不对其进行编码。它也可能是字符编码问题。

详细了解http://php.net/manual/en/function.htmlentities.php

您可以尝试类似

的内容
$title = htmlentities($item->title);
$first_name = htmlentities($item->first_name);
$last_name = htmlentities($item->last_name);
$iostoken = htmlentities($item->iostoken);

也许可以尝试在表单中添加编码

Echo "<form action=\"http://Url.php\" method=\"POST\" accept-charset=\"UTF-8\">";