2017-02-11 11 views
0

にフォームの出力をすべて入れますが、ループを実行しますが、削除を実行しようとするたびに動作を停止します。私のデータベースには、idの1つがあります。これはユニークです。 idフィールドを使用して削除しようとしていますが、エラーは表示されず、また動作しません。もし私がにコードを入れたら、ループはそれ自身を削除し、メッセージを一つずつ表示します。ループ外で削除するにはどうすればよいですか?フォームを提出した後にデータベースからレコードが削除されない

<?php 
    session_start(); 
?> 

<html> 
<body> 

<?php 
    require_once 'login.php'; 
    $connection = new mysqli($db_hostname, $db_username, $db_password, $db_database); 
    if (!$connection) 
     die("unable to connect to mysqli:" . mysqli_error()); 

    mysqli_select_db($connection, "dbase1") or die("db not selected" . mysqli_error()); 

    $sql = " SELECT * FROM tab"; 
    $result = $connection->query($sql); 

    if ($result->num_rows > 0) { 

     while ($row = $result->fetch_assoc()) { 
?> 
    <form class="boxed" style ="border: 4px solid black ; text-align: center; action ="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 

    <h1> Message </h1> 

    <?php echo "<br>" . "Name: " . $row["name"] . "<br>" . " Email : " . $row["email"] . "<br>" . "Phone # " . $row["phone"] . "<br>" . "Message : " . $row["text"] . "<br>"; ?> 
    <input type="submit" class="button" name="delete" value="delete" style =" background-color: grey; 
     border: none; 
     color: white; 
     padding: 15px 70px; 
     margin: 15px 0px; 
     cursor: pointer;"/>  
    </form> 
<?php 

     } 
    } 


    if (isset($_POST['delete'])) { 
     echo "hry"; 

     $sql = " DELETE FROM tab WHERE id=" . $row["id"]; 
     $result = $connection->query($sql); 
    } 
?> 
</body> 
<html> 
+1

最初のもの - あなたのコードをフォーマットしてください。あなたが投稿したものは恐ろしいです。フォーム提出の仕組みを学ばなければなりません。フォームをループで作成しますが、フォームは送信ボタン以外のデータを送信しません。では、どのレコードを削除するのかはどうやって分かりますか?これをチェックしてhttp://www.w3schools.com/php/php_forms.aspコードを改善すれば、私は助けます。 –

+0

申し訳ありません私はPHPの初心者ですが、私はあなたが私はコードをインデントする必要があります私は立ち往生している提案何ですか? –

+0

そこに他の方法がありますが、ループ中に複数のデータベースエントリを削除ボタンで表示し、もう一度、ありがとう! –

答えて

0

間違いなくあなたは、より良い、同じ目的のために同じ引用符を使用していない"'を混ぜて、コードを読みやすくするためにインデントを使用して、あなたのコードをフォーマットする必要があります。また、スタイリングのためにインラインスタイルとistead使用クラスの使用を避けるようにしてください。

機能自体には、フォームの提出によって削除したいものの「識別」を行う必要があります。すべてのフォームが同じ場合、どのレコードを削除したいのか、スクリプトはどのように知っていますか? また、なぜレコードの削除コードを最後ではなくスクリプトの先頭に置くのかについて考えてみましょう。あなたのシナリオで:削除をクリックすると、スクリプトはすべてのレコード(フォーム)を再度表示し、それらのうちの1つを削除します(これ以上は存在しないroceordを示す基本的なものです)。レコードの削除コードが最初にある場合は、レコードが削除され、次にループに必要な内容が表示されます。

これらはすべて、あなたがより多くの方法をHTML & PHPの仕事を勉強する必要がありますので、非常に基本です...

の改善と機能コード:

<?php 
require_once 'login.php'; 
$connection = new mysqli($db_hostname, $db_username, $db_password, $db_database); 
if (!$connection) { 
    die('unable to connect to mysqli:' . mysqli_error()); 
} 
//not neccesary when the db is selected during connection 
//mysqli_select_db($connection, 'dbase1') or die('db not selected' . mysqli_error()); 

// submited form process 
if (isset($_POST['submit']) && $_POST['submit'] == 'delete') { 

    echo "hry"; 

    $sql = 'DELETE FROM tab WHERE id=' . $_POST['id']; 
    $result = $connection->query($sql); 

} 
?> 

<html> 
<body> 
    <?php 
    $sql = 'SELECT * FROM tab'; 
    $result = $connection->query($sql); 

    if ($result->num_rows > 0) { 
     while ($row = $result->fetch_assoc()) { 

      echo '<h1> Message </h1>'; 
      echo '<br>' . 'Name: ' . $row['name']; 
      echo '<br>' . ' Email: ' . $row['email']; 
      echo '<br>' . ' Phone # ' . $row['phone']; 
      echo '<br>' . ' Message: ' . $row['text']; 
      echo '<br>'; 

      echo '<form class="boxed" action="' . $_SERVER['PHP_SELF'] . '" method="post" style="...">'; 
      echo '<input type="hidden" name="id" value="' . $row["id"] . '" />'; 
      echo '<input type="submit" class="button" name="submit" value="delete" style="..." />'; 
      echo '</form>'; 
     } 
    } 
    ?> 
</body> 
<html> 
+0

お返事ありがとうございます。本当に本当に本当に助かりました。ありがとうございました。 –

+0

私はもう少しお手伝いが必要です。ログアウトで問題が発生してもかまいません。 –

+0

実際にはログアウトしていません。PHPの内容が非常に悪いです。コードのインデントがある場合は、この問題を解決するのに役立ちます。 –

関連する問題