Avatar billede mr.t.man Nybegynder
10. april 2006 - 22:57 Der er 19 kommentarer og
2 løsninger

Insert into

Hej, hvorfor virker nedenstående ikke?




<form action=<?php echo $_SERVER["PHP_SELF"]; ?> method="post">
<table border="0" cellpadding="5" cellspacing="0">
<tr><td align="right"><strong>Titel:</strong></td><td><input type="text" name="titel" size="30" maxsize="100"></td></tr>
<tr><td align="right"><strong>Genre:</strong></td><td><input type="text" name="genre" size="30" maxsize="100"></td></tr>
<tr><td align="right" valign="top"><strong>Bemærk:</strong></td><td><input type="text" name="bemaerk" size="30" maxsize="100"></td></tr>
<tr><td align="right" valign="top"><strong>År:</strong></td><td><input type="text" name="aar" size="5" maxsize="4"></td></tr>
<tr><td align="right" valign="top"><strong>Arkivnr.:</strong></td><td><input type="text" name="arkivnummer" size="5" maxsize="100"></td></tr>
<tr><td></td><td><input type="submit" value="Tilføj DVD"></td></tr>




<?
$conn = mysql_connect("localhost", "XXX", "XXX");
mysql_select_db("XXX");

}

if($_POST['titel']){
mysql_query("insert into dvd(titel, genre, bemaerk, aar, arkivnummer,)
value('".$_POST['titel']."','".$_POST['genre']."','".$_POST['bemaerk']."','".$_POST['aar']."','".$_POST['arkivnummer']."') or die (mysql_error());
}

mysql_close($conn);
}
?>




På forhånd tak..!
Avatar billede cpufan Juniormester
10. april 2006 - 23:08 #1
value skal være values
Avatar billede cpufan Juniormester
10. april 2006 - 23:10 #2
if($_POST['titel']){
mysql_query("insert into dvd(titel, genre, bemaerk, aar, arkivnummer,)
values('".$_POST['titel']."','".$_POST['genre']."','".$_POST['bemaerk']."','".$_POST['aar']."','".$_POST['arkivnummer']."') or die (mysql_error());
Avatar billede eagleeye Praktikant
10. april 2006 - 23:14 #3
Der er også et komma for meget efter det skidste kolonnenavn:
insert into dvd(titel, genre, bemaerk, aar, arkivnummer,)

Det skal være:
insert into dvd(titel, genre, bemaerk, aar, arkivnummer)
Avatar billede mr.t.man Nybegynder
11. april 2006 - 06:58 #4
hmm.. den virker stadig ikke. Der er bare hvid skærm.
Avatar billede mr.t.man Nybegynder
11. april 2006 - 06:59 #5
..og hvordan får jeg koblet en besked på der siger, om dataene er tilføjet eller ej..?
Avatar billede eagleeye Praktikant
11. april 2006 - 09:14 #6
Er det php kode du har vist det enste som er på side?
Prøv at rette din kode lidt der er et par } for meget og så er manger der en )" i SQL sætnignen.

<?
$conn = mysql_connect("localhost", "XXX", "XXX");
mysql_select_db("XXX");

if($_POST['titel']){
  mysql_query("insert into dvd(titel, genre, bemaerk, aar, arkivnummer)".
    "value('".$_POST['titel']."','".$_POST['genre']."','".$_POST['bemaerk']."','".$_POST['aar']."','".$_POST['arkivnummer']."')") or die (mysql_error());
}

mysql_close($conn);
?>
Avatar billede eagleeye Praktikant
11. april 2006 - 09:28 #7
Det med at give en bsked. Som det er lige nu vil der komme felj besked hvis den fejler og det er den fejl besked som mysql kommer med pga.

  or die (mysql_error());




Der findes en funktion som kan bruges til at de hvor mange rows er berørt:
mysql_affected_rows() og hvis du så fjerne or die (mysql_error());
så skirve den en "pæn" tekst det gik ikke godt. Men  or die (mysql_error());  er rigtig god at havde på når man laver koden for den skriver hvad der gik galt i ens SQL sætning.


Så kan du lave din kode i stil med:


<?php
$conn = mysql_connect("localhost", "XXX", "XXX");
mysql_select_db("XXX");


if($_POST['titel']){
  mysql_query("insert into dvd(titel, genre, bemaerk, aar, arkivnummer)".
    "value('".$_POST['titel']."','".$_POST['genre']."','".$_POST['bemaerk']."','".$_POST['aar']."','".$_POST['arkivnummer']."')") or die (mysql_error());

  if (mysql_affected_rows() > 0) {
    echo "DVD'en er tilføjet.<br>";
  }
  else {
    echo "Der skete en fejl prøv igen!.<br>";
  }
}
mysql_close($conn);
?>
Avatar billede mr.t.man Nybegynder
11. april 2006 - 13:54 #8
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'value('Titel','Genre','Bemærk','År','000')' at line 1
Avatar billede eagleeye Praktikant
11. april 2006 - 14:20 #9
Nu glemte jeg det s i values :) prøv lige at rette disse to:

  mysql_query("insert into dvd(titel, genre, bemaerk, aar, arkivnummer)".
    "value('".$_POST['titel']."','".$_POST['genre']."','".$_POST['bemaerk']."','".$_POST['aar']."','".$_POST['arkivnummer']."')") or die (mysql_error());



Til:

  mysql_query("insert into dvd(titel, genre, bemaerk, aar, arkivnummer)".
    "values ('".$_POST['titel']."','".$_POST['genre']."','".$_POST['bemaerk']."','".$_POST['aar']."','".$_POST['arkivnummer']."')") or die (mysql_error());
Avatar billede mr.t.man Nybegynder
11. april 2006 - 17:14 #10
Jeps, så virker det! Og hvis jeg så må være så besværlig at spørge om en sidste ting.. :)  Findes der en eller anden "count-funktion" i php? Jeg vil gerne have skrevet hvor mange poster der er i tabellen. Ligeledes hvor mange af posterne der fx indeholder "Action" i feltet "Genre"...

FX:

Databasen indeholder 84 DVD-film
- 14 Action-film
- 60 Komedier
- 10 Gysere
Avatar billede eagleeye Praktikant
11. april 2006 - 17:59 #11
I SQL kan man lave en count og hvis du vil havde en count for hver ganre kan man kombinere det med group by:


"select count(*) as antal, genre from dvd group by genre"


Skal den sortere efter genre eller antal kan du tilføje order by eks her sortere så den kategori med højst antal kommer først ud:

"select count(*) as antal, genre from dvd group by genre order by antal"
Avatar billede eagleeye Praktikant
11. april 2006 - 18:27 #12
Eks :

//Tæl total antal
$res = mysql_query("select count(*) as antal from dvd");
$row = mysql_fetch_row($res);
echo "Databasen indeholder ".$row['antal']." DVD film:<br>";
//Tæl hver genre
$res = mysql_query("select count(*) as antal, genre from dvd group by genre");
while ($row = mysql_fetch_row($res)) {
  echo " - ".$row['antal']." ".$row['genre']."<br>";
}
Avatar billede mr.t.man Nybegynder
11. april 2006 - 22:44 #13
Hmm... jeg får bare nogle streger og ingen tal...
Avatar billede erikjacobsen Ekspert
11. april 2006 - 22:45 #14
while ($row = mysql_fetch_row($res)) {
rettes lige til
  while ($row = mysql_fetch_array($res)) {
Avatar billede mr.t.man Nybegynder
11. april 2006 - 22:46 #15
Jeg forstår ikke helt metoden du bruger for at tælle hver genre. Tabellen indeholder et felt der hedder "genre". I det felt står der enten action, drama, gyser o.s.v. Skal man ikke sige noget ala hvor mange felter der indeholder ordet "action"..?
Avatar billede mr.t.man Nybegynder
11. april 2006 - 22:50 #16
ok, nu skriver den antal i genrer....  men ikke total antal.
Avatar billede eagleeye Praktikant
11. april 2006 - 22:53 #17
ok ja det er det samme:
$row = mysql_fetch_row($res);
Til:
$row = mysql_fetch_array($res);



Hvis du kun vil tælle hvor mange "action" fil der er skal man bruge WHERE genre = 'action'

men hvis du vil havde count'et for hver "type" genre bruger man groub by og så det kolonnenavn der skal grupperes som er genre. Når man så udføre en count funktion tæller den antal af hver "type" i genre "action"/"drame"..
Avatar billede mr.t.man Nybegynder
11. april 2006 - 23:11 #18
OK! så lige et sidste spørgsmål. Jeg har også et felt der hedder "udlaan". Hvis en film er udlånt vil der stå et navn i dette felt. Kan man tælle hvor mange felter der har indhold?
Avatar billede eagleeye Praktikant
11. april 2006 - 23:23 #19
Det kan man hvis en kolonne er tom vil den være lig Null så du kan tælle antalet af poster hvor udlaan ikke er tom:

"select count(*) as antal from dvd where udlaan is not null"
Avatar billede mr.t.man Nybegynder
12. april 2006 - 22:00 #20
$res = mysql_query("select count(*) as udlaan from dvd where udlaan is not null");
while ($row = mysql_fetch_array($res)) {
  echo " Udlaant: ".$row['udlaan']."<br>";

denne giver problemer... der vises kun en hvid side. Jeg har også prøvet uden while
Avatar billede mr.t.man Nybegynder
13. april 2006 - 10:48 #21
Så fik jeg det til at virke. Jeg lukkede forbindelsen til databasen og lavede en ny. Her skrev jeg:


$res2 = mysql_query("select count(*) as nh from dvd where udlaan is not null");
while ($row2 = mysql_fetch_array($res2)) {
  echo "<br>Heraf er <b>".$row2['nh']."</b> udlånt i øjeblikket.<br>";


}


Og det virker. Tak for hjælpen !
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