Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 有条件地将数据插入MySQL_Php_Mysql_Pdo - Fatal编程技术网

Php 有条件地将数据插入MySQL

Php 有条件地将数据插入MySQL,php,mysql,pdo,Php,Mysql,Pdo,我有一个表单,我希望用户能够使用该表单将记录插入数据库并对其进行编辑。更新查询可以正常工作,但当表单中的某个字段为空时,它会用一个NULL或空值替换该特定字段中已存在的数据,从而替换现有数据 如何设置表单以允许它一次插入一个字段,而不将现有记录替换为NULL 这是我的HTML表单: <form action="saveprofile.php" method="post"> <p class="text-muted"> <

我有一个表单,我希望用户能够使用该表单将记录插入数据库并对其进行编辑。更新查询可以正常工作,但当表单中的某个字段为空时,它会用一个
NULL
或空值替换该特定字段中已存在的数据,从而替换现有数据

如何设置表单以允许它一次插入一个字段,而不将现有记录替换为
NULL

这是我的
HTML
表单:

<form action="saveprofile.php" method="post">
          <p class="text-muted">
              <input type="text" class="form-control"name="shortbio" id="shortbio" >
          </p>
          <hr>  
<textarea class="form-control" type="text" placeholder="Long Bio" name="longbio" id="longbio"></textarea>
          </p>  
                <hr>
<input type="text" class="form-control" name="location" id="location" >

            </form>

更新查询工作得很好。但是现在由于我没有将每个填充设置为必需,当我填充表单的一个部分并将其他部分留空时,数据库表中现有字段中的现有记录将替换为null。

您需要通过if/else条件检查表单的每个输入值。之后,您需要相应地生成/执行数据库查询。就像在更新查询中一样,您将只选择这些以HTML形式给出值的列。若并没有给出该值,那个么您将不会在更新查询中选择这些列

$sql = "UPDATE profile SET ";
if(!empty($_GET['shortbio'])){
        $shortbio = $_GET['shortbio'] ;    
        $sql .= "shortbio='$shortbio', ";
}

if(!empty($_GET['longbio'])){
        $longbio = $_GET['longbio'] ;    
        $sql .= "longbio='$longbio', ";
}

if(!empty($_GET['location'])){
        $location = $_GET['location'] ;    
        $sql .= "location='$location', ";
}
$sql = rtrim($sql, ','); //Remove additional comma
$sql .= "WHERE user_id=$user_id LIMIT 1";

只需按如下方式重新填充表单数据:

 <?php 
    $sql= "select * from table";
    $result=mysqli_query($sql);
    $row=mysqli_fetch_array($result);
    ?>


         <form action="saveprofile.php" method="post">
                 <p class="text-muted">
                   <input type="text" class="form-control"name="shortbio" id="shortbio" value="<?php echo $row['col_name']?>" >
                  </p>
            </form>


你能不能先检查
NULL
/空值,然后只在它们存在的情况下有条件地插入它们?是的,这是一个完美的解决方案。但是我不知道怎么做,我是php/MySQL新手,只需将现有值重新填充到表单值中即可。这样,数据库中的值将替换为相同的数据。此代码易受SQL注入攻击。请仔细阅读并使用参数化查询。否则,恶意用户可能会损坏您的数据,或者更糟。因此,我猜在本例中,您的建议是:如果{shortbio='$shortbio'set shortbio='$shortbio'}我正在与syntax@AngelaDutchan请检查更新的答案。我已经在其中添加了代码。这其中有一个问题,它会在查询中留下最后一个额外的逗号(,),所以需要在最后一个查询中对其进行清理query@VikasUmrao我已经更新了代码,添加了rtrim($sql,,'),这将删除额外的逗号。@Shujaat其伟大之处
 <?php 
    $sql= "select * from table";
    $result=mysqli_query($sql);
    $row=mysqli_fetch_array($result);
    ?>


         <form action="saveprofile.php" method="post">
                 <p class="text-muted">
                   <input type="text" class="form-control"name="shortbio" id="shortbio" value="<?php echo $row['col_name']?>" >
                  </p>
            </form>