1

私は現在、ほぼ完了しているプロジェクトに取り組んでいますが、修正すべき問題がもう 1 つあります。これは非常に重要です。

私がやろうとしているのは、特定の画像をクリックしたときにデータベースの値 (activeID) を変更することです。

php と javascript が必要になることはわかっていますが、javascript のスキルはあまり高くありません。

皆さんが理解できるように、データベース内のテーブルの構造を次に示します。

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

CREATE TABLE IF NOT EXISTS `artikel` (
  `Titel` varchar(100) CHARACTER SET utf8 NOT NULL,
  `ArtikelID` int(255) NOT NULL,
  `content` text CHARACTER SET utf8 NOT NULL,
  `imagepath` varchar(255) CHARACTER SET utf8 NOT NULL,
  `activeID` int(11) NOT NULL,
  `thumbpath` varchar(255) CHARACTER SET utf8 NOT NULL,
  `shortcontent` text CHARACTER SET utf8 NOT NULL,
  `categorie` varchar(10) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`ArtikelID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

INSERT INTO `artikel` (`Titel`, `ArtikelID`, `content`, `imagepath`, `activeID`, `thumbpath`, `shortcontent`, `categorie`) VALUES
('Zware hinder op E313 door dodelijk ongeval in Geel', 1, 'Het ongeval gebeurde rond 12 uur. Er had zich een file gevormd doordat de afrit Geel-West is afgesloten wegens werken.', 'images/bin1.jpg', 0, 'images/bin1thumb.jpg', 'Op de E313 richting Antwerpen is vandaag ter hoogte van de afrit Geel-West.', 'bin'),
('België geeft 12 miljoen voor heropbouw Afghanistan na 2014', 2, 'Eind 2014 trekt de NAVO zich terug uit Afghanistan. De militairen dragen dan de verantwoordelijkheid voor de veiligheid definitief over aan de Afghaanse veiligheidstroepen.', 'images/bin2.jpg', 0, 'images/bin2thumb.jpg', 'Na de terugtrekking van de Belgische militairen uit Afghanistan eind 2014 zal België voor maximaal 12 miljoen euro bijdragen aan de heropbouw van het land.', 'bin'),
('Oppositie hekelt gebrek aan visie en groei in debat begrotingscontrole', 3, 'De controle was nodig omdat de regering bij de initiële begroting 2012 uitgegaan was van een economische groei van 0,8% van het bbp, terwijl dat cijfer in de economische begroting van februari teruggebracht werd 0,1%.', 'images/bin3.jpg', 0, 'images/bin3thumb.jpg', 'De plenaire Kamer buigt zich vandaag over de begrotingscontrole die het begrotingstekort voor 2012 moet beperken tot 2,8 procent van het bbp, overeenkomstig het stabiliteitsprogramma. Daarvoor was een inspanning van 1,8 miljard euro nodig.', 'bin')

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

データベースに使用する接続は次のとおりです。

<?php 

        session_start();
        
        $sHost = "localhost";
        $sUser = "root";
        $sPassword = "";
        $sDatabase = "project";
        
        $link = mysqli_connect($sHost, $sUser, $sPassword, $sDatabase) or die("MySQL Error: " . mysqli_error());  
        
?>

これは、データベースからコンテンツを取得するために必要な php および html コードです。各レコードのパスを介して呼び出される画像があることに注意してください (最初に表示される select ステートメントのみがこのトピックに関連しています。トピックを短くするために残りの HTML コードを省略します):

        <?php
                
                //session_start();
                
                //include("classes/connection.php");
                include_once("classes/connection.php");
                
                $getBinnenland = mysqli_query($link,"SELECT * FROM artikel WHERE categorie = 'bin';");
                //$getBuitenland = mysqli_query($link,"SELECT * FROM artikel WHERE categorie = 'bui';");
                //$getSport = mysqli_query($link,"SELECT * FROM artikel WHERE categorie = 'spo';");
                //$getPolitiek = mysqli_query($link,"SELECT * FROM artikel WHERE categorie = 'pol';");
                //$getMilieu= mysqli_query($link,"SELECT * FROM artikel WHERE categorie = 'mil';");
                //$getBizar = mysqli_query($link,"SELECT * FROM artikel WHERE categorie = 'biz';");
                
                ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
                <html xmlns="http://www.w3.org/1999/xhtml">
                <head>
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                <title>Digital Press overview</title>
                <link rel="stylesheet" href="style.css" type="text/css" />
            </head>
            
            <body>
                
                <div id="wrapper">
        <ul id="Binnenland">            
                    <?php
                    if(mysqli_num_rows($getBinnenland) > 0)
                    {       
                        while($Binnenland = mysqli_fetch_assoc($getBinnenland))
                        {
                            echo "<li><a href='#'><h3>".$Binnenland['Titel']."</h3><img src='". $Binnenland['thumbpath'] ."' alt='thumbnail'/></a><p>".$Binnenland['shortcontent']. "</p>";
                            
                        }
                    }
                    else
                    {
                        echo "<li>Nog geen designs</li>";   
                    }
                    
                    ?>
        </ul>
</div>
</body>

質問のために今すぐ:特定の画像をクリックすると、そのレコードのactiveIDを0ではなく1に変更し、もう一度クリックすると0に戻ります

これを開始する方法についての手がかりがないので、どんな助けでも大歓迎です。これを手伝ってくれるすべての人に前もって感謝します! ご挨拶

編集

以下の回答のコードを実装しましたが、エラーは発生しませんが、データベースもactiveIDを変更しません。これを修正するために私に何ができるか知っている人はいますか?

onclick イベント:

echo "<li><a href='#'><h3>".$Binnenland['Titel']."</h3><img onClick = 'javascript: setActive();' src='". $Binnenland['thumbpath'] ."' alt='thumbnail'/></a><p>".$Binnenland['shortcontent']. "</p>";

JavaScript:

 <script type="text/javascript">
function setActive()
{
if (window.XMLHttpRequest)
   {
   xmlhttp=new XMLHttpRequest();
   }
 else
   {
   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   } 
 xmlhttp.onreadystatechange=function()
   {
   if (xmlhttp.readyState==4 && xmlhttp.status==200)
     {
         //Return Value. Handle as you wish. Display or ignore.
         var x = xmlhttp.responseText;
     }
   }
 xmlhttp.open("POST","setActive.php",true);
 xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
 xmlhttp.send(p_str);
  }
</script>

setActive.php ファイル:

<?php            

    session_start();           

    $sHost = "localhost";           
    $sUser = "root";           
    $sPassword = "";           
    $sDatabase = "project";           

    $link = mysqli_connect($sHost, $sUser, $sPassword, $sDatabase) or die("MySQL Error: " . mysqli_error());             

     $res = mysqli_fetch_row(mysqli_query($link,"select activeID from artikel"));
     $active = $res[activeID];
     $activeID = ($active == 0) ? 1 : 0; 
     $res = mysqli_query($link,"update artikel set activeID = $activeID");
     if ($res) echo "Success, ActiveID = $activeID";
          else echo "Failure, unable to update ActiveID to $activeID";
?>           
4

1 に答える 1

1

ここに Artikel.php があります。最新の投稿 12:40 PST

<?
mysql_connect("xxxxxxxxxxx", "xxxxxxxxxx", "xxxxxxxxx");  
mysql_select_db("xxxxxxxx");  

$res = mysql_query("select * from artikel");  
$fcount = mysql_fetch_assoc(mysql_query("select count(*) as count from artikel"));  

while ($Binnenland =  mysql_fetch_assoc($res)) { 
    $jS = '"'.$Binnenland[ArtikelID].'"'; 
    echo "<font size=2 face='Century Gothic'><center><li><b>ARTICLE ID: ".$Binnenland['ArtikelID']."</b><br><font size=2><a href='#'><h3>".$Binnenland['Titel']."</h3><a href='javascript:setActive(".$jS.")'> <img src='$Binnenland[thumbpath]' width=75 style='border: 0px; -moz-border-radius: 8px; border-radius: 8px' alt='thumbnail'></a><p>".$Binnenland['shortcontent']. "</p></center>"; 
    echo "<span style='color: black;' id='".$Binnenland[ArtikelID]."'><center><font face='Century Gothic'>ActiveID: ".$Binnenland[activeID]."</font></center><br><br><hr></span>";
} 

?> 

<script type="text/javascript">  

function setActive(ObjID)  {  

if (window.XMLHttpRequest)  {  
    xmlhttp=new XMLHttpRequest();  
}  
else  
{  
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");  
}   

xmlhttp.onreadystatechange=function()   {  

if (xmlhttp.readyState==4 && xmlhttp.status==200)  
      {  

        //Return Value. Handle as you wish. Display or ignore.  
        var x = xmlhttp.responseText; 

        if (document.getElementById(ObjID).style.color == 'black') document.getElementById(ObjID).style.color='red';
                else document.getElementById(ObjID).style.color='black';

        document.getElementById(ObjID).innerHTML = '<center><font face="Century Gothic">ActiveID: ' + x + '</font></center><br><br><hr>'; 
      }  
}  
    var p_str = "a="+ObjID; 
    xmlhttp.open("POST","setActive.php",true);  
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");  
    xmlhttp.send(p_str);  
}  

</script> 

そしてここにsetActive.phpがあります

<?php              

mysql_connect("xxxxx", "xxxxx", "xxxxxx");  
mysql_select_db("xxxxx"); 
$ArtikelID = $_REQUEST[a]; 

$res = mysql_query("select activeID from artikel where ArtikelID = ".$ArtikelID);  
$row = mysql_fetch_assoc($res); 

$active = $row[activeID];  
$activeID = ($active == 0) ? 1 : 0;   
$res = mysql_query("update artikel set activeID = $activeID  where ArtikelID = ".$ArtikelID);  

if ($res) echo $activeID;  
       else echo "Failure, unable to update ActiveID to $activeID";  
?>
于 2012-05-22T19:49:33.700 に答える