Gå til innhold

Lagre data fra skjema


Anbefalte innlegg

Hei,

 

jeg er nybegynner med PHP, så jeg har stjålet litt fra et script som jeg har modifisert en del på. Jeg vil nemlig lage et oppgaveskjema, der en kan legge til oppgaver, redigere oppgavestatus og prioritering. Slik ser det ut nå. Feilmeldingen som kommer er

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>TEST</title>
<style type="text/css">
{ margin: 0px; padding: 0px; }
a { outline: none; } 
body {
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 12px;
	color: #FFF;
	background-color: #212121;
	}
table {
	background-color: #124800;
	margin: 5px;
	padding: 2px;
	width: auto;
	}
td { 
	border: 1px solid #66805D;
	margin: 2px;
	padding: 2px;
	width: auto;
	}
tr { 
	border: 1px solid #66805D;
	margin: 2px;
	padding: 2px;
	width: auto;
	}

#Ny {
	width: 400px;
	height: auto;
	text-align: center;
	color: #FFF;
	margin-left: 200px;
	}
#Ny form {
	margin: 0px;
	padding: 0px;
	}
#Ny input {
	margin-top: 3px;
	margin-bottom: 3px;
	}
</style>
</head>

<body>
<table cellpadding="0" cellspacing="0" width="auto">
	<tr>
		<td><strong><u>Oppgave</u></strong></td>
		<td><strong><u>Oppgavestatus</u></strong></td>
		<td><strong><u>Prioritering</u></strong></td>
	</tr>
	<tr>
		<td><?php echo htmlspecialchars($_POST['add']); ?>.</td>
		<td><?php echo (int)$_POST['Oppgave']; ?></td>
	</tr>
	<?php
		mysql_connect('localhost','halovasj_main','XXX');
    		 @mysql_select_db('halovasj_main') or die("Unable to select database");
		if ($_GET['edit']) {
			mysql_query("UPDATE `Oppgave` SET `Oppgave` = '". $_POST['Oppgave'] ."' WHERE `Oppgave` = '". $_GET['edit'] ."'");
			mysql_query("UPDATE `Oppgave` SET `Oppgavestatus` = '". $_POST['Oppgavestatus'] ."' WHERE `Oppgavestatus` = '". $_GET['edit'] ."'");
			mysql_query("UPDATE `Oppgave` SET `Prioritering` = '". $_POST['Prioritering'] ."' WHERE `Prioritering` = '". $_GET['edit'] ."'");
		}
		else if ($_POST['add']) {
			mysql_query("INSERT INTO `Oppgave` VALUES ('". $_POST['Oppgave'] ."','". $_POST['Oppgavestatus'] ."','". $_POST['Prioritering'] ."')");
			print "OK";
		}
		$result = mysql_query("SELECT * FROM `Oppgave` ORDER BY Prioritering");
		while ($Oppgave = mysql_fetch_array($result)) {
			switch ($Oppgave['Oppgave']) {
				case 0:
				$color = "004400";
				$options = "<option value=\"0\" selected=\"selected\">Ikke på saken</option><option value=\"1\">På saken</option><option value=\"2\">Fikset</option><option value=\"0\">Ikke fikset</option>";
				break;
				case 1:
				$options = "<option value=\"0\">Ikke på saken</option><option value=\"1\" selected=\"selected\">På saken</option><option value=\"2\">Fikset</option><option value=\"0\">Ikke fikset</option>";
				$color = "000000";
				break;
				case 2:
				$options = "<option value=\"0\">Ikke på saken</option><option value=\"1\">På saken</option><option value=\"2\" selected=\"selected\">Fikset</option><option value=\"0\">Ikke fikset</option>";
				$color = "aaaaaa";
				break;
			}
			$Oppgave = mysql_query("SELECT * WHERE `worldid` = '". $Oppgave['Oppgave'] ."'");
			$Oppgave = mysql_fetch_array($Oppgave);
			print "<form action=\"index.php?edit=". $Oppgave['Oppgave'] ."\" method=\"POST\">n";
			print "<tr>n";

			print "<td><select name=\"status\">". $options ."</select></td>";
			print "<td><input style=\"border: 0; color: #". $color ."; font-size: 11px; font-family: verdana; width: 180px;\" type=\"text\" name=\"Oppgave\" value=\"\"". $Oppgave['Oppgave'] ."\"></td>";
			print "<td><input style=\"border: 0; color: #". $color ."; font-size: 11px; font-family: verdana; width: 180px;\" type=\"text\" name=\"Oppgavestatus\" value=\"\"". $Oppgave['Oppgavestatus'] ."\"></td>";
			print "<td><input style=\"border: 0; color: #". $color ."; font-size: 11px; font-family: verdana; width: 380px;\" type=\"text\" name=\"Prioritering\" value=\"\"". $Oppgave['Prioritering'] ."\"></td>";
			print "<td style=\"color: #". $color .";\">". $Oppgave['plrlastdate'] ."</td>";
			print "<td><input type=\"submit\" value=\"Lagre\" style=\"font-size: 9px; width: 37px;\"></td>";
			print "</tr>\n";
			print "</form>\n";
		}
	?>
</table>
<br />
<br />
	<div id="Ny">
			<h2>Legg til ny oppgave:</h2>
			<form action="index.php" method="post">
				<strong>Oppgave</strong> (<em>Makslengde er 2000 tegn</em>)<strong>:</strong><br />
				<input type="text" name="add" style="width: 400px; height: 200px;" maxlength="2000" />
				<br />
				<select name="Oppgave">
					<option value="0">Ikke på saken</option>
					<option value="1">På saken</option>
					<option value="2">Fikset</option>
					<option value="3">Ikke fikset</option>
				</select>
				<select name="Prioritering">
					<option value="4">Høy</option>
					<option value="5">Middels</option>
					<option value="6">Lav</option>
				</select>
				<input type="submit" value="Lagre" />
			</form>
	</div>
</body>
</html>

Her er et skjermskudd fra phpMyAdmin - merk dere at det er også lagt inn "Prioritering". Dette skjermskuddet er før jeg kom på at jeg kunne ha med prioritering. :)

mysql.jpg

 

EDIT: Pastebin.

Endret av Jooakim
Lenke til kommentar
Videoannonse
Annonse

Hei,

 

Jeg har ikke tid til å begynne å gå i stort med detaljer her nå, men et par nyttige pekere;

 

Den tomme kolonna kommer fra:

 

print "<td style=\"color: #". $color .";\">". $Oppgave['plrlastdate'] ."</td>";

 

Ettersom jeg ikke tror du har noen 'plrlastdate' i tabellen din, så mistenker jeg at copy'n'pastinga di har gått litt unna i svingene.

 

Det samme når det gjelder:

 

$Oppgave = mysql_query("SELECT * FROM Oppgave WHERE `worldid` = '". $Oppgave['Oppgave'] ."'");

 

For det første så har du jo allerede _hentet_ ut alle dataene om oppgaven (de er jo i $Oppgave allerede...), så det burde ikke være nødvendig å kjøre enda en SQL-spørring her.

 

Punkt to i så måte er at kolonnenavnet "worldid" ikke er nevnt noe som helst annet sted, så også her er det nok copy'n'paste som er den skyldige.

 

Et annet triks det kan være verdt å få med seg er at HTML-attributter kan begrenses med ', sånn at du kan bruke ting som print("<td style='...'>") og slippe å sjonglere med \" overalt. Senere vil du uansett gå videre til å bruke en eller annen form for templating.

 

Når det gjelder hva dannyboy_1992_ skriver, så er det god skikk å bruke enten isset() eller empty() for å sjekke om en verdi er satt / har en reell verdi, i stedet for å bare teste om den er true/false.

 

Det er også en god vane å ha en error_reporting(E_ALL); på toppen av koden, sånn at du får alle feilmeldinger om udefinerte variable og andre ulumskheter.

Lenke til kommentar

Jeg slettet den linjen nå

print "<td style=\"color: #". $color .";\">". $Oppgave['plrlastdate'] ."</td>";

 

Hva bør jeg skrive i linjen med worldid da? Mener du at jeg bare skal fjerne "WHERE `worldid`"?

 

Om jeg forstår det med HTML-attributtene rett. Skal jeg da skrive for eksempel

print "<td><input type='submit' value='Lagre' style='font-size: 9px; width: 37px;'></td>";

istedet for

print "<td><input type=\"submit\" value=\"Lagre\" style=\"font-size: 9px; width: 37px;\"></td>";

 

Jeg har nå oppdatert Pastebin. Og når jeg la inn "error_reporting(E_ALL)", kom

Notice: Undefined index: edit in /home/halovasj/public_html/testphp/index.php on line 67

Linje 67:

			if ($_GET['edit']) {

og

Notice: Undefined index: Oppgavestatus in /home/halovasj/public_html/testphp/index.php on line 73
OK

Linje 73:

				mysql_query("INSERT INTO `Oppgave` VALUES ('". $_POST['Oppgave'] ."','". $_POST['Oppgavestatus'] ."','". $_POST['Prioritering'] ."')");

 

I tillegg kom en ny feilmelding

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/halovasj/public_html/testphp/index.php on line 93
nn

Linje 93:

				$Oppgave = mysql_fetch_array($Oppgave);

 

Til det dannyboy skrev - skal jeg skrive

isset($_X['X'])

Alle steder der det står $_POST/EDIT?

 

Takk for hjelpen, folkens! :)

Endret av Jooakim
Lenke til kommentar

if(isset($_POST['blah'])) { Sånn :p

 

Edit:

 

Når det gjelder denne erroren:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/halovasj/public_html/testphp/index.php on line 93

nn

 

Så har jeg erfaring med når den kommer at enten så finnes ikke tabbelen eller felte.

Endret av dannyboy_1992_
Lenke til kommentar

ut i fra screenshottet å dømme mangler du feltet prioritering som du bruker i koden. en annen ting verdt å si er at du bruker get til å oppdatere databasen. get bør kun brukes til å vise informasjon. post bør brukes når verdier i databasen skal endres.

 

edit: du bør forøverig også ha et id felt i databasen som fungerer som primary key auto_increment. du kan ha oppgave tekst som PK, men det er god skikk å ha et id felt. tilfelle du skal utvide med en brukerdatabase og tilordninger mellom brukere og oppgaver for eksempel.

Endret av grimjoey
Lenke til kommentar

Siden følgende tydligvis ikke var så lett å forstå, legger jeg opp et oppdatert bilde her:mysql1.jpg

Her er et skjermskudd fra phpMyAdmin - merk dere at det er også lagt inn "Prioritering". Dette skjermskuddet er før jeg kom på at jeg kunne ha med prioritering. :)

 

Her er oppdatert Pastebin.

 

Et lite spørsmål: Hvordan får jeg slik at </table> kommer med når jeg ser på kildekoden til http://www.halovasjera.net/testphp/?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...