bugfix> php > 投稿

私はそれが誰かの誕生日と同じ日に写真を表示する場所を得た しかし、誕生日がないときにメッセージが表示されることはわかりません。 通常、ifコードとelseコードを使用しますが、ifに何を入れるべきかわかりません。

<?php
$select = mysql_query("SELECT foto FROM `users` WHERE MONTH(gebdatum) = MONTH(NOW()) AND DAY(gebdatum) = DAY(NOW())");
while($row = mysql_fetch_array($select))
    if(???????????){
       ?><?php echo $row['foto']; ?>" border="0" style="border:1px #000000     solid"><?php 
    }else{ ?>
       No birthdays
      <?php 
    }
 ?>

回答 3 件
  • 考慮すべき1つのオプションは、ループカウンター変数を追加することです。

    whileループの前にカウンター変数をゼロに初期化します。

    次に、ループを実行するたびにカウンター変数を1ずつ増やします。

    次に、ループの後、カウンター変数をテストします。ゼロの場合、ループに入りませんでした。

    これは必ずしもそれを行うための最良の方法ではありませんが、私たちが精通しているべきパターンを示しています:

    # initialize loop counter
    $i = 0;
    while( ... ) {
       # increment loop counter
       $i++;
       ...
    }
    # test loop counter
    if( $i == 0 ) {
       ...
    }
    
    

  • まず、 mysql_* を使用しないでください。  図書館;これは非推奨であり、安全ではありません。

    私は実際に PDO を使用することをお勧めします 、私の意見では、 mysqli_* よりもはるかに柔軟です  代替。

    ネイティブPDO

    これは、PDOを使用してデータベースに接続する方法です。

    <?php
        $servername = "localhost";
        $username = "username";
        $password = "password";
        try {
            $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
            echo "Connected successfully"; 
        } catch(PDOException $e) {
            echo "Connection failed: " . $e->getMessage();
        }
    ?>
    
    

    接続されたので、 $conn という新しい変数ができました。 、これはデータベースハンドルと呼ばれます。

    次に、クエリについて:

    <?php
        $results = $conn->query("SELECT foto FROM `users` WHERE MONTH(gebdatum) = MONTH(NOW()) AND DAY(gebdatum) = DAY(NOW())")->fetchAll();
        if(!empty($results)) { //if results is empty, there are no results, so no birthdays.
            foreach($results as $result) {
                echo "{$result['foto']} border='0' style='border:1px #000000 solid'>'";
            }
        } else {
            echo 'No Birthdays';
        }
    ?>
    
    

    だから if  結果がない場合、上記のステートメントは失敗するため、 foreach  決して実行されません。で PDO 、通常はwhileループの代わりにforeachを使用します。

    GrumpyPDO

    私が作成したGrumpyPDOというクラスを使用した場合、データベースの接続部分を心配する必要がなく、クエリからすべての結果を返すのが簡単なので、これは少し簡単です。

    <?php
        include "grumpypdo.php";
        $db = new GrumpyPDO("localhost", "username", "password", "database");
        $db->all("SELECT foto FROM `users` WHERE MONTH(gebdatum) = MONTH(NOW()) AND DAY(gebdatum) = DAY(NOW())");
        if(!empty($results)) { //if results is empty, there are no results, so no birthdays.
            foreach($results as $result) {
                echo "{$result['foto']} border='0' style='border:1px #000000 solid'>'";
            }
        } else {
            echo 'No Birthdays';
        }
    ?>
    
    

    免責事項:私はGrumpyPDOの著者です。

  • これを試して

    <?php
    $select = mysqli_query("SELECT foto FROM `users` WHERE MONTH(gebdatum) = MONTH(NOW()) AND DAY(gebdatum) = DAY(NOW())");
    while($row = mysql_fetch_array($select))
    if(!empty($row)){
    <?php echo $row['foto']; ?>" border="0" style="border:1px #000000 solid">     
     }else{ 
    No birthdays
    <?php } ?>
    
    

    また、PHP 5.6以降ではmysqlを使用しないでください。mysqliを使用していますが、現在はPHP v7があります。そして、なぜあなたは書いているのですか

あなたの答え