2016-07-30 7 views
0

ユーザーが希望のURLを入力して次の手順に進むフォームがあります。これはすべてページの更新なしで済むので、私は情報を送るためにAjaxに依存しています。ユーザーが希望するURLを送信すると、次の部分に進むことができます。ユーザーは、urlページに戻ってURLを変更することもできます。私はどのようにURLを正常に挿入するのか知っていますが、私は新しいURLでエントリを更新する方法がわかりません。私はこれを試してみましたが、それは働いていない:以前の値に基づいてエントリを更新する

$prevUrl; 
$newUrl; 

if ((isset($_POST["url"])) 
{ 
    $newUrl = $_POST["url"]; 

if ($prevUrl == "") 
{ 
    $db->query("INSERT INTO Articles (`url`) VALUES ('$newUrl')"); 
    $prevUrl = $newUrl; 
} 

else 
{ 
    $db->query("UPDATE Articles SET url = '$newUrl' WHERE url = '$prevUrl'"); 
    $prevUrl = $newUrl; 
} 
} 

エントリが更新されると、それは以前のURLが何であったかに基づいて更新されるように、私はそれを作ることができますどのように?

何が問題なのですか?URLを更新するために戻ると、URLは新しいURLに更新されません。 WHERE句が正常に実行されていません。 $ prevUrl変数が空であるかのようです。私は、PHPがサーバー側であるため、ページの更新時に表示される変数は何でも変数であり、変更することはできません。 $ prevUrlは最初は空であるため、WHERE文はおそらくWHERE url = ""のような処理をしています。それがどうでもいいのか分かりません。例外エラーや致命的なエラーはありませんでした。

+0

あなたのコードが「うまくいかない」方法を詳しく説明できますか?あなたは何を期待していましたか、実際何が起こったのですか?例外/エラーがある場合は、それが発生した行と例外/エラーの詳細を投稿してください。これらの詳細を入力または編集してください。 – FrankerZ

+0

@FrankerZ私はちょうどそれらの詳細で質問を更新しました – user2896120

+0

私はたくさんのタイプミスがあります: 'es(\' url) '(\')がありません。 '$ db-query(" UPDATE Articles'(クエリ前に '>'がありません。このコードはどのように動作しますか?[this](http://stackoverflow.com/questions/845021/how-to-get-エラーメッセージをポストし、 'error_reporting'を有効にして実際のエラーでポストバックします。 – FrankerZ

答えて

0

私はあなたが完全にあなたを得たなら、私があなたがしようとしていると思っていることは不可能であることを知っています。 Ajaxリクエストは、サーバー上でいくつかのコードを実行し、リロードせずに結果を戻すだけです。結果を送信した後、$ _SESSIONを実行しても、サーバー上に残っている変数はありません。

あなたの変数$ prevurlは、あなたのコードの始めにそのように宣言するので、 'null'以外の何かにすることはできません。

あなたの場合、解決する可能性は2つあります。あなたは $ _SESSION変数にURLを記述し、次のいずれか

session_start(); 
$_SESSION['url']= $newurl; 

と再びそのようにそれをアセス。

また、 '記事'を変更すると、すでに 'url'-entryがあるかどうかをよく確認できるため、INSERTではなくUPDATEする必要があります。

EDIT:

$ _SESSION変数は非常にAJAXを介して変更することができます:

が私の最初の提案を指定します。ユーザーからのデータのライブ送信にajaxだけを使用する場合は可能ですが、<form> -elementsで作業することはできません。あなたはjavascriptと仕事をしなければならない:

は、すべてのユーザーデータが送信されると、.phpのファイルが含まれている
<!-- HTML --> 
<input id='newurl' /> 
<input type='button' value='next' onclick='submitURL(document.getElementById("newurl").value)' /> 

// JAVASCRPT 
function submitURL(newurl){ 
    var xhttp; 
    if (window.XMLHttpRequest) { 
     xhttp = new XMLHttpRequest(); 
     } else { 
     // code for IE6, IE5 
     xhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    xhttp.open("GET", /*include url_submit.php?data=newurl*/, true); 
    xhttp.send(); 

    xhttp.onreadystatechange = function(){ 
     if(xhttp.readyState==4&&xhttp.status == 200){ 
      //change Pagecontent to next page 
     } 
    }; 
} 

# PHP (url_sumbit.php) 
<?php 
if(!isset($_SESSION['url']){ 
    session_start(); 
} 
$_SESSION['url']=$_GET['data']; 
?> 

、それはデータベースエントリを作成します。代わりに、$ _SESSIONにユーザーデータを保存するので、それはすぐにデータテーブルに書き込まれ、.phpのファイルに

は、第二の提案を指定します。 Promlemは、更新または挿入する必要があるかどうかわからない(URLが前に提出されたかどうか)。エントリがある場合は手動でチェックし、そうでない場合は新しいエントリを挿入します。

私は両方の方法が非常に醜いと言う必要があります。すべてのデータが一度に提出されると、はるかに簡単になります。たとえば、再ロードしないと主張する場合は、「次へ」ボタンをクリックしたときにサブミットしないでください。古いpagecontentを置き換えて、サブミットされたデータを隠した<input>に保存します。最後に、すべてが正しく提出され、データベースに追加されます。

+0

まず、ユーザーが自分で作成するため、URLエントリはありません。彼らはリフレッシュされていないページに移動し、彼らが望むURLをタイプして、submitをクリックします。彼らが初めて投稿すると、新しいエントリが作成されます。彼らは次のページに移動します(これは1ページですが、決してリフレッシュされません)。彼らがURLを変更することを決めたとしましょう。彼らはURLを変更し、URLはキーの前のURLに基​​づいて変更する必要があります。 SESSION PHPの変数は静的で、ページがリフレッシュされない限り変更されません。 – user2896120

関連する問題