2017-12-07 9 views
0

に存在する場合、私は、私は最近、多くの問題を投稿し知っているが、私は約1週間を解くことができませんでした。この一つの問題は、私はデータが存在するかどうかをチェックするために百万回を試していないが、まだ何もチェックすることができません。検索し、同じ問題をチェックしましたが、ヒントは得られませんでした。だからここに何が間違っているのか教えてください。私はすべて自分自身で試してみますが、私が問題を抱えたら、しばらく解決できません。私はここに助けを求める。は、データがデータベース

<!DOCTYPE html> 
<html> 
<head> 
    <title>Test Title</title> 
</head> 
<body> 
    <?php 
     class Database{ 
      public $db; 

      public function __construct($host,$username,$password,$dbname){ 

       $this->db=new MySQLi($host,$username,$password,$dbname); 

      } 
      public function getData(){ 
       $query="SELECT * FROM artisan"; 
       $result=$this->db->query($query); 
       $users=array(); 
       if($result->num_rows>0){ 
        while($row=$result->fetch_assoc()){ 
        $users[]=array(
         "id"=>$row['id'], 
         "username"=>$row['username'], 
         "email"=>$row['email'] 
         ); 

        } 
       }else{ 
        echo "No results found!"; 
       } 
       return $users; 
      } 
      public function getContent(){ 
       $query="SELECT * FROM content"; 
       $result=$this->db->query($query); 
       $values=array(); 
       if($result->num_rows>0){ 
        while($row=$result->fetch_assoc()){ 
        $values[]=array(
         "title"=>$row['title'], 
         "body"=>$row['body'] 
        ); 
       } 

      } 
      return $values; 
      } 

     public function insertData(){ 
      $title=$_POST['title']; 
      $query="INSERT INTO content(title,body) VALUES (?,?)"; 
      $result=$this->db->query("SELECT COUNT(*) FROM content WHERE title=$title"); 
      $stmt=$this->db->prepare($query); 
      $stmt->bind_param("ss",$_POST['title'],$_POST['body']); 
      if(!empty($_POST['title']) || !empty($_POST['body'])){ 
      if($result->num_rows){ 
      echo "User allready exists"; 
      }else{ 
        $stmt->execute(); 
      } 
     } 
     } 

     private function validate(){ 
      $query="SELECT title and body FROM contents"; 
      $result=$this->db->query($query); 
      if($result){ 
       echo "hi"; 
      } 
     } 
    } 

     $database=new Database('localhost','root','','test'); 
     $users=$database->getData(); 
     $values=$database->getContent(); 
     $database->insertData(); 
    ?> 

    <style type="text/css"> 
     .container{ 
      text-align:center; 
     } 
     table, th, td, { 
      border: 1px solid black; 
     } 
     table{ 
      width:100%; 
     } 
     .content{ 
      border:1px solid black; 
     } 
    </style> 
    <div class="container"> 
     <?php 
     for($i=0;$i<count($values);$i++): 
     ?> 
    <div class="content"> 
     <?php echo $values[$i]["title"]."<br>"; ?> 
     <?php echo $values[$i]["body"]."<br>";?> 
    </div> 
    <?php endfor;?> 
    </div> 
    <table> 
    <colgroup> 
    <col span="2" style="background-color:red"> 
    <col style="background-color:yellow"> 
    </colgroup> 
    <tr> 
    <th>ID</th> 
    <th>username</th> 
    <th>email</th> 
    </tr> 
    <tr> 
    <td><?php foreach($users as $user) 
    echo $user['id']."<br>"; 
    ?></td> 
    <td><?php foreach($users as $user) 
    echo $user['username']."<br>"; 
    ?></td> 
    <td><?php foreach($users as $user) 
    echo $user['email']."<br>"; 
    ?></td> 
    </tr> 
</table> 
<form action="index.php" method="POST"> 
    <input type="text" name="title"> 
    <input type="text" name="body"> 
    <input type="submit" name="submit"> 
</form> 
</body> 
</html> 
+0

ましたあなたはいくつかの適切なデバッグを行いますか? 'print_r($ users);'、 'print_r($ values);'。彼らはあなたが期待しているものを返すのですか?また、あなたは、SQLインジェクションのためのセキュリティ上のリスクである '$ _POST [ 'タイトル']' 'SELECT COUNT(*)のコンテンツFROM WHEREタイトル= $ title'を、準備していません。クラスの初期化変数の周りに 'if(!empty($ _ POST ['title'])){{}}を追加する必要があります。現在、フォームの送信が行われる前に実行されています。 – icecub

+0

クエリはより具体的で、WHERE句を使用する必要があります。それ以外の場合は、行があるかどうかを確認しようとしています。 –

+0

'タイトル= $タイトル「それはところで、文字列の場合)'その部分は、失敗している –

答えて

0

"$結果=の$ this - > DB->クエリ(" "コンテンツのタイトル= '$タイトル' からタイトルを選択);ちょうどこれにすべてを変え、それが働いた、$結果でしたfalseを返すので、私はそれを解決しようとしましたが、私は解決$タイトルに「」追加の推測では、IDKの理由 - 。「12分前DummyTarget $titlestring literalであり、それは引用符で囲む必要があるためです

。あなたは本当にすべての準備されたステートメントを使用する必要があります、そして潜在的なSQLインジェクションに対して保護するのを助けるでしょう。

参考:

デバッグ:

関連する問題