2017-08-08 2 views
-1

Je suis juste allé de mysqli déclaration préparée à PDO déclaration préparée, car cela rendrait les choses plus faciles pour moi soi-disantAOP variation des paramètres - comment puis-je mettre à jour les parties d'une ligne de base de données

Je suis en train de ne mettre à jour etc facebook si facebook n'est pas vide, mais actuellement il va tout mettre à jour sur le formulaire soumettre aussi des variables vides, comment puis-je résoudre ce problème?

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(); 

} 
?> 

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> 

Je ne me sens pas comme faire beaucoup de si les déclarations et mise à jour/query chacun si une condition est remplie, je pense qu'il est possible de le rendre dynamique , mais comment?

+1

Vous devez ajouter une clause WHERE à votre requête pour limiter la mise à jour à une seule ligne dans ce tableau, mais vous ne nous montrez rien qui indiquerait quel est l'index de ces lignes – RiggsFolly

+0

Je pense que vous avez mal compris, il suffit de mettre à jour etc facebook si facebook n'est pas vide, mais actuellement il met à jour tout dans la rangée :) peu importe quelle ligne/où elle met à jour :) ceci est juste à des fins de test. Donc, si j'entre Facebook.com/blabla dans le champ de saisie Facebook, il ne devrait mettre à jour facebook dans la base de données et pas twitter/youtube j'espère que vous comprenez – Javaish

+0

Ensuite, vous avez besoin d'une clause WHERE pour dire à la requête qu'il ne peut être mis à jour que si login_media_facebook NOT NULL' ou peut-être 'login_media_facebook! = ''' En fonction de la valeur par défaut de cette colonne – RiggsFolly

Répondre

2

1er: utilisation simple !empty()

2ème: Cette ligne a présenté plus d'une fois . " login_media_youtube = :youtube, "

<?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

Cela devrait le faire –

+1

Grand, ce code fait beaucoup de sens en fait grâce :) – Javaish

+0

Je suis content que cela vous aide :) @Javaish – JYoThI

1

Essayez cette solution.

$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(); 

De cette manière, seuls les champs remplis seront mis à jour.

+0

J'ai effectué la variable '$' preparedStatement' à « Mettre à Jour login_media SET » ', mais pourriez-vous expliquer ce qui se passe exactement ici? Je suis un peu confus quant à la façon dont cela fonctionne réellement – Javaish

+0

@Javaish résout-il votre problème? –

+0

@MasivuyeCokile Oui c'est le cas, mais je suis un peu confus quant à la façon dont cela fonctionne .. comment obtient-il les données de champ d'entrée? Habituellement, je vais lier le '$ _POST' à une variable et le transmettre, cette question est également liée au fait que toutes les données' $ _POST' seront exécutées par une vérification de regex pour voir si c'est une adresse facebook valide – Javaish