查询PHP

时间:2017-02-02 17:51:23

标签: 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);
?>

提前致谢。

1 个答案:

答案 0 :(得分:0)

问题是,即使您点击提交按钮,控件也永远不会到达此if(isset($_POST["editarReceta"])){ ...块,更新表。这是因为它必须越过这个if(isset($_POST['editar'])){ ...块才能到达前面提到的if块。

解决方案是,在if(isset($_POST["editarReceta"])){ ... }块之外取整个if(isset($_POST['editar'])){ ... },如下所示:

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

另外,要在$id查询中获取UPDATE值,您必须按以下方式更改表单的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注入的影响。另请参阅how you can prevent SQL injection in PHP