2016-09-29 4 views
-1

私は誰かが投稿したものを投稿するたびに、既に存在する投稿の下に表示したいと思います。私がこれを使うと、最後の投稿だけが置き換えられます。 どうすればいいですか?ユーザーの投稿をページに表示させる方法は?

<?php 
session_start(); 
$db = mysqli_connect("localhost", "root", "", "store"); 
if (isset($_POST['button'])) { 
    session_start(); 
    $title= mysqli_real_escape_string($db, $_POST['title']); 
    $body= mysqli_real_escape_string($db, $_POST['body']); 
    $sql = "INSERT INTO content (title,body) VALUES ('$title', '$body')"; 
    mysqli_query($db, $sql); 
    $_SESSION["title"] = $title; 
    header("location: home.php"); 
} 
?> 

そして、私が表示したいページ上:

<?php 
    session_start(); 
    php echo $_SESSION["title"]; 
?> 
+6

あなたがSELECTで成功クエリの結果の上にリダイレクトし、ループする必要があります。 btw、準備されたステートメントを使用します。あなたが使っているものでさえ注入することができます。 2倍の 'session_start();'も持っていて、2番目のものを削除します。 –

+0

質問も広すぎます。 「何かを学ぶ」ためには、「何かを試してみる」必要があります。いくつかのコードを書いて問題に直面するかもしれないときは、私たちが助けます。または、あなたは誰かが来て、あなたのラップに「魚を落とす」のを待つことができます。魚を学ぶ "どのように"実際に大きな報酬を返済するでしょう。あなたのために"。レストランは最終的に閉じるので、料理人は常にあなたのためにそこにいるわけではありません。どのようにあなた自身のために料理するかを学ぶ;-)あなたは立ち往生しないで、何をすべきかを知るでしょう。 –

+0

@Fred -ii-私はリダイレクトとループを調べますが、私は何を探すべきかを知りませんでした... – OneBeginner

答えて

0

あなたはどんな条件でhome.phpにページをリダイレクトするために持っていますが、あなたはそれを行っていません。

実行後にmysqli_query()が返された場合、FALSEまたはTRUEが返され、それはお勧めできません。 ページにが必要なので、SESSION variableページが必要です。

必要な場合は、このように状態を確認することができます。

if(mysqli_query($db, $sql)) 
{ 
// Here you can handle the TRUE loop 
$_SESSION["title"] = $title; 
header("location: home.php"); 
} 
else 
{ 
// Here you can handle the FALSE loop 
} 

そして、あなたが印刷するセッション変数を表示するために、以下の変更を加える必要がありhome.phpインチ

チェックポイントを使用すると、そのページへの上にスーパーグローバル変数を取得する必要がありますので、あなたがページの上部にsession_start()があることを確認し、他のページ

  1. でセッション変数を印刷します。
  2. あなたは、そのページへのオーバーDBの接続を確保する必要があるDBから照会され何も表示する必要がある場合。
  3. 任意のヘッダロケーションエラーは、あなたが場所をヘッダー開始しているページの上に出力バッファリングを再起動しようが発生した場合。あなたは、リダイレクトの問題でheader already sent errorを取得した場合にのみob_start()
  4. ob_start()の助けを借りて、あなたの出力バッファリングを使用する必要があります再起動することができます。

ob_start()の使用方法:「正常に出力されるだろう、すべてを覚えて起動しますが、非常にまだそれで何もしない」というようob_start()

思考

例:

ob_start(); 
echo("Welcome User!"); //would normally get printed to the screen/output to browser 
$output = ob_get_contents(); 
ob_end_clean(); 

ob_start() - 出力バッファリング

この関数は出力のバッファリングをオンにしますオンにします。出力バッファリングがアクティブな間は、出力はスクリプト(ヘッダ以外)から送られず、出力は内部バッファに格納されます。この内部バッファの

内容ob_get_contents()を使用して文字列変数にコピーされてもよいです。内部バッファに格納されているものを出力するには、ob_end_flush()を使用します。あるいは、ob_end_clean()は、バッファの内容を黙って破棄します。

戻り値成功時には、失敗した場合はFALSEが返されます。

は、オーバーあなたが作った質問に、あなたはあなたがsession始めている

いくつかの変更を行う必要があり、それは良いのですが、あなたはecho文にphpを付加している、それは間違って見えます。

置き換えますと

php echo $_SESSION["title"]; 

echo $_SESSION["title"]; 

をむしろ他のすべてのコードは大丈夫です。

全体全体のページは次のようになります。

<?php 
session_start(); 
$db = mysqli_connect("localhost", "root", "", "store"); 
if (isset($_POST['button'])) { 
    //session_start(); This is not needed at all already you have started the session. 
    $title= mysqli_real_escape_string($db, $_POST['title']); 
    $body= mysqli_real_escape_string($db, $_POST['body']); 
    $sql = "INSERT INTO content (title,body) VALUES ('$title', '$body')"; 
    mysqli_query($db, $sql); 
    $_SESSION["title"] = $title; 
    header("location: home.php"); 
} 
?> 

home.php

<?php 
    session_start(); 
    echo $_SESSION["title"]; 
?> 

注:あなたのコードは、mysqli.*

と一緒に準備されたステートメントを使用することをお勧めされたSQLインジェクションの脆弱性であります準備済みの文リファレンスfまたはMysqli:-http://php.net/manual/en/mysqli.prepare.php

あなたのエラーとコードを修正するために私の説明がはっきりしていると思います。

おかげ&ハッピーコーディング:)

+0

私はPrepared Statementsでコードを書き直しましたが、動作しますが、私はまだ数日前にPHPで始まったばかりのループを管理していませんでした。 – OneBeginner

関連する問題