Avatar billede bb_maze Nybegynder
20. januar 2005 - 16:12 Der er 41 kommentarer og
1 løsning

Virker ikke efter ny tabel

Hejsa

Jeg har et nyheds script som fungere ved hjælp af en mySQL database. I går tilføjede jeg en ny tabel (en id tabel), men nu kan jeg ikke længere tilføje nyheder ved hjælp af mit script. Skal jeg ændre noget i det? Jeg troede at mySQL'en selv kunne finde ud af at sætte et id ind?

Håber der er nogle der kan hjælpe - på forhånd tak.

Hygge
Avatar billede Slettet bruger
20. januar 2005 - 16:17 #1
du skal lave et nyt felt med primær nøgle og auto_increment via phpmyadmin.
Avatar billede bb_maze Nybegynder
20. januar 2005 - 16:21 #2
Altså jeg har tilføjet kolonen til min tabel i phpmyadmin, hvis det er det du tænker på?

Jeg vil tro at problemet ligger i mit php script. Jeg kan i hvert fald sagtens tilføje nyheder via phpmyadmin (det er bare lidt bøvlet ;))

Hygge
Avatar billede bb_maze Nybegynder
20. januar 2005 - 22:35 #3
Ingen der kan hjælpe? Har skrevet forkert i min overskrift kan jeg se, der burde stå: 'Virker ikke efter ny kolonne'

Hygge
Avatar billede erikjacobsen Ekspert
20. januar 2005 - 22:36 #4
Hvis du viser noget kode, så kan vi måske.
Avatar billede bb_maze Nybegynder
20. januar 2005 - 22:45 #5
Hvad vil du se kode af? Har jo bare tilføjet en ny kolonne til min mysql admin. Denne kolonne indholder unikke id, og den har auto increment.

Jeg har ikke ændret i php scriptet siden det virkede.

Hygge
Avatar billede erikjacobsen Ekspert
20. januar 2005 - 22:47 #6
Men det ku' jo være dit script skal ændres. Det er rent gætteri, når vi ikke kan se de relevante linier.
Avatar billede bb_maze Nybegynder
20. januar 2005 - 23:22 #7
Ved ikke helt hvad du vil ha, men her er php filen jeg bruger når jeg skal tilføje en nyhed:


<?php include("tjekcookie.php");

if (!isset($_SESSION['brugernavn'])) {
echo"Du skal være logget ind før du kan få adgang til dette område";
}else{
echo
?>
<?php
$conn = mysql_connect("xxxx", "xxxx", "");
mysql_select_db("xxxx");

if (isset($_POST['link'])) {
    $titel = htmlentities($_POST['link'], ENT_QUOTES);
    $http = $_POST['http'];
    $kilde = $_POST['kilde'];
    $forfatter = $_POST['forfatter'];
    $billede = $_POST['billede'];
    $tekst = addslashes($_POST['tekst']); 
    $dato = date(d);
    $dato .= "-".date(m);
    $dato .= "-".date(y);
    $tid = date(H);
    $tid .= ".".date(i);
    $date = date(YmdHi);
    mysql_query("INSERT INTO nyheder VALUES ('$titel', '$http', '$kilde', '$forfatter', '$billede', '$tekst', '$dato', '$tid', '$date')");
    echo "<br><div align=center><b>Nyheden er tilføjet</b></div><br>";
}


?>

<script type="text/javascript" src="validering.js"></script>

<table width="450" border="0" align="center">
    <tr>
      <td width="423"><form name="form1" method="post" action="?side=nyhedsadmin" onsubmit="return valider(this);">
        <table border="0" align="center">
          <tr>
            <td width="182" height="25"><p><strong>Overskrift: </strong></p></td>
            <td width="240"> <div align="right">
                <input name="link" type="text" class=form size="40" maxlength="60">
              </div></td>
          </tr>
          <tr>
            <td><strong>Link til org. artikel: </strong></td>
            <td width="240"><div align="right"><strong>
                <input name="http" type="text" class=form value="http://" size="40" maxlength="120">
                </strong></div></td>
          </tr>
          <tr>
            <td><strong>Kilde:<br>
              <font size="1">(uden www og http://)</font></strong></td>
            <td width="240"> <div align="right">
                <input name="kilde" type="text" class=form size="40" maxlength="40">
              </div></td>
          </tr>
          <tr>
            <td><strong>Forfatter:</strong></td>
            <td width="240"><div align="right"><strong>
                <input name="forfatter" type="text" class=form size="40" maxlength="30">
                </strong></div></td>
          </tr>
        </table>
        <div align="center"><br>
          <br>
        </div>
        <table width="426" align="center" cellpadding="1" cellspacing="0">
          <tr>
            <td colspan="3"><strong>Kategori:</strong></td>
          </tr>
          <tr valign="bottom">
            <td height="20" colspan="3"><div align="center"><strong><font size="1">----Formel
                1----</font></strong></div></td>
          </tr>
          <tr>
            <td width="220"> <input type="radio" name="billede" value="bar">
              BAR</td>
            <td width="220"> <input type="radio" name="billede" value="jordan">
              Jordan</td>
            <td width="220"> <input type="radio" name="billede" value="renault">
              Renault</td>
          </tr>
          <tr>
            <td> <input type="radio" name="billede" value="ferrari">
              Ferrari</td>
            <td> <input type="radio" name="billede" value="mclaren">
              McLaren</td>
            <td> <input type="radio" name="billede" value="sauber">
              Sauber </td>
          </tr>
          <tr>
            <td><input type="radio" name="billede" value="jaguar">
              Jaguar</td>
            <td> <input type="radio" name="billede" value="minardi">
              Minardi</td>
            <td>&nbsp;</td>
          </tr>
          <tr>
            <td> <input type="radio" name="billede" value="toyota">
              Toyota</td>
            <td> <input type="radio" name="billede" value="Williams">
              Williams</td>
            <td><input type="radio" name="billede" value="fia">
              FIA </td>
          </tr>
          <tr>
            <td height="19" colspan="3"><div align="center">
                <input type="radio" name="billede" value="f1">
                F1 Generelt</div></td>
          </tr>
          <tr valign="bottom">
            <td height="20" colspan="3"><div align="center"><strong><font size="1">----Ikke
                formel 1----</font></strong></div></td>
          </tr>
          <tr>
            <td height="19"> <input type="radio" name="billede" value="Diverse">
              Diverse</td>
            <td> <input type="radio" name="billede" value="wrc">
              Rally</td>
            <td> <input type="radio" name="billede" value="baner">
              Baner</td>
          </tr>
          <tr>
            <td height="19"> <input type="radio" name="billede" value="dansk">
              Danske k&oslash;rere</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
          </tr>
        </table>
        <p align="center"><strong>Artikel:</strong><br>
          <textarea name="tekst" cols="60" rows="10" class=form></textarea>
        </p>
        <p align="center"> $tekst = nl2br(htmlspecialchars($_POST['tekst'], ENT_QUOTES));
          <br>
          <input type="submit" name="Submit" value="Tilf&oslash;j">
          <input type="reset" name="Submit2" value="Reset">
        </p>
      </form>
      </td>
    </tr>
  </table>
     
<div align="center"></div>

<?
;}
?>
Avatar billede erikjacobsen Ekspert
20. januar 2005 - 23:34 #8
Den relevante linie er nu kun

  mysql_query("INSERT INTO nyheder VALUES ('$titel', '$http', '$kilde', '$forfatter', '$billede', '$tekst', '$dato', '$tid', '$date')");

Du kan gøre 2 ting. Enten tilføje et værdi på det sted i tabellen, som den ligger
nu, hvor dit nye felt er. Hvis det ligger sidst kan du:

  mysql_query("INSERT INTO nyheder VALUES ('$titel', '$http', '$kilde', '$forfatter', '$billede', '$tekst', '$dato', '$tid', '$date', '')") or die(mysql_error());

Eller du kan opremse navnene på dine felter først. Så kan du slippe for at angive
feltet. Jeg kender ikke dine navne, så jeg kalder dem bare felt1, felt2 osv. Navnene
skal i rækkefølge så passe til de værdier, der kommer bagefter:

  mysql_query("INSERT INTO nyheder (felt1,felt2,felt3,felt4,felt5,felt6,felt7,felt8,felt9) VALUES ('$titel', '$http', '$kilde', '$forfatter', '$billede', '$tekst', '$dato', '$tid', '$date')") or die(mysql_error());

Og bemærk bruge af mysql_error(), der både fortæller dig *at* der er fejl, og
*hvilken* fejl det er. Man kan ikke kode uden at få de relevante fejlbeskedder.
Avatar billede bb_maze Nybegynder
20. januar 2005 - 23:42 #9
Hmmm... Det ændre ikke på noget. Har prøvet sætte denne ind i stedet:
mysql_query("INSERT INTO nyheder VALUES ('$titel', '$http', '$kilde', '$forfatter', '$billede', '$tekst', '$dato', '$tid', '$date', '')") or die(mysql_error());

og der kommer stadig ingen fejl meddelelse. For det er vel det du søger lige nu, er det ikke?

Hygge
Avatar billede erikjacobsen Ekspert
20. januar 2005 - 23:45 #10
Nej, hvis du har sat feltet sidst, skulle der jo netop ikke komme en fejlmeddelelse.
Avatar billede bb_maze Nybegynder
20. januar 2005 - 23:46 #11
Jeg må indrømme at jeg slet ikke er med :D Du prøver på at få en fejlmeddelelse frem, ik?
Avatar billede erikjacobsen Ekspert
20. januar 2005 - 23:47 #12
Nej, jeg prøver at sætte noget ind i din tabel.
Avatar billede bb_maze Nybegynder
20. januar 2005 - 23:49 #13
Okay, men det må da have noget med den nye id kolonne at gøre, og ikke det gamle script, som virkede fint inden jeg tilføjede id kolonnen?
Avatar billede erikjacobsen Ekspert
20. januar 2005 - 23:52 #14
Hvis du har rettet som du siger, og der ikke kommer en fejl, men "Nyheden er tilføjet",
så er nyheden vel tilføjet. Fortæl hvad der sker.
Avatar billede bb_maze Nybegynder
20. januar 2005 - 23:53 #15
Jeg har som sagt sat dette ind i stedet for det oprindelige:
  mysql_query("INSERT INTO nyheder VALUES ('$titel', '$http', '$kilde', '$forfatter', '$billede', '$tekst', '$dato', '$tid', '$date', '')") or die(mysql_error());

Når jeg så tilføjer nyheden får jeg af vide at den er tilføjet, men når man så tjekker databasen er den ikke at finde.
Avatar billede erikjacobsen Ekspert
21. januar 2005 - 00:03 #16
Hvis du har lavet rettelsen, og ikke får en fejl, så er den jo nok tilføjet.
Har du kigget efter om dit nye felt faktisk står til sidst?
Avatar billede bb_maze Nybegynder
21. januar 2005 - 00:05 #17
Den tilføjer ikke nyheden, og der kommer heller ingen fejl.

Hvad mener du med om feltet står til sidst? Det står som det første inde i phpmyadmin hvis det er det du mener?
Avatar billede erikjacobsen Ekspert
21. januar 2005 - 00:21 #18
Jamen hvis det står først skal du jo:

mysql_query("INSERT INTO nyheder VALUES ('','$titel', '$http', '$kilde', '$forfatter', '$billede', '$tekst', '$dato', '$tid', '$date')") or die(mysql_error());

Og hvordan ved du det ikke er sat ind? Feltet dato kommer jo til at få et forkert
indhold, så den måske bliver 00-00-0000, og så står den ikke som den nyeste, selv
om den nok er indsat.
Avatar billede bb_maze Nybegynder
21. januar 2005 - 08:39 #19
Aah, tror jeg har regnet ud hvordan det fungerer nu :D Vil prøve at sætte det ind når jeg en gang kommer hjem fra skole, og så melder jeg tilbage.

Grunden til at jeg ved at det ikke er sat ind, skyldes flere ting. Når jeg sorterer efter id burde den jo være der som den sidste, og det er den ikke. En anden ting der også beviser det er at det script jeg har som skal skrive nyhederne ud igen, ikke har skrevet noget nyt ud siden jeg tilføjede feltet id.

Hygge
Avatar billede bb_maze Nybegynder
21. januar 2005 - 13:29 #20
Super!! Det virker :) Jeg takker ;) Smid et svar.

Hygge
Avatar billede erikjacobsen Ekspert
21. januar 2005 - 13:31 #21
Tak, men jeg samler slet ikke på point.
Avatar billede bb_maze Nybegynder
21. januar 2005 - 13:32 #22
Sikker? Så må du jo få en slat karma :)
Avatar billede erikjacobsen Ekspert
21. januar 2005 - 13:40 #23
Jeg er sikker, og jeg samler heller ikke på karma, tak.
Avatar billede bb_maze Nybegynder
21. januar 2005 - 14:20 #24
Hmm, nu har jeg givet dig karma. Vil du så have god eller dårlig? :)
Avatar billede erikjacobsen Ekspert
21. januar 2005 - 14:25 #25
Jeg vil og kan ikke bestemme hvad du skal gøre - det er ganske op til dig.
Avatar billede bb_maze Nybegynder
21. januar 2005 - 17:19 #26
Hehe, ok. Men tak!
Avatar billede bb_maze Nybegynder
22. januar 2005 - 00:13 #27
Hmm, det ser ud til at der stadig er problemer. Jeg kan ikke trække de nyheder ud der er skrevet med det nye admin "modul". Altså det script der er blevet rettet i.

De "gamle" nyheder kan sagtens trække ud, og det kan de nyheder der er skrevet via phpmyadmin, men når jeg prøver med en ny tilføjet nyhed, så viser den bare en blank side. Jeg har tjekket i phpmyadmin, og der får de tildelt et korrekt id.
Du skulle ikke have en idé, som kunne løse mit problem?
Avatar billede erikjacobsen Ekspert
22. januar 2005 - 00:20 #28
Jo, ideen er at finde og vise os den relevante kode, og de relevante data. Det er jo
nok dér problemet ligger.
Avatar billede bb_maze Nybegynder
22. januar 2005 - 00:22 #29
Jeg vil umiddelbart mene at den relevante kode er herinde... For det er jo det der er blevet rettet i.

Det er nok nemmere at forklare ved at give dig et link: www.safetycar.dk
Klik på den lille orange pil ud for hver nyhed, og så kommer du ind på en side hvor der kun er den ene nyhed. Problemet er at det ikke virker med de to øverste, men det virker fint med resten.
Avatar billede erikjacobsen Ekspert
22. januar 2005 - 09:04 #30
Vis os den relevante kode, og de relevante data.
Avatar billede bb_maze Nybegynder
22. januar 2005 - 10:32 #31
Ja, det forstår jeg. Men hvad er den relevante kode, og de relevante data? Er den kode der er herinde ikke relevant?

Hygge
Avatar billede bb_maze Nybegynder
22. januar 2005 - 11:52 #32
Du kan lige få nogle screenshots fra phpmyadmin:
http://www.safetycar.dk/Files/phpmyadmin.JPG
http://www.safetycar.dk/Files/phpmyadmin2.JPG  <- det er de to nederste nyheder der driller.
Avatar billede erikjacobsen Ekspert
22. januar 2005 - 11:52 #33
Nej, koden herinde sætter tilsyneladende i databasen. Måske er der fejl i den, men
det er ikke til at vide før man kan se hvordan du får ting ud af databasen igen.
Der kan der også være fejl.

Prøv selv at finde det, du mener er relevant.
Avatar billede erikjacobsen Ekspert
22. januar 2005 - 11:55 #34
Et dumt spørgsmål: er det den rigtige tabel du henter data ud af igen??
Avatar billede bb_maze Nybegynder
22. januar 2005 - 11:58 #35
Ja, det er den korrekte. Men det er lidt underligt at det kun er de to nye nyheder der ikke virker. Og der ser jo ikke ud til at være forskel på dem i screenshot'et jeg har postet.

Bruger følgende til at trække data ud med:

$pr_side = 12;
$antal = mysql_result(mysql_query("select count(*) from nyheder"),0);
$vis_fra = (isset($_GET["visfra"]) && is_numeric($_GET["visfra"]) && $_GET["visfra"] < $antal) ? $_GET["visfra"] : 0;


if ($_GET[kategori]){
$query = mysql_query("select * from nyheder WHERE billede = '" . addslashes($_GET["kategori"]) . "' ORDER BY dato DESC, tid ASC limit $vis_fra, $pr_side") or die(mysql_error());

if (mysql_num_rows($query) > 0) {

while($row = mysql_fetch_array($query)){

Hygge
Avatar billede erikjacobsen Ekspert
22. januar 2005 - 12:20 #36
Nej, det er den kode du bruger til at vise listen med, og den er jo rigtig nok.
Dvs. det er irrelavant kode - i denne sammenhæng.

Det er relevant at se koden, der hvor du henter een nyhed ud.
Avatar billede bb_maze Nybegynder
22. januar 2005 - 12:32 #37
Ok :)

$antal = mysql_result(mysql_query("select count(*) from nyheder"),0);
$id = (isset($_GET["id"]) && is_numeric($_GET["id"]) && $_GET["id"] < $antal) ? $_GET["id"] : 0;

$query = mysql_query("select * from nyheder WHERE id=".$id) or die(mysql_error());

while($row = mysql_fetch_array($query)){
Avatar billede erikjacobsen Ekspert
22. januar 2005 - 13:03 #38
Ja, det er fordi du har slettet i tabellen. $antal tæller antallet, men dit id-felt er højere. Du kan evt. bare skippe det check.
Avatar billede bb_maze Nybegynder
22. januar 2005 - 13:05 #39
Det vil altså sige at hvis jeg ændre, via phpmyadmin, så der ikke er nogle huller i id feltet, så skulle det virker?
Avatar billede erikjacobsen Ekspert
22. januar 2005 - 13:19 #40
Det skal du ikke - du skal altid regne med der er huller i en autoincrement. Det er
li'som formålet med den. Hvis du sletter i den skal (MÅ) du ikke fjerne hullerne.

Hellere fjerne checket som du har nu. Så slipper du også for et ekstra kald til
databasen hvor du skal finde antallet. Der er ingen yderligere sikkerhed eller
funktionalitet i det.
Avatar billede bb_maze Nybegynder
22. januar 2005 - 13:27 #41
Det virker nu!
Den endte med at se således ud:
$antal = mysql_result(mysql_query("select count(*) from nyheder"),0);
$id = (isset($_GET["id"]) && is_numeric($_GET["id"])) ? $_GET["id"] : 0;

Mange mange tak for hjælpen - og tålmodigheden ;) Go' weekend!
Avatar billede erikjacobsen Ekspert
22. januar 2005 - 13:28 #42
Hvis du ikke skal bruge $antal til noget, så slet linien:

$antal = mysql_result(mysql_query("select count(*) from nyheder"),0);
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