php
  • mysql
  • sql
  • mysqli
  • phpmyadmin
  • 2016-06-11 61 views -1 likes 
    -1

    我希望用户更新他们想要在d数据库表中的任何字段,但我不希望UPDATE .. SET删除现有的空提交记录,如果他们提交而不改变所有田野..但只改变他们希望那些以..PHP - MYSQLI - UPDATE DATABASE

    $sql = "UPDATE table SET username = '$username', email = '$email', 
    fname = '$fname', lname = '$lname', address = '$address', city = '$city', 
    country = '$country', phone = '$phone', aboutme = '$aboutme' WHERE email = '$email'"; 
    

    如果用户只更新地址,然后电话提交他项..这个指令可以擦除未在表单填写等领域...我不希望发生这种情况。请看看这个。由于

    请我曾尝试你的建议,但它不是为我工作。我可能做错了什么 - 我是新来的PHP - 这是我下面的代码:

    $sql = "UPDATE user_profile SET "; 
    if ($username!="") 
    $sql ."username = '$username'," 
    
    if ($fname!="") 
    $sql ."fname = '$fname'," 
    
    if ($lname!="") 
    $sql ."lname = '$lname'," 
    
    if ($address!="") 
    $sql ."address = '$address'," 
    
    if ($city!="") 
    $sql ."city = '$city'," 
    
    if($country!="") 
    $sql ."country = '$country', " 
    
    if($phone!="") 
    $sql ."phone = '$phone', " 
    
    if($aboutme!="") 
    $sql ."aboutme = '$aboutme' " 
    
    $sql ."WHERE email = '$email'"; 
    
    $query = mysqli_query($database,$sql); 
    if($query) 
    { 
        $message = "<div class=\"btn btn-lg btn-default\"><i class=\"text-success text-center\">Update Successful!</i></div>"; 
        //echo "update successful"; 
    } 
    
    +1

    如果他们正在更新信息,那么表单中填充了已存储在数据库中的任何内容。这样,没有空值被传递,并且用户不必再次填写表单中他们不想更新的所有内容 –

    +0

    @AndrewNolan正确;这是我过去使用过的,也是为这个问题想到的。+1 –

    回答

    2

    您应该使用参数,而不是将用户输入直接放入字符串中。但是,这是一个很好的做法,可以防止SQL注入和不良形成的参数。

    尽管如此,并没有帮助你解决问题。你需要看看是否有新的价值,否则,使用旧的。假设新值不存在时为NULL,则使用COALESCE()。例如:

    SET username = COALESCE($username, username), 
        . . . 
    

    注:没有理由设置emailSET语句,因为你是在WHERE使用它。

    +0

    *“没有理由在SET语句中设置电子邮件,因为您在WHERE中使用它”* - 戈登的一个好处,但如果电子邮件确实需要更改,该怎么办?这确实是一种选择,可能是他们的代码应该做的。 –

    +0

    由于''用户名'在引号中,它永远不会是'NULL'。如果PHP变量为空,则会在SQL中创建一个空字符串。 – Barmar

    +0

    感谢所有,但我是新来的PHP我真的需要一个出路 - 因为我有一个项目交付..我不明白你的意思 – user3418506

    1

    您可以检查值是否非空,并基于它们来构建查询。

    $sql="Update table set "; 
    if ($username!="") 
        $sql=$sql."username='$username'"; 
    if ($fname!="") 
        $sql=$sql.",fname='$fname'"; 
    if ($lname!="") 
        $sql=$sql.",lname='$lname'"; 
    if ($address!="") 
        $sql=$sql.",address='$address'"; 
    if ($city!="") 
        $sql=$sql.",city='$city'"; 
    if ($phone!="") 
        $sql=$sql.",phone='$phone'"; 
    if ($phone!="") 
        $sql=$sql.",aboutme='$aboutme'"; 
    $sql=$sql." where email='$email'"; 
    

    我认为这是控制输入,并以这种方式只修改了必须改变这些元素的简单方法。

    我向您解释此代码的作用:在您的if语句之前构建查询的固定部分。然后控制用户名是否为非空,并以这种方式将前一部分连接到当前部分。我已经明确地写了这个陈述,所以看起来更清楚。如果不明确,请发表评论。

    P.S.请注意,我已经感动了“”在未来的声明中每一行的,因为如果你写你的查询

    update table set username='$username',lname='$lname', where ... 
    

    它返回一个错误,但使用你会得到类似 更新表的新途径set username ='$ username',lname ='$ lname'其中 正如你所见,lname没有最后的“,”

    PPS请尝试编写echo $ sql;为了查看您的查询并调整您的错误。您可以张贴在这里,共同解决问题

    感谢这一点 - 这是我所done--然而它没有更新 - 我想查询不工作尚未见我下面全码:

    if(isset($_POST["update"])) //the update button in the FORM 
    { 
         $host = "localhost"; 
         $user = "root"; 
         $pass = ""; 
         $db = "pre_exam_success"; 
    
    $username= $_POST['uname']; 
    $email = $_POST['email']; 
    $fname = $_POST['fname']; 
    $lname = $_POST['lname']; 
    $address = $_POST['address']; 
    $city = $_POST['city']; 
    $country = $_POST['country']; 
    $phone = $_POST['phone']; 
    $aboutme = $_POST['aboutme']; 
    
    $database = mysqli_connect("$host", "$user", "$pass", "$db")or die("cannot connect to server"); 
    
    $sql="UPDATE table SET "; 
        if ($username!="") 
    $sql=$sql."username='$username'"; 
        if ($fname!="") 
    $sql=$sql.",fname='$fname'"; 
        if ($lname!="") 
    $sql=$sql.",lname='$lname'"; 
        if ($address!="") 
    $sql=$sql.",address='$address'"; //THERE WAS AN ERROR, MISSED COMMA 
        if ($city!="") 
    $sql=$sql.",city='$city'"; 
        if ($phone!="") 
        $sql=$sql.",phone='$phone'"; 
        if ($aboutme!="") 
    $sql=$sql.",aboutme='$aboutme'"; 
    $sql=$sql." WHERE email='$email'"; 
    
    $query = mysqli_query($database,$sql); 
    if($query) 
    { 
        $message = "<div class=\"btn btn-lg btn-default\"><i class=\"text-success text-center\">Update Successful!</i></div>"; 
        //echo "update successful"; 
    } 
    
    +1

    请确保你删除最后一个'列='$ value''后的逗号。我更喜欢使用数组,然后使用'implode(',',$ assignments)'。 – Barmar

    +0

    我试过这个,但我不知道我做错了什么,因为它不适合我。 $ database = mysqli_connect(“$ host”,“$ user”,“$ pass”,“$ db”)或死(“无法连接到服务器”); $ sql =“UPDATE user_profile SET”; 如果($用户名!= “”) $ sql中。 “用户名= '$用户名',” 如果($ FNAME!= “”) $ SQL。 “FNAME = '$ FNAME',” 如果($ address!=“”) $ sql。“lname ='$ lname',” if($ address!=“”) $ sql。“address ='$ address',”$ sql。“WHERE email ='$ email'“; $ query = mysqli_query($ database,$ sql); – user3418506

    +0

    您错过了什么,请在$ sql之后重新检查我的答案。有必要放一个“=”号。 – CiroRa

    相关问题