2017-07-18 20 views
0

こんにちは、皆さん、PHPでSQLデータベースを更新するためのすばらしいCRUDファイルを見つけました。すべてうまく動作しますが、非常に面倒なのはindex.phpページedit.phpにリンクするボタンはありますか?post_id =そうですが、私はページをテストするのが好きなので、私はこのようなことをすれば何が起きるのかを自分に伝える退屈な非論理的な人になるだろうからどのように私はedit.phpを置くのではなく、何をしたのですか?post_id =そして私のmysqliデータベースからの投稿のIDをURLに入れます。代わりに、これを単にedit.phpとしてURLに入れて、 mysqli_fetch_array()は、パラメータ1がmysqli_result、booleanが行43に与えられていると想定していますので、基本的には、このedit.phpページを修正する必要があります。いくつかの1つのタイプww www.example.com/edit.php?post_id=にエラーがないので、w.example.com/edit.phpedit.phpページでエラーが発生しないようにしたい

ここで私は

視覚

image 1

image 2

とコード

<?php 

include("/fake_path/instructions/php/session_and_connection.php"); 

if(isset($_POST['update'])) 
{ 

$post_id = mysqli_real_escape_string($connect, $_POST['post_id']); 

$user_id = $row['user_id']; 
$topic_id = mysqli_real_escape_string($connect, $_POST['topic_id']); 
$post_title = mysqli_real_escape_string($connect, $_POST['post_title']); 
$post_content = mysqli_real_escape_string($connect, $_POST['post_content']); 


// checking empty fields 
if(empty($post_title) || empty($post_content)) {  

if(empty($post_title)) { 
echo "<font color='red'>post_title field is empty.</font><br/>"; 
} 

if(empty($post_content)) { 
echo "<font color='red'>post_content field is empty.</font><br/>"; 
} 

} else {  
//updating the table 
$result = mysqli_query($connect, "UPDATE posts SET user_id='$user_id',topic_id='$topic_id',post_title='$post_title',post_content='$post_content' WHERE post_id=$post_id"); 

//redirectig to the display page. In our case, it is index.php 
header("Location: index.php"); 
} 
} 
?> 
<?php 
//getting post_id from url 
$post_id = $_GET['post_id']; 

//selecting data associated with this particular post_id 
$result = mysqli_query($connect, "SELECT * FROM posts WHERE post_id=$post_id"); 

while($res = mysqli_fetch_array($result)) 
{ 
$user_id = $res['user_id']; 
$topic_id = $res['topic_id']; 
$post_title = $res['post_title']; 
$post_content = $res['post_content']; 
} 
?> 
<html> 
<head> 
<title>Edit Data</title> 
</head> 

<body> 
<a href="index.php">Home</a> 
<br/><br/> 

<form name="form1" method="post" action="edit.php"> 
<table border="0"> 
<tr> 
<td>post_title</td> 
<td><input type="text" name="post_title" value="<?php echo $post_title;?>"></td> 
</tr> 
<tr> 
<td>post_content</td> 
<td><input type="text" name="post_content" value="<?php echo $post_content;?>"></td> 
</tr> 
<tr> 
<td><input type="hidden" name="post_id" value=<?php echo $_GET['post_id'];?>></td> 
<td><input type="submit" name="update" value="Update"></td> 
</tr> 
</table> 
</form> 
</body> 
</html> 
+0

'$ post_id'が空であればSQLを呼び出しませんか? – Scuzzy

答えて

0

あなたはpost_idのを持っていない場合は、なぜない意味ですdbクエリを次のように更新します。01 SELECT * FROM postsからSELECT * FROM posts WHERE post_id=$post_idとライン36と37第一すなわち

//getting post_id from url 
$post_id = $_GET['post_id']; 
+0

まあ、私はあなたの提案をしました。しかし、それは他の言葉で私に奇妙な結果をもたらしたので、私がページに直接行ったときに、データベースからのランダムな情報があり、他の情報を編集しようとしても情報は同じままでした。だから、私はそれがどのように動作するようにしたいのかうまくいかなかった。 –

+0

なぜ 'post_id'を削除したいのか分かりません。通常のクラド操作では、データベースからレコードを識別する必要があり、後でそのレコードを更新することができます。 – shivgre

0

を削除:使用exit()header()後の機能

header("Location: index.php"); exit(); 

第二: GETパラメータが空のときにクエリを実行するべきではありません以下のようにisset!empty()を使用してください。

if(!empty($_GET['post_id '])) { 

    //getting post_id from url 
    $post_id = $_GET['post_id']; 

    ....... 

    </html> 
} 

第三:セットがいずれかのフィールドが空の場合になるように、URLを提出で再びパラメータを取得し、それが値をエコーし​​ても、再び$_GET['post_id']、このIDを使用してデータベースからデータをフェッチすることを意味します。

<form name="form1" method="post" action="edit.php<?php if(isset($_GET['post_id'])){ echo '?post_id='.$_GET['post_id']; ?>"> 

は、第4回: SQLインジェクションにavaoidするprepared statement or pdoを使用するようにしてください

第5回:単一の行のレコードセットのためのwhileループする必要はありません。

+1

あなたは両方とも必要ではありません、 '!empty()'はあなたが必要なものです;-) – Qirel

+0

私はあなたが提案したことをしましたが、今は前と同じエラーが発生します。 –

関連する問題