dr_damirMedlem sedan mars 2003130 inlägg
hej!
jag hade tänkt mig göra en databas där man både ska kunna lägga till och ta bort medlemmar.
min kod ser ut som följande:
<?
session_start();
session_register("loggedIn");
$PASSWORD = "";
$USERNAME = "";
if (!$loggedIn){
if ($PASSWORD==$sPwd && $USERNAME==$sUsername){
$loggedIn = 1;
}
}
if ($loggedIn){
$dl = mysql_pconnect("", "", "");
mysql_select_db("ny", $dl);
if ($deleteid){
// rad 20
$dr = mysql_query("DELETE FROM ny WHERE id=$deleteid", $dl);
} else if ($sNamn && $sEpost) {
$dr = mysql_query("INSERT INTO ny(namn,email) VALUES('$sNamn','$sEpost')", $dl);
}
}
?>
<html>
<head>
<title></title>
</head>
<body>
<?
if ($loggedIn){
?>
<TABLE BORDER="0" CELLPADDING=1 CELLSPACING=0>
<TR>
<TD>Namn</TD>
<TD>E-mail</TD>
<TD> </TD>
</TR>
<?
// rad 45
$dr = mysql_query("SELECT * FROM ny", $dl);
for ($i = 0, $n = mysql_num_rows($dr); $i < $n; ++$i) {
$result = mysql_fetch_array($dr);
?>
<TR>
<TD><?echo $result["namn"]?></TD>
<TD><A HREF="mailto:<?echo $result["email"]?>"><?echo $result["email"]?></A></TD>
<TD><A HREF="medlemmar.php?deleteid=<?echo $result["id"]?>">Ta bort</A></TD>
</TR>
<?
}
?>
</TABLE>
<BR>
<FORM ACTION="medlemmar.php" METHOD="get">
Skapa ny medlem<BR>
Namn: <INPUT TYPE="text" NAME="sNamn"><BR>
Epost: <INPUT TYPE="text" NAME="sEmail"><BR>
<INPUT TYPE="submit" VALUE="Skapa">
</FORM>
<?
} else {
?>
<FORM ACTION="medlemmar.php" METHOD="post">
Logga in<BR>
Användarnamn: <INPUT TYPE="text" NAME="sUsername"><BR>
Lösenord: <INPUT TYPE="password" NAME="sPwd"><BR>
<INPUT TYPE="submit" VALUE="Logga in"><BR>
</FORM>
<?
}
?>
</body>
</html>
<?
if ($loggedIn){
mysql_free_result($dr);
mysql_close($dl);
}
?>
Problemet är att det kommer upp en varning
(Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource on line 48).
vad jag har tänkt är att det kanske är mysql_num_rows() på rad 47 som lämnar FALSE efter sig eftersom det ännu inte finns några medlemmar lagrade i databasen, fast jag vet inte.
Om någon kan hjälpa mig är jag väldigt tacksam!
MatteMedlem sedan aug. 20002 970 inlägg
Jag skulle tro att det beror på att du har anslutning mot mysql endast då du är inloggad.
Flytta ur följande från if-satsen:
$dl = mysql_pconnect("", "", "");
mysql_select_db("ny", $dl);
Och varför pconnect? det räcker med mysql_connect.
Sedan finns det ingen anledning att använda en for-sats när du ska hämta från databasen.
Ersätt följande:
for ($i = 0, $n = mysql_num_rows($dr); $i < $n; ++$i) {
$result = mysql_fetch_array($dr);
Med:
while ($result = mysql_fetch_array($dr)) {
dr_damirMedlem sedan mars 2003130 inlägg
jag tog bort for loopen och la till while. men mysql_connect måste jag ju ha innanför if satsen för annars är man ju connectad direkt...
dock testade jag att flytta ut den men det gjorde ingen skillnad.
är man tvungen att ha ett par poster i databasen? borde det inte gå lika bra att lägga till nya genom koden?
tack!
MatteMedlem sedan aug. 20002 970 inlägg
Men du måste också vara ansluten till databasen även när du hämtar, inte bara när du sparar. Därför måste du ha den utanför if-satsen.
Om du använder mysql_connect så kopplar PHP automatiskt bort databasanslutningen vid skriptets slut.
Vad säger ditt felmeddelande efter att du flyttat ut databasanslutningen från if-satsen ?
Hur ser din kod ut efter ändringarna ?
dr_damirMedlem sedan mars 2003130 inlägg
så här ser koden ut nu...
<?
session_start();
session_register("loggedIn");
$PASSWORD = "";
$USERNAME = "";
$dl = mysql_connect("", "", "");
mysql_select_db("ny", $dl);
if (!$loggedIn){
if ($PASSWORD==$sPwd && $USERNAME==$sUsername){
$loggedIn = 1;
}
}
if ($loggedIn){
if ($deleteid){
// Ta bort post, rad 20
$dr = mysql_query("DELETE FROM ny WHERE id=$deleteid", $dl);
} else if ($sNamn && $sEpost) {
// Skapa ny post
$dr = mysql_query("INSERT INTO ny(namn,email) VALUES('$sNamn','$sEpost')", $dl);
}
}
?>
<html>
<head>
<title></title>
</head>
<body>
<?
if ($loggedIn){
?>
<TABLE BORDER="0" CELLPADDING=1 CELLSPACING=0>
<TR>
<TD>Namn</TD>
<TD>E-mail</TD>
<TD> </TD>
</TR>
<?
// rad 45
$dr = mysql_query("SELECT * FROM ny", $dl);
while ($result = mysql_fetch_array($dr)) {
?>
<TR>
<TD><?echo $result["namn"]?></TD>
<TD><A HREF="mailto:<?echo $result["email"]?>"><?echo $result["email"]?></A></TD>
<TD><A HREF="medlemmar.php?deleteid=<?echo $result["id"]?>">Ta bort</A></TD>
</TR>
<?
}
?>
</TABLE>
<BR>
<FORM ACTION="medlemmar.php" METHOD="get">
Skapa ny medlem<BR>
Namn: <INPUT TYPE="text" NAME="sNamn"><BR>
Epost: <INPUT TYPE="text" NAME="sEmail"><BR>
<INPUT TYPE="submit" VALUE="Skapa">
</FORM>
<?
} else {
?>
<FORM ACTION="medlemmar.php" METHOD="post">
Logga in<BR>
Användarnamn: <INPUT TYPE="text" NAME="sUsername"><BR>
Lösenord: <INPUT TYPE="password" NAME="sPwd"><BR>
<INPUT TYPE="submit" VALUE="Logga in"><BR>
</FORM>
<?
}
?>
</body>
</html>
<?
if ($loggedIn){
mysql_close($dl);
}
?>
tog bort mysql_free_result($dr); för att slippa det problemet.
fortfarande är det problem med mysql_fetch_array.
Felmeddelandet lyder:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/users/ival3/i3no/public_html/medlemmar.php on line 49
MatteMedlem sedan aug. 20002 970 inlägg
Då låter vi mysql ge oss ett lite bättre felmeddelande.
Ersätt:
$dr = mysql_query("SELECT * FROM ny", $dl);
Med:
$dr = mysql_query("SELECT * FROM ny", $dl) or die(mysql_error());
Sen är jag lite osäker på hur MySQL reagerar på att du har samma databasnamn som tabellnamn. Det kanske är helt Ok, men jag tycker att man är lite ute på hal is om man har det så.
dr_damirMedlem sedan mars 2003130 inlägg
Tack så mycket för snabb respons!
Om jag gör som du säger blir felmeddelnadet:
No Database Selected
MatteMedlem sedan aug. 20002 970 inlägg
$dl = mysql_connect("", "", "");
mysql_select_db("ny", $dl);
Heter din databas 'ny' ?
dr_damirMedlem sedan mars 2003130 inlägg
ahh jag e ju för jäkla dum!
den heter i3no, inte ny...det är tabeller som heter ny! =/
blir lite sne nu!
ska testa!
tack så väldigt mycket för hjälpen!
dr_damirMedlem sedan mars 2003130 inlägg
nu när vi väl är på det...så kan jag ju frpga, för det fungerar nämnligen inte att skapa en ny medlem... insert into borde ju fungera.
mvh
dr_damir
MatteMedlem sedan aug. 20002 970 inlägg
Du har sEmail i formuläret och sEpost när du försöker spara.
Använda samma namn på bägge ställen.