2017-03-23 4 views
-3

これは冗長であるように見える場合は申し訳ありません。しかし私は他の投稿の問題を理解するために最善を尽くしましたが、私と同じ問題は解決しません。今度は私と一緒に裸にしてください。ページを再ロードせずにデータベースを更新して出力するにはどうすればよいですか?

大丈夫です。だから私は名前であるデータを持っている。そして、私は入力タイプ=テキストを持っています。値は、ボタンタイプ=サブミットと一緒になります。だから私がやっていることは、私は私のデータベース内の名前を変更して更新したいと思います。JS関数(警告ではなくトースト通知)を実行したいので、それは私ができないことです。したがって、短縮するには(EDIT - > UPDATE - > SHOW =ページを再ロードせずに)。私を助けてください。前もって感謝します。

EDIT ::申し訳ありませんが、私は言及を忘れていました。私はjQueryを知っていますが、AJAXは解決策ですが、私はAJAXをjQueryと違って理解することに問題があります。フォームで行うには

profile.php(フォームコード)

<form action="profile.php" method="POST">  
     <input type="text" id="changename" name="changename" class="form-control" placeholder="New Name" required> 
     <button id="btnchange" type="submit"></button> 
</form> 

profile.php(PHP CODE)

<?php 
    if(isset($_POST['changename'])) { 
     require 'connect.php'; 

     $newname = $_POST['changename']; 
     $user_id = $_SESSION['temp_user']; 

     $sql = "UPDATE login SET login_name='$newname' WHERE user_id='$user_id'"; 
     if(mysqli_query($conn, $sql)){ 
      header('location: profile.php'); 
      // MY JS FUNCTION HERE // 
     } 

     mysqli_close($conn); 
    } 
?> 
+0

は – Ionut

+0

AJAXは、あなたの答えです。検索するとガイドやチュートリアルが*たくさんあります。そしてあなたの質問のタイトルに叫ばないでください。私はあなたのために編集しました –

+0

ボタンタイプ= "送信"を使用している場合、defenetlyあなたのページをリロードするので、ボタンタイプ= "ボタン"を使用し、さらなる操作のためにajaxを使用してください –

答えて

1

:このことにより

<form action="profile.php" method="GET">  

: だからこれを変更しますか?探しているものはAJAXです。 は、私はあなたが答えを選択している知っているが、あなたがウェブ

  1. Ajax Introduction
  2. に従うことができますいくつかの良いAJAXのチュートリアルをそれが長期

    ザ・であなたを助けるかもしれない必要がある追加の情報があります

  3. What is Ajax ?

さらに多くのものをウェブ上で見つけることができます。

これは、uは何をする必要があるかである第一フォームメソッドがGETであり、あなたのPHPスクリプトにあなたは$_POSTので、これはundifined予告エラーが発生しますを要求している、changename予告:undifined変数changenameそうソリューションですあなたのフォームが$_GETの場合は、1つのフォームで1つのメソッドを使用する場合は、$variable = $_GET['fieldname']を使用します。サーバー側のフォームメソッドがPOSTの場合は、$variable = $_POST['fieldname'];とは異なります。したがって、フォームメソッドをPOSTに変更してください。これがあなたがするべきことです。

編集。あなたはフロントエンド側で必要なものですPHP

更新

<script type="text/javascript"> 
    $('document').ready(function(){ 

     $('form').on('submit',function(event){ 

      event.preventDefault();//prevent the form from reloading the page when submit 

      var formData = $('form').serialize(); // reading form input 

      $.ajax({ 

       type :'POST', 
       data : formData, 
       url : 'profile.php', 
       dataType : 'json', 
       encode : true, 
       success : function(response){ 

        //response = JSON.parse(response); 

        if(response == "ok"){ 
         $('#success').html('profile updated success'); 
         setTimeout(' window.location.href = "profile.php"; ', 6000); // redirecting 
        }else{ 
         //could not update 

         $('#error').html(response); 

        } 
       }, 
       error : function(e){ 

        console.log(e); // debugging puporse only 
       } 

      }); 
     }); 
    }); 
</script> 

は..あなたは、単一のページに複数のフォームを持っているならば、その後、$('form').on('submit',function(event){});あなたを使用しないのでご注意ください各フォームにユニークなIDを付けて、jquery/ajaxのformを、送信したいフォームのIDと置き換えます。

あなたのサーバー側。

私はあなたが私たちが戻ってクライアントにAJAXサーバに要求し、 を送信しているため、リダイレクトする だheader('location: profile.php');を持っていることに気づいた、あなたはあなたの リダイレクトがクライアントを使用して、サーバー側でリダイレクトされません。あなたがサーバーから期待した応答 を受け取った後で私は上記のスクリプトで、クライアント側でリダイレクトする部分を の部分でコメントしました。あなたが必要とするすべてです

profile.php

<?php 

     $message = ''; 
    if(isset($_POST['submit'])) { 
     require 'connect.php'; 

     //validate your input field 
     $newname = $_POST['changename']; 
     $user_id = $_SESSION['temp_user']; 

     $sql = "UPDATE login SET login_name='$newname' WHERE user_id='$user_id'"; 
     if(mysqli_query($conn, $sql)){ 

      $message = 'ok'; // success 
     }else{ 

      $message = 'system error could not update please try again later'; 
     } 

     echo json_encode($message);//sending response back to the client 

     mysqli_close($conn); 
    } 
?> 

、あなたがそれらを使用する前に、両方のクライアント側とサーバー側ですべての入力フィールドを検証する必要があります注意してください。

mysqliまたはPDOを使用して準備された文について詳しく知りたい場合は、非常に使いやすく安全です。

$sql = "UPDATE login SET login_name='$newname' WHERE user_id='$user_id'";は非常に安全ではありません。あなたの入力は検証されず、フィルタリングされずに消されます。

はそうプリペアドステートメントとその簡単なよう:

profile.phpが

<?php 

     $message = ''; 
    if(isset($_POST['submit'])) { 
     require 'connect.php'; 

     //validate your input field 
     $newname = $_POST['changename']; 
     $user_id = $_SESSION['temp_user']; 


     //prepare and bind 
     $sql = $conn->prepare("UPDATE login SET login_name= ? WHERE user_id= ? "); 
     $sql->bind_param("si",$newname,$user_id); 

     if($sql->execute()){ 

      $message = 'ok'; 
     }else{ 

      $message = 'Error Could not update please try again later'; 
     } 

     echo json_encode($message); 

     $conn->close(); 



    } 
?> 

$sql->bind_param("si",$newname,$user_id);を用意し、この関数は、SQLクエリにパラメータを結合し、どのようなパラメータをデータベースに伝えます。どのタイプのデータをmysqlに送信するかによって、SQLインジェクションのリスクが最小限に抑えられます。読むここhttp://api.jquery.com/jquery.ajax/ GoogleでAJAX`または `について

+0

すごくありがとう!ありがとうございました! –

+0

こんにちは。ちょうど質問。私は "// response = JSON.parse(response);"に含める必要があります。 ? –

+0

そのままにしておけば、出力に二重引用符( –

1

まず最初に、フォームのメソッドを変更することですあなたがPOSTメソッドで "changename"を取得しようとするとPOST(そしてGETではない)。ページをリロードせずにdatabseを更新して出力する方法

<form action="profile.php" method="POST">  
+0

申し訳ありません。私は誤植をしましたが、ありがとうございます。 –

関連する問題