Hallo iedereen
(sorry voor de mensen die een leeg topic zien op het begin. Nadeel van een touchpad)

Ik ben bezig met een forum. Daarvoor heb ik twee tabellen aan gemaakt. Een voor de reacties en een voor de Topics.

Voor de topics

CREATE TABLE `forum_topics` (
  `id` int(11) NOT NULL auto_increment,
  `schrijver` varchar(255) collate latin1_general_ci NOT NULL,
  `onderwerp` varchar(255) collate latin1_general_ci NOT NULL,
  `categorie` varchar(255) collate latin1_general_ci NOT NULL,
  `bericht` text collate latin1_general_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=200 ;


voor de reacties

CREATE TABLE `forum_reacties` (
  `id` int(11) NOT NULL auto_increment,
  `topic_key` int(11) NOT NULL default '0',
  `schrijver` varchar(255) collate latin1_general_ci NOT NULL,
  `onderwerp` varchar(255) collate latin1_general_ci NOT NULL,
  `categorie` varchar(255) collate latin1_general_ci NOT NULL,
  `bericht` text collate latin1_general_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=3 ;


Nou zie ik de reacties uit het tabel forum_reacties maar niet het start bericht uit de tabel forum_topics. Wel heb ik uit deze een onderwerp kunnen halen.

De query

$query3	 = mysql_query
	("
	SELECT forum_topics.id, forum_topics.schrijver, forum_topics.onderwerp, forum_topics.categorie, forum_topics.bericht, 
	forum_reacties.id, forum_reacties.topic_key, forum_reacties.schrijver, forum_reacties.categorie, forum_reacties.bericht
	FROM forum_topics
	LEFT JOIN forum_reacties
	ON forum_topics.id = forum_reacties.topic_key 
	WHERE forum_topics.id = '". $topicid ."' 
	AND forum_reacties.topic_key = '". $topicid ."' 
	") or die(mysql_error());


Ik hoop dat ik duidelijk genoeg ben.
Bij voorbaat dank,
vlerknozem
Nou geef je hele script maar even
Maak gebruik van (uiteraard zonder xtra spaties)
[ c o d e ]
< ?php
error_reporting(E_ALL)
? >
[ / c o d e ]

zodat er duidelijke kleurtjes in staan
en bovenaan je script:



<?php
php error_reporting(E_ALL)    
?>

<?php session_start(); ?>
<div class="artikel">

<?php 
$pagina 		= $_GET['pagina']; 
$topic_id		= $_GET['topicid'];
$categorie		= $_GET['cat'];

switch($pagina)
{
	case "forum":
		if(!$_GET['cat'])
		{		 
			$kleur1 = "#FFF"; // Even kleuren
			$kleur2 = "#EFEFCF"; // Onevenkleuren
			$width  = "width=\"520\"";
			
			print("<table class=\"postedarts\"><tr><td class=\"titelline\" id=\"onderwerp\">");
			echo "<tr><td class=\"linearts\" bgcolor=\"$kleur1\" $width><b>NN-tutorials</b></td></tr>";
			echo "<tr><td class=\"linearts\" bgcolor=\"$kleur2\"><a href=\"?pagina=forum&cat=1.1\">Nieuws & artikelen</a></td></tr>";
			echo "<tr><td class=\"linearts\" bgcolor=\"$kleur1\"><a href=\"?pagina=forum&cat=1.2\">Bugs & onjuistheden</a></td></tr>";
			echo "<tr><td class=\"linearts\" bgcolor=\"$kleur2\"><a href=\"?pagina=forum&cat=1.3\">Tips & ideeen</a></td></tr>";
			echo "<tr><td><br /></td></tr>";
			echo "<tr><td class=\"linearts\" bgcolor=\"$kleur1\" $width><b>Scripting talen</b></td></tr>";
			echo "<tr><td class=\"linearts\" bgcolor=\"$kleur2\"><a href=\"?pagina=forum&cat=2.1\">php</a></td></tr>";
			echo "<tr><td class=\"linearts\" bgcolor=\"$kleur1\"><a href=\"?pagina=forum&cat=2.2\">css</a></td></tr>";
			echo "<tr><td><br /></td></tr>";
			echo "<tr><td class=\"linearts\" bgcolor=\"$kleur1\" $width><b>Overige</b></td></tr>";
			echo "<tr><td class=\"linearts\" bgcolor=\"$kleur2\"><a href=\"?pagina=forum&cat=3.1\">Offtopic</a></td></tr>";
			echo "</table>";
			$show_form = "hidden";
		}
		break;
		
	case "topics":
		echo "topics";
		break;
		
	case "topic":
		echo "topic";
		break;
		
	default:
		echo "welkom<br />";
		echo "<a href=\"?pagina=forum\">Forum</a>";
		$show_form = "hidden";
		break;	
}

if(!$pagina) { $show_form = "hidden"; }


if( ($categorie) AND (!$topic_id) )
{
  

  include("db_connect.php");
  $tolleol = mysql_query("SELECT `id`, `categorie`, `onderwerp` FROM forum_topics WHERE categorie = '". $categorie ."' ORDER BY `id` DESC ") or die(mysql_error());
  	$cl = 0; // Begin waarde kleuren voor regels
	$kleur1 = "#CFCFCF"; // Onevenkleuren  
	$kleur2 = "#FFF"; // Even kleuren
  print("<table border=\"1\" width=\"500\">");
  print("<tr><td bgcolor=\"$kleur2\"><b>Onderwerpen</b></td></tr>");
  
  while($paul_poept = mysql_fetch_array( $tolleol )) 
  {
    if($cl % "2"){$kleur=$kleur2;} else {$kleur = $kleur1; } // Om en om kleuren genereren voor regels.
    $topicid 	= $paul_poept['id'];
	$categorie 	= $paul_poept['categorie'];
	$onderwerp  = $paul_poept['onderwerp'];
	
    print("<tr><td bgcolor=\"$kleur\"><a href=\"?pagina=forum&cat=$categorie&topicid=$topicid\">$onderwerp</a><br /></td></tr>");
	$cl++;
  }
  print("</table>");
}

if ( ($categorie) AND ($topic_id) )
{
  $topicid = $_GET['topicid'];
  include("db_connect.php");
  $query3=mysql_query("
    SELECT 
       forum_topics.id, 
       forum_topics.schrijver, 
       forum_topics.onderwerp,   
       forum_topics.categorie, 
       forum_topics.bericht AS topicbericht,
       forum_reacties.id, 
       forum_reacties.topic_key, 
       forum_reacties.schrijver,  
       forum_reacties.categorie, 
       forum_reacties.bericht AS forumbericht
	FROM 
       forum_topics 
	INNER JOIN 
        forum_reacties 
	ON 
        forum_topics.id = forum_reacties.topic_key 
	WHERE 
        forum_topics.id = '". $topicid ."' 
	AND 
        forum_reacties.topic_key = '". $topicid ."' 
	ORDER BY 
        forum_reacties.id ASC
	")

or die(mysql_error());
	
//  ON forum_topics.id = forum_reacties.topic_key 
  	$cl = 1; // Begin waarde kleuren voor regels
	$count = 2;
	$kleur1 = "#CFCFCF"; // Onevenkleuren  
	$kleur2 = "#FFF"; // Even kleuren
  
  print("<table id=\"$count\" border=\"1\" >");
  

   
  
  while($rat = mysql_fetch_array($query3)) // WHILE voor de reacties :P
  {
    if($cl % 2){$kleur=$kleur2;} else {$kleur = $kleur1; } // Om en om kleuren genereren voor regels.
  
    $topicid 	= $rat['id'];
	$topic_key  = $rat['topic_key'];
	$categorie 	= $rat['categorie'];
	$onderwerp  = $rat['onderwerp'];
	$topic_bericht    = $rat['topicbericht'];
	$reactie_bericht    = $rat['forumbericht'];
	$schrijver  = $rat['schrijver'];
	
	$left_width=20;
	$right_width=370;
	
	if($count < 3)
	{  
		print("<tr><td colspan=\"2\">$onderwerp</td></tr>\n"); 
		print("<tr><td width=\"$left_width\"  valign=\"top\" bgcolor=\"$kleur1\">$schrijver</td>\n");
		print("<td width=\"$right_width \"  bgcolor=\"$kleur1\" >$topic_bericht</td></tr>\n");
	}
	
	print("<tr><td width=\"$left_width\"  valign=\"top\" bgcolor=\"$kleur\">$schrijver</td>");
    print("<td width=\"$right_width \"  bgcolor=\"$kleur\" >$reactie_bericht</td></tr>");
	
    
	$cl++;
	$count++;
	
	// IS NOG BUITEN WERKING... GEEFT ALLEEN WAARDE FALSE        >>>>>>>>>>>>>>>>>>>      if( ($_GET['topicid']) AND (mysql_num_rows($query3) == 0) ) {$break = "false"; echo "Topic niet gevonden"; }
  }


  print("</table>");
  
}
  $categorie		= $_GET['cat'];
  include("db_connect.php");
  if($_GET['action'] == "savetopic")
  {
     $onderwerp = $_POST['onderwerp'];
	 $notchk_bericht = $_POST['bericht'];
	 $bericht   = htmlspecialchars($notchk_bericht, ENT_QUOTES); 
	 
	 if(!$_GET['topicid'])
	 { 
		if( 	(strlen($onderwerp) < 5) OR (strlen($onderwerp) > 35) 	) { $error[0] = "Het onderwerp is te lang of te kort"; $status = "false"; } }
	   
	   if(strlen($bericht) < 12){$errors[1] = "Uw bericht is te kort"; $status = "false";}
	 
	 // $topic_key
	 $topicid = $_GET['topicid'];
	
	 
	 if($status != "false"){	

     if($_GET['topicid'])
	 { 
       $topic_key = $_GET['topicid'];
	   $schrijver = $_SESSION['login-naam'];
	   $query = mysql_query("INSERT INTO forum_reacties (`topic_key`, `schrijver`, `onderwerp`, `categorie`, `bericht`) VALUES ('". $topic_key ."', '". $schrijver ."', '". $onderwerp ."', '". $categorie ."', '". nl2br( $bericht )."')");
	   mysql_query($query);
	   echo "<meta http-equiv=\"refresh\" content=\"0;URL=?pagina=forum&cat=$categorie&topicid=$topic_key#$id\" />";
	 }
	 
	 if(!$_GET['topicid'])
	 {
	   $categorie = $_GET['cat'];
	   $schrijver = $_SESSION['login-naam']; 
	   $query = mysql_query("INSERT INTO forum_topics (`schrijver`, `onderwerp`, `categorie`, `bericht`) VALUES ('". $schrijver ."', '". $onderwerp ."', '". $categorie ."', '". nl2br( $bericht )."')");
	   
	   mysql_query($query);
	   echo "<meta http-equiv=\"refresh\" content=\"0;URL=?pagina=forum&cat=$categorie&topicid=$topicid\" />";
	 } 
	 }
	 }
 
  $topicid = $_GET['topicid'];
  
  for($r = 0; $r < 10; $r++){ echo $errors[$r]; }

 
  ?>
 
     <a name="0"></a>
	<?php 
	if( ($_SESSION['login'] == 1) AND (!empty($_SESSION['login-naam'])) AND ($_GET['cat']) AND (!$break))
	{
	    ?><form id="uniek" name="uniek" action="?pagina=forum&cat=<?php echo $categorie; ?>&action=savetopic<?php if ($_GET['topicid']) { echo "&topicid=$topicid"; } ?>" method="post"><?php
		if(!$_GET['topicid'])
		{ ?>
			<small>Onderwerp</small><br />
			<input type="text" name="onderwerp" size="77"><br />
			<br />
		  <?php 
		} 
		else 
		{ 
			echo"<br /><small><b>Reactie: </b></small> <br />"; 
		} ?><a name="txtarea"></a>

		<textarea name="bericht" rows="20" cols="40" name=\"txtarea\"></textarea><br />
		<input type="submit" name="zend" value="verstuur slet!" />
		</form>
		<?php
		
	} 
	if($_SESSION['login'] != 1)	
	{ 
		echo "<br /><small>U moet ingelogd zijn om een bericht te posten</small>"; 
	}
	



?>
</div>
De errors

Notice: Undefined index: action in C:\XAMPP\xampp\htdocs\xampp\www\echte_site\sub_paginas\_forum.php on line 160

Notice: Undefined variable: errors in C:\XAMPP\xampp\htdocs\xampp\www\echte_site\sub_paginas\_forum.php on line 201

Notice: Undefined variable: errors in C:\XAMPP\xampp\htdocs\xampp\www\echte_site\sub_paginas\_forum.php on line 201

Notice: Undefined variable: errors in C:\XAMPP\xampp\htdocs\xampp\www\echte_site\sub_paginas\_forum.php on line 201

Notice: Undefined variable: errors in C:\XAMPP\xampp\htdocs\xampp\www\echte_site\sub_paginas\_forum.php on line 201

Notice: Undefined variable: errors in C:\XAMPP\xampp\htdocs\xampp\www\echte_site\sub_paginas\_forum.php on line 201

Notice: Undefined variable: errors in C:\XAMPP\xampp\htdocs\xampp\www\echte_site\sub_paginas\_forum.php on line 201

Notice: Undefined variable: errors in C:\XAMPP\xampp\htdocs\xampp\www\echte_site\sub_paginas\_forum.php on line 201

Notice: Undefined variable: errors in C:\XAMPP\xampp\htdocs\xampp\www\echte_site\sub_paginas\_forum.php on line 201

Notice: Undefined variable: errors in C:\XAMPP\xampp\htdocs\xampp\www\echte_site\sub_paginas\_forum.php on line 201

Notice: Undefined variable: errors in C:\XAMPP\xampp\htdocs\xampp\www\echte_site\sub_paginas\_forum.php on line 201

Notice: Undefined variable: break in C:\XAMPP\xampp\htdocs\xampp\www\echte_site\sub_paginas\_forum.php on line 208

De meeste errors zijn gewoon van lege variabelen. Bijvoorbeeld $error
Kun je oplossen met isset

if(!isset($error){$error=''}

Voor de rest zie ik geen fouten Sorry
Oke dat met die errors is gedaan. Nu nog het echte probleem. Natuurlijk sta ik niet stil, en probeer ik ook zelf te proberen, maar ik kom er echt even niet uit.

Is er misschien iemand anders nog met ideeen?
Notice: Undefined index: action in

Betekend dat je een array element aanroept dat niet bestaat.

Undefined var houd (als ik het heb) meestal in dat ik $var .= "iets" doe zonder eerst $var te defineren ($var = "")

Oke, maar dat is niet het probleem. Dat array heeft met de conrole structuur te maken of alles is ingevuld, en of alles de juiste lengte heeft. Dat staat er dus los van.

Wat ik wil is dat hij gewoon die berichten weergeeft. Wanneer ik de WHERE clause weghaal dan laat hij alles zien. Ook berichten die er niet thuishoren, wat natuurlijk logisch is. Dus het probleem zit denk ik in de WHERE clause.

Dus ik dacht, ik haal het volgende weg:

<?php 
 AND 
        forum_reacties.topic_key = '". $topicid ."' 
?>


Maar dat lost het ook niet op. Ook als ik ipv de variabele $topicid direct deboel met $_GET ophaal, werkt het ook niet.
Probeer het eens zo:

<?php

$query3=mysql_query("
SELECT
forum_topics.id,
forum_topics.schrijver,
forum_topics.onderwerp,
forum_topics.categorie,
forum_topics.bericht AS topicbericht,
forum_reacties.id,
forum_reacties.topic_key,
forum_reacties.schrijver,
forum_reacties.categorie,
forum_reacties.bericht AS forumbericht
FROM
forum_topics
INNER JOIN
forum_reacties
ON
forum_topics.id = forum_reacties.topic_key
WHERE
forum_topics.id = ". $topicid ."
AND
forum_reacties.topic_key = ". $topicid ."
ORDER BY
forum_reacties.id ASC
")

or die(mysql_error());
?>

Zoals jij het doet in je voorbeeld ( '".$topicid."') kan het zijn dat MySQL zoekt naar een string met de waarde 1, omdat het veld id normaliter een nummeriek veld is (integer) moeten er geen enkele quotes om de waarde heen. Dat kan al zijn waar het fout gaat.
Helaas. Zelfs als ik dit doe:

<?php
WHERE 
        forum_topics.id = ". 210 ."
?>


Dan geeft hij nog niks. Id 210 is wel tevinden.

Reageren