Avatar billede webexp Nybegynder
04. oktober 2004 - 20:42 Der er 38 kommentarer og
1 løsning

Problem med et nyhedssystem

jeg har et problem den skal skrive hvem der har lagt indlæget men det gør den ikke den skulle gerne skrive brugernavnet
i kan se det på følgende adresse det er lavet over en mysql database
http://exp.webcubic.dk/
som i kan se står der skrevet af: d.

<? echo $_SESSION['Brugernavn'] ; ?>
der til at henete bruger navnet med

Her er så sql dump jeg håber der er en der kan hjælpe mig
#
# Table structure for table `brugere`
#

CREATE TABLE `brugere` (
  `id` int(23) NOT NULL default '0',
  `username` text NOT NULL,
  `password` text NOT NULL,
  `email` text NOT NULL,
  `level` text NOT NULL
) TYPE=MyISAM;
# --------------------------------------------------------

#
# Table structure for table `nyhedsys`
#

CREATE TABLE `nyhedsys` (
  `headline` text NOT NULL,
  `news` text NOT NULL,
  `name` text NOT NULL,
  `email` text NOT NULL,
  `date` datetime NOT NULL default '0000-00-00 00:00:00',
  `id` int(3) NOT NULL default '0',
  UNIQUE KEY `date` (`date`),
  KEY `date_2` (`date`)
) TYPE=MyISAM;
# --------------------------------------------------------
Avatar billede eagleeye Praktikant
04. oktober 2004 - 20:53 #1
<? echo $_SESSION['Brugernavn'] ; ?>
Umiddelbart udskriver den navnet på den bruger som er logget ind.

Hvilken kolonne i nyhedsys angiver den bruger der har skrevet nyheden?
Avatar billede webexp Nybegynder
04. oktober 2004 - 21:11 #2
name men det ser ud til når jeg går ind via phpmyadmin så ligger den ikke navnet ind i den kolone der hedder mane og email det er jo det den skal hente automatisk fra den bruger der er logget ind hvordan kan man lave det
Avatar billede eagleeye Praktikant
04. oktober 2004 - 21:22 #3
Så skal navnet ligges i tabellen når nyheden gemmes.

hvis du vel hente navn og email kunne det gøres med en SQL som denne:

"select username, email from brugere where usernavn ='".$_SESSION['Brugernavn']."'";


Men det man typisk gør er at gemme brugeres ID i nyhedsys i stedet for navn og email. Så man ikke har redundat data.
Avatar billede webexp Nybegynder
04. oktober 2004 - 21:28 #4
brugeren får et id når personen bliver oprettet kan det bruges til noget det id eller og i så fald hvad skal der til så
Avatar billede eagleeye Praktikant
04. oktober 2004 - 21:35 #5
Ja det ID brugeren har bruges til at gemme i nyhedsys så man ved hvem der har skrevet nyheden.

Når man udskriver nyhederne skal man så hente bruger navnet fra brugere tabellen, det kan gøre med en join.

Hvis du tilføjer en ny kolonne i nyhedsys:
  `brugerid` int(23) NOT NULL default '0'

Så kan du hente nyhderne sådan her:
"select nyhedsys.*, brugere.username, brugere.email from nyhedsys inner join brugere on nyhedsys.brugerid=brugere.id"


Fordelen ved at bruge ID er hvis brugeren skifter bruger navn eller email så skal man ikke opdatere noget i nyhedsys for det bliver rigtigt.

Når du så gemmer en nyhed skal du ligge ID på den bruger som skriver nyhden i tabellen sammen med den andre data.
Avatar billede eagleeye Praktikant
04. oktober 2004 - 21:37 #6
hvis du laver det med ID'et kan du fjerne disse to kolonner fra nyhedsys tabellen:
  `name` text NOT NULL,
  `email` text NOT NULL,
Avatar billede webexp Nybegynder
04. oktober 2004 - 21:37 #7
jeg r lidt noob til dette der for spørger jeg også her jeg vil gerne lære men det er for mig forvirende en gang imellem men jeg prøver at indsætte den kolonne
Avatar billede webexp Nybegynder
04. oktober 2004 - 21:43 #8
der er en der hedder id i nyhedsys int(3) not null default 0
Avatar billede webexp Nybegynder
04. oktober 2004 - 21:44 #9
kan jeg evt ændre den til det du nævnte
Avatar billede eagleeye Praktikant
04. oktober 2004 - 21:48 #10
Nej det er vist id kolonnen til nyhderne, sådan hver nyhed også får et unikt id.
Avatar billede webexp Nybegynder
04. oktober 2004 - 21:49 #11
<?PHP
include("admin/loginform.php");
?><div align="left">
      <table height="33" cellSpacing="0" cellPadding="0" width="509" border="0">
        <tr>
          <td vAlign="center" width="100%" background="lineGFX.gif">
          <font face="Verdana" color="#336699" size="1"><b>&nbsp; News:</b></font></td>
        </tr>
      </table>
    </div>
        <table width="512" border="0" valign="top">
          <tr>
            <td height="512%">
              <?php
@include('config.php');

$resultat = mysql_query("select *,date_format(date, '%e/%c %Y - %H:%i') AS tid FROM nyhedsys order by id desc");
while ($row = mysql_fetch_array($resultat)) {

$headline = stripslashes($row[headline]);
$news = stripslashes($row[news]);
$news = nl2br($news);

?>
            </td>
          </tr>
          <tr>
           
          </tr>
          <tr>
            <td vAlign="bottom"><b><? echo $headline; ?></b></td>
          </tr>
          <tr>
            <td vAlign="bottom"><? echo $news; ?></td>
          </tr>
          <tr>
            <td vAlign="bottom">Skrevet af: <a href="mailto:<? echo $row[email]; ?>"><? echo $row[name]; ?></a>
              d. <? echo $row[tid]; ?></td>
          </tr>
          <tr>
            <td vAlign="bottom"><?
}
?>
sådan ser min kodning ud kan du hjælpe mig med at ændre den til det der virker for jeg hjar kæmpet med det længe
Avatar billede webexp Nybegynder
04. oktober 2004 - 21:49 #12
ok
men kan da ikke lige se hvor jeg kan tilføje den kolone som du nævnte
Avatar billede eagleeye Praktikant
04. oktober 2004 - 21:53 #13
Prøv at rette denne:
$resultat = mysql_query("select *,date_format(date, '%e/%c %Y - %H:%i') AS tid FROM nyhedsys order by id desc");

Til denne:

$resultat = mysql_query("select nyhedsys.*,brugere.username, brugere.email ,date_format(date, '%e/%c %Y - %H:%i') AS tid FROM nyhedsys inner join brugere on nyhedsys.brugerid=brugere.id order by nyhedsys.id desc");


Samt rette denne:
<td vAlign="bottom">Skrevet af: <a href="mailto:<? echo $row[email]; ?>"><? echo $row[name]; ?></a>

til:

<td vAlign="bottom">Skrevet af: <a href="mailto:<? echo $row['email']; ?>"><? echo $row['username']; ?></a>
Avatar billede webexp Nybegynder
04. oktober 2004 - 21:56 #14
ok det er så gjort men har stadig ikke fundet ud af hvordan jeg tilføjer den kolone
Avatar billede eagleeye Praktikant
04. oktober 2004 - 22:02 #15
Du kan gå ind i phpmyadmin og vælge tabellen. Vælg "structure" (mener jeg) nedert er en mulighed for:
Add new field :

Så bare tryk på Go, så kan du skrive navnet på kolonne, brugerid angive typen til Int og sætte size 23 og default til 0
Avatar billede webexp Nybegynder
04. oktober 2004 - 22:07 #16
ok det r nu gjort nu har jeg så et andet problem jeg har en fil add_nyhed_sql.php som nu kommmer med fejl om en colum der ikke eksisterer jeg fandt ud af det med databasen
sådan ser den fil ud

<?
include('login.php');
include ('config.php');

$id = time();

$name =  $_SERVER['PHP_AUTH_USER'] ;
$res = mysql_query("SELECT email FROM brugere WHERE username = '$name' ");
$row = mysql_fetch_array($res);
$email = $row[email];

$headline = addslashes($headline);
$news = addslashes($news);

mysql_query("
INSERT INTO nyhedsys (id,headline,name,email,news,date)
VALUES ('$id','$headline','$name','$email','$news',now())") or die(mysql_error());

?>
Avatar billede webexp Nybegynder
04. oktober 2004 - 22:08 #17
Unknown column 'name' in 'field list' denne fejl k0ommer der
Avatar billede webexp Nybegynder
04. oktober 2004 - 22:10 #18
jeg er ked af at tage alt din tid men det vil betyde en del for mig at få dettte til at virke så jeg håber du vil hjælpe mig færdig til at det virker
Avatar billede eagleeye Praktikant
04. oktober 2004 - 22:11 #19
Ok det så der den skal hente ID på brugerene i stedet for email og skrive det i tabellen:

$res = mysql_query("SELECT email FROM brugere WHERE username = '$name' ");
$row = mysql_fetch_array($res);
$email = $row[email];

så det bliver:

$res = mysql_query("SELECT id FROM brugere WHERE username = '$name' ");
$row = mysql_fetch_array($res);
$brugerid = $row['id'];


Den sql sætning som indsætter nyheden skal så rettes:
mysql_query("
INSERT INTO nyhedsys (id,headline,name,email,news,date)
VALUES ('$id','$headline','$name','$email','$news',now())") or die(mysql_error());

til dette:
mysql_query("
INSERT INTO nyhedsys (id,headline,brugerid,news,date)
VALUES ('$id','$headline','$brugerid','$news',now())") or die(mysql_error());
Avatar billede webexp Nybegynder
04. oktober 2004 - 22:15 #20
den indsætter bruger id som 0 i de to tests jagf har lavet men siden henter den jo ikke frem
Avatar billede eagleeye Praktikant
04. oktober 2004 - 22:16 #21
Så prøv at tjekke at $name her indehoder den rigtige værdi:

$name =  $_SERVER['PHP_AUTH_USER'] ;

Det er måske session variablen du skal bruge her for den bruger som er logget ind:

$name =  $_SESSION['Brugernavn']  ;
Avatar billede webexp Nybegynder
04. oktober 2004 - 22:19 #22
de 2 brugere jeg har oprettet har hver deres id  1096928301 kunne se sådan ud men den hanter den ikke over i nyhedssys
Avatar billede eagleeye Praktikant
04. oktober 2004 - 22:20 #23
En anden ting, denne SQL sætning med JOIN i som jeg har vist før:

$resultat = mysql_query("select nyhedsys.*,brugere.username, brugere.email ,date_format(date, '%e/%c %Y - %H:%i') AS tid FROM nyhedsys inner join brugere on nyhedsys.brugerid=brugere.id order by nyhedsys.id desc");

Bør rettes til denne så den også henter nyhederne ud selvom der ikke er angivet en bruger til nyheden:

$resultat = mysql_query("select nyhedsys.*,brugere.username, brugere.email ,date_format(date, '%e/%c %Y - %H:%i') AS tid FROM nyhedsys left join brugere on nyhedsys.brugerid=brugere.id order by nyhedsys.id desc");
Avatar billede eagleeye Praktikant
04. oktober 2004 - 22:24 #24
Prøv at tjekke den finder det rigtige bruger id når nyheden indsættes:

ved at udskrive $brugerid:

$brugerid = $row['id'];
echo "Bruger id: ".$brugerid;
Avatar billede webexp Nybegynder
04. oktober 2004 - 22:26 #25
nu skriver den ihvertfal nyheden ud men hvad skal jeg med den sætning hvor skal den indsættes
Avatar billede eagleeye Praktikant
04. oktober 2004 - 22:27 #26
Der hvor du gemmer nyheden, lige efter den har hentet bruger id ud.

Hvor har du gemt brugernavn/brugerid for den bruger der er logget ind?
Avatar billede webexp Nybegynder
04. oktober 2004 - 22:27 #27
uanset hvilken bruger der skriver noget så er brugerid inde i nyhedssys delen 0 burde det ikke være brugerens id
Avatar billede eagleeye Praktikant
04. oktober 2004 - 22:28 #28
Jo, men det kunne tyde på brugernavet ikke er gemt i sessionen?
Avatar billede eagleeye Praktikant
04. oktober 2004 - 22:32 #29
Hvor er informationen brugernavn eller id gemt for den bruger som er logget ind?

Er det i session så prøv at kalde session_start(); som den første linje kode i filen:

<?php
session_start();
..
..
?>
Avatar billede webexp Nybegynder
04. oktober 2004 - 22:34 #30
det står der også som det første
Avatar billede eagleeye Praktikant
04. oktober 2004 - 22:36 #31
men gemmer du username i  $_SESSION['Brugernavn'] ?
Elller hedder det noget andet:  $_SESSION['username'] ?
Avatar billede webexp Nybegynder
04. oktober 2004 - 22:41 #32
<td vAlign="bottom">Velkommen <u><? echo $_SESSION['Brugernavn'] ; ?></u>
              til administrationen.</td>

når jeg er logget ind med test brugeren siger den "Velkommen test til administration så den n husker det vel ok eller hvad
Avatar billede eagleeye Praktikant
04. oktober 2004 - 22:47 #33
ok, så skulle det jo være rigtigt. Prøv så at udskrive det navn den kan se i session og det bruger ID den finder der hvor nyheden gemmes:

$name =  $_SESSION['Brugernavn'];
echo "Username : ".$name;
$res = mysql_query("SELECT id FROM brugere WHERE username = '$name' ");
$row = mysql_fetch_array($res);
$brugerid = $row['id'];
echo "Bruger ID : ".$brugerid;
Avatar billede webexp Nybegynder
04. oktober 2004 - 22:49 #34
hvor skal jeg bruge den kode
skal jeg lave en ny side eller ?????
Avatar billede eagleeye Praktikant
04. oktober 2004 - 22:50 #35
Nej det er i stedet for de linjer du har som sikker ser sådan her ud, det er det som henter bruger ID'et ud:

$name =  $_SESSION['Brugernavn'];
$res = mysql_query("SELECT id FROM brugere WHERE username = '$name' ");
$row = mysql_fetch_array($res);
$brugerid = $row['id'];
Avatar billede webexp Nybegynder
04. oktober 2004 - 22:55 #36
ja når eg ligger den kode ind så kommer mit bruger navn og id frem på skærmen
Avatar billede webexp Nybegynder
04. oktober 2004 - 22:56 #37
nu virker det
Avatar billede eagleeye Praktikant
04. oktober 2004 - 23:02 #38
Ok her et svar så :)
Avatar billede webexp Nybegynder
04. oktober 2004 - 23:05 #39
jeg vil sige mange tak for din tolmodighed og hjælp med mit problem jeg er nu en meget glad mand

mange tak
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester