Permalänk
Medlem

Problem med PHP/MySQL

Försöker skapa en form av blogg med hjälp av PHP och MySQL. Allt har gått relativt bra hittills men nu har jag kört fast.
Har följande fil som ska vara index-filen där inläggen ska visas:

<?php //connect to database include('includes/db_connect.php'); $query = $db->prepare("SELECT post_id, title, body FROM posts"); $query->execute(); $query->bind_result($post_id, $title, $body); ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title></title> <!--[if lt IE 9]> <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> </head> <style> #container { margin: auto; width: 500px; } </style> <body> <div id="container"> <?php while($query->fetch()); ?> <article> <h2><?php echo $title?></h2> <p><?php echo $body?></p> </article> <?php endwhile?> </div> </body> </html>

När jag öppnar filen i webbläsaren så visas ingenting. Jag har två testinlägg i tabellen för poster så de borde visas. Jag vet inte vad jag kan ha gjort för fel. Är något fel med denna fil eller kan jag ha missat något annat?

Permalänk
Medlem

Lägg till följande snutt direkt efter <?php:

error_reporting(E_ALL); ini_set('display_errors', '1');

Det bör göra att du får ett meddelande med vad som går fel.

edit: jag tror du ska ha ett : efter ditt while-statement.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

Det var ; i stället för : som ställde till det! Tack för hjälpen!

Permalänk
Medlem

Och så fort det går bra så blir det problem igen...
När jag kör index-sidan i webbläsaren (där alla poster visas) så dupliceras "body"-delen som visar själva posten. Den visas både med en länk som består av två punkter som ska bli en "läs mer", detta är som jag vill ha det och även som en full post, vilket inte är meningen. Titeln på posten visas som den ska däremot, dvs en gång. Har gått igenom den flera gånger men ser inte vad som är fel.

Koden ser ut såhär:

<?php //error_reporting(E_ALL); //ini_set('display_errors', '1'); //connect to database include('includes/db_connect.php'); $query = $db->prepare("SELECT post_id, title, LEFT(body, 100) AS body, category FROM posts INNER JOIN categories ON categories.category_id=posts.category_id order by post_id desc"); $query->execute(); $query->bind_result($post_id, $title, $body, $category); ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title></title> <!--[if lt IE 9]> <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> </head> <style> #container { margin: auto; width: 500px; } </style> <body> <div id="container"> <?php while($query->fetch()): $lastspace = strrpos($body, ' '); ?> <article> <h2><?php echo $title?></h2> <p><?php echo substr($body, 0, $lastspace)."<a href='post.php?id=$post_id'>..</a>"?></p> <p><?php echo $body?></p> <p>Category: <?php echo $category?></p> </article> <?php endwhile?> </div> </body> </html>

Permalänk
Medlem
Skrivet av coka:

Och så fort det går bra så blir det problem igen...
När jag kör index-sidan i webbläsaren (där alla poster visas) så dupliceras "body"-delen som visar själva posten. Den visas både med en länk som består av två punkter som ska bli en "läs mer", detta är som jag vill ha det och även som en full post, vilket inte är meningen. Titeln på posten visas som den ska däremot, dvs en gång. Har gått igenom den flera gånger men ser inte vad som är fel.

Om du inte vill visa hela posten så låt bli att eka ut den genom att ta bort raden <p><?php echo $body?></p>

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

Tittade på det men tänkte att jag ville visa body-delen och att det berodde på något annat. Det gjorde det inte och det fungerar fint när jag tog bort raden.

Har nu stött på problem igen. På sidan som visar varje enskild post ska det gå att lämna kommentarer, jag får meddelande att kommentaren är mottagen när jag skriver något i formuläret. Men jag kan inte visa kommentarerna på sidan, de läggs heller inte till i databastabellen. Något tips på vad jag kan ha missat?

Koden ser ut såhär:

<?php if(!isset($_GET['id'])) { header('Location: index.php'); exit(); }else{ $id = $_GET['id']; } include('includes/db_connect.php'); if(!is_numeric($id)) { header('Location: index.php'); } $sql = "SELECT title, body FROM posts WHERE post_id='$id'"; $query = $db->query($sql); if($query->num_rows !=1) { header('Location: index.php'); exit(); } if(isset($_POST['submit'])) { $email = $_POST['email']; $name = $_POST['name']; $comment = $_POST['comment']; if($email && $name && $comment) { $email = $db->real_escape_string($email); $name = $db->real_escape_string($name); $id = $db->real_escape_string($id); $comment = $db->real_escape_string($comment); if($addComment = $db->prepare("INSERT INTO comments(name, post_id, email_add, comment) VALUES (?,?,?,?)")) { $addComment->bind_param('aaaa', $id, $name, $email, $comment); $addComment->execute(); echo "Comment was added"; $addComment->close(); }else{ echo "Error"; } }else{ echo "Error"; } } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title></title> <!--[if lt IE 9]> <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> </head> <body> <div id="container"> <div id="post"> <?php $row = $query->fetch_object(); echo "<h2>".$row->title."</h2>"; echo "<p>".$row->body."</p>"; ?> </div> <hr /> <div id="addcomments"> <form action="<?php echo $_SERVER['PHP_SELF']."?id=$id"?>" method="post"> <div> <label>Email</label><input type="text" name="email" /> </div> <div> <label>Name</label><input type="text" name="name" /> </div> <div> <label>Comment</label><textarea name="comment"></textarea> </div> <input type="submit" name="submit" value="Submit" /> </form> </div> <div id="comments"> <?php $query = $db->query("SELECT * FROM comments WHERE post_id='$id' ORDER BY comment_id DESC"); while($row = $query->fetch_object()): ?> <div> <h5><?php echo $name?></h5> <blockquote><?php echo $row->comment?></blockquote> </div> <?php endwhile;?> </div> </div> </body> </html>

Är osäker på den första if($addComment-delen. Kan det vara där något är fel?