使用PHP删除字符串的一部分

时间:2013-10-15 19:48:17

标签: php mysql

我有这个PHP代码:

$sql="SELECT * from project_gallery where sequence = '".$_POST["project_sequence"]."' ";
    $rs=mysql_query($sql,$conn);
    $project=mysql_fetch_array($rs);

    $images = explode(',',$project['images']);

    $images = "," . $images . ","; // add comma to beginning and end of list

    foreach ($images_to_delete as $image_to_delete)
    {
        str_replace("," . $image_to_delete . ",", ","); // e.g. replaces ",image1.jpg," with ","
    }

    $images = substr($images, 1, -1); // remove comma from beginning and end

    echo $images;

我希望能够从MySQL表格中的单元格中删除所选字符串(在之前的HTML表单中)部分字符串。

在我的表格中,我的图像文件名存储如下:

[image1.jpg],[image2.jpg],[image3.jpg],[image4.jpg]等......

所以如果选中image2.jpg的复选框并提交表单,我想让字符串看起来像:

`[image1.jpg],[image3.jpg],[image4.jpg]`

这里也是我的HTML表单:

<?php
$sql="SELECT * from project_gallery where sequence = '".$_GET["project"]."' ";
    $rs=mysql_query($sql,$conn);
    $project=mysql_fetch_array($rs);

    $images = explode(',',$project['images']);
    ?>
    <form action="edit.php?project=<?php echo $_GET["project"]; ?>" method="post" enctype="multipart/form-data">
    <table width="100%" border="0" cellspacing="5" cellpadding="5">
        <tr>
            <td><strong>Project Name</strong><br />
            <input type="text" name="project_name" value="<?php echo $project["name"]; ?>" style="width:100%;" /></td>
        </tr>
        <tr>
            <td><strong>Add New Images</strong><br /><input type="file" name="images[]" multiple="multiple" /></td>
        </tr>
        <?php
        foreach($images as $image)
        {
            $display_image = substr($image, 1, -1);
            ?>
            <tr>
                <td><img src="/img/project-gallery/<?php echo $display_image; ?>" width="160px" /><br />
                <input type="checkbox" name="images_to_delete[]" id="images_to_delete[]" value="<?php echo $display_image; ?>" /></td>
            </tr>
            <?php
        }
        ?>
        <tr>
            <td><input type="text" name="project_sequence" id="project_sequence" value="<?php echo $project["sequence"]; ?>" />
            <input type="submit" name="submit" id="submit" value="Save Project" /></td>
        </tr>
    </table>
    </form>

2 个答案:

答案 0 :(得分:0)

您可以使用PHP字符串替换(或类似的东西)来创建新字符串

$newList = str_replace($selectedEntry, '', $imageList);

然后你可以运行mysql UPDATE命令来更新数据库中的那条记录。

$sql = "UPDATE table_name SET column_name = '$newList' WHERE id = $id";

那就是说,你可能不应该做你正在做的事情。您不希望通常操纵这样的记录。我建议让另一个表包含所有图像数据(imageID,imageName等),然后在整个表中插入和删除整行。有更多有效/复杂的处理方式,但如果您最终必须通过数据库中的字符串/ text / varchar字段创建列表,那么您可能无法做正确的事情。

编辑: 获取之前检查过的条目:

$(function () {
  $('#target').click(function () {
    var checkValues = $('input[name=checkboxlist]:checked').map(function() {
        return $(this).parent().text();
    }).get();
    //do something with your checkValues array
   });
});​

答案 1 :(得分:0)

你做得太难了。使用PHP的内置函数,例如array_diff()导致代码更简洁,(通常)表现更好:

示例:我假设$ project是从查询结果中获取的行,$ images_to_delete是一个数组。结果是一个字符串,其中包含您要保留的新图像列表。

此外,我还展示了PDO的用法,它比不推荐使用的ext / mysql函数更安全,更容易。

$sql="SELECT * from project_gallery where sequence = ?";
$stmt = $pdo->prepare($sql) 
  or trigger_error($pdo->error, E_USER_ERROR);
$stmt->execute(array($_POST["project_sequence"])) 
  or trigger_error($pdo->error, E_USER_ERROR);
while ($project = $stmt->fetch(PDO::FETCH_ASSOC) { }

$images = explode(",", $project["images"]);
$images = array_diff($images, $images_to_delete);
$images = implode(",", $images);
echo $images . "\n";

然后删除剩下的代码:

  

$ images =“,”。 $图片。 “”; //在列表的开头和结尾添加逗号
  foreach($ images_to_delete as $ image_to_delete)
  {
      str_replace(“,”。$ image_to_delete。“,”,“,”); //例如将“,image1.jpg”替换为“,”   }
  $ images = substr($ images,1,-1); //从开头和结尾删除逗号
  echo $ images;