Avatar billede janorakel Nybegynder
09. oktober 2003 - 19:32 Der er 47 kommentarer og
1 løsning

Stort problem med script!!

Jeg har dette script, som viser samtlige forfattere i databasen grupperet. Man kan så klikke på hver enkelt forfatter og se hvad han/hun har skrevet.
Det virker bare ikke hvis kun efternavnet eller fornavnet i databasen er registreret. Så viser info-siden ingenting.
Her er det så:

<?php require("tjeklogin.php"); ?>
<html>
<head>
<title>Forfatter oversigt</title>
<link rel="stylesheet" href="css/greenstyle1.css" type="text/css">
</head>
<body>
<div id="Layer1" style="position:absolute; left:646px; top:13px; width:25px; height:20px; z-index:1"><a href="#" onClick="Print();"><img src="/img/print.gif" width="16" height="15" border="0"></a></div>
<div id="Layer2" style="position:absolute; left:678px; top:12px; width:42px; height:28px; z-index:2"><a href="sog.php"><img src="/img/kikkert.gif" border="0"></a></div>
<div id="Layer3" style="position:absolute; left:618px; top:14px; width:15px; height:15px; z-index:3"><a href='java script:history.go(-1)'><img src='/img/back1.gif' border="0"></a></div>
<center>
<table>
<?php
echo "<font face='Verdana' size='1'>Denne side er genereret kl. ";
echo date("H:i:s");
echo "<tr><td><strong><em>Nom</em></strong></td><td><strong><em>Prènom</em></strong></td><td><strong><em>Le nombre total</em></strong></td></tr>";
echo "<tr><hr colspan=3><td>";

$db = mysql_connect("localhost", "xxx", "xxx") or die ("Desværre ingen forbindelse til databasen"); mysql_select_db("book", $db) or die ("Kunne ikke vælge databasetabel");

$q = mysql_query("SELECT forfatternavn_efternavn, forfatternavn_fornavn, COUNT(*) AS antal FROM second GROUP BY forfatternavn_efternavn, forfatternavn_fornavn ORDER BY forfatternavn_efternavn ASC");
while($row=mysql_fetch_array($q))
{
echo "<tr><td><a href=\"info.php?efternavn=" .$row['forfatternavn_efternavn']. "&fornavn=".$row['forfatternavn_fornavn']. "\">" .$row['forfatternavn_efternavn']. "</a></td><td>" .$row['forfatternavn_fornavn']. "</td><td align='center'>" .$row['antal']. "</align></td></tr>";
}
?>
</table>
</center>
</body>
</html>
Avatar billede janorakel Nybegynder
09. oktober 2003 - 19:36 #1
Jeg har lige smidt det hele op på http://www.fangst.net
Bruger: test
PW: test
Og det er under "Chercher dans la base de données" I finder "Index des noms d'auteurs"
Avatar billede tjens Nybegynder
09. oktober 2003 - 21:03 #2
Dit link bliver f.eks. sådanher:
<a href="info.php?efternavn=&fornavn=AAA"></a>

Måske virker din $_GET["efternavn"] ikke, hvis den returnerer False i stedet for en tom streng.

Valider dit input i starten af info.php

Eller også bliver din query forkert bygget op : lav en echo $q og check den.
Avatar billede tjens Nybegynder
09. oktober 2003 - 21:06 #3
Hovsa $q skal være input til mysql_query($q) i info.php for at du kan echo den.
Du skal altså bygge din sql op i en string i stedet for direkte i mysql_query().
Avatar billede janorakel Nybegynder
09. oktober 2003 - 21:29 #4
hmm, det lyder rigtigt det med den tomme streng.
Hvordan kan jeg bygge den op?
Avatar billede storkie Nybegynder
10. oktober 2003 - 08:35 #5
<a href=\"info.php?id=$row['id']\">$row['forfatternavn_efternavn']</a>

Så tager den bare den id som forfatteren har og det er dermed lige meget hvilke andre oplysninger der er i din database. Det er nødvendigt at du har en id felt i din db.
Avatar billede janorakel Nybegynder
10. oktober 2003 - 12:03 #6
Den grupperer jo de data og jeg vil kun få en post ud af gangen.
Du mener altså at den skal gruppere ID i stedet - jeg er ikke helt med men jeg tror det er det rigtige.
Jeg får fejl i linien når jeg ekspermenterer.
Så skal den se sådan ud:
$q = mysql_query("SELECT forfatternavn_efternavn, forfatternavn_fornavn, COUNT(*) AS antal FROM second GROUP BY Id fornavn ORDER BY forfatternavn_efternavn ASC");

Eller hvordan?
Avatar billede storkie Nybegynder
10. oktober 2003 - 12:11 #7
$q = mysql_query("SELECT *, COUNT(*) AS antal FROM second GROUP BY Id fornavn ORDER BY forfatternavn_efternavn ASC");
Avatar billede janorakel Nybegynder
10. oktober 2003 - 13:10 #8
Øhm, jeg kludrer i det. Hvordan skal hele denne se ud?
echo "<tr><td><a href=\"info.php?efternavn=" .$row['forfatternavn_efternavn']. "&fornavn=".$row['forfatternavn_fornavn']. "\">" .$row['forfatternavn_efternavn']. "</a></td><td>" .$row['forfatternavn_fornavn']. "</td><td align='center'>" .$row['antal']. "</align></td></tr>";
Avatar billede storkie Nybegynder
10. oktober 2003 - 14:27 #9
echo "<tr><td><a href=\"info.php?id=$row['id']\">" .$row['forfatternavn_efternavn']. "</a></td><td>" .$row['forfatternavn_fornavn']. "</td><td align='center'>" .$row['antal']. "</align></td></tr>";
Avatar billede janorakel Nybegynder
10. oktober 2003 - 14:35 #10
jeg får denne fejl:
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /data/virtual/fangst/alfabe.php on line 24
Avatar billede storkie Nybegynder
10. oktober 2003 - 14:37 #11
UPS
$id = $row[0];
echo "<tr><td><a href=\"info.php?id=$id\">" .$row['forfatternavn_efternavn']. "</a></td><td>" .$row['forfatternavn_fornavn']. "</td><td align='center'>" .$row['antal']. "</align></td></tr>";
Avatar billede janorakel Nybegynder
10. oktober 2003 - 15:35 #12
tada, nu får vi:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /data/virtual/fangst/alfabe.php on line 22
Avatar billede storkie Nybegynder
10. oktober 2003 - 18:18 #13
$q = mysql_query("SELECT id, forfatternavn_efternavn, forfatternavn_fornavn, COUNT(*) AS antal FROM second GROUP BY forfatternavn_efternavn, forfatternavn_fornavn ORDER BY forfatternavn_efternavn ASC");
Avatar billede janorakel Nybegynder
10. oktober 2003 - 18:54 #14
Det vil sige at vi nu skal skal rette i info.php, som viser de grupperede poster fra denne forfatter.
Den ser sådan ud:
<?php
$efternavn = addslashes($_GET['efternavn']);
$fornavn = addslashes($_GET['fornavn']);
?>
<html>
<Script language="JavaScript">
function Print()
{
window.print();
}
</Script>
<head>
<title>Information for <?php echo "" . $efternavn . ", " . $fornavn . ""; ?></title>
<link rel="stylesheet" href="css/greenstyle1.css" type="text/css">
</head>
<body>
<div id="Layer1" style="position:absolute; left:666px; top:13px; width:25px; height:20px; z-index:1"><a href="#" onClick="Print();"><img src="/img/print.gif" width="16" height="15" border="0"></a></div>
<div id="Layer2" style="position:absolute; left:698px; top:12px; width:42px; height:28px; z-index:2"><a href="sog.php"><img src="/img/kikkert.gif" border="0"></a></div>
<div id="Layer3" style="position:absolute; left:638px; top:14px; width:15px; height:15px; z-index:3"><a href='java script:history.go(-1)'><img src='/img/back1.gif' border="0"></a></div>
<table width="50%" border="0" align="center" cellpadding="1" cellspacing="0" bordercolor="#333333" bgcolor="#FFFFFF">
    <tr bordercolor="#333333">
<?php
    echo "<font face='Verdana' size='1'>Denne side er genereret kl. ";
    echo date("H:i:s");
    echo "<br/><hr>";
$db = mysql_connect("localhost", "xxx", "xxx") or die ("Desværre ingen forbindelse til databasen");

mysql_select_db("book1", $db) or die ("Kunne ikke vælge databasetabel");
$q = mysql_query("SELECT * FROM second WHERE forfatternavn_efternavn='$efternavn' AND forfatternavn_fornavn='$fornavn' ORDER BY udgivelsestidspunkt_oversaettelse");
while($row=mysql_fetch_array($q))
{
if ($row[antal_bind] == "")
{
$row[antal_bind] = "1";
}

    echo "<td width='60px'><font face='Verdana' size='1'><a href=dethele.php?id=$row[id]><img src=img/lup.gif border=0></a><td width='90px'><br/><tr>";
    echo "<td><font face='Verdana' size='1'>Pays:<td><font face='Verdana' size='1'>$row[land]<br/><tr>";
              echo "<td><font face='Verdana' size='1'>Titre original:<td><font face='Verdana' size='1'><em> $row[originalvaerkets_titel]</em><br/><tr>";
    echo "<td><font face='Verdana' size='1'>Date de publication:<td><font face='Verdana' size='1'> $row[udgivelsestidspunkt_original]<br/><tr>";
              echo "<td><font face='Verdana' size='1'>Auteur:<td><font face='Verdana' size='1'> $row[forfatternavn_efternavn], $row[forfatternavn_fornavn]<br/><tr>";
            echo "<td><font face='Verdana' size='1'>Pseudonyme:<td><font face='Verdana' size='1'> $row[alias], $row[alias_fornavn]<br/><tr>";   
              echo "<td><font face='Verdana' size='1'>Titre de la traduction:<td><font face='Verdana' size='1'><em> $row[oversættelsens_titel]</em><br/><tr>";
    echo "<td><font face='Verdana' size='1'>Date de publication:<td><font face='Verdana' size='1'> $row[udgivelsestidspunkt_oversaettelse]<br/><tr>";
    echo "<td><font face='Verdana' size='1'>Traducteur:<td><font face='Verdana' size='1'> $row[oversaetterens_efternavn], $row[oversaetterens_fornavn]<br/><tr>";
    echo "<td colspan=2><hr></td><tr>";
}
?>
</table>
</center>
</body>
</html>
Avatar billede storkie Nybegynder
10. oktober 2003 - 22:34 #15
<?php
$efternavn = addslashes($_GET['efternavn']);
$fornavn = addslashes($_GET['fornavn']);
$id = $REQUEST['id'];
?>
<html>
<Script language="JavaScript">
function Print()
{
window.print();
}
</Script>
<head>
<title>Information for <?php echo "" . $efternavn . ", " . $fornavn . ""; ?></title>
<link rel="stylesheet" href="css/greenstyle1.css" type="text/css">
</head>
<body>
<div id="Layer1" style="position:absolute; left:666px; top:13px; width:25px; height:20px; z-index:1"><a href="#" onClick="Print();"><img src="/img/print.gif" width="16" height="15" border="0"></a></div>
<div id="Layer2" style="position:absolute; left:698px; top:12px; width:42px; height:28px; z-index:2"><a href="sog.php"><img src="/img/kikkert.gif" border="0"></a></div>
<div id="Layer3" style="position:absolute; left:638px; top:14px; width:15px; height:15px; z-index:3"><a href='java script:history.go(-1)'><img src='/img/back1.gif' border="0"></a></div>
<table width="50%" border="0" align="center" cellpadding="1" cellspacing="0" bordercolor="#333333" bgcolor="#FFFFFF">
    <tr bordercolor="#333333">
<?php
    echo "<font face='Verdana' size='1'>Denne side er genereret kl. ";
    echo date("H:i:s");
    echo "<br/><hr>";
$db = mysql_connect("localhost", "xxx", "xxx") or die ("Desværre ingen forbindelse til databasen");

mysql_select_db("book1", $db) or die ("Kunne ikke vælge databasetabel");
$q = mysql_query("SELECT * FROM second WHERE id = '$id' ORDER BY udgivelsestidspunkt_oversaettelse");
while($row=mysql_fetch_array($q))
{
if ($row[antal_bind] == "")
{
$row[antal_bind] = "1";
}

    echo "<td width='60px'><font face='Verdana' size='1'><a href=dethele.php?id=$row[id]><img src=img/lup.gif border=0></a><td width='90px'><br/><tr>";
    echo "<td><font face='Verdana' size='1'>Pays:<td><font face='Verdana' size='1'>$row[land]<br/><tr>";
              echo "<td><font face='Verdana' size='1'>Titre original:<td><font face='Verdana' size='1'><em> $row[originalvaerkets_titel]</em><br/><tr>";
    echo "<td><font face='Verdana' size='1'>Date de publication:<td><font face='Verdana' size='1'> $row[udgivelsestidspunkt_original]<br/><tr>";
              echo "<td><font face='Verdana' size='1'>Auteur:<td><font face='Verdana' size='1'> $row[forfatternavn_efternavn], $row[forfatternavn_fornavn]<br/><tr>";
            echo "<td><font face='Verdana' size='1'>Pseudonyme:<td><font face='Verdana' size='1'> $row[alias], $row[alias_fornavn]<br/><tr>";   
              echo "<td><font face='Verdana' size='1'>Titre de la traduction:<td><font face='Verdana' size='1'><em> $row[oversættelsens_titel]</em><br/><tr>";
    echo "<td><font face='Verdana' size='1'>Date de publication:<td><font face='Verdana' size='1'> $row[udgivelsestidspunkt_oversaettelse]<br/><tr>";
    echo "<td><font face='Verdana' size='1'>Traducteur:<td><font face='Verdana' size='1'> $row[oversaetterens_efternavn], $row[oversaetterens_fornavn]<br/><tr>";
    echo "<td colspan=2><hr></td><tr>";
}
?>
</table>
</center>
</body>
</html>
Avatar billede janorakel Nybegynder
11. oktober 2003 - 00:18 #16
Nu viser den ingenting, - eller hvis jeg bytter $id = $REQUEST['id']; ud med $id = $GET['id']; viser den kun en post. Ikke alle posterne af forfatteren.
Avatar billede detox Nybegynder
11. oktober 2003 - 15:34 #17
Ja, hvis id er unikt for hver række, vil du da kun få en række ud på den måde.
Jeg synes du skal lave dit link, som du gjorde oprindeligt. Og så lave en forespørgsel i den her stil:

$q = mysql_query("SELECT * FROM second WHERE forfatternavn_efternavn='$efternavn' OR forfatternavn_fornavn='$fornavn' ORDER BY udgivelsestidspunkt_oversaettelse");
Avatar billede janorakel Nybegynder
11. oktober 2003 - 15:41 #18
Men, grupperer den så? Samler den alle forfatterens værker?
Avatar billede detox Nybegynder
11. oktober 2003 - 16:06 #19
Ja, så vidt jeg kan se var dine scripts ok til at starte med. Dit problem var bare at der ikke blev vist nogle resultater, hvis enten for eller efternavn var tomt. Men hvis du bytter AND ud med OR, som jeg har foreslået, vil jeg mene, det skulle afhjælpe problemet.
Avatar billede janorakel Nybegynder
11. oktober 2003 - 16:08 #20
ok, jeg prøver lige..
Avatar billede janorakel Nybegynder
11. oktober 2003 - 16:15 #21
Ahh, jeg tror du henviser til info.php som modtager info fra alfabe.php
Avatar billede detox Nybegynder
11. oktober 2003 - 16:20 #22
Ja, mht. til forespørgslen, ja.
Avatar billede janorakel Nybegynder
11. oktober 2003 - 16:22 #23
Ok, jeg ændrede info.php til OR i stedet for AND, men hvis nu flere forfattere har samme fornavn kommer de også med i queryen. Men ellers er den ok.
Avatar billede detox Nybegynder
11. oktober 2003 - 16:51 #24
Så kunne du måske prøve med:

$q = mysql_query("SELECT * FROM second WHERE (forfatternavn_efternavn='$efternavn' AND forfatternavn_fornavn='$fornavn') OR (forfatternavn_efternavn='$efternavn') ORDER BY udgivelsestidspunkt_oversaettelse");
Avatar billede janorakel Nybegynder
11. oktober 2003 - 16:57 #25
hehe, den driller.. det bliver det samme.
Avatar billede janorakel Nybegynder
11. oktober 2003 - 16:59 #26
Skal vi hen og lege med Cases ell. if her også mon..
Avatar billede detox Nybegynder
11. oktober 2003 - 17:07 #27
Jamen vi søger jo slet ikke på fornavnet alene, så det kan da ikke passe.
Avatar billede detox Nybegynder
11. oktober 2003 - 17:10 #28
Har du husket parenteserne?
Avatar billede janorakel Nybegynder
11. oktober 2003 - 17:14 #29
hmm, jeg har ændret den..
Avatar billede janorakel Nybegynder
11. oktober 2003 - 17:14 #30
Jeg har copy & pastet
Avatar billede detox Nybegynder
11. oktober 2003 - 17:15 #31
Åh, jo selvfølgelig! Hvis efternavnet er tomt, vil den første betingelse alligevel være opfyldt.
Avatar billede janorakel Nybegynder
11. oktober 2003 - 17:16 #32
Ham Tjens øverst foreslår:
Du skal altså bygge din sql op i en string i stedet for direkte i mysql_query().
Hvad betyder det?
Avatar billede detox Nybegynder
11. oktober 2003 - 17:20 #33
Det undrer mig alligevel lidt, for du har vel ikke nogen forfattere i din database uden efternavn?
Avatar billede janorakel Nybegynder
11. oktober 2003 - 17:25 #34
Denne testdatabase har ingen - kun testen.
Den rigtige som kører på et andet domæne har et par 1000 poster indtil videre, og de har en del ukendte, hvor man kun kender enten efternavn eller fornavn.
Under oprettelsen af ny kilde kan du se at man også kan nøjes med et Pseudonym. Det er de gamle herrer de arbejder med...hehe
Avatar billede detox Nybegynder
11. oktober 2003 - 17:29 #35
Hmm, nu kender jeg ikke tabelstrukturen. Kunne det tænkes at den returnerer 'NULL' ved tomme felter?
Avatar billede janorakel Nybegynder
11. oktober 2003 - 17:29 #36
Yes, er det et problem?
Avatar billede detox Nybegynder
11. oktober 2003 - 17:31 #37
Ja, for så er syntaksen en anden. I stil med felt IS NULL, i stedet for felt='NULL'.
Avatar billede janorakel Nybegynder
11. oktober 2003 - 17:34 #38
Der er en masse "Null" i tabellen. Den har jeg da ikke tænkt på. Jeg aner bare ikke hvordan den så skal se ud, for den viser jo ikke NULL.
Avatar billede detox Nybegynder
11. oktober 2003 - 17:38 #39
Kunne du prøve dette øverst i din 'info.php':

<?php
$efternavn = addslashes($_GET['efternavn']);
$fornavn = addslashes($_GET['fornavn']);
echo "efternavn: $efternavn fornavn: $fornavn";
?>

og se hvad det giver med en af de forfattere uden for eller efternavn.
Avatar billede janorakel Nybegynder
11. oktober 2003 - 17:42 #40
Der står:
efternavn: AAA fornavn:
uden noget andet bagefter.
Kan man også lave det sådan at man kan klikke på efternavn, ved bare at highlighte det?
Avatar billede detox Nybegynder
11. oktober 2003 - 18:05 #41
Ja, det bliver jo et problem med det link du har her, hvis det er poster uden efternavn.

echo "<tr><td><a href=\"info.php?efternavn=" .$row['forfatternavn_efternavn']. "&fornavn=".$row['forfatternavn_fornavn']. "\">" .$row['forfatternavn_efternavn']. "</a></td><td>" .$row['forfatternavn_fornavn']. "</td><td align='center'>" .$row['antal']. "</align></td></tr>";
Avatar billede detox Nybegynder
11. oktober 2003 - 18:13 #42
Du kan lave linket sådan:

echo "<tr><td><a href=\"info.php?efternavn=" .$row['forfatternavn_efternavn']. "&fornavn=".$row['forfatternavn_fornavn']. "\">" .$row['forfatternavn_efternavn']. "</a></td><td><td><a href=\"info.php?efternavn=" .$row['forfatternavn_efternavn']. "&fornavn=".$row['forfatternavn_fornavn']. "\">" .$row['forfatternavn_fornavn']. "</a></td><td align='center'>" .$row['antal']. "</align></td></tr>";

så både for og efternavn bliver links.
Avatar billede detox Nybegynder
11. oktober 2003 - 18:31 #43
Du kan prøve at opbygge din forespørgsel sådan her:

mysql_select_db("book1", $db) or die ("Kunne ikke vælge databasetabel");
$querystr = "SELECT * FROM second WHERE ";
if ($fornavn = "") {
    $querystr .= "forfatternavn_efternavn='$efternavn' AND forfatternavn_fornavn IS NULL";
}
elseif ($efternavn = "") {
    $querystr .= "forfatternavn_fornavn='$fornavn' AND forfatternavn_efternavn IS NULL";
}
else {
    $querystr .= "forfatternavn_fornavn='$fornavn' AND forfatternavn_efternavn='$efternavn'";
}
$querystr .= " ORDER BY udgivelsestidspunkt_oversaettelse";
$q = mysql_query($querystr);
Avatar billede detox Nybegynder
11. oktober 2003 - 18:40 #44
Hovsa, sådan her:

$querystr = "SELECT * FROM second WHERE ";
if ($fornavn == "") {
    $querystr .= "forfatternavn_efternavn='$efternavn' AND forfatternavn_fornavn IS NULL";
}
elseif ($efternavn == "") {
    $querystr .= "forfatternavn_fornavn='$fornavn' AND forfatternavn_efternavn IS NULL";
}
else {
    $querystr .= "forfatternavn_fornavn='$fornavn' AND forfatternavn_efternavn='$efternavn'";
}
$querystr .= " ORDER BY udgivelsestidspunkt_oversaettelse";
Avatar billede janorakel Nybegynder
11. oktober 2003 - 19:03 #45
Det virker! Skal du ikke se fodbold?
Dem her må jeg hellere kigge nærmere på, for de ser lidt avancerede ud.
Mange tak..
Smid lige et svar..
Avatar billede detox Nybegynder
11. oktober 2003 - 19:06 #46
Har ikke tv3, så jeg må nøjes med p3.
Avatar billede janorakel Nybegynder
11. oktober 2003 - 19:25 #47
Det er en spændende kamp, og jeg synes det er ret ærgeligt at kampen ikke bliver vist på en public-service kanal.
Avatar billede detox Nybegynder
11. oktober 2003 - 19:26 #48
Fuldstændig enig!
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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