2016-06-02 9 views
1

ブログモデルに基づいてビジネスプランナーを構築しています。しかし、私はそれを複数のページにわたって行うことはできません。 1ページ目で、「次へ」をクリックすると、「投稿」をクリックするようになります。データは保存され、他のビジネスプランまたは「投稿」のリストに追加されます。最初のページの1つは、データをデータベースに「挿入」することで保存されます。おそらく、2ページ目のデータベースを「更新」するだけで、複数の「投稿」やビジネスプランを削除することができたと思いました。データは最初のページからは保存されますが、2番目のページからは保存されません。 「INSERT INTO ...」を使用して各ページのデータを追加すると、各ページは個別のビジネスプランまたは複数の投稿として収集されます。アドバイスをいただければ幸いです。ここでPHPで複数のページにデータを保存する

は1ページです:

<?php 
    session_start(); 
    include_once("db.php");  

if(isset($_POST['post'])) { 
    $title = strip_tags($_POST['title']); 
    $compName = strip_tags($_POST['compName']); 
    $createdBy = strip_tags($_POST['createdBy']); 
    $phone = strip_tags($_POST['phone']); 

    $title = mysqli_real_escape_string($db,$title); 
    $compName = mysqli_real_escape_string($db,$compName); 
    $createdBy = mysqli_real_escape_string($db,$createdBy); 
    $phone = mysqli_real_escape_string($db,$phone); 

    $date = date('l jS \of F Y h:i A'); 

    $sql = "INSERT INTO plans (title, date, compName, createdBy, phone) VALUES('$title', '$date', '$compName', '$createdBy', '$phone')"; 

    mysqli_query($db, $sql); 
    header("Location: post2.php"); 
    } 
?> 

<!DOCTYPE html> 
<html lang="en"> 
<div class="container"> 
<head> 
    <title>Create Business Plan</title> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script> 
    <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> 
</head> 
<body> 
    <h2>Create a new business plan</h2> 
    <form action="post1.php" method="post" enctype="multipart/form-data"> 
     <br /><br /> 
     <p>Plan Title: <input name="title" type="text" autofocus size="48"></p> 
     <p>Company Name: <input name="compName" type="text" autofocus size="48"></p> 
     <p>Business Type: <input placeholder="Ie. Inc. (USA) or Oy (Finland)" name="bizType" type="text" autofocus size="48"></p>   
     <p>Created By: <input name="createdBy" type="text" autofocus size="48"></p> 
     <p>Phone: <input name="phone" type="text" autofocus size="48"></p> 
     <br /><br /> 

     <form action="<?php 'post2.php=?pid=$id'; ?>"> 
     <input name="post" type="submit" value="Next"> 
     </form> 
     <br /><br /> 
    </form> 

</body> 
</div> 
</html> 

ここでは2ページです:

<?php 
    session_start(); 
    include_once("db.php"); 

    if(isset($_POST['post'])) { 
     $marketPlan = strip_tags($_POST['marketPlan']); 
     $economics = strip_tags($_POST['economics']); 
     $products = strip_tags($_POST['products']); 
     $customers = strip_tags($_POST['customers']); 

     $marketPlan = mysqli_real_escape_string($db,$marketPlan); 
     $economics = mysqli_real_escape_string($db,$economics); 
     $products = mysqli_real_escape_string($db,$products); 
     $customers = mysqli_real_escape_string($db,$customers); 

     $date = date('l jS \of F Y h:i A'); 

     $sql = "UPDATE plans SET marketPlan='$marketPlan', economics='$economics', products='$products', customers='$customers' WHERE id=$pid"; 

     mysqli_query($db, $sql); 
     header("Location: post3.php"); //CHANGE LOCATION FOR NEXT PAGE 
    } 
    ?> 

    <!DOCTYPE html> 
    <html lang="en"> 
    <div class="container"> 
    <head> 
     <title>Create Business Plan</title> 
     <meta charset="utf-8"> 
     <meta name="viewport" content="width=device-width, initial-scale=1"> 
     <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"> 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script> 
     <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> 
    </head> 
    <body> 
     <h2>The Marketing Plan</h2> 
     <form action="post2.php" method="post" enctype="multipart/form-data"> 
      <br /><br />    
     <h4>Market Research</h4> 
     <p>The marketing plan requires intensive research for the type of industry your business wants to enter. It is very dangerous to assume that you are already well informed about your intended market. Market research is vital to make sure you are up to date. Use the business planning process as your opportunity to uncover data and to question your marketing efforts.</p> 
    <textarea name="marketPlan" rows="15" cols="100"></textarea></p><hr /> 

<h4>Economics</h4> 
       <p>What is the total size of your market? What percent of market share will you have? (This is important only if you think you will be a major factor in the market.) What is currently in demand in your target market? What are the trends in target market—growth, consumer preferences, and in product development? Growth potential and opportunity for a business of your size. 
<textarea name="economics" rows="15" cols="100"></textarea><hr /> 

<h4>Products</h4> 
<p>In the <i>Products and Services</i> section, you described your products and services from your point of view. Now describe them from how your customers see them.</p><br /><textarea name="products" rows="15" cols="100"></textarea></p><hr /> 

<h4>Customers</h4> 
<p>Identify your targeted customers, their characteristics, and their geographical location. This is known as customer demographics.</p> 
<textarea name="customers" rows="15" cols="100"></textarea></p> 

<input name="post" type="submit" value="Next"> 
</form> 

    </body> 
    </div> 
    </html> 

答えて

1

定義されている。このような、むしろ挿入して更新するよりも、いくつかのことを行いますデータベースへのデータは、私が意味する、セッション変数に値を格納

例:

$_SESSION["title"] = strip_tags($_POST['title']); 

は、最後のページに達するまで、このようなセッション変数にすべてのオプションを格納します。

最後に最後のページ

dbに挿入します。あなたが複数のページにまたがってデータを渡したいときに、このように、

insert into table ('title',.....) values ($_SESSION["title"],....); 

は常にセッションを使用しています。

+0

ありがとう@Charles_R!あなたのための簡単な質問。 $ _SESSION ["title"] = strip_tags($ _ POST ['title']);私は、 "定義されていないインデックス"と言うエラーをたくさん聞いていたことに気付き、その行に言及しました。私はそれを使って演奏しています。これは、タイトルの前に '$ _SESSION ['$ title'] = strip_tags($ _ POST ['title']);' $ _SESSION ['title'] = strip_tags($ _ POST ['title']); 'ドル記号なし。ドル記号がある場合、strip_tags関数の実行に影響しますか? mysqli_real_escape_stringと同じです。前もって感謝します! – MangoPie

+0

@MangoPie申し訳ありませんが、実際には私はパフォーマンスのばらつきについてあまりよく分かりません。しかしそれはそれほど変わらないだろうと思う。 –

0

私はあなたが右だけやっていると思います。最初の投稿は、これらの詳細をテーブルに挿入する必要があります。次に更新するフィールドは何ですか。あなたはdoesntのIDを更新しようとしてあなたのURLから

if (isset($_GET['pid'])) 
    $pid = $_GET['pid']; 

をIDを取得する必要があり、2ページ目で

0

+0

* sigh * URLを介した投稿IDは安全ではないので、禁止する必要があります。あなたはどのようにそれらのdataleakが発生すると思いますか? – JvO

0

新しく作成したレコードのIDを次のページに渡す必要があります。最も安全な方法はおそらくセッションにそれを格納することです。だから、ページ1で、これを変更:

mysqli_query($db, $sql); 

$query = mysqli_query($db, $sql); 
$_SESSION['new_plan_id'] = $query->insert_id; 

に続いて、2番目のページのクエリでIDは再び

if (isset($_SESSION['new_plan_id'])) 
{ 
    $pid = $_SESSION['new_plan_id']; 
} 
else 
{ 
    die('No valid session'); 
} 

ユーザーは、彼または彼女の計画を終えた後、セッションからnew_plan_idを削除します。 session_start()をグローバルインクルードに追加して、常に有効にすることもできます。

関連する問題