2012-04-12 38 views
10

Scopo: Chiamare una funzione PHP per leggere i dati da un file e riscriverlo. Ho usato PHP solo per questo scopo - FileIO - e sono nuovo di PHP.Chiamare una funzione PHP dopo onClick evento HTML

Soluzione? Ho provato molti forum e sapevo che non è possibile raggiungerlo normalmente: onClick evento> funzione chiamata. Come possiamo farlo, ci sono altri modi, in particolare nel mio caso? Il mio codice HTML e il codice PHP si trovano sulla stessa pagina: Admin.php. Questo è HTML parte:

<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> 

Questo fa parte di 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; 
} 

Dai un'occhiata alla questi codice, voglio chiamare saveContact quando gli utenti fanno clic sul pulsante Aggiungi contatto. Possiamo ricaricare la pagina se necessario. Per vostra informazione, uso JQuery, HTML5 anche nella pagina. Grazie,

+2

u dovranno usare ajax. non puoi eseguire una funzione lato server chiamata da un gestore di eventi lato client –

+2

Dov'è la tua javascript ??? non puoi chiamare il PHP sotto forma di eventi HTML come onClick ... hai bisogno di AJAX per fare il trucco per te – Baba

+0

Yah d'accordo, ma voglio anche trovare un'altra soluzione accanto a AJAX. Guarda giù e puoi trovare che vale la pena provare :) @RPM – Shinigamae

risposta

9

Ci sono due modi. il primo è aggiornare completamente la pagina utilizzando l'invio tipico del modulo

//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 --> 

Il secondo modo sarebbe utilizzare AJAX. per farlo youll desidera seprate completamente l'elaborazione dei moduli in un file separato:

// 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; 
} 
?> 

E poi nel tuo 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

... e l'altro è quello di utilizzare una chiamata AJAX. – inhan

+1

hai XSS nel tuo modulo con 'action =" "' –

+0

@Lawrence: Beh, non doveva essere il codice di produzione, ma l'ho cambiato per te :-) – prodigitalson

3

non si bisogno di javascript per farlo. Basta eliminare l'onClick e scrivere il php Admin.php file in questo modo:

<!-- 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 --> 

pensiero che non mi piace il bit PHP. Vuoi VERAMENTE creare un file per i contatti? Sarebbe MUCH meglio usare un database mysql. Inoltre, aggiungere alcune interruzioni a quel file sarebbe bello ...

Altro pensiero, IE non supporta segnaposto.

+0

Me entrambi. Se sono costretto a utilizzare un linguaggio lato server nel mio sito web, proverò ASP.NET. Ma questa è una piccola dimostrazione, quindi scelgo PHP per il suo ambiente semplice (XAMPP, Dreamweavaer, done). Non ho idea di un incontro con MySQL però. Grazie per la tua idea, @Frank Presencia Fandos, spesso dimentico di aggiungere interruzioni al codice. Attualmente test/demo solo su Chrome/Firefox, per un migliore supporto HTML5 :) – Shinigamae

+0

Ti consiglio davvero di imparare le basi su mysql. È il più usato in circolazione e imparare le basi è molto semplice. Quando lo implementi, il mysql per il tuo sito potrebbe essere facile come [questo] (http://www.w3schools.com/php/php_mysql_insert.asp), il secondo esempio. –

+0

Grazie ancora, @Frank Presencia Fandos, ho intenzione di impararlo. – 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

Semplice e pulito, grazie a @Ketherine, proverò prima :) – Shinigamae

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

sta funzionando come un fascino, il JavaScript è all'interno di un php while

+0

Le funzioni $ customerDESC, @comm ecc. Vogliamo chiamare e le celle sono gli elementi del mittente come i pulsanti? – Shinigamae

Problemi correlati