Gå til innhold

[Løst] Enkel database som ikke er enkel :(


Anbefalte innlegg

Hei,

 

Tar IT1 som privatist og har ingen til å hjelpe meg. Har søkt litt rundt, men finner ikke egnet svar...

 

Har et lite nettsted der jeg kan logge inn for å legge inn nyheter til fremsiden. Det er 3 forskjellige brukere som kan logge seg på og poste nyheter til fremsiden. 

 

Har en tekstboks til tittel, et tekstområde til hovedteksten og en droppmeny for å velge bruker. 

Problemet er at i droppmenyen kommer navnene til brukerne som allerede har lagt ut en nyhet. Ikke brukerne som er lagt inn i egen table. Dette vil da føre til at listen blir ekstrem lang og rotete.

 

Hovedtabellen er "news" og undertabellen er "users".

 

Bruker mysql workbench og dreamweaver.

 

Kanskje rotete forklart, men slenger med en del bilder...

 

post-178810-0-49173900-1429095368_thumb.png

post-178810-0-85534200-1429095640_thumb.png

post-178810-0-87800800-1429095374_thumb.png

post-178810-0-60357000-1429095382_thumb.png

post-178810-0-76450200-1429095388_thumb.png

post-178810-0-26706100-1429095397_thumb.png

 

Lenke til kommentar
Videoannonse
Annonse

Spørringen er autogenerert av dreamweaver.

Slenger med flere bilder. 

mysql_select_db($database_mysqlconnection, $mysqlconnection);
$query_news = 
"SELECT news.title, news.text, users.firstname, users.id 
FROM news, users 
WHERE news.userid=users.id"; 

news tabellen

post-178810-0-27296900-1429099705_thumb.png

 

users tabellen

post-178810-0-75584900-1429099711_thumb.png

 

Hvordan jeg går frem

post-178810-0-11779900-1429099450_thumb.png

post-178810-0-06893800-1429099455_thumb.png

post-178810-0-77395800-1429099459_thumb.png

post-178810-0-74855000-1429099464_thumb.png

Lenke til kommentar

Spørringen er autogenerert av dreamweaver.

Slenger med flere bilder. 

mysql_select_db($database_mysqlconnection, $mysqlconnection);
$query_news = 
"SELECT news.title, news.text, users.firstname, users.id 
FROM news, users 
WHERE news.userid=users.id"; 

 

Hvorfor joiner du news og users? Skulle du ikke bare ha personene fra users?

 

Join i where clause er noe man bør unngå da spørringen blir vanskelig å lese. 

 

Sørringen over burde være:

SELECT news.title, news.text, users.firstname, users.id

FROM news

INNER JOIN users ON news.userid=users.id "; 

 

Men du trenger egentlig bare users for å liste ut brukere i den dropdown'en.

Så 

SELECT id, firstname from users

burde holde

Lenke til kommentar

 

Spørringen er autogenerert av dreamweaver.

Slenger med flere bilder. 

mysql_select_db($database_mysqlconnection, $mysqlconnection);
$query_news = 
"SELECT news.title, news.text, users.firstname, users.id 
FROM news, users 
WHERE news.userid=users.id"; 

 

Hvorfor joiner du news og users? Skulle du ikke bare ha personene fra users?

 

Join i where clause er noe man bør unngå da spørringen blir vanskelig å lese. 

 

Sørringen over burde være:

SELECT news.title, news.text, users.firstname, users.id

FROM news

INNER JOIN users ON news.userid=users.id "; 

 

Men du trenger egentlig bare users for å liste ut brukere i den dropdown'en.

Så 

SELECT id, firstname from users

burde holde

 

 

 

Skal sette inn verdier i news-tabbelen. news-tabellen inneholder raden userid som er knyttet til users-tabellen og id-raden for å få tilgang til firstname raden. 

 

Ut fra dette må jeg vel "knytte" news.userid med users.id?

 

Er ganske grønn når det kommer til databaser...

 

Prøvde forresten

SELECT news.title, news.text, users.firstname, users.id
FROM news
INNER JOIN users ON news.userid=users.id "; 

men funka ikke det heller. 

Lenke til kommentar

Starter helt fresh igjen. Testen på en "upublisert" sde. 

 

  1. Lager et Recordset kalt "news". Jeg skal kunne sette inn 3 verdier; news.title, news.text og news.userid. id-en til "innlegget" er AI og timestamp er current.
    post-178810-0-22755900-1429102226_thumb.png
     
  2. Sjekker verdiene dette gir meg
    post-178810-0-98921700-1429102275_thumb.png

    Så langt alt bra.
     
  3. Jeg vil at news.userid skal vises som users.firstname. Må da hente inn users.id og users.firstname.
    post-178810-0-19314100-1429102598_thumb.png
     
  4. Sjekker verdiene dette gir meg
    post-178810-0-85310200-1429102647_thumb.png
     
  5. Dreamweaver genererer følgende:
    <?php
    if (!function_exists("GetSQLValueString")) {
    function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
    {
      if (PHP_VERSION < 6) {
        $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
      }
    
      $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
    
      switch ($theType) {
        case "text":
          $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
          break;    
        case "long":
        case "int":
          $theValue = ($theValue != "") ? intval($theValue) : "NULL";
          break;
        case "double":
          $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
          break;
        case "date":
          $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
          break;
        case "defined":
          $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
          break;
      }
      return $theValue;
    }
    }
    
    mysql_select_db($database_mysqlconnection, $mysqlconnection);
    $query_news = "SELECT news.title, news.text, news.userid, users.id, users.firstname FROM news, users WHERE news.userid=users.id";
    $news = mysql_query($query_news, $mysqlconnection) or die(mysql_error());
    $row_news = mysql_fetch_assoc($news);
    $totalRows_news = mysql_num_rows($news);
    
    //sjekk av gylding tilgang//
    session_start();
    require_once("user.cookies.php");
    ?>
  6. Setter inn "Insertion Form"
    post-178810-0-57162900-1429102953_thumb.png
     
  7. Får følgende opp
    post-178810-0-72461200-1429102998_thumb.png
     
  8. Fjerner id og timestamp pga AI og CURRENT_TIMESTAMP. Endrer "Display As" for text til "Text area" (urelevant). 
    post-178810-0-27111500-1429103148_thumb.png
     
  9. Så. Endrer "Display As" for userid til "Menu". Får opp "Menu Properties..." og klikker på den.
    post-178810-0-76895200-1429103241_thumb.png
     
  10. Velger "From database". Get labels from: firstname. Get values from: id (som er id-raden i users-tabellen.
    post-178810-0-72752400-1429103354_thumb.png
     
  11. Trykker ok og får følgende "Form"
    post-178810-0-58561100-1429103529_thumb.png
     
  12. Syncer siden med serveren og tester på nettstedet.
    post-178810-0-29005000-1429103599_thumb.png
 
Ble veldig langt dette, men forhåpentligvis oversiktlig.
Tror problemet ligger i punkt 10.

EDIT1: 
Punkt 10. Testet ut med userid fra news-tabellen, men samtlige brukere gange dems innlegg kommer opp i "menyen"...

EDIT2: Det fungerer slik det er nå, så lenge alle brukerne allerede har et innlegg (1 mangler). Som dere sikkert skjønner er dette veldig lite praktisk etterhvert som det blir mange innlegg.
Endret av heh115
Lenke til kommentar

Ut fra dette må jeg vel "knytte" news.userid med users.id?

 

 

 

Er ganske grønn når det kommer til databaser...

 

Prøvde forresten

SELECT news.title, news.text, users.firstname, users.id
FROM news
INNER JOIN users ON news.userid=users.id "; 

men funka ikke det heller. 

 

 

Hva skal du med data fra news i dropdown'en med users? Selvfølgelig får du det samme problemet så lenge du joiner med news. Det du vil ha ligger i users ... der har du én forekomst av hver bruker. Det du har skrevet her er (sånn omtrent) akkurat det samme som før men i litt nyere syntax.

Endret av quantum
  • Liker 1
Lenke til kommentar

Sååå, har tydeligvis misforstått noe grunnleggende her. Fungerte med SELECT id, firstname from users.

Beklager min uvitenhet, men noen som har tolmodighet til å forklare meg dette?

 

Hvordan kan jeg inserte informasjon til databasen uten å ha "koblinger" til tabellene?

Hentes bare struktur gjennom recordset og alt av informasjon går gjennom databasetilkoblingen?

Håper dere ser tankegangen min gjennom punktene over. 

 

og som sagt, jeg er grønn når det kommer til databaser. Veldig lite er selvsagt i mitt hode 

Endret av heh115
Lenke til kommentar

Sååå, har tydeligvis misforstått noe grunnleggende her. Fungerte med SELECT id, firstname from users.

Beklager min uvitenhet, men noen som har tolmodighet til å forklare meg dette?

 

Hvordan kan jeg inserte informasjon til databasen uten å ha "koblinger" til tabellene?

Hentes bare struktur gjennom recordset og alt av informasjon går gjennom databasetilkoblingen?

Håper dere ser tankegangen min gjennom punktene over. 

 

Du har koblingene mellom tabellene. Det er id i user og userid i news. Disse er koblingen mellom de to tabellene. 

Når du har id fra users tabellen kan du inserte en news rad med å sette userid lik id.

 

users inneholder bare brukerene med en unik id. 

news inneholder bare nyhetene med id til users (som er samme id som users tabellen bruker).

 

Jeg vil sterkt anbefale deg å ta en kjapp tutorial på nett om relasjonsdatabaser. Det er svært tidkrevende å lage noe som helst databasedrevet med slikt klikk og pek verktøy. Man trenger grunnleggende forståelse av relasjonsdatabaser. 

Lenke til kommentar
  • 2 uker senere...

 

Jeg vil sterkt anbefale deg å ta en kjapp tutorial på nett om relasjonsdatabaser. Det er svært tidkrevende å lage noe som helst databasedrevet med slikt klikk og pek verktøy. Man trenger grunnleggende forståelse av relasjonsdatabaser. 

 

 

Drop Dreamweaver er mitt tips ...

  • Liker 1
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...