09. oktober 2003 - 19:32Der 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å:
$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>
Med version 7 af TeamShare tager Lector næste skridt og bygger en platform for AI-agenter, der i højere grad kan følge medarbejderen gennem hele arbejdsprocessen.
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"
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().
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.
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");
Ø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>";
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
$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");
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"; }
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"; }
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.
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");
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.
$q = mysql_query("SELECT * FROM second WHERE (forfatternavn_efternavn='$efternavn' AND forfatternavn_fornavn='$fornavn') OR (forfatternavn_efternavn='$efternavn') ORDER BY udgivelsestidspunkt_oversaettelse");
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
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);
$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";
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.