19315


私はいまPHP PDOを使い、content.phpに削除処理を実装しようとしています。  
以下のコードでは、「//取得」のところで表示されている画像A(src=$xxurl)を、 _content.php内では_
削除（？）できます（、というか非表示になります）。

しかし、サムネイル一覧ページである _home.php_
に進むと、削除されておらず、画像Aのサムネイルをクリックしcontent.phpに遷移すると、画像Aは再表示されてしまいます。  
phpMyAdminでデータを確認しても、削除できていません。

content.php上のボタンをクリックすると、home.phpに遷移し、そこのサムネイル一覧とデータベースから、（ひとつの）データを削除する方法を教えていただきたいです。

【content.php】

[code]

    try{
    $hostname = 'mysql321.db.sakura.ne.jp';
    $dbname   = 'dbname';
    $username = 'username';
    $password = 'xxxxx';
    
    $dbh = new PDO("mysql:host=$hostname;dbname=$dbname;", $username, $password
                    , array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
    
    $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    
    $stmt = $dbh->prepare("INSERT INTO xxxxURLs (name, url, time) values (:name, :url, :time)");
    if(!$stmt)
    {
        $error_info = $dbh->errorInfo();
        die($error_info[2]);
    }
    
    $stmt->bindValue(":name", $name, PDO::PARAM_STR);
    $stmt->bindValue(":url", $xxurl, PDO::PARAM_STR);
    $today = date("M d Y Ah:i");
    $stmt->bindValue(":time", $today, PDO::PARAM_STR);
    
    $stmt->execute();
    
    //取得
    $stmt = $dbh->prepare("SELECT time FROM xxxxURLs WHERE url = :url");
    $stmt->bindValue(":url", $xxurl, PDO::PARAM_STR);
    $stmt->fetchAll(PDO::FETCH_ASSOC);
    $stmt->execute();
    echo "<div class=\"text\">";
    while ($row = $stmt->fetch()) {
        $theday = htmlspecialchars($row["time"]);
        echo $theday;
    }
    echo "</div>";
    
    //削除
    echo "<form method=\"post\" action=\"home.php\"><button type='submit' name='action' value='delete'></form>";
    if ($_POST['action'] == 'delete') {
        $stmt = $dbh->prepare("DELETE FROM xxxxURLs WHERE url = :url LIMIT 1");
        $stmt->bindValue(":url", $xxurl, PDO::PARAM_STR);
        $stmt->execute();
    }
    
    } catch(PDOException $e){
        echo $e->getMessage();
    }
    
[/code]

【home.php】

[code]

    <?php
    try{
    $hostname = 'mysql321.db.sakura.ne.jp';
    $dbname   = 'dbname';
    $username = 'username';
    $password = 'xxxxx';
    
    $dbh = new PDO("mysql:host=$hostname;dbname=$dbname;", $username, $password
                    , array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
    
    $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    
    //取得
    $stmt = $dbh->prepare("SELECT url FROM pastaURLs WHERE name = :name");
      $stmt->bindValue(":name", $name, PDO::PARAM_STR);
    $stmt->fetchAll(PDO::FETCH_ASSOC);
    $stmt->execute();
    echo "<div>";
    while ($row = $stmt->fetch()) {
        $album = htmlspecialchars($row["url"]);
        echo "<div>";
        echo "<a href=\"{$album}\"></a>";
        echo "<iframe src=\"{$album}\"></iframe></div>";
    }
    echo "</div>";
    }catch(PDOException $e){
        echo $e->getMessage();
    }
    ?>
    
[/code]


CC BY-SA 3.0
2015-11-25T07:11:29.683
19275
2015-11-26T04:41:43.443
12973
question
php html mysql css database
PHP PDOでMySQLのデータを削除したい


ぱっと見ですが、content.phpで

[code]

    echo "<form method=\"post\" action=\"home.php\"><button type='submit' name='action' value='delete'></form>";
    
[/code]

になっていますので、このボタンを押した時にはhome.phpに遷移します。削除のロジックはcontent.phpにあるので削除はされないでしょう。

全体を追いかけたわけではないので、それ以外にも間違ってるところはあるかもしれません。

* * *

動作とは(困ったことに)直接関係ないのですが、少なくとも

[code]

    $dbh = new PDO("mysql:host=$hostname;dbname=$dbname;", $username, $password
                    , array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
    
[/code]

はまずいことが起きるので、[前回提示したサンプル](https://ja.stackoverflow.com/a/18868/5793)のとおり、

[code]

    $dbh = new PDO("mysql:host=$hostname;dbname=$dbname;charset=utf8", $username, $password);
    
[/code]

にしてください。


CC BY-SA 3.0
2015-11-26T04:41:43.443
19315
2015-11-26T04:41:43.443
2017-04-13T12:52:39.113
-1
5793
19275
answer