2017-02-02 8 views
1

クエリの後に自分のDBを変更しようとしています。私の目標はこれです:値を照会し、小さな変更フォームでそれらをエコーし​​ます。私が「変更」をクリックすると、値がDBで変更されます。私は私が十分明確であるかどうか分からないので、ここに私のコードがあります、それは私が説明するのを助けるでしょう。クエリの後にDB行を変更するPHP

<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); 
?> 

ありがとうございます。

答えて

0

問題コントロールは、あなたがボタン表中の更新が値を送信をクリックしたにも関わらず、このif(isset($_POST["editarReceta"])){ ...ブロックに到達することはありません、です。それは前に言及したifブロックに達するためにブロックif(isset($_POST['editar'])){ ...を横断しなければならないからです。

ソリューションはこのように、if(isset($_POST['editar'])){ ... }ブロックのこの全体if(isset($_POST["editarReceta"])){ ... }外を取る、次のとおりです。UPDATEクエリで$id値を取得するために、また

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

、フォームのaction属性を変更する必要があります次の方法で

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

$idを今すぐあなたのクエリはSQLインジェクションの影響を受けやすいのでに関するprepared statement学ぶ:ところで、以下、

$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); 
?> 

追記です。また、how you can prevent SQL injection in PHPを参照してください。

+0

ありがとうございます!あなたは本当に良いことを説明した、私はそれを非常に明確にした。また、あなたが私に与えたリンクを見てみると、本当に役に立つでしょう。 – Seba

+0

@Seba大歓迎です!お役に立てて嬉しいです。 :-) –

関連する問題