Ik heb een tijdje niet gescript en dit kan ik ook weer merken.
Ik ben nu bezig met een nieuwssysteem:
Ik wil nu graag het aantal reacties laten zien. Dit kan met mysql_num_rows en count maar weet niet op welke manier ik ze moet gebruiken.PHP Code:
<?php
// Connectie maken
require_once 'db_connect.php';
echo '<link rel="stylesheet" href="style.css" type="text/css" />';
// Gegevens selecteren
$sql = 'SELECT
n.id,
n.news_subject,
n.news_message,
n.date,
u.username
FROM
news AS n
INNER JOIN
users AS u
ON u.id = n.user_id ORDER BY n.id DESC';
$results = $db->query($sql);
// Gegevens laten zien
foreach($results as $row)
{
echo '<h2>'.$row['news_subject'].'</h2>';
echo '<p class="small">Geplaatst door: <a href="#">'.$row['username'].'</a> op '.$row['date'].'. Reacties ()</p>';
echo '<p>'.$row['news_message'].'</p>';
}
?>
Ook wou ik graag een nieuwsbericht kunnen opvragen met nieuws.php?lezen=1
Dit moet met de superglobal $_GET, maar verder als dit kom ik ook niet.
Graag hulp en tips!
Groeten Mathijs
- Opnieuw verdiepen in PHP
-
26-02-2009, 14:59 #1
- Berichten
- 408
- Lid sinds
- 16 Jaar
Opnieuw verdiepen in PHP
-
-
26-02-2009, 15:12 #2
- Berichten
- 730
- Lid sinds
- 18 Jaar
Code:$sql = 'SELECT n.id, n.news_subject, n.news_message, n.date, u.username FROM news AS n INNER JOIN users AS u ON u.id = n.user_id WHERE n.id = '" . $_GET['lezen'] . "' ORDER BY n.id DESC';
Have fun!
Ps. er zijn genoeg goede boeken over php te vinden online, lijkt me handig om eens 1tje te lezen.
-
26-02-2009, 15:32 #3
- Berichten
- 1.106
- Lid sinds
- 18 Jaar
PHP Code:$hoeveelheid = mysql_num_rows(mysql_query($sql));
echo($hoeveelheid);
-
26-02-2009, 15:48 #4
- Berichten
- 408
- Lid sinds
- 16 Jaar
Bedankt, ik heb nu een if($_GET['lezen']) om te kijken of er lezen in de url staat. Zoniet dan laat hij alle berichten zien.
Hoe kan ik er nu voor zorgen als ze bijv. met de lezen een bericht oproepen die niet bestaat, hoe kan ik hier dus een foutmelding voor maken?
-
26-02-2009, 15:51 #5
- Berichten
- 1.106
- Lid sinds
- 18 Jaar
PHP Code:IF(!mysql_num_rows(mysql_query($sql))) {
echo("OH NO!");
}
else
{
echo("YES! YES! HARDER!");
}
-
26-02-2009, 15:57 #6
- Berichten
- 408
- Lid sinds
- 16 Jaar
Mooi taalgebruik! :P
Ik gebruik voor dit systeem PDO, maar is dit ook PDO valid om het zo maar even te zeggen.
@Reshad, waar moet ik jou stukje invoegen in de code?
-
26-02-2009, 16:02 #7
- Berichten
- 730
- Lid sinds
- 18 Jaar
volgens mij werkt mysql_num_rows niet in PDO maar moet je dit op een andere manier zien uit te lezen
http://www.sitepoint.com/forums/showthread.php?t=526645
of evn zoeken op mysql_num_rows & pdo oid
-
26-02-2009, 16:12 #8
- Berichten
- 408
- Lid sinds
- 16 Jaar
Bij het gebruiken van deze code:
PHP Code:$sql2 = 'SELECT count(*) FROM comments WHERE news_id = 1';
$result = $con->prepare($sql2);
$result->execute();
$rows = $result->fetchColumn()
echo $rows;
Parse error: syntax error, unexpected T_ECHO in /home/mathijs/domains/superslice.nl/public_html/test/nieuws.php on line 74
-
26-02-2009, 16:20 #9
- Berichten
- 30
- Lid sinds
- 16 Jaar
$rows = $result->fetchColumn()
||
\/
$rows = $result->fetchColumn();
-
26-02-2009, 18:15 #10
- Berichten
- 408
- Lid sinds
- 16 Jaar
Bedankt Johannes,
Ik ben nu al bij het reactie gedeelte alleen het plaatsen van een reactie werkt nog niet.
PHP Code:<?php
// Connectie maken
require_once 'db_connect.php';
echo '<link rel="stylesheet" href="style.css" type="text/css" />';
echo '<link rel="alternate" title="Nieuws Feed" type="application/rss+xml" href="http://www.superslice.nl/test/rss.php">';
function verkort( $text, $length )
{
$punc = array( "!", "?", "." );
if( strlen( $text ) > $length )
{
$text = substr( $text, 0, $length );
$text = trim( $text );
$last = substr( $text, -1 );
if( !in_array( $last, $punc ) )
{
$text .= "…";
}
}
return $text;
}
if($_GET['lezen'])
{
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Gegevens toevoegen aan database
$insert = 'INSERT INTO comments
(comment_message, comment_date, comment_author)
VALUES ("'.$_POST['subject'].'", "'.$_POST['message'].'", "'.date("Y-m-d").'", "2")';
$results = $db->exec($insert);
echo 'Uw reactie is succesvol verstuurd.<br />';
echo 'U wordt automatisch doorgestuurd.';
echo '<meta http-equiv="refresh" content="2;URL=http://www.superslice.nl/test/nieuws.php?lezen='.$_GET['lezen'].'" />';
}
else
{
// Gegevens selecteren
$sql = 'SELECT
n.id,
n.news_subject,
n.news_message,
n.date,
u.username
FROM
news AS n
INNER JOIN
users AS u
ON u.id = n.user_id
WHERE n.id = "'.$_GET['lezen'].'" ORDER BY n.id DESC';
$results = $db->query($sql);
// Gegevens laten zien
foreach($results as $row)
{
// Aantal comments tellen
$sql2 = 'SELECT count(*) FROM comments WHERE news_id = "'.$row['id'].'"';
$result = $db->prepare($sql2);
$result->execute();
$comments = $result->fetchColumn();
echo '<h2>'.$row['news_subject'].'</h2>';
echo '<p class="small">Geplaatst door: <a href="#">'.$row['username'].'</a> op '.$row['date'].'. Reacties ('.$comments.')</p>';
echo '<p>'.$row['news_message'].'</p>';
echo '<h2>Reacties ('.$comments.')</h2>';
$select = 'SELECT * FROM comments WHERE news_id = "'.$row['id'].'" ORDER BY id DESC';
$results = $db->query($select);
foreach($results as $row)
{
echo '<p class="small"><strong>'.ucfirst($row['comment_author']).'</strong> schreef op '.$row['comment_date'].'</p>';
echo '<p>'.$row['comment_text'].'';
}
echo '<h2>Reactie toevoegen</h2>';
echo '<form action="'.htmlentities(strip_tags($_SERVER['PHP_SELF']));.'" method="post">';
echo '<label for="author">Auteur</label>';
echo '<input type="text" name="author" />';
echo '<label for="message">Bericht</label>';
echo '<textarea rows="10" cols="30" name="message"></textarea>';
echo '<input class="submit" type="submit" value="Verzenden" />';
echo '</form>';
}
}
}
else
{
// Gegevens selecteren
$sql = 'SELECT
n.id,
n.news_subject,
n.news_message,
n.date,
u.username
FROM
news AS n
INNER JOIN
users AS u
ON u.id = n.user_id ORDER BY n.id DESC';
$results = $db->query($sql);
// Gegevens laten zien
foreach($results as $row)
{
// Aantal comments tellen
$sql = 'SELECT count(*) FROM comments WHERE news_id = "'.$row['id'].'"';
$result = $db->prepare($sql);
$result->execute();
$comments = $result->fetchColumn();
echo '<h2>'.$row['news_subject'].'</h2>';
echo '<p class="small">Geplaatst door: <a href="#">'.$row['username'].'</a> op '.$row['date'].'. Reacties ('.$comments.')</p>';
echo '<p>'.verkort($row['news_message'], 300).'</p>';
echo '<a href="nieuws.php?lezen='.$row['id'].'">Lees verder</a>';
}
}
?>
Ik ben trouwens ook van plan om deze straks gratis beschikbaar te stellen het script dan.Laatst aangepast door Mathijs Kingma : 26-02-2009 om 19:01
-
27-02-2009, 01:01 #11gast11444 GuestCode:
<?php if (isset($_GET['lezen'])) { // Je script } ?>
Beveilig ook alles qua databases met mysql_real_escape_string() en filter HTML met htmlspecialchars().
Ik zie dat je foreach() gebruikt voor het uitlezen van results uit de tabel, je kunt hier echter beter mysql functies voor gebruiken. Ik gebruik altijd mysql_fetch_assoc(). Maar dit moet je zelf weten natuurlijk ;-)
-
27-02-2009, 07:00 #12
- Berichten
- 730
- Lid sinds
- 18 Jaar
er zijn zoveel manieren om je input te checken zoals ik al eerder melde.
is_numeric
preg_match
eregi
etc etc
:) het is zeer belangrijk om je inputs te valideren! :)
-
27-02-2009, 07:04 #13
- Berichten
- 1.670
- Lid sinds
- 16 Jaar
-
27-02-2009, 12:07 #14
- Berichten
- 408
- Lid sinds
- 16 Jaar
Ik gebruik nu deze code, maar als ik nu op lees meer klik gebeurt er niets.
@Joris, waar moet ik dan die htmlspecialchars gebruiken?
PHP Code:<?php
// Connectie maken
require_once 'db_connect.php';
echo '<link rel="stylesheet" href="style.css" type="text/css" />';
echo '<link rel="alternate" title="Nieuws Feed" type="application/rss+xml" href="http://www.superslice.nl/test/rss.php">';
function verkort( $text, $length )
{
$punc = array( "!", "?", "." );
if( strlen( $text ) > $length )
{
$text = substr( $text, 0, $length );
$text = trim( $text );
$last = substr( $text, -1 );
if( !in_array( $last, $punc ) )
{
$text .= "…";
}
}
return $text;
}
if(is_numeric(isset($_GET['lezen'])))
{
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Gegevens toevoegen aan database
$insert = 'INSERT INTO comments
(comment_message, comment_date, comment_author)
VALUES ("'.mysql_real_escape_string($_POST['subject']).'", "'.mysql_real_escape_string($_POST['message']).'", "'.date("Y-m-d").'", "2")';
$results = $db->exec($insert);
echo 'Uw reactie is succesvol verstuurd.<br />';
echo 'U wordt automatisch doorgestuurd.';
echo '<meta http-equiv="refresh" content="2;URL=http://www.superslice.nl/test/nieuws.php?lezen='.$_GET['lezen'].'" />';
}
else
{
// Gegevens selecteren
$sql = 'SELECT
n.id,
n.news_subject,
n.news_message,
n.date,
u.username
FROM
news AS n
INNER JOIN
users AS u
ON u.id = n.user_id
WHERE n.id = "'.$_GET['lezen'].'" ORDER BY n.id DESC';
$results = $db->query($sql);
// Gegevens laten zien
foreach($results as $row)
{
// Aantal comments tellen
$sql2 = 'SELECT count(*) FROM comments WHERE news_id = "'.$row['id'].'"';
$result = $db->prepare($sql2);
$result->execute();
$comments = $result->fetchColumn();
echo '<h2>'.$row['news_subject'].'</h2>';
echo '<p class="small">Geplaatst door: <a href="#">'.$row['username'].'</a> op '.$row['date'].'. Reacties ('.$comments.')</p>';
echo '<p>'.$row['news_message'].'</p>';
echo '<h2>Reacties ('.$comments.')</h2>';
$select = 'SELECT * FROM comments WHERE news_id = "'.$row['id'].'" ORDER BY id DESC';
$results = $db->query($select);
foreach($results as $row)
{
echo '<p class="small"><strong>'.ucfirst($row['comment_author']).'</strong> schreef op '.$row['comment_date'].'</p>';
echo '<p>'.$row['comment_text'].'';
}
echo '<h2>Reactie toevoegen</h2>';
echo '<form action="'.htmlentities(strip_tags($_SERVER['PHP_SELF'])).'" method="post">';
echo '<label for="author">Auteur</label>';
echo '<input type="text" name="author" />';
echo '<label for="message">Bericht</label>';
echo '<textarea rows="10" cols="30" name="message"></textarea>';
echo '<input class="submit" type="submit" value="Verzenden" />';
echo '</form>';
}
}
}
else
{
// Gegevens selecteren
$sql = 'SELECT
n.id,
n.news_subject,
n.news_message,
n.date,
u.username
FROM
news AS n
INNER JOIN
users AS u
ON u.id = n.user_id ORDER BY n.id DESC';
$results = $db->query($sql);
// Gegevens laten zien
foreach($results as $row)
{
// Aantal comments tellen
$sql = 'SELECT count(*) FROM comments WHERE news_id = "'.$row['id'].'"';
$result = $db->prepare($sql);
$result->execute();
$comments = $result->fetchColumn();
echo '<h2>'.$row['news_subject'].'</h2>';
echo '<p class="small">Geplaatst door: <a href="#">'.$row['username'].'</a> op '.$row['date'].'. Reacties ('.$comments.')</p>';
echo '<p>'.verkort($row['news_message'], 300).'</p>';
echo '<a href="nieuws.php?lezen='.$row['id'].'">Lees verder</a>';
}
}
?>
-
27-02-2009, 12:12 #15gast11444 Guest
Je gebruikt mysql_real_escape_string() bij query's.
Je gebruikt htmlspecialchars() bij het uitlezen.
Vb. htmlspecialchars($variabele);
De html wordt dan als tekst weergegeven.
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic