webForumDet fria alternativet

Men varför funkar inte INSERT här??? Hjälp!

PHP

14 svar · 277 visningar · startad av sys19

Medlem sedan dec. 200287 inlägg
Frågan#1

Vet inte om det här skall frågas i php-forumet eller MySql men här kommer det i alla fall: Varför ersätts inte posten i tabellen???? Variabeln "$anvandarnamn" tillhör attributet "value" i definitionen av textfältet. Borde det inte gå att jämföra $anvandarnamn med attributet "username" i tabellen? Jag vet att vi är jobbiga men vi är ju noobs! :-)

If-satsen exekveras korrekt. Det har vi testat.

if(isset($spara)){
//$iv=mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_TripleDES,MCRYPT_MODE_CBC),MCRYPT_RAND);
//$crypttext=mcrypt_encrypt(MCRYPT_TripleDES,$key,$losenord,MCRYPT_MODE_CBC,$iv);
$dbconn=mysql_connect("localhost","XXX","XXX") or die(mysql_error());
mysql_select_db("sys19",$dbconn) or die(mysql_error());
if ($uppdateraok=="OK"){
$sql="UPDATE authuser SET username='$anvandarnamn',password='$losenord',forename='$fornamn',lastname='$efternamn',startdate='$startdatum',enddate='$stopdatum' WHERE username='$anvandarnamn'";
$uppdateraok="NEGATIVE";
}
else{
$sql="INSERT INTO authuser (username,password,forename,lastname,startdate,enddate) VALUES ('$anvandarnamn','$losenord','$fornamn','$efternamn','$startdatum','$stopdatum')";
}
$resultat=mysql_query($sql);
mysql_close($dbconn) or die(mysql_error());
}

Medlem sedan dec. 200287 inlägg
#2

Flåt. Han går inte alls in i if-satsen... Men varför inte det? :-)

Medlem sedan aug. 20002 975 inlägg
#3

Vilken av if-satserna går den inte in i, och hur ser ditt formulär ut?

Sen räcker det att skriva sitt inlägg i ett forum. Hamnar det i fel forum så flyttar en moderator det till rätt. :)

Medlem sedan dec. 200287 inlägg
#4

Faktum är att den gör ALLTID else-satsen hur mycket vi än vrider och vänder på variablerna. Variabeln uppdateraok sätts till OK då man trycker på knappen uppdatera (som körs i samma dokument via en isset). Hilfe! Sorry att vi spammade med två inlägg... kommer inte att upprepas! :-)

Medlem sedan aug. 20002 975 inlägg
#5
if ($uppdateraok=="OK"){

Denna sats måste returnera falskt för att du ska komma in i else-satsen. Det gör den om inte variabeln finns eller om variabeln är något annat än 'OK'. Kan den vara 'ok' eller 'Ok'?

För test:

echo $uppdateraok;
if ($uppdateraok=="OK"){
Medlem sedan dec. 200287 inlägg
#6

Vi har kollat om den finns innan if-satsen och det gör den märkligt nog inte. Vi har satt den till OK när man trycker på Uppdatera-knappen. Naturligtvis är anledningen att den alltid gör else-satsen då, att den hittar inte variabeln alls. Kan det vara något problem med att sätta den till OK innanför en annan if-sats(den han kör när man trycker på Uppdatera)? Trotts att den ligger i samma .php -dokument? Måste man göra den "global" på något sätt?

Medlem sedan aug. 20002 975 inlägg
#7

Hur ser det ut i formuläret. För den knapp ni trycker på bör det stå:

<input type="submit" name="uppdateraok" value="OK";

Ser att det också finns en variabel $spara. Kommer den från ett 'hidden' fält?

Medlem sedan dec. 200287 inlägg
#8

Hmm. SKickar med hela .php sidan så ser du hur det ser ut:

<?php
session_start();
if ($HTTP_SESSION_VARS["sessionsid"]!="OK")
{
header("Location: http://XXX/inloggning.php");
exit();
}
?>
<html>

<head>
<title>Admin user</title>
<link rel="stylesheet" type="text/css" href="bakgrund.css">
</head>

<body>
<?php
if (isset($Uppdatera)){
$dbconn=mysql_connect("localhost","XXX","XXX") or die(mysql_error());
mysql_select_db("sys19",$dbconn) or die(mysql_error());
$sql="SELECT * FROM authuser WHERE username='$updateknapp'";
$resultat=mysql_query($sql);
$kolumn=mysql_fetch_array($resultat);
$fornamn=$kolumn["forename"];
$efternamn=$kolumn["lastname"];
$anvandarnamn=$kolumn["username"];
//$decrypttext=mcrypt_decrypt(MCRYPT_TripleDES,$key,$kolumn["password"],MCRYPT_MODE_CBC,$iv);
//$losenord=$decrypttext;
$losenord=$kolumn["password"];
$startdatum=$kolumn["startdate"];
$stopdatum=$kolumn["enddate"];
mysql_close($dbconn) or die(mysql_error());
$uppdateraok="OK";
}

       if (isset($ny)){
       $fornamn = "";
       $efternamn = "";
       $anvandarnamn = "";
       $losenord = "";
       $startdatum = "";
       $stopdatum = "";
	   $uppdateraok="NO";
	   }

       if(isset($spara)){
       //$iv=mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_TripleDES,MCRYPT_MODE_CBC),MCRYPT_RAND);
       //$crypttext=mcrypt_encrypt(MCRYPT_TripleDES,$key,$losenord,MCRYPT_MODE_CBC,$iv);
       $dbconn=mysql_connect("localhost","sys19","5Bastards") or die(mysql_error());
       mysql_select_db("sys19",$dbconn) or die(mysql_error());
	   if($uppdateraok=="OK"){		
		$sql="UPDATE authuser SET username='$anvandarnamn',password='$losenord',forename='$fornamn',lastname='$efternamn',startdate='$startdatum',enddate='$stopdatum' WHERE username='$anvandarnamn'";
		$uppdateraok=="NO";
		}else{
		$sql="INSERT INTO authuser (username,password,forename,lastname,startdate,enddate) VALUES ('$anvandarnamn','$losenord','$fornamn','$efternamn','$startdatum','$stopdatum')";
	   }
       $resultat=mysql_query($sql);
	   mysql_close($dbconn) or die(mysql_error());
       }  

       $dbconn=mysql_connect("localhost","XXX","XXX") or die(mysql_error());
       mysql_select_db("sys19",$dbconn) or die(mysql_error());
       echo("\<form action=\\"$PHP_SELF\\" method=\\"post\\"\>\\n");
       echo("Förnamn:\</br\>\\n");
       echo("\<input type=\\"text\\" name=\\"fornamn\\" size=\\"30\\" value=\\"$fornamn\\"\>\</br\>\\n");
       echo("Efternamn:\</br\>\\n");
       echo("\<input type=\\"text\\" name=\\"efternamn\\" size=\\"30\\" value=\\"$efternamn\\"\>\</br\>\\n");
       echo("Användarnamn:\</br\>\\n");
       echo("\<input type=\\"text\\" name=\\"anvandarnamn\\" size=\\"30\\" value=\\"$anvandarnamn\\"\>\</br\>\\n");
       echo("Lösenord:\</br\>\\n");
       echo("\<input type=\\"text\\" name=\\"losenord\\" size=\\"30\\" value=\\"$losenord\\"\>\</br\>\\n");
       echo("Startdatum:\</br\>\\n");
       echo("\<input type=\\"text\\" name=\\"startdatum\\" size=\\"30\\" value=\\"$startdatum\\"\>\</br\>\\n");
       echo("Stoppdatum:\</br\>\\n");
       echo("\<input type=\\"text\\" name=\\"stopdatum\\" size=\\"30\\" value=\\"$stopdatum\\"\>\</br\>\\n");
       echo("\<input type=\\"submit\\" name=\\"spara\\" value=\\"Spara\\"\>\\n");
       echo("\<input type=\\"reset\\" name=\\"rensa\\" value=\\"Rensa\\" onreset=\\"reset\\"\>\\n");
       echo("\<input type=\\"submit\\" name=\\"ny\\" value=\\"Ny\\"\>\\n");
       echo("\</form\>");

       $sql="SELECT \* FROM authuser;";
       $recordset=mysql_query($sql,$dbconn) or die(mysql_error());
       while($record=mysql_fetch_array($recordset))
  		{
            echo("Användarnamn: ".$record\["username"\]."\</br\>\\n");
    	echo("Lösenord: ".$record\["password"\]."\</br\>\\n");
    	echo("Förnamn: ".$record\["forename"\]."\</br\>\\n");
    	echo("Efternamn: ".$record\["lastname"\]."\</br\>\\n");
    	echo("Startdatum: ".$record\["startdate"\]."\</br\>\\n");
		echo("Stopdatum: ".$record\["enddate"\]."\</br\>\\n");
    	echo("\<form action=\\"http:/XXX/deladmin.php\\" method=\\"post\\"\>\\n");
		echo("\<input type=\\"hidden\\" name=\\"tabortknapp\\" value=\\"{$record\["username"\]}\\"\>\\n");
                    echo("\<input type=\\"submit\\" value=\\"Ta Bort\\"\>\\n");
            echo("\</form\>");
            echo("\<form action=\\"$PHP_SELF\\" method=\\"post\\"\>\\n");
                        echo("\<input type=\\"hidden\\" name=\\"updateknapp\\" value=\\"{$record\["username"\]}\\"\>\\n");
                        echo("\<input type=\\"submit\\" name=\\"Uppdatera\\" value=\\"Uppdatera\\"\>\\n");
            echo("\</form\>");
            echo("\<p\>-------------------------------------------------------------\</p\>\</br\>");
            }
    mysql_close($dbconn) or die(mysql_error());

?>
</body>

</html>

Medlem sedan aug. 20021 752 inlägg
#9

Inget svar men ett tips :)
Använd gärna [php] när du skriver in kod, det är lättare att följa den då.
typ
[php]

$dbconn=mysql_connect("localhost","XXX","XXX") or die(mysql_error()); 
mysql_select_db("sys19",$dbconn) or die(mysql_error());

/Viktor

Medlem sedan dec. 200287 inlägg
#10

Ok sorry! E inte van att man faktiskt får svar på sådana här siter så jag e lite ovan. Tack för tipset! :-)

Medlem sedan aug. 20002 975 inlägg
#11

Det är den här if-satsen den inte går in i:

if(isset($spara)){

Du skapar inte, eller skickar inte någon variabel $spara. Eftersom den inte finns så blir if-satsen falskt. Prova med att skapa variabeln samtidigt som $uppdateraok:

$uppdateraok="OK"; 
$spara = 1;
Medlem sedan dec. 200287 inlägg
#12

Hmm. Nej den if-satsen går den in i. Meningen är alltså att uppdatera-knappen skall endast lyfta upp från databasen till textfälten.
Men sedan när spara trycks på skall befintlig post skrivas över. Tex om man vill ändra efternamn. Det gör den också om man skriver så här:

if(1){
$sql="UPDATE authuser SET username='$anvandarnamn',password='$losenord',forename='$fornamn',lastname='$efternamn',startdate='$startdatum',enddate='$stopdatum' WHERE username='$anvandarnamn'";
$uppdateraok=="NO"; 
}else{
$sql="INSERT INTO authuser (username,password,forename,lastname,startdate,enddate) VALUES ('$anvandarnamn','$losenord','$fornamn','$efternamn','$startdatum','$stopdatum')";
}

Givetvis är då villkoret giltigt eftersom den alltid får en etta. Men då försvinner hela vitsen och logiken.

Medlem sedan aug. 20002 975 inlägg
#13

Då hänger jag med.

När du klickar uppdaterar så hämtas en post och skrivs ut i formuläret, och sen när du klickar spara så uppdateras inte posten utan en ny läggs in?

Förklaringen tror jag är att du inte har något fält 'uppdateraok' i ditt formulär, därför skickas inte heller någon sådan variabel, och därmed finns variabel $uppdateraok inte.

Prova det här:

.
.
.
echo("<input type=\"text\" name=\"stopdatum\" size=\"30\" value=\"$stopdatum\"></br>\n"); 
if (isset($uppdateraok)){
   echo("<input type=\"hidden\" name=\"uppdateraok\" value=\"ok\">\n"); 
}
echo("<input type=\"submit\" name=\"spara\" value=\"Spara\">\n"); 
echo("<input type=\"reset\" name=\"rensa\" value=\"Rensa\" onreset=\"reset\">\n"); 
.
.
.
Medlem sedan dec. 200287 inlägg
#14

När du klickar uppdaterar så hämtas en post och skrivs ut i formuläret men det läggs inte till en ny post i db. Det händer inte ett smack när uppdaterar trycks.
Vi fuskade lite och gjorde en knapp till "ersätt" som skriver över posten. Det är en ful-lösning som inte stämmer överens med hur det är tänkt. Ska prova ditt förslag.

//Vid tryck på "ersätt" skriv över post
 if(isset($sparaover)){
$dbconn=mysql_connect("localhost","anv","losen") or die(mysql_error());
 mysql_select_db("sys19",$dbconn) or die(mysql_error());	   
$sql="UPDATE authuser SET username='$anvandarnamn',password='$crypttext',forename='$fornamn',lastname='$efternamn',startdate='$startdatum',enddate='$stopdatum' ='$stopdatum' WHERE username='$anvandarnamn'";
$resultat=mysql_query($sql);
mysql_close($dbconn) or die(mysql_error());
			}
Medlem sedan dec. 200287 inlägg
#15

Ah! Båda varianterna fungerade (ful och fin). Tack för allt engagemang och all hjälp! Utan Salamander skulle vi ha fastnat flertalet gånger. :-D

285 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
151 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)