2017-12-27 3 views
0

Hallo ich versuche, ein einfaches Blog mit PHP-PDO zu bauen, aber ive ein bisschen fest auf Validierung/wenn sonst, was früher in der keine Klasse unordentlich Version passiert war es wäre sagen Sie "Dieser Artikel existiert nicht", aber jetzt zeigt es nur die Seite mit leeren Kästen an, also fragte ich mich, wie ich if/else staements zu den Klassen hinzufüge, um es zu arbeiten und die Meldung zu zeigen, wenn die Identifikation nicht eine ist, die in der Datenbank übereinstimmtAdd Validierung/wenn sonst Anweisungen zu öffentlichen Klasse Funktionen PHP

public function fetch_data($pid){ 

    try{ 
    global $pdo; 

    $query = $pdo->prepare('SELECT * FROM post where post_id = ? order by post_date desc'); 
    $query->BindValue(1,$pid); 
    $query->execute(); 

    return $query->fetch(); 

    } 
    catch(PDOException $e) { 
     echo '{"error":{"text":'. $e->getMessage() .'}}'; 
     } 
    } 

das ist das öffentliche Funktion Stück Code und der article.php Seite Code lautet:

<?php 

include_once('functions/main.php'); 
$post = new Main; 
$check = new Main; 
$check_login = $check->logged_in(); 

if(isset($_GET['id'])){ 
    $pid = $_GET['id']; 
    $post = $post->fetch_data($pid); 

    $query = $pdo->prepare("UPDATE post SET post_views = post_views + 1 WHERE post_id = ?"); 
$query->execute(array($pid)); 
    ?> 
<html> 
    <head> 
     <title><?php echo $post['post_title'];?></title> 
      <meta name="viewport" content="width=device-width, initial-scale=1"> 


     <style> 
.customimage{ 
background: url('<?php echo $post['post_image'];?>') !important; 
} 
</style> 


    </head> 


<body> 

      <div class="pusher"> 
    <!-- Site content !--> 
<div class="ui inverted vertical masthead center aligned segment purple customimage"> 
<div class="ui text"> 
     <h1 class="ui inverted header"> 
     <?php echo $post['post_title'];?></h1> 
       <br> 
       <div class="ui black inverted label"> <i class="calendar icon"></i><?php echo $post['post_date'];?></div><div class="ui black inverted label"><i class="user icon"></i> <?php echo $post['post_author'];?></div><div class="ui black inverted label"><i class="unhide icon"></i> <?php echo $post['post_views']?></div> 

    </div> 
</div> 

<div class="ui divider hidden"></div> 

<div class="ui container"> 
<div class="ui segments"> 
    <div class="ui segment purple"> 
    <h1 class="ui header"> 
    <div class="content"> 
    <?php echo $post['post_title'];?> 
    </div> 
</h1> 
    </div> 
    <div class="ui segment"> 
    <?php echo $post['post_content'];?> 
    </div> 
    <div class="ui secondary segment"> 
    <button class="ui labeled icon button"> 
    <i class="left arrow icon"></i> 
    Return to Posts</button> 
    </div> 
</div> 
</div> 

</div> 
    </body> 
</html> 

    <?php 
}else{ 
    header('Location:index.php'); 
} 

?> 

Und ich kann nicht herausfinden, wie man es so macht, dass, wenn Sie zu? Id = 876799 gehen, es dann sagt, dass der Artikel nicht existiert, aber gerade leer ist.

Danke alle Hilfe geschätzt + das ist kein Duplikat Ich kann nirgendwo Antworten finden!

+0

Wo ist die if/else in Frage? –

+0

@devlincarnate Ich habe versucht, sie in, aber ich kann nicht sehen, wo oder wie es zu tun, so fragte ich Profis so kann ich für die Zukunft lernen und ich bin sehr sehr neu zu PDO – Jack

+0

JSON nicht von Hand so bauen . Wenn du JSON echo willst, benutze 'echo json_encode (array ('error' => array ('text' => $ e-> getMessage())));' – Barmar

Antwort

1

den Wert von $post nach der Abfrage überprüfen und wenn die Ergebnisse angezeigt werden.

$post = $post->fetch_data($pid); 
if ($post) { 
    $query = $pdo->prepare("UPDATE post SET post_views = post_views + 1 WHERE post_id = ?"); 
    $query->execute(array($pid)); 
} else { 
    display_post_not_found($pid); 
    exit(); 
} 
?> 
<html> 
    ... 
</html> 

In der display_post_not_found() Funktion (die Sie schreiben müssen), können Sie eine informative Seite über den Fehler anzuzeigen, oder gerade irgendwo umleiten.

Voll Code:

<?php 

include_once('functions/main.php'); 
$main = new Main; 
$check = new Main; 
$check_login = $check->logged_in(); 

if(isset($_GET['id'])){ 
    $pid = $_GET['id']; 
    $post = $main->fetch_data($pid); 
    if ($post) { 
     $query = $pdo->prepare("UPDATE post SET post_views = post_views + 1 WHERE post_id = ?"); 
     $query->execute(array($pid)); 
    } else { 
     display_post_not_found($pid); 
     exit(); 
    } 
    ?> 
<html> 
    <head> 
     <title><?php echo $post['post_title'];?></title> 
      <meta name="viewport" content="width=device-width, initial-scale=1"> 


     <style> 
.customimage{ 
background: url('<?php echo $post['post_image'];?>') !important; 
} 
</style> 


    </head> 


<body> 

      <div class="pusher"> 
    <!-- Site content !--> 
<div class="ui inverted vertical masthead center aligned segment purple customimage"> 
<div class="ui text"> 
     <h1 class="ui inverted header"> 
     <?php echo $post['post_title'];?></h1> 
       <br> 
       <div class="ui black inverted label"> <i class="calendar icon"></i><?php echo $post['post_date'];?></div><div class="ui black inverted label"><i class="user icon"></i> <?php echo $post['post_author'];?></div><div class="ui black inverted label"><i class="unhide icon"></i> <?php echo $post['post_views']?></div> 

    </div> 
</div> 

<div class="ui divider hidden"></div> 

<div class="ui container"> 
<div class="ui segments"> 
    <div class="ui segment purple"> 
    <h1 class="ui header"> 
    <div class="content"> 
    <?php echo $post['post_title'];?> 
    </div> 
</h1> 
    </div> 
    <div class="ui segment"> 
    <?php echo $post['post_content'];?> 
    </div> 
    <div class="ui secondary segment"> 
    <button class="ui labeled icon button"> 
    <i class="left arrow icon"></i> 
    Return to Posts</button> 
    </div> 
</div> 
</div> 

</div> 
    </body> 
</html> 

    <?php 
}else{ 
    header('Location:index.php'); 
} 

function display_post_not_found($pid) { 
    echo "Post $pid could not be found"; 
} 
0

Sie haben 2 Möglichkeiten:

  1. auf eine Seite umgeleitet, die den Fehler anzeigt, so etwas wie post_not_found.php oder so etwas.

  2. wickeln Sie die gesamte html-Seite, die Sie gerade haben, mit einer if/else-Anweisung auf, die basierend auf Ihren Kriterien unterschiedliche Inhalte ausgibt.

Ich schlage vor, Sie mit der ersten Option gehen, was Sie tun müssen, um zu überprüfen, ob $post Daten hat, wenn es nicht dann tut man tun header("Location: post_not_found.php");

+0

wie kann ich das machen, weil momentan meine Header-Weiterleitung ist? funktioniert nur wenn es nur post.php nicht post.php? id = 857484 und was ich will und was es zu tun in der wirklich chaotisch 2012 php war es sagte "Artikel nicht gefunden", aber jetzt, wenn ich post.php? id = 857484 es zeigt nur das Layout und alle, aber mit leeren Kästchen und ich möchte es eine Fehlermeldung anzeigen, aber ich weiß nicht, wie das mit meinem aktuellen Code und PDO passieren – Jack