FILE_APPEND与file_put_contents无法正常工作

时间:2014-01-28 16:13:44

标签: php jquery ajax json local-storage

我将表单数据作为JSON通过AJAX传递给PHP文件,然后将JSON保存在服务器上的文本文件中。

问题在于,当我使用FILE_APPEND时,当文本文件中已存在JSON数据时,数据不会写入文件。

我的HTML代码是:

    <!DOCTYPE html>
    <html>
    <head>

    <link rel="stylesheet" type="text/css" href="eloqua.css">
    <script src="http://code.jquery.com/jquery-1.9.0.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){
        localStorage.clear();

        $("form").on("submit", function() {
            if(window.localStorage!==undefined) {
                var fields = $(this).serialize();

                localStorage.setItem("eloqua-fields", JSON.stringify( fields ));
                alert("Stored Succesfully");
                $(this).find("input[type=text]").val("");
                alert("Now Passing stored data to Server through AJAX jQuery");
                $.ajax({
                   type: "POST",
                   url: "backend.php",         
                   data: fields
                });
            } else {
                alert("Storage Failed. Try refreshing");
            }
        });
    });
    </script>

    <script type="text/javascript">
    function validateForm()
    {

    var a=document.forms["EloquaForm"]["C_FirstName"].value;
    if (a==null || a=="")
      {
      alert("First name must be filled out");
      return false;
      }

    var b=document.forms["EloquaForm"]["C_LastName"].value;
    if (b==null || b=="")
      {
      alert("Last name must be filled out");
      return false;
      }

    var y=document.forms["EloquaForm"]["C_EmailAddress"].value;
    var atpos=y.indexOf("@");
    var dotpos=y.lastIndexOf(".");
    if (atpos<1 || dotpos<atpos+2 || dotpos+2>=y.length)
      {
      alert("Not a valid e-mail address");
      return false;
      }
    }
    </script>
    </head>

    <body>
    <p><img src="red-asterix.jpeg"> indicates a required field</p>

    <div class="form-container" style="width: 625px">
    <form class="form-eloqua" name="EloquaForm" action="http://s33.t.eloqua.com/e/f2" onsubmit="return validateForm();" method="post">
    <span class="form-eloqua-label"><span>First Name</span></span><input id="firstname" type="text" name="C_FirstName" />
    <span class="form-eloqua-label"><span>Last Name</span></span><input id="lastname" type="text" name="C_LastName" />
    <span class="form-eloqua-label"><span>Email Address</span></span><input id="email" type="text" name="C_EmailAddress" />
    <span class="form-eloqua-label">Title</span><input id="title" type="text" name="C_Title" />
    <span class="form-eloqua-label">Company</span><input id="company" type="text" name="C_Company" />
    <span class="form-eloqua-label">ZIP or Postal Code</span><input id="postcode" type="text" name="zipOrPostalCode" />
    <span class="form-eloqua-label">Country</span><select id="country" name="country">
    <option value="">Please select ...</option>
    <option value="AF">Afghanistan</option>
    <option value="AL">Albania</option>
    <option value="DZ">Algeria</option>
    <option value="AS">American Samoa</option>
    <option value="AD">Andorra</option>
    <option value="AG">Angola</option>
    <option value="AI">Anguilla</option>
    <option value="AG">Antigua &amp; Barbuda</option>
    <option value="AR">Argentina</option>
    <option value="AA">Armenia</option>
    <option value="AW">Aruba</option>
    <option value="AU">Australia</option>
    <option value="AT">Austria</option>
    <option value="AZ">Azerbaijan</option>
    <option value="BS">Bahamas</option>
    <option value="BH">Bahrain</option>
    <option value="BD">Bangladesh</option>
    <option value="BB">Barbados</option>
    <option value="BY">Belarus</option>
    <option value="BE">Belgium</option>
    <option value="BZ">Belize</option>
    <option value="BJ">Benin</option>
    <option value="BM">Bermuda</option>
    <option value="BT">Bhutan</option>
    <option value="BO">Bolivia</option>
    <option value="BL">Bonaire</option>
    <option value="BA">Bosnia &amp; Herzegovina</option>
    <option value="BW">Botswana</option>
    <option value="BR">Brazil</option>
    <option value="BC">British Indian Ocean Ter</option>
    <option value="BN">Brunei</option>
    <option value="BG">Bulgaria</option>
    <option value="BF">Burkina Faso</option>
    <option value="BI">Burundi</option>
    <option value="KH">Cambodia</option>
    <option value="CM">Cameroon</option>
    <option value="CA">Canada</option>
    <option value="IC">Canary Islands</option>
    <option value="CV">Cape Verde</option>
    <option value="KY">Cayman Islands</option>
    <option value="CF">Central African Republic</option>
    <option value="TD">Chad</option>
    <option value="CD">Channel Islands</option>
    <option value="CL">Chile</option>
    <option value="CN">China</option>
    <option value="CI">Christmas Island</option>
    <option value="CS">Cocos Island</option>
    <option value="CO">Colombia</option>
    <option value="CC">Comoros</option>
    <option value="CG">Congo</option>
    <option value="CK">Cook Islands</option>
    <option value="CR">Costa Rica</option>
    <option value="CT">Cote D'Ivoire</option>
    <option value="HR">Croatia</option>
    <option value="CU">Cuba</option>
    <option value="CB">Curacao</option>
    <option value="CY">Cyprus</option>
    <option value="CZ">Czech Republic</option>
    <option value="DK">Denmark</option>
    <option value="DJ">Djibouti</option>
    <option value="DM">Dominica</option>
    <option value="DO">Dominican Republic</option>
    <option value="TM">East Timor</option>
    <option value="EC">Ecuador</option>
    <option value="EG">Egypt</option>
    <option value="SV">El Salvador</option>
    <option value="GQ">Equatorial Guinea</option>
    <option value="ER">Eritrea</option>
    <option value="EE">Estonia</option>
    <option value="ET">Ethiopia</option>
    <option value="FA">Falkland Islands</option>
    <option value="FO">Faroe Islands</option>
    <option value="FJ">Fiji</option>
    <option value="FI">Finland</option>
    <option value="FR">France</option>
    <option value="GF">French Guiana</option>
    <option value="PF">French Polynesia</option>
    <option value="FS">French Southern Ter</option>
    <option value="GA">Gabon</option>
    <option value="GM">Gambia</option>
    <option value="GE">Georgia</option>
    <option value="DE">Germany</option>
    <option value="GH">Ghana</option>
    <option value="GI">Gibraltar</option>
    <option value="GB">Great Britain</option>
    <option value="GR">Greece</option>
    <option value="GL">Greenland</option>
    <option value="GD">Grenada</option>
    <option value="GP">Guadeloupe</option>
    <option value="GU">Guam</option>
    <option value="GT">Guatemala</option>
    <option value="GN">Guinea</option>
    <option value="GY">Guyana</option>
    <option value="HT">Haiti</option>
    <option value="HW">Hawaii</option>
    <option value="HN">Honduras</option>
    <option value="HK">Hong Kong</option>
    <option value="HU">Hungary</option>
    <option value="IS">Iceland</option>
    <option value="IN">India</option>
    <option value="ID">Indonesia</option>
    <option value="IA">Iran</option>
    <option value="IQ">Iraq</option>
    <option value="IR">Ireland</option>
    <option value="IM">Isle of Man</option>
    <option value="IL">Israel</option>
    <option value="IT">Italy</option>
    <option value="JM">Jamaica</option>
    <option value="JP">Japan</option>
    <option value="JO">Jordan</option>
    <option value="KZ">Kazakhstan</option>
    <option value="KE">Kenya</option>
    <option value="KI">Kiribati</option>
    <option value="NK">Korea North</option>
    <option value="KS">Korea South</option>
    <option value="KW">Kuwait</option>
    <option value="KG">Kyrgyzstan</option>
    <option value="LA">Laos</option>
    <option value="LV">Latvia</option>
    <option value="LB">Lebanon</option>
    <option value="LS">Lesotho</option>
    <option value="LR">Liberia</option>
    <option value="LY">Libya</option>
    <option value="LI">Liechtenstein</option>
    <option value="LT">Lithuania</option>
    <option value="LU">Luxembourg</option>
    <option value="MO">Macau</option>
    <option value="MK">Macedonia</option>
    <option value="MG">Madagascar</option>
    <option value="MY">Malaysia</option>
    <option value="MW">Malawi</option>
    <option value="MV">Maldives</option>
    <option value="ML">Mali</option>
    <option value="MT">Malta</option>
    <option value="MH">Marshall Islands</option>
    <option value="MQ">Martinique</option>
    <option value="MR">Mauritania</option>
    <option value="MU">Mauritius</option>
    <option value="ME">Mayotte</option>
    <option value="MX">Mexico</option>
    <option value="MI">Midway Islands</option>
    <option value="MD">Moldova</option>
    <option value="MC">Monaco</option>
    <option value="MN">Mongolia</option>
    <option value="MS">Montserrat</option>
    <option value="MA">Morocco</option>
    <option value="MZ">Mozambique</option>
    <option value="MM">Myanmar</option>
    <option value="NA">Nambia</option>
    <option value="NU">Nauru</option>
    <option value="NP">Nepal</option>
    <option value="AN">Netherland Antilles</option>
    <option value="NL">Netherlands (Holland, Europe)</option>
    <option value="NV">Nevis</option>
    <option value="NC">New Caledonia</option>
    <option value="NZ">New Zealand</option>
    <option value="NI">Nicaragua</option>
    <option value="NE">Niger</option>
    <option value="NG">Nigeria</option>
    <option value="NW">Niue</option>
    <option value="NF">Norfolk Island</option>
    <option value="NO">Norway</option>
    <option value="OM">Oman</option>
    <option value="PK">Pakistan</option>
    <option value="PW">Palau Island</option>
    <option value="PS">Palestine</option>
    <option value="PA">Panama</option>
    <option value="PG">Papua New Guinea</option>
    <option value="PY">Paraguay</option>
    <option value="PE">Peru</option>
    <option value="PH">Philippines</option>
    <option value="PO">Pitcairn Island</option>
    <option value="PL">Poland</option>
    <option value="PT">Portugal</option>
    <option value="PR">Puerto Rico</option>
    <option value="QA">Qatar</option>
    <option value="ME">Republic of Montenegro</option>
    <option value="RS">Republic of Serbia</option>
    <option value="RE">Reunion</option>
    <option value="RO">Romania</option>
    <option value="RU">Russia</option>
    <option value="RW">Rwanda</option>
    <option value="NT">St Barthelemy</option>
    <option value="EU">St Eustatius</option>
    <option value="HE">St Helena</option>
    <option value="KN">St Kitts-Nevis</option>
    <option value="LC">St Lucia</option>
    <option value="MB">St Maarten</option>
    <option value="PM">St Pierre &amp; Miquelon</option>
    <option value="VC">St Vincent &amp; Grenadines</option>
    <option value="SP">Saipan</option>
    <option value="SO">Samoa</option>
    <option value="AS">Samoa American</option>
    <option value="SM">San Marino</option>
    <option value="ST">Sao Tome &amp; Principe</option>
    <option value="SA">Saudi Arabia</option>
    <option value="SN">Senegal</option>
    <option value="RS">Serbia</option>
    <option value="SC">Seychelles</option>
    <option value="SL">Sierra Leone</option>
    <option value="SG">Singapore</option>
    <option value="SK">Slovakia</option>
    <option value="SI">Slovenia</option>
    <option value="SB">Solomon Islands</option>
    <option value="OI">Somalia</option>
    <option value="ZA">South Africa</option>
    <option value="ES">Spain</option>
    <option value="LK">Sri Lanka</option>
    <option value="SD">Sudan</option>
    <option value="SR">Suriname</option>
    <option value="SZ">Swaziland</option>
    <option value="SE">Sweden</option>
    <option value="CH">Switzerland</option>
    <option value="SY">Syria</option>
    <option value="TA">Tahiti</option>
    <option value="TW">Taiwan</option>
    <option value="TJ">Tajikistan</option>
    <option value="TZ">Tanzania</option>
    <option value="TH">Thailand</option>
    <option value="TG">Togo</option>
    <option value="TK">Tokelau</option>
    <option value="TO">Tonga</option>
    <option value="TT">Trinidad &amp; Tobago</option>
    <option value="TN">Tunisia</option>
    <option value="TR">Turkey</option>
    <option value="TU">Turkmenistan</option>
    <option value="TC">Turks &amp; Caicos Is</option>
    <option value="TV">Tuvalu</option>
    <option value="UG">Uganda</option>
    <option value="UA">Ukraine</option>
    <option value="AE">United Arab Emirates</option>
    <option value="GB">United Kingdom</option>
    <option value="US">United States of America</option>
    <option value="UY">Uruguay</option>
    <option value="UZ">Uzbekistan</option>
    <option value="VU">Vanuatu</option>
    <option value="VS">Vatican City State</option>
    <option value="VE">Venezuela</option>
    <option value="VN">Vietnam</option>
    <option value="VB">Virgin Islands (Brit)</option>
    <option value="VA">Virgin Islands (USA)</option>
    <option value="WK">Wake Island</option>
    <option value="WF">Wallis &amp; Futana Is</option>
    <option value="YE">Yemen</option>
    <option value="ZR">Zaire</option>
    <option value="ZM">Zambia</option>
    <option value="ZW">Zimbabwe</option>
    </select>
    <div class="form-eloqua-separator"></div>
    <span class="form-eloqua-label">Annual Revenue Range</span><select name="C_Annual_Revenue1"> <option value="">Please select ...</option> <option value="0-100,000,000">0-100,000,000</option><option value="100,000,001-300,000,000">100,000,001-300,000,000</option><option value="300,000,001-500,000,000">300,000,001-500,000,000</option><option value="500,000,001-2,000,000,000">500,000,001-2,000,000,000</option><option value="2 Billion +">2 Billion +</option></select>
    <div class="submit-button"><input type="submit" id="submit" value="Submit" /></div>
    <div id="output"></div>
    <input type="hidden" name="elqoffer" value="GGB2BContentMktg" />
    <input type="hidden" name="elqchannel" value="TheMarketer" />
    <input type="hidden" name="elqbq" value="14Q2" />
    <input type="hidden" name="elqbc" value="UK" />
    <input type="hidden" name="elqFormName" value="2013-Syndication-1372365875136" />
    <input type="hidden" name="elqSiteId" value="33" />
    </form>
    </div>
    </body>

    </html>

我的PHP代码是:

    <?php
            date_default_timezone_set('America/Chicago'); // CDT
            echo '<h2>Server Timezone : ' . date_default_timezone_get() . '</h2>';
            $current_date = date('d/m/Y == H:i:s ');
            print "<h2>Server Time : " . $current_date . "</h2>";

            $dataObject = $_POST; //Fetching all posts

            echo "<pre>"; //making the dump look nice in html.
            var_dump($dataObject);
            echo "</pre>";

                //Writes it as json to the file, you can transform it any way you want
            $json = json_encode($dataObject);
            file_put_contents('your_data.txt', $json . PHP_EOL, FILE_APPEND);
    ?>

1 个答案:

答案 0 :(得分:1)

如果我理解(在看到hackingarticles.com/marketer/your_data.txt之后)。你的代码看起来很有效。尝试更改为:

$file_content = array();
if ( file_exists('your_data.txt')){
    $file_content = (array)json_decode(file_get_contents('your_data.txt'));
    unlink('your_data.txt');
}

$file_content['users'][] = array('user'=>$_POST);
file_put_contents('your_data.txt',json_encode($file_content));