php - 查询 PHP 后修改数据库行

标签 php html mysql

我正在尝试在查询后修改我的数据库。我的目标是:查询值,用一些修改形式回显它们,如果我点击“修改”,这些值将在数据库中修改。我不知道我是否说得足够清楚,所以这是我的代码,也许它会帮助我解释。

<h3>¿Quieres editar tu receta?</h3>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <h3>Introduce tu email: </h3><input type="text" name="email" placeholder="email"/><br/>
    <input type="submit" name="editar" value="Buscar mi receta" class="send-btn">
</form>
<?php
    date_default_timezone_set('Europe/Madrid');
    $link = mysqli_connect("localhost", "root", "root", "db_csw");
    if(!$link){
        die("Conexion fallida: ". mysqli_error());
    }
    if(isset($_POST['editar'])){
        $email = $_POST["email"];
        $query = "SELECT * FROM datosformulario WHERE email LIKE '%".$email."%'";
        $res = mysqli_query($link, $query);
        if($res !== false && mysqli_num_rows($res) > 0){
            while ($aux = mysqli_fetch_array($res)){
                $accion = $_SERVER['PHP_SELF'];
                $id = $aux['id'];
                echo "Nombre de la receta: ".$aux['nombrereceta']."<br>";
                echo "Pasos de la receta: ".$aux['pasosreceta']."<br>";
                echo "<br><br>";
                echo "¿Quieres editar esta receta?<br/>";
                echo "<form method='POST' action='".$accion."'>";
                echo "<input type='text' name='nombreRecetaEditada' placeholder='Nombre de la receta'/><br/>";
                echo "<textarea cols='42' rows='10' name='pasosRecetaEditada' placeholder='Pasos de la receta'></textarea><br/>";
                echo "<input type='submit' name='editarReceta' value='Editar' class='send-btn'><br/>";
                echo "</form>";
                if(isset($_POST["editarReceta"])){
                    $nombreRecetaEditada = $_POST["nombreRecetaEditada"];
                    $pasosRecetaEditada = $_POST["pasosRecetaEditada"];
                    $actualizaReceta = "UPDATE datosformulario SET nombrereceta='$nombreRecetaEditada',pasosreceta='$pasosRecetaEditada' WHERE id=$id";
                    $exito = mysqli_query($link, $actualizaReceta);
                    if($exito !== false){
                        echo "Receta modificada";
                    } else {
                        echo "No se pudo modificar la receta";
                    }
                }
            }
        } else {
            echo "El email introducido no se ha usado para enviar ninguna receta. Por favor, prueba de nuevo";
        }
    }
    mysqli_close($link);
?>

提前致谢。

最佳答案

问题是,控件永远不会到达这个 if(isset($_POST["editarReceta"])){ ... block 单击提交 按钮更新表中的值。那是因为它必须穿过这个 if(isset($_POST['editar'])){ ... block 才能到达前面提到的 if block 。

解决方案是,在 if( isset($_POST['editar'])){ ... } block ,像这样:

// your code
if(isset($_POST["editarReceta"])){
    ...
}
if(isset($_POST['editar'])){
    ...
}
// your code

此外,要在 UPDATE 查询中获取 $id 值,您必须按以下方式更改表单的 action 属性,

echo "<form method='POST' action='".$accion."?id='".$id.">";

这样您就可以通过以下方式捕获适当的$id

$id = (int)$_GET['id'];

这是完整的代码

<h3>¿Quieres editar tu receta?</h3>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <h3>Introduce tu email: </h3><input type="text" name="email" placeholder="email"/><br/>
    <input type="submit" name="editar" value="Buscar mi receta" class="send-btn">
</form>
<?php
    date_default_timezone_set('Europe/Madrid');
    $link = mysqli_connect("localhost", "root", "root", "db_csw");
    if(!$link){
        die("Conexion fallida: ". mysqli_error());
    }

    if(isset($_POST["editarReceta"])){
        $id = (int)$_GET['id'];
        $nombreRecetaEditada = $_POST["nombreRecetaEditada"];
        $pasosRecetaEditada = $_POST["pasosRecetaEditada"];
        $actualizaReceta = "UPDATE datosformulario SET nombrereceta='$nombreRecetaEditada',pasosreceta='$pasosRecetaEditada' WHERE id=$id";
        $exito = mysqli_query($link, $actualizaReceta);
        if($exito !== false){
            echo "Receta modificada";
        } else {
            echo "No se pudo modificar la receta";
        }
    }

    if(isset($_POST['editar'])){
        $email = $_POST["email"];
        $query = "SELECT * FROM datosformulario WHERE email LIKE '%".$email."%'";
        $res = mysqli_query($link, $query);
        if($res !== false && mysqli_num_rows($res) > 0){
            while ($aux = mysqli_fetch_array($res)){
                $accion = $_SERVER['PHP_SELF'];
                $id = $aux['id'];
                echo "Nombre de la receta: ".$aux['nombrereceta']."<br>";
                echo "Pasos de la receta: ".$aux['pasosreceta']."<br>";
                echo "<br><br>";
                echo "¿Quieres editar esta receta?<br/>";
                echo "<form method='POST' action='".$accion."?id='".$id.">";
                echo "<input type='text' name='nombreRecetaEditada' placeholder='Nombre de la receta'/><br/>";
                echo "<textarea cols='42' rows='10' name='pasosRecetaEditada' placeholder='Pasos de la receta'></textarea><br/>";
                echo "<input type='submit' name='editarReceta' value='Editar' class='send-btn'><br/>";
                echo "</form>";
            }
        } else {
            echo "El email introducido no se ha usado para enviar ninguna receta. Por favor, prueba de nuevo";
        }
    }
    mysqli_close($link);
?>

旁注:了解 prepared statement因为现在您的查询容易受到 SQL 注入(inject)的影响。另见 how you can prevent SQL injection in PHP .

关于php - 查询 PHP 后修改数据库行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42009055/

相关文章:

javascript - 如何正确分离 JavaScript View /逻辑代码

html - 由于 mime 类型文本/html,样式在 gulp watch 任务后不起作用

php - 带 child 怎么办?

php - 向 CSS 表格添加样式

php - PHP 中的脚本问题

php - 根据用户处理 PHP 时区

PHP - 使用空合并运算符通过引用进行赋值

javascript - 如何在不单击 Javascript 按钮的情况下触发操作?

php - 拉维尔 :Mediable Duplication error SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry

mysql查询: match against using wildcard