2014-01-28 180 views
0

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

问题是,当我使用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); 
    ?> 
+0

这没有任何意义,'file_put_contents()'不会对您的文件进行重复扫描。函数返回什么? – jeroen

+0

你做过任何调试,比如检查f_g_c()的返回值吗?完成'is_writable('your_data.txt')'测试?另外,除非你想通过换行符分割文件,并且希望编码数据中没有换行符,否则不能合并单个json编码的字符串。 –

+0

@MarcB - 该文件是可写的,因为我可以在这里看到一些数据:http://hackingarticles.com/marketer/your_data.txt另外,我希望在每次提交后都有换行符。任何关于代码更改的建议? –

回答

1

如果我的理解(看到hackingarticles.com/marketer/your_data.txt).Your代码看起来如后加工。尝试改为:

$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)); 
+0

你的意思是这样的:http://jsbin.com/iYESeXe/1/edit? –

+0

@Sackboy B是的。 – voodoo417

+0

在代码执行后提交表单时,它不会将数据写入txt文件。尝试自己在这里:http://hackingarticles.com/marketer/ –