Ik ben bezig met een forum, maar als ik een $_get[id] erin zet word het topicid die de get op moet halen niet opgeslagen, de rest van de form word wel opgeslagen.... ook zie ik de hele secondes niet, maar alleen 0, 4, 7 etc... geen 01, 45 etc.. iemand die de oplossing voor deze 2 dingen weet?
<?
session_start();
require("config.php");
include "includes/header.php";
if ($_POST[submit]) {
if ($_POST['reply'] == "" )
{
echo "Je moet natuurlijk wel een bericht invullen. <a href=\"javascript:history.go(-1)\">Ga terug.</a>";
}
else
{
// vars (de $_GET['id'] dus
$topicid = $_GET['id'];
// datum en tijd gedeelte
$datum = date("j/n/Y");
$tijd = date("H:i:s");
// schrijven naar de db
$insert = "INSERT INTO forumreplies (replyid, topicid, datum, auteur, reply) VALUES ('', '$topicid', '$datum - $tijd', '$gebruikersnaam', '$_POST[reply]')";
$query = mysql_query($insert);
echo "Je reactie is geplaatst, klik <a href=\"viewtopic.php?id=$topicid\">hier</a> om je reactie te bekijken";
}
}
include "includes/footer.php";
?>
- Het is $_POST['submit'] en niet $_POST[submit]. Het mag wel werken, maar het is niet correct.
- Gebruik de functie isSet() om te controleren of een var geset is:
if (isSet($_POST['submit'])) {
- Kopieer een $_POST of $_GET-var niet naar een andere var, maar gebruik hem rechtstreeks. Dus niet dit: $topicid = $_GET['id'].
- MySQL kan zelf met data en tijden overweg:
$datum = date("j/n/Y");
$tijd = date("H:i:s");
is dus niet nodig. (zie het type DATE / TIME / DATETIME).
- Geef logische variabelenamen: dus: eerste letter de letter van het type, gevolgd door een naam waarvan je weet waarvoor hij gebruikt wordt: bijv. een nummer: $iElementen voor het aantal elementen. $sMijnString voor een string, enz..
- Zorg voor goede foutafhandeling (niet met or die()):
if ($rMijnQuery = mysql_query("SELECT enz.")) {
echo 'De gegevens kunnen niet worden opgevraagd!';
}
else {
<?php
if ($!rSelectTopicReply = mysql_query("SELECT * FROM forumreplies WHERE topicid = " . $id . " ORDER BY id DESC")) {
echo 'Kan de forumreplies niet opvragen!';
}
else {
// Ga verder.
}
?>
<?php
if($!rSelectTopicReply =mysql_query("SELECT * FROM forumreplies WHERE topicid = ".$id." ORDER BY id DESC")){
Euh.. lijkt me niet.... Want die eerste haalt de topic op, en die tweede de reacties op die topic, dus als ik die weg haal klopt het sowieso niet meer. Ook zegtie dat er geen reacties zijn, terwijl die er echt wel zijn.
echo 'html' => beter php afsluiten en html typen, want nu moet php het parsen en dan nog eens de browser html omvormen
beter direct de browser zijn werk laten doen ;)
geen quotes rond vars (bij echo), inderdaad maar vergeet niet:
$sql = mysql_query("SELECT * FROM forumtopics WHERE id='".$id."' ORDER BY id ASC");
bij de 2e select ' ' vergeten
en overigens gebruikt ge ook echo ' ...' en dan \" => dit heeft geen nut, ofwel echo "\"" ofwel echo '\'' maar niet mengen
Volgens mij maakt dat parsen niet echt veel uit, maar je hebt wel gelikj ja (heb het mezelf zo geleerd, weet ook niet waarom) De code die ik nu heb staat een aantal posts hierboven. Bedoel je dat met die select?
<?php
if ($!rSelectTopicReply = mysql_query("SELECT * FROM forumreplies WHERE topicid = " . $id . " ORDER BY id DESC")) {
echo 'Kan de forumreplies niet opvragen!';
}
else {
// Ga verder.
}
?>
<?php
if($!rSelectTopicReply =mysql_query("SELECT * FROM forumreplies WHERE topicid = ".$id." ORDER BY id DESC")){
opmerking over jouw script, als de pagina wordt geladen, dus zonder *.php?id=... dan zal je lelijke errors krijgen, doe een isset($_GET['id']) in een if-functie
<?php
if(isset($_GET['iID']))
{
// ga hier iets doen met $_GET['iID']
// bijvoorbeeld een getal er van maken, zodat je geen SQL injection kunt krijgen:
$_GET['iID'] = intval($_GET['iID']);
}
else
{
// ga hier mekkeren, er is geen ID, of laat een lijst zien waar je de ID's via de URL doorgeeft
}
?>
ziet dat eruit als 1 echo
en het verschil in snelheid geldt trouwens ook voor 1 regel, ik pas dit zelf niet toe omdat het inderdaad handiger is met echo
MAAR voor een form daarentegen
Ben nu in ieder geval een heel eind verder... Ik sorteerde op id, maar die kolom bestaat helemaal niet, dat moest replyid zijn. NU heb ik alleen een nieuw probleem. Wanneer er wel reacties zijn, staat er nu "geen reacties gepost", maar die zijn er wel. Wat kan er nu weer mis zijn? De query in ieder geval niet meer (denk ik)...