2017-08-08 7 views
-1

データベース行の部分を更新しない方法空ではありませんが、現時点では、フォーム上のすべてのものも空の変数に更新しますが、どうすればこの問題を解決できますか?PDO変えるパラメータ - 私はちょうどそれは私がFacebookの場合はFacebookの唯一の更新などにしようとしていますおそらく私のため</p> <p>を楽になるだろうので、プリペアドステートメントをPDOするmysqliのプリペアドステートメントから行ってきました

PHP

if (isset($_POST['submit'])) { 
    $facebook = $_POST['facebook']; 
    $twitter = $_POST['twitter']; 
    $youtube = $_POST['youtube']; 

$stmt = $dbCon->prepare(" UPDATE login_media " 
     . " SET login_media_youtube = :youtube, " 
     . " login_media_facebook = :facebook, " 
     . " login_media_youtube = :youtube, " 
     . " login_media_twitter = :twitter "); 

$stmt->bindParam(":facebook", $facebook); 
$stmt->bindParam(":twitter", $twitter); 
$stmt->bindParam(":youtube", $youtube); 
$stmt->execute(); 

} 
?> 

条件が満たされた場合に文と更新/各1を照会、私は動的に行うことが可能であると思えば、私はいけないHTML

<form class="multiForm" action="" method="POST"> 
    <input type="text" name="youtube" placeholder="Youtube"> 
    <input type="text" name="facebook" placeholder="Facebook"> 
    <input type="text" name="twitter" placeholder="Twitter"> 
    <input type="submit" name="submit"> 
</form> 

はをたくさん作るように感じますしかし、どのように?

+1

. " login_media_youtube = :youtube, "度も提示しましたそのテーブルでは、しかし、あなたは私たちにこれらの行のインデックスが何であるかを示す何も表示しないでください – RiggsFolly

+0

私はあなたが誤解していると思う、それはFacebookのブックが空ではない場合など、行:それはどの行/更新するかは関係ありません:)これはテスト目的のためだけです。 Facebookの入力欄にFacebook.com/blablaと入力すれば、データベースのFacebookしか更新されず、twitter/youtubeでは理解できないはずです。 – Javaish

+0

WHERE句を使用すると、 'login_media_facebook ISその列のデフォルト値が – RiggsFolly

答えて

2

第一:簡単な使用!empty()

第二:この行は、あなたが単一の行への更新を制限するために、あなたのクエリにWHERE句を追加する必要があり、より

<?php 

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

    $facebook = $_POST['facebook']; 
    $twitter = $_POST['twitter']; 
    $youtube = $_POST['youtube']; 

    if(!empty($facebook) || !empty($twitter) || !empty($youtube)){ 


     if(!empty($youtube)){ 
     $query_string[]= " login_media_youtube = :youtube "; 

     } 
     if(!empty($facebook)){ 
     $query_string[]= " login_media_facebook = :facebook " 

     } 
     if(!empty($twitter)){ 
     $query_string[]= " login_media_twitter = :twitter " 

     } 


    $stmt = $dbCon->prepare(" UPDATE login_media SET ".implode(' , ',$query_string)); 

    if(!empty($facebook)){ 
     $stmt->bindParam(":facebook", $facebook); 
     } 
     if(!empty($twitter)){ 
     $stmt->bindParam(":twitter", $twitter); 
     } 
     if(!empty($youtube)){ 
     $stmt->bindParam(":youtube", $youtube); 

     } 

     $stmt->execute(); 

    } 
    else { 

     echo "nothing to update "; 
    } 

} 
?> 
+1

これはそれを行う必要があります –

+1

偉大な、このコードは感謝の多くを実際にありがとう:) – Javaish

+0

喜んでそれを助ける:) @ジャワシ – JYoThI

1

このソリューションをお試しください。

$socialMedias = ['facebook','twitter','youtube']; 
$preparedStatment = "UPDATE login_media SET"; 

foreach($socialMedias as $socialMedia){ 
    if($_POST[$socialMedia]){ 
     $preparedStatment .= " login_media_{$socialMedia} = :{$socialMedia}"; 
    $stmt = $dbCon->prepare($preparedStatment); 
    $stmt->bindParam(":$socialMedia",$_POST[$socialMedia]); 
} 
} 

$stmt->execute(); 

こうして、塗りつぶしされたフィールドのみが更新されます。

+0

'$ preparedStatement'変数をUPDATE login_media SET"に編集しましたが、ここで何が起こったのか説明できますか?私はこれが実際にどのように動作するかについて少し混乱しています – Javaish

+0

@Javaishはあなたの問題を解決しますか? –

+0

@MasivuyeCokileはい、それはしましたが、私はちょっとこれがどのように動作するのか混乱しています..どのように入力フィールドのデータを取得しますか?通常は '$ _POST'を変数にバインドして渡しますが、この質問はすべての' $ _POST'データが有効なfacebook URLであるかどうかを調べるために正規表現チェックを実行するという事実に関連しています – Javaish

関連する問題

 関連する問題