Goedeavond...

ik heb dus een forum op mijn site staan, hij werkt!
alleen wil ik graag op de index.php het zelfde forum, maar dan alleen met de topic's die 'ík' of de 'ingelogde gebruiker' heeft aangemaakt.. is dit mogenlijk??? ik persoonlijk denk van wel maar weet alleen ff niet hoe.

Dit is nu het script:
is er een database structuur nodig of andere stukjes script dan hoor ik het wel :)

Bij voorbaad dank,

Reduan Kurtaj


<?php

echo 
'<table width="90%" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
<td width="53%" align="center" bgcolor="#E6E6E6"><strong>Topic</strong></td>
<td width="5%" align="center" bgcolor="#E6E6E6"><strong>Reacties</strong></td>
<td width="13%" align="center" bgcolor="#E6E6E6"><strong>Aangemaakt op</strong></td>
</tr>';

include('conn.php'); 

// we maken een query die alle topics ophaalt met hun gegevens.
    $sql = "SELECT topic_id, topic_titel, topic_datumtijd FROM topic ORDER BY topic_id DESC";

// die query voeren we uit.
    $resultaat = mysql_query($sql)or die(mysql_error());

// hier slaan we alle resultaten op in een array genaamd rij.
    while($rij = mysql_fetch_array($resultaat)){ 

// Per topic het aantal reactie;s ophalen.  
    $sql2 = mysql_query("SELECT reactie_id FROM reactie WHERE topic_id = ".$rij['topic_id'].";")or die(mysql_error());

// hier tellen we de resultaten en slaan dit op in $reacties	  
    $reacties = mysql_num_rows($sql2);

//alles netjes weergeven in een tabel.
    echo 
      '
	  <tr>
      <td bgcolor="#FFFFFF"><a href="?bekijktopic='.$rij['topic_id'].'">'.stripslashes($rij['topic_titel']).'</a></td>
      <td align="center" bgcolor="#FFFFFF">'.$reacties.'</td>
      <td align="center" bgcolor="#FFFFFF">'.$rij['topic_datumtijd'].'</td>
      </tr>
	  ';
    }
echo '<tr>
<td colspan="5" align="right" bgcolor="#E6E6E6"><a href="?maaktopic">Maak een nieuw Topic aan</a></td>
</tr>
</table>';
?>
Ik kies liever voor deze code:

<?php
$sql = "SELECT topic_id, topic_titel, topic_datumtijd FROM topic WHERE id = '".$_SESSION['id']."' ORDER BY topic_id DESC";
?>

Puur omdat id in je $_SESSION[] als define wordt gezien, en dat dit notices kan geven. En het is niets anders dan een string, dus behandel het dan ook als een string.

Dus gewoon netjes single-quotes gebruiken in array-variabelen.
- Aar - op 15/01/2014 01:23:12

Puur omdat id in je $_SESSION[] als define wordt gezien, en dat dit notices kan geven.

Die notice krijg je alleen (en terecht) als je $_SESSION[id] als losse variabele gebruikt. Op "$_SESSION[id]" (dus in een string) zul je geen notice krijgen. Zoals je zegt: als het een string is moet je het als een string behandelen. En dat doe je op die manier. ;-)
- Aar - op 15/01/2014 01:23:12

Puur omdat id in je $_SESSION[] als define wordt gezien, en dat dit notices kan geven.

Wat bedoel je hiermee Aar? Die 'id' is toch gewoon een array key?

- Aar - op 15/01/2014 01:23:12

Dus gewoon netjes single-quotes gebruiken in array-variabelen.

Maar dan weer netjes geen quotes gebruiken om een integer waarde in een query:

<?php
$sql = "SELECT topic_id, topic_titel, topic_datumtijd FROM topic WHERE id = ".$_SESSION['id']." ORDER BY topic_id DESC";
?>


@Erwin: Ik gebruik bij WHERE en SET altijd singequotes voor integers, tenzij ik een veldnaam gebruik.
Of kent dit nadelen?
@Ossie: De single-quotes missen in de index.
Een integer is geen string. Als je het als een integer veld definieert en het als een string invoert zal MySQL de waarde moeten converteren. Een groot probleem? Nee, het zal voor de meeste sites niet merkbaar zijn. Is het fout? Nee, het kan, MySQL doet het voor je (maar merk op dat uit het feit dat MySQL dit nu doet je kan afleiden dat het dus wel nodig is!). Meer tikwerk? Ja, je moet twee quotes extra plaatsen.

Daarnaast heb ik ook opmerkingen gezien over indices die niet gebruikt kunnen worden als je een string waarde invoert waar je een integer veld hebt. Ik heb hier echter zelf geen voorbeeld van en kan het dus niet 100% zeker verifieren. Als dat wel het geval is heb je natuurlijk direct wel en groot nadeel te pakken. Iemand die hier een voorbeeld van kan tonen?
Ozzie PHP op 15/01/2014 02:21:57

[quote="- Aar - op 15/01/2014 01:23:12"]
Puur omdat id in je $_SESSION[] als define wordt gezien,

Wat bedoel je hiermee Aar? Die 'id' is toch gewoon een array key?
[/quote]
Array keys moeten van het type integer of string zijn. Als je id zonder quotes gebruikt, ziet PHP dat niet als een string, maar als een constante. PHP zal dan eerst kijken of er een waarde voor de constante met de naam 'id' is gedefinieerd. Zo niet, dan zal hij 'id' alsnog als string behandelen.

In de meeste gevallen gaat dat wel goed, maar als je ooit eens op het idee komt een contante met die naam te definiëren (of als PHP dat zelf doen in een nieuwere versie) dan ga je nat.
>> @Ossie: De single-quotes missen in de index.

>> Als je id zonder quotes gebruikt, ziet PHP dat niet als een string, maar als een constante.

Ja, dat snap ik. Maar nu kan het aan mij liggen, maar er staan toch gewoon single-quotes om id heen?? :-s
Erwin H op 15/01/2014 09:30:50

Een integer is geen string. Als je het als een integer veld definieert en het als een string invoert zal MySQL de waarde moeten converteren. Een groot probleem? Nee, het zal voor de meeste sites niet merkbaar zijn.

Nou... wanneer je gaat joinen moeten de data types van de te vergelijken kolommen overeenkomen. Als je integer-waardes tussen quotes gaat zetten, moet dus voor elke rij in de tabel die conversie worden uitgevoerd. Dat merk je al bij enkele tienduizenden records (wat in mijn optiek nog een kleine database is).


Daarnaast heb ik ook opmerkingen gezien over indices die niet gebruikt kunnen worden als je een string waarde invoert waar je een integer veld hebt. Ik heb hier echter zelf geen voorbeeld van en kan het dus niet 100% zeker verifieren. Als dat wel het geval is heb je natuurlijk direct wel en groot nadeel te pakken. Iemand die hier een voorbeeld van kan tonen?

Er zijn situaties (ik kan ze zelf overigens ook niet reproduceren) waarin MySQL besluit dat de type conversion niet wordt uitgevoerd op de waarde maar op het veld. In dat geval wordt de index niet gebruikt.

Maar er zijn meer dingetjes waar het de optimalisatie dwars zit. Als je bijvoorbeeld een IN-operator hebt, worden de waardes die je daarin opgeeft eerst gesorteerd, omdat ze dan efficiënter op te halen zijn uit de index. Wanneer je de integer-waardes gaat quoten, wordt er een alfanumerieke sort uitgevoerd in plaats van een numerieke (je krijgt dan dus 1 10 2 in plaats van 1 2 10) en dat is niet bevorderlijk voor de optimalisatie.

Reageren