2012-04-12 5 views
10

Назначение: Вызвать функцию PHP для чтения данных из файла и переписать ее. Я использовал PHP только для этой цели - FileIO - и я новичок в PHP.Вызов функции PHP после события onClick HTML

Решение? Я пробовал через многие форумы и знал, что мы не можем добиться этого обычным способом: onClick event> call function. Как мы можем это сделать, есть ли другие способы, особенно в моем случае? Мой код HTML и код PHP находятся на одной странице: Admin.php. Это HTML часть:

<form> 
    <fieldset> 
     <legend>Add New Contact</legend> 
     <input type="text" name="fullname" placeholder="First name and last name" required /> <br /> 
     <input type="email" name="email" placeholder="[email protected]" required /> <br /> 
     <input type="text" name="phone" placeholder="Personal phone number: mobile, home phone etc." required /> <br /> 
     <input type="submit" name="submit" class="button" value="Add Contact" onClick="" /> 
     <input type="button" name="cancel" class="button" value="Reset" /> 
    </fieldset> 
</form> 

Это PHP часть:

function saveContact() 
{ 
    $datafile = fopen ("data/data.json", "a+"); 
    if(!$datafile){ 
     echo "<script>alert('Data not existed!')</script>"; 
    } 
    else{ 
     ... 
     $contact_list = $contact_list . addNewContact(); 
     ... 
     file_put_contents("data/data.json", $contact_list); 
    } 

    fclose($datafile); 
} 

function addNewContact() 
{ 
    $new = '{'; 
    $new = $new . '"fullname":"' . $_GET['fullname'] . '",'; 
    $new = $new . '"email":"' . $_GET['email'] . '",'; 
    $new = $new . '"phone":"' . $_GET['phone'] . '",'; 
    $new = $new . '}'; 
    return $new; 
} 

Посмотрите на эти кода, я хочу, чтобы позвонить saveContact, когда люди нажимают на кнопку Добавить контакт. Мы можем перезагрузить страницу, если это необходимо. FYI, я использую JQuery, HTML5 на странице. Спасибо,

+2

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

+2

Где ваш javascript ??? вы не можете вызывать HTML-формы PHP-формы, такие как onClick ... вам нужен AJAX, чтобы сделать трюк для вас – Baba

+0

Я согласен, но я также хочу найти другое решение рядом с AJAX. Посмотрите вниз, и вы можете найти, что стоит попробовать :) @RPM – Shinigamae

ответ

9

Есть два пути. первая - полностью обновить страницу, используя типичную отправку формы

//your_page.php 

<?php 

$saveSuccess = null; 
$saveMessage = null; 

if($_SERVER['REQUEST_METHOD'] == 'POST') { 
    // if form has been posted process data 

    // you dont need the addContact function you jsut need to put it in a new array 
    // and it doesnt make sense in this context so jsut do it here 
    // then used json_decode and json_decode to read/save your json in 
    // saveContact() 
    $data = array(
    'fullname' = $_POST['fullname'], 
    'email' => $_POST['email'], 
    'phone' => $_POST['phone'] 
); 

    // always return true if you save the contact data ok or false if it fails 
    if(($saveSuccess = saveContact($data)) { 
    $saveMessage = 'Your submission has been saved!';  
    } else { 
    $saveMessage = 'There was a problem saving your submission.'; 
    } 
} 
?> 

<!-- your other html --> 

<?php if($saveSuccess !== null): ?> 
    <p class="flash_message"><?php echo $saveMessage ?></p> 
<?php endif; ?> 

<form action="your_page.php" method="post"> 
    <fieldset> 
     <legend>Add New Contact</legend> 
     <input type="text" name="fullname" placeholder="First name and last name" required /> <br /> 
     <input type="email" name="email" placeholder="[email protected]" required /> <br /> 
     <input type="text" name="phone" placeholder="Personal phone number: mobile, home phone etc." required /> <br /> 
     <input type="submit" name="submit" class="button" value="Add Contact" onClick="" /> 
     <input type="button" name="cancel" class="button" value="Reset" /> 
    </fieldset> 
</form> 

<!-- the rest of your HTML --> 

Второй способ - использовать AJAX. сделать что вы будете хотеть, чтобы полностью seprate обработку формы в отдельный файл:

// process.php

$response = array(); 

if($_SERVER['REQUEST_METHOD'] == 'POST') { 
    // if form has been posted process data 

    // you dont need the addContact function you jsut need to put it in a new array 
    // and it doesnt make sense in this context so jsut do it here 
    // then used json_decode and json_decode to read/save your json in 
    // saveContact() 
    $data = array(
    'fullname' => $_POST['fullname'], 
    'email' => $_POST['email'], 
    'phone' => $_POST['phone'] 
); 

    // always return true if you save the contact data ok or false if it fails 
    $response['status'] = saveContact($data) ? 'success' : 'error'; 
    $response['message'] = $response['status'] 
     ? 'Your submission has been saved!' 
     : 'There was a problem saving your submission.'; 

    header('Content-type: application/json'); 
    echo json_encode($response); 
    exit; 
} 
?> 

И тогда в вашем HTML/JS

<form id="add_contact" action="process.php" method="post"> 
     <fieldset> 
      <legend>Add New Contact</legend> 
      <input type="text" name="fullname" placeholder="First name and last name" required /> <br /> 
      <input type="email" name="email" placeholder="[email protected]" required /> <br /> 
      <input type="text" name="phone" placeholder="Personal phone number: mobile, home phone etc." required /> <br /> 
      <input id="add_contact_submit" type="submit" name="submit" class="button" value="Add Contact" onClick="" /> 
      <input type="button" name="cancel" class="button" value="Reset" /> 
     </fieldset> 
    </form> 
    <script type="text/javascript"> 
    $(function(){ 
     $('#add_contact_submit').click(function(e){ 
      e.preventDefault(); 
      $form = $(this).closest('form'); 

      // if you need to then wrap this ajax call in conditional logic 

      $.ajax({ 
       url: $form.attr('action'), 
       type: $form.attr('method'), 
       dataType: 'json', 
       success: function(responseJson) { 
       $form.before("<p>"+responseJson.message+"</p>"); 
       }, 
       error: function() { 
       $form.before("<p>There was an error processing your request.</p>"); 
       } 
      }); 
     });   
    }); 
    </script> 
+1

... а другой - использовать вызов AJAX. – inhan

+1

у вас есть XSS в вашей форме с помощью 'action =" "' –

+0

@Lawrence: Ну, он не должен был быть производственным кодом, но я изменил его для вас :-) – prodigitalson

3

Вы не делаете для этого нужен javascript. Просто удалите OnClick и писать PHP-файл Admin.php так:

<!-- HTML STARTS--> 
<?php 
//If all the required fields are filled 
if (!empty($GET_['fullname'])&&!empty($GET_['email'])&&!empty($GET_['name'])) 
{ 
function addNewContact() 
    { 
    $new = '{'; 
    $new .= '"fullname":"' . $_GET['fullname'] . '",'; 
    $new .= '"email":"' . $_GET['email'] . '",'; 
    $new .= '"phone":"' . $_GET['phone'] . '",'; 
    $new .= '}'; 
    return $new; 
    } 

function saveContact() 
    { 
    $datafile = fopen ("data/data.json", "a+"); 
    if(!$datafile){ 
     echo "<script>alert('Data not existed!')</script>"; 
     } 
    else{ 
     $contact_list = $contact_list . addNewContact(); 
     file_put_contents("data/data.json", $contact_list); 
     } 
    fclose($datafile); 
    } 

// Call the function saveContact() 
saveContact(); 
echo "Thank you for joining us"; 
} 
else //If the form is not submited or not all the required fields are filled 

{ ?> 

<form> 
    <fieldset> 
     <legend>Add New Contact</legend> 
     <input type="text" name="fullname" placeholder="First name and last name" required /> <br /> 
     <input type="email" name="email" placeholder="[email protected]" required /> <br /> 
     <input type="text" name="phone" placeholder="Personal phone number: mobile, home phone etc." required /> <br /> 
     <input type="submit" name="submit" class="button" value="Add Contact"/> 
     <input type="button" name="cancel" class="button" value="Reset" /> 
    </fieldset> 
</form> 
<?php } 
?> 
<!-- HTML ENDS --> 

Мысль мне не нравится в PHP немного. Вы действительно хотите создать файл для контактов? Это было бы MUCH лучше использовать базу данных mysql. Кроме того, добавление некоторых перерывов в этот файл было бы неплохо ...

Другие мысли, IE не поддерживает заполнитель.

+0

Меня тоже. Если я вынужден использовать серверный язык в своем веб-сайте, я попробую ASP.NET. Но это небольшая демонстрация, поэтому я выбираю PHP для своей простой среды (XAMPP, Dreamweavaer, done). Однако я понятия не имею о Боте MySQL. Спасибо за вашу идею, @Frank Presencia Fandos, я часто забываю добавлять перерывы в код. В настоящее время тестирование/демонстрация только в Chrome/Firefox, для лучшей поддержки HTML5 :) – Shinigamae

+0

Я действительно рекомендую вам изучить основы mysql. Это наиболее часто используется и изучить основы очень просто. Когда вы его реализуете, mysql для вашего сайта может быть таким же простым, как [this] (http://www.w3schools.com/php/php_mysql_insert.asp), вторым примером. –

+0

Еще раз спасибо @Frank Presencia Fandos, я собираюсь это изучить. – Shinigamae

6
<div id="sample"></div> 
<form> 
     <fieldset> 
      <legend>Add New Contact</legend> 
      <input type="text" name="fullname" placeholder="First name and last name" required /> <br /> 
      <input type="email" name="email" placeholder="[email protected]" required /> <br /> 
      <input type="text" name="phone" placeholder="Personal phone number: mobile, home phone etc." required /> <br /> 
      <input type="submit" name="submit" id= "submitButton" class="button" value="Add Contact" onClick="" /> 
      <input type="button" name="cancel" class="button" value="Reset" /> 
     </fieldset> 
    </form> 

<script> 

    $(document).ready(function(){ 
     $("#submitButton").click(function(){ 
      $("#sample").load(filenameofyourfunction?the the variable you need); 
     }); 
    }); 

</script> 
+0

Простые и чистые, спасибо @Ketherine, я попробую сначала :) – Shinigamae

1
cell1.innerHTML="<?php echo $customerDESC; ?>"; 
cell2.innerHTML="<?php echo $comm; ?>"; 
cell3.innerHTML="<?php echo $expressFEE; ?>"; 
cell4.innerHTML="<?php echo $totao_unit_price; ?>"; 

он работает как шарм, то браузер внутри PHP во время цикла

+0

Функции $ customerDESC, @comm и т. Д., Которые мы хотим вызвать, а ячейки - это элементы отправителя, такие как кнопки? – Shinigamae

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