Avatar billede d.kryger Praktikant
17. februar 2003 - 10:18 Der er 26 kommentarer og
2 løsninger

Opdaterer felt i database

Hej eksperter.

Jeg har et lille problem som jeg håber i kan hjælpe mig af med.
Jeg har en side hvorfra man skal kunne indtaste sine initialer, hvis man tager sig af en sag, således at man kan holde styr på hvilke personer der tage hvilke sager.

Sagerne bliver oprettet i en anden fil, og når man så tager dem, skal man indtaste sine initialer, og samtidig skal den skrive en 'lavdato', altså tiden lige nu.

Koden er her:
<p align="center">

<?php

function printDato($timestamp)
{
//månedsnavn oversættes til dansk
$mndarray = array(1 => 'januar', 'februar', 'marts', 'april', 'maj', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'december');
$maaned=$mndarray[date('n', $timestamp)];

//skriver datoen på dansk på skærmen
echo date('j. ', $timestamp) . $maaned . date(' Y, k\l. H:i:s', $timestamp);
}

if (isset($_POST["initialer"]))
{
$fejl = false;

if (trim($_POST["initialer"])=="")
{    print "<font face='Verdana' color='#FFFFFF' size='1'><b>Der skal indtastes et »Initial«.</b><br></font>";
$fejl = true;
}

if ($fejl==false)
{

$connection = mysql_connect("--**--","--**--","--**--");
$db = "--**--";
mysql_select_db($db);

$result = mysql_query("SELECT * FROM --**-- WHERE modtagetdato='".$_GET["modtagetdato"]."'");

$oprettet = mysql_num_rows($result);

if ($oprettet == 1)
{
$timestamp = time();
mysql_query("INSERT INTO --**-- (lavdato, initialer) VALUES (".$timestamp.", '".$_POST["initialer"]."')");

print "Initialer er tilskrevet";

exit;
}

else

{
print "Initialer er <b>IKKE</b> tilskrevet";
}

}

}

?>

</p>

<form action='indtast_initialer.php' method='post'>
<div align="center">
<center>
<table border="0" width="300" cellspacing="0" cellpadding="2">
<tr>
<td width="100" bgcolor="#D9DDE0" height="30"><font face="Verdana" size="1">Påbegyndt:</font></td>
<td width="200" bgcolor="#D9DDE0" height="30"><font face="Verdana" size="1"><?php printDato(time()); ?></font></td>
</tr>
<tr>
<td width="100" bgcolor="#D9DDE0" height="30"><font face="Verdana" size="1">Initialer:</font></td>
<td width="200" bgcolor="#D9DDE0" height="30"><input type="text" name="initialer" size="4" maxlength="3" class="input"></td>
</tr>
<tr>
<td width="100%" colspan="2" align="center" bgcolor="#D9DDE0"><input type='submit' value='Lav sagen' name='opret' class='input_knap'></td>
</tr>
<tr>
<td width="100%" align="center" bgcolor="#D9DDE0" colspan="2"><font face="Verdana" size="1" color="#FFFFFF"><br>
<a href="java script:history.back(1)">Tilbage</a></font></td>
</tr>
</table>
</center>
</div>
</form>
Avatar billede exp Juniormester
17. februar 2003 - 10:19 #1
Hvad er problemet?
Avatar billede d.kryger Praktikant
17. februar 2003 - 10:20 #2
At den ikke skriver 'lav dato' og 'initialer' i databasen...
Avatar billede exp Juniormester
17. februar 2003 - 10:25 #3
Så du mener problemet er heri?

$connection = mysql_connect("--**--","--**--","--**--");
$db = "--**--";
mysql_select_db($db);

$result = mysql_query("SELECT * FROM --**-- WHERE modtagetdato='".$_GET["modtagetdato"]."'");

$oprettet = mysql_num_rows($result);

if ($oprettet == 1)
{
$timestamp = time();
mysql_query("INSERT INTO --**-- (lavdato, initialer) VALUES (".$timestamp.", '".$_POST["initialer"]."')");
Avatar billede d.kryger Praktikant
17. februar 2003 - 10:25 #4
Ja, det må det være, for den skriver nemlig: Initialer er IKKE tilskrevet...

Kan du hjælpe mig?
Avatar billede exp Juniormester
17. februar 2003 - 10:26 #5
Sådan som jeg læser dette:

$timestamp = time();
mysql_query("INSERT INTO --**-- (lavdato, initialer) VALUES (".$timestamp.", '".$_POST["initialer"]."')");

er at du opretter en ny post med to felter; "lavdato" & "initialer" -- men skal de ikke opdateres i en eksisterende database, så de bliver tilknyttet en post?
Avatar billede d.kryger Praktikant
17. februar 2003 - 10:41 #6
Jeg er ikke med på hvad du mener jeg skal ændre...
Avatar billede exp Juniormester
17. februar 2003 - 10:44 #7
Skal lige høre om det er korrekt at der skal oprettes en ny post sådan:
INSERT INTO --**-- (lavdato, initialer) VALUES (".$timestamp.", '".$_POST["initialer"]."

eller om det er en allerede eksisterende post der skal opdateres:
UPDATE --**-- SET (lavdato = ".$timestamp.", initialer = ".$_POST["initialer"]." where id = $id)
Avatar billede d.kryger Praktikant
17. februar 2003 - 10:51 #8
Jeg kan ikke lige afprøve det nu, da databasen er nede, jeg vender tilbage senere...
Avatar billede tefcke Nybegynder
17. februar 2003 - 14:19 #9
Jge har nogen ting som lige springer mig i øjet når jeg ser din kode.
(1) Du bruger en $_GET["modtagetdato"], jeg kan ikke lige se hvor 'modtagetdato' dato kommer fra!
(2) I blokken : if ($oprettet == 1)
Variablen $timestamp eksisterer ikke der så vidt jeg kan se. Du får ikke "postet" den med i fomularen!
(3) Og så en lille skønheds fejl.
I blokken : if($fejl==false)
Variablen $fejl er af typen bool, hvilket betyder du ikke behøver at lave et implicit typecast til string for at tjekke om den er false. I stedet kan du tjekke direkte på $fejl f.eks. : if (!$fejl)  /* Hvilket betyder, "hvis der IKKE er fejl" */

Men prøv lige at se om du overhovedet får sendt $timestamp variablen med ved submit, og så kunne jeg også godt lige tænke mig at vide hvor 'modtagetdato' kommer fra!
Avatar billede d.kryger Praktikant
18. februar 2003 - 15:09 #10
Så er databasen kommet op og køre igen, men je gahr stadig ikke fået det til at virke.
Jeg er ikke så fandes god til php og sql, så jeg håber at I har tålmodighed...

Jeg mener at værdien lavdato og initialer skal tilføjes en eksisterende post/linie i databasen, således at jeg i databasen kan se hvornår sagen er modtaget, påbegyndt m.v.

Problemmet er følgende: Warning: Supplied argument is not a valid MySQL result resource in indtast_initialer.php on line 60

Initialer er IKKE tilskrevet


Linie 60 er denne:
$oprettet = mysql_num_rows($result);


Min kode ser nu således ud:
<?php

function printDato($timestamp)
{
//månedsnavn oversættes til dansk
$mndarray = array(1 => 'januar', 'februar', 'marts', 'april', 'maj', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'december');
$maaned=$mndarray[date('n', $timestamp)];

//skriver datoen på dansk på skærmen
echo date('j. ', $timestamp) . $maaned . date(' Y, k\l. H:i:s', $timestamp);
}

if (isset($_POST["initialer"]))
{
$fejl = false;

if (trim($_POST["initialer"])=="")
{    print "<font face='Verdana' color='#FFFFFF' size='1'><b>Der skal indtastes et »Initial«.</b><br></font>";
$fejl = true;
}

if ($fejl==false)
{

$connection = mysql_connect("**--**","**--**","**--**");
$db = "**--**";
mysql_select_db($db);

$result = mysql_query("SELECT * FROM **--** WHERE id='".$_GET["modtagetdato"]."'");

$oprettet = mysql_num_rows($result);

if ($oprettet == 1)
{
$timestamp = time();
mysql_query("UPDATE **--** SET (lavdato='".$timestamp."', initialer='".$_POST["initialer"]."' WHERE id='".$_GET["modtagetdato"]."'");

print "Initialer er tilskrevet";

exit;
}

else

{
print "Initialer er <b>IKKE</b> tilskrevet";
}

}

}

?>
Avatar billede exp Juniormester
18. februar 2003 - 15:14 #11
Warning: Supplied argument is not a valid MySQL result resource in indtast_initialer.php on line 60

betyder at der er noget med i sql'en der ikke er lovligt...

Hvor kommer $_GET["modtagetdato"] fra?
Avatar billede d.kryger Praktikant
18. februar 2003 - 15:19 #12
Fra adresselinien..., ikk?

Når jeg linker til indtast_initialer.php, så gør jeg således:
indtast_initialer.php?id=1045221331

Hvor id er modtagetdato
Avatar billede exp Juniormester
18. februar 2003 - 15:21 #13
prøv med:

$modtagetdato = $_GET['id'];
Avatar billede exp Juniormester
18. februar 2003 - 15:22 #14
og så ændre forekomsterne af $_GET['modtagetdato'] til $modtagetdato
Avatar billede d.kryger Praktikant
18. februar 2003 - 15:22 #15
Hvor skal den indsættes?
Avatar billede exp Juniormester
18. februar 2003 - 15:23 #16
Bare indsæt det aller øverst i php-dok'et...
Avatar billede d.kryger Praktikant
18. februar 2003 - 15:30 #17
Nu har jeg prøvet at sætte det ind og ændret lidt i det, men det hjælper ikke...

Fejl: Warning: Supplied argument is not a valid MySQL result resource in indtast_initialer.php on line 62

Linie 62 er:
$oprettet = mysql_num_rows($result);

Initialer er IKKE tilskrevet

Hele koden:
<?php

function printDato($timestamp)
{
//månedsnavn oversættes til dansk
$mndarray = array(1 => 'januar', 'februar', 'marts', 'april', 'maj', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'december');
$maaned=$mndarray[date('n', $timestamp)];

//skriver datoen på dansk på skærmen
echo date('j. ', $timestamp) . $maaned . date(' Y, k\l. H:i:s', $timestamp);
}

$modtagetdato = $_GET['id'];

if (isset($_POST["initialer"]))
{
$fejl = false;

if (trim($_POST["initialer"])=="")
{    print "<font face='Verdana' color='#FFFFFF' size='1'><b>Der skal indtastes et »Initial«.</b><br></font>";
$fejl = true;
}

if ($fejl==false)
{

$connection = mysql_connect("--**--","--**--","--**--");
$db = "--**--";
mysql_select_db($db);

$result = mysql_query("SELECT * FROM --**-- WHERE id=$modtagetdato");

$oprettet = mysql_num_rows($result);

if ($oprettet == 1)
{
$timestamp = time();
mysql_query("UPDATE --**-- SET (lavdato='".$timestamp."', initialer='".$_POST["initialer"]."' WHERE id=$modtagetdato");

print "Initialer er tilskrevet";

exit;
}

else

{
print "Initialer er <b>IKKE</b> tilskrevet";
}

}

}

?>
Avatar billede tefcke Nybegynder
18. februar 2003 - 15:47 #18
Har du tjekket om <<$result = mysql_query("SELECT * FROM --**-- WHERE id=$modtagetdato");>> overhovedet spytter en række ud?

For hvis den ikke gør det, er det klart du får en fejl, for NULL er ikke en SQL resultat!
Avatar billede d.kryger Praktikant
18. februar 2003 - 15:49 #19
Hvordan gør jeg det?
Avatar billede exp Juniormester
18. februar 2003 - 15:52 #20
jeg får slet ikke noget output - heller ikke datoen ?!? Dont get it...
Avatar billede d.kryger Praktikant
18. februar 2003 - 15:53 #21
Hvordan tjekker jeg om den spytter en række ud?
Avatar billede d.kryger Praktikant
18. februar 2003 - 16:03 #22
Er der ikke nogle af jer som kan hjælpe?
Avatar billede exp Juniormester
18. februar 2003 - 16:04 #23
Har tager det med hjem på privaten og kigger på det

Poster du lige database-strukturen?
Avatar billede d.kryger Praktikant
18. februar 2003 - 16:14 #24
Er det dette du mener:
modtagetdato - bigint (Er et timestamp, fra da sagen blev oprettet)
sagsnr - varchar (Er sagsnumret, og primary key)
kundenummer - varchar
kategori - int
udformning - varchar
lavdato - bigint (Er et timestamp fra når man åbner indtast_initialer.php)
initialer - char (Skal være de initialer, man indtaster i indtast_initialer.php)
Avatar billede exp Juniormester
18. februar 2003 - 16:15 #25
skal afsted nu, så hvis jeg skal kigge på det må du poste inden for 2 min - ellers bliver det altså først i morgen...
Avatar billede exp Juniormester
18. februar 2003 - 16:16 #26
kigger på det
Avatar billede tefcke Nybegynder
18. februar 2003 - 16:59 #27
måden du tjekker på om der er noget i din sql_query er flg.:

/* Din forspørgelse */
$result = mysql_query("SELECT * FROM --**-- WHERE id=$modtagetdato");
/* Start : Læsevenlig kode */
print("<pre>");
/* Dump variablen */
var_dump($result);  // Man kan også bruge : print_f($result)
/* Slut : læsevanlig kode */
print("</pre>);


Så kan du se tyen og indholdet af din variabel $result
Avatar billede d.kryger Praktikant
20. februar 2003 - 08:39 #28
Jeg har selv fået det til at virke. 50 point til exp for den store hjælp...
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