Avatar billede exp-ralle Nybegynder
12. november 2002 - 13:49 Der er 29 kommentarer og
1 løsning

MySQL problem...

Hejsa...

Har lige 2 spørgsmål:

1. Hvilken længde skal jeg vælge til et auto_increment felt som bruges som id felt?

2. Hvorfor viser dette script ikke min først post men alle andre end den første?:

<?
$connection = mysql_connect("localhost", "root", "root");

mysql_select_db("test", $connection);

$sql = 'SELECT * FROM test LIMIT 0, 30';

$result = mysql_query($sql) or die(mysql_error());

$row = mysql_fetch_assoc($result);

if (mysql_num_rows($result) > 0)
{
while($row = mysql_fetch_assoc($result))
{
echo "$row[Navn]<br>";
echo "$row[Telefon]<br><br>";
}
}
else
{
echo "Der er ingen beskeder :(";
}

mysql_close();

?>

Har oprettet alle felterne i phpmyadmin og derinde viser den alle i den dims der hvor man kan se hvad den indeholder.

Håber i kan hjælpe


Ralle
Avatar billede flse Nybegynder
12. november 2002 - 13:57 #1
Jeg plejer at benytte "INT(10) UNSIGNED" til auto_increment felter, men feltet skal bare være stort nok, til det antal id'er du regner med at det skal kunne indeholde på sigt  :-)
Avatar billede Slettet bruger
12. november 2002 - 14:00 #2
1. Jeg bruger selv altid 10. Det er nok til 10 milliarder poster, og burde dække de flestes behov.

Du vinder alligevel ikke noget ved at lave det for lille.

2. Jeg ved ikke hvad $row = mysql_fetch_assoc skal bruges til, men jeg bruger $row = mysql_fetch_array.

Grunden til at den ikke viser den første er at du henter aarayet 2 gange. Prøv med dette her istedet:

<?
$connection = mysql_connect("localhost", "root", "root");
mysql_select_db("test", $connection);

$sql = 'SELECT * FROM test LIMIT 0, 30';
$result = mysql_query($sql) or die(mysql_error());

if (mysql_num_rows($result) > 0) {
while($row = mysql_fetch_array($result)) {
echo "$row[Navn]<br>";
echo "$row[Telefon]<br><br>";
}
} else {
echo "Der er ingen beskeder :(";
}

mysql_close();

?>
Avatar billede exp-ralle Nybegynder
12. november 2002 - 14:00 #3
Hvis det er INT(10) så kan den da kun have 10 poster ik?

Hvad er max længde?
Avatar billede exp-ralle Nybegynder
12. november 2002 - 14:01 #4
Er INT(10) 10 milliarder?

Eller bruger du en anden type?
Avatar billede Slettet bruger
12. november 2002 - 14:03 #5
Nej, Int (10) unsigned betyder at der er plads til 10 tal, derved er max-længden 9999999999 (lige knap 10 milliarder)
Avatar billede exp-ralle Nybegynder
12. november 2002 - 14:03 #6
Kanont nu kører det...

Men kan en lige fortælle mig (hvis det ikke er blevet gjort mens jeg sidder og skriver) hvad max længde er og hvilken type jeg skal bruge for at kunne få 10 milliarder poster?
Avatar billede flse Nybegynder
12. november 2002 - 14:03 #7
Dit problem er iøvrigt, at du har en


  $row = mysql_fetch_assoc($result);

før din if/while struktur, og at du dermed læser/skipper den først post. slet den linie!  :-)
Avatar billede Slettet bruger
12. november 2002 - 14:04 #8
ups...der kan ikke være 10 milliarder, kun 4294967295
Avatar billede flse Nybegynder
12. november 2002 - 14:06 #9
int(10) betyder ikke ti ciffre (9999999999), men max værdien 2^10 (2 i tiende potens), hvilket er et pæænt stort tal :-)

hvis man skal have plads til 10 ciffre er det dec(10) man skal benytte (det er dog lidt langsommere at regne på, men godt til valuta/decimaltal)
Avatar billede Slettet bruger
12. november 2002 - 14:06 #10
Du kan jo hoppe på en BIGINT der kan indeholde 9.223.372.036.854.775.807 som det højeste...

(jeg vil ikke engang prøve at regne på hvor meget det er)
Avatar billede exp-ralle Nybegynder
12. november 2002 - 14:07 #11
el_barto --> Kun, hehe :)

Jeg får denne fejl når jeg sætter mit id felt til auto_increment i phpmyadmin:
(Du får lige det hele...)

SQL-forespørgsel : 

ALTER TABLE `test` ADD `Id` INT( 10 ) UNSIGNED NOT NULL AUTO_INCREMENT FIRST

MySQL returnerede:


Incorrect table definition; There can only be one auto column and it must be defined as a key
Avatar billede Slettet bruger
12. november 2002 - 14:07 #12
.
Avatar billede Slettet bruger
12. november 2002 - 14:08 #13
Skal det ikke være
ALTER TABLE `test` ADD `Id` INT( 10 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY
Avatar billede exp-ralle Nybegynder
12. november 2002 - 14:09 #14
flse --> 2^10 på min lommeregner giver altså 1024 (kun!)...
Avatar billede flse Nybegynder
12. november 2002 - 14:09 #15
exp-ralle:

For at du kan lave et auto_increment felt, skal du definere feltet som primær nøgle. (vælg Primary i phpmyadmin)
Avatar billede exp-ralle Nybegynder
12. november 2002 - 14:09 #16
el_barto hvordan laver man det i phpmyadmin?
Avatar billede exp-ralle Nybegynder
12. november 2002 - 14:10 #17
Hov... det har jeg fundet ud af...
Avatar billede Slettet bruger
12. november 2002 - 14:10 #18
Du skal klikke på "primær" ude til højre, der hvor der står ændre, slet, primær osv. lidt svært at forklare...
Avatar billede flse Nybegynder
12. november 2002 - 14:11 #19
exp-ralle > hmm... så tager jeg fejl, det er muligvis 10 bytes der bliver afsat til tallet, så det er måske 2^(8*10) istedet ...  beklager fejltagelsen (men gætter nu)
Avatar billede exp-ralle Nybegynder
12. november 2002 - 14:17 #20
flse --> Det er da også ligemeget :)

el_barto --> Det kører på skinner, mange tak.
Avatar billede Slettet bruger
12. november 2002 - 14:23 #21
np :)
Avatar billede exp-ralle Nybegynder
12. november 2002 - 14:30 #22
Hvis du stadig er her kan du så sige mig hvordan jeg opdaterer siden?

Siden skal nemlig opdateres når en besked er slettet...
Avatar billede Slettet bruger
12. november 2002 - 14:37 #23
Slettet? Er det i noget andet kode?

Du kan opdatere siden på flere måder, det jeg selv gør er at køre min slet-kode inden jeg henter det hele ud.
Avatar billede exp-ralle Nybegynder
12. november 2002 - 14:41 #24
Jeg har lavet mit udtræk til links til en slet funktion der sletter posten med et bestemt id som sendes når man trykker på posten.

Så det ser sådan her ud:

test.php?mode=slet&id=[postensid]

Men når man gør det skal man opdatere før posten forsvinder og hvordan gør jeg så det med noget kode?

Ligesom Response.Redirect i asp.
Avatar billede Slettet bruger
12. november 2002 - 14:44 #25
Jamen der er ingen grund til at redirecte, du kan bare lave det sådan her:


<?
$connection = mysql_connect("localhost", "root", "root");
mysql_select_db("test", $connection);

//
//Her skal du indsætte den kode der sletter et indlæg
//

$sql = 'SELECT * FROM test LIMIT 0, 30';
$result = mysql_query($sql) or die(mysql_error());

if (mysql_num_rows($result) > 0) {
while($row = mysql_fetch_array($result)) {
echo "$row[Navn]<br>";
echo "$row[Telefon]<br><br>";
}
} else {
echo "Der er ingen beskeder :(";
}

mysql_close();

?>

Så vil indlægget blive slettet inden data blver indlæst.
Avatar billede exp-ralle Nybegynder
12. november 2002 - 14:56 #26
Hvordan kan det så være at alle de slettede poster bliver vist igen hvis jeg går ind på test.php men ikke når jeg er på fx. test.php?mode=slet&id=etid
???

Her er min kode:

<font face="Verdana" size="1">
<?
$connection = mysql_connect("localhost", "root", "root");

mysql_select_db("test", $connection);

if ($_REQUEST['mode'] == 'slet')
{
$id = $_REQUEST['id'];   
$sql = "DELETE FROM test WHERE Id=$id";

$result = mysql_query($sql) or die(mysql_error());
if (mysql_error() == 0)
{
$slettet = TRUE;
}
}

$sql = "SELECT * FROM test";

$result = mysql_query($sql) or die(mysql_error());

if (mysql_num_rows($result) > 0)
{
while($row = mysql_fetch_array($result))
{
echo "<b>$row[Id]:</b> <a href='test.php?mode=slet&id=$row[Id]'>$row[Navn]</a><br>";
echo "<b>$row[Id]:</b> $row[Telefon]<br><br>";
}
}
else
{
echo "Der er ingen beskeder :(";
}

if ($slettet == TRUE)
{
echo "Beskeden med id'et $id er slettet...";
}

?>
</font>
Avatar billede Slettet bruger
12. november 2002 - 15:02 #27
Det ved jeg ikke, måske er det noget med cachen på din browser, prøv at tømme den.

Hvis du absolut vil have en redirect kan

header("location:test.php");

klare det.

Men det er dobbelt arbejde uden grund :)
Avatar billede exp-ralle Nybegynder
12. november 2002 - 15:17 #28
Er det Redirect kommandoen?
Avatar billede Slettet bruger
12. november 2002 - 15:19 #29
Ja
Avatar billede exp-ralle Nybegynder
12. november 2002 - 16:03 #30
Ok
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