Avatar billede bgjensen Nybegynder
12. januar 2003 - 09:18 Der er 14 kommentarer og
1 løsning

Database opfører sig underligt

Jeg har lavet et PHP scipt med tilhørende My-SQL database, over mine videofilm.
Men efter at have tilføjet over 100 film, virker det ikke nogle gange. Det virker periodisk! Hvis jeg sletter nogle film så der måske kun er 50, kører det fint nok!

Min SQL database ser således ud:

titel VARCHAR(100),
org VARCHAR(100),
genre VARCHAR(50),
type VARCHAR(10),
nr VARCHAR(20),
link VARCHAR(100),

og ved 109 film fylder den 7,480 Bytes!

Det er sådan at når der er over 100 film, så nogle gange vil den ikke loade siden, enten sker der ikke noget (den bliver bare på den side man er på) eller også kommer den op med fejlen "Siden kan ikke vises", men som sagt hvis der ikke er så mange film er der ingen problemer!

Hvordan kan det være?? Man burde da kunne have lidt mere i en database??

Det skal lige siges at det hele kører på min egen maskine!
Avatar billede nicklasb Nybegynder
12. januar 2003 - 09:35 #1
kan den loade noget hvis du opstiller nogle krav til resultatet.. Fx at nr skla være mellem 0 og 50 ??
og lige et lille spørgsmål mere.. Hvorfor har du ikke en id?? Altså en at indexsere på??
Avatar billede bgjensen Nybegynder
12. januar 2003 - 09:49 #2
ja så virker det fint, den fejler kun hvis man vil se mange film på en gang listet.
Scriptet er et jeg har fundet på nettet, så jeg ved ikke hvorfor der ikke er en id!
Avatar billede jakoba Nybegynder
12. januar 2003 - 09:51 #3
en fast regel i sql-databaser er at alle lagrede rækker SKAL være forskellige. Det er en af grundene til at man ofte sætter et id-felt ind der er autonummereret.

dit felt 'nr' ser ud som det skal indeholde en talværdi. så bør det have typen INT og ikke VARCHAR. (gælder det også for feltet 'type' ?)

hvis der ikke er endnu et felt efter feltet 'link' skal der heller ikke stå komma efter.

id    int auto_increment primary key,
titel  VARCHAR(100),
org    VARCHAR(100),
genre  VARCHAR(50),
type  VARCHAR(10),
nr    INT,
link  VARCHAR(100)

mvh JakobA
Avatar billede bgjensen Nybegynder
12. januar 2003 - 10:03 #4
Nu har jeg tilføjet en id med auto_increment og sat nr til INT, type skal være tekst. Men stadigvæk samme fejl. Kan det tænkes at det er PHP scriptet som ikke virker med mange film??
Avatar billede jakoba Nybegynder
12. januar 2003 - 10:15 #5
det kan det sgtens. må vi se ?
Avatar billede bgjensen Nybegynder
12. januar 2003 - 10:25 #6
http://ugo.scarlata.it/?pid=phpdvd&cid=44

her er de filer som bruges!
Avatar billede bgjensen Nybegynder
12. januar 2003 - 10:26 #7
Avatar billede jakoba Nybegynder
12. januar 2003 - 10:36 #8
du har da vist ændret en hel del i det script:

CREATE TABLE IF NOT EXISTS dvds (
  title VARCHAR(100),
  studio VARCHAR(80),
  year VARCHAR(10),
  ratio VARCHAR(20),
  audio VARCHAR(20),
  link VARCHAR(100)
);

INSERT INTO dvds VALUES ( '2001: A Space Odyssey', 'Warner', '1968', '2.20:1', '5.1', '0062622');
Avatar billede bgjensen Nybegynder
12. januar 2003 - 10:37 #9
det er jo bare navnet på felterne i tabellen det burde jo ikke betyde noget!
Avatar billede bgjensen Nybegynder
12. januar 2003 - 10:38 #10
og det vriker sådan som jeg har ændret det bare ikke med mange film!
Avatar billede bgjensen Nybegynder
12. januar 2003 - 10:55 #11
Det må være scriptet for hvis jeg henter databasen på denne måde er der ingen problemer:

<?
$db = mysql_connect(localhost, username, password);
mysql_select_db(phpdvd, $db);
$foresp = mysql_query("SELECT titel, org, genre, type, nr, link FROM dvds ORDER BY titel LIMIT 0,1000");
while($data = mysql_fetch_array($foresp)){
?>
<table>
  <tr>
    <td width="200"><? echo $data[0]; ?></td>
    <td width="200"><? echo $data[1]; ?></td>
    <td width="100"><? echo $data[2]; ?></td>
    <td width="100"><? echo $data[3]; ?></td>
    <td width="10"><? echo $data[4]; ?></td>
    <td width="100"><? echo $data[5]; ?></td>
  </tr>
<?
}
?>
</table>

Så kan det være scriptet som er for stor med alle de film og derfor ikke virker ordentligt!
Avatar billede jakoba Nybegynder
12. januar 2003 - 11:24 #12
de ændringer vi har skubbet dig til at lave:
    tilføje id felt
    ændre felttypen til INT for feltet 'nr'
vil jeg anbefale du laver tilbage igen. fordi scriptet er baseret på at alting er strings.

men det giver så også dig et problem når du bruger eller indsætter data i den database.

hvis du fx skal beregne hvilket nr der er størst kan du ikke sige
  if ( $data_1[4] > $data_2[4] ) {
      // strengen '1000' er mindre end strengen '2'
      // ('1' står før '2' i alfabetet)
men bør istedet sige:
  if ( 1*$data_1[4] > 1*$data_2[4] ) {
      // '1*' tvinger $date_?[4] til at blive opfattet som talværdi
      // tallet 1000 er større end tallet 2

så jeg tror egentlig ikke det er set script du har hentet der er noget galt med, det er nok snarere den måde du angiver og bruger data fra scriptet den er gal med.
Avatar billede bgjensen Nybegynder
12. januar 2003 - 12:14 #13
jeg er gået igang med at designe mit eget php script og det har ingen problemer med at hente alle film fra databasen! Men hvis du (jakoba) gider poste et svar, så kan du få nogle point som tak for hjælpen!
Avatar billede jakoba Nybegynder
12. januar 2003 - 12:21 #14
nej tak. points er for løsninger og her har du selv fundet løsningen :-))
Avatar billede bgjensen Nybegynder
12. januar 2003 - 12:27 #15
ok som du vil :o)
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
Computerworld tilbyder specialiserede kurser i database-management

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