webForumDet fria alternativet

webbshop mail kommer inte fram

PHP

2 svar · 557 visningar · startad av mr.mainline

Medlem sedan feb. 2003777 inlägg
Frågan#1

Jag håller på att leka med webbshopen som finns med i boken php5 och mysql handboken, och har två problem, för det första visas inte de uppladdade bilderna.

och sen kommer inte bekräftelse mailet fram, någon som har några tips att testa?

nästan längst ner i scriptet ser jag include(Mail.php); men den filen finns inte.

<?php 
// Slå på output buffering så vi kan göra redirect även efter header har skickats
ob_start(); 
// Aktivera sessioner
session_start();
// Skapa anslutning mot databasen
$dbh = mysql_connect("localhost","","")
	or die("Kunde inte ansluta!");
mysql_select_db("", $dbh);

// Kolla om varukorgen ska tömmas
if ($_GET['op']=="tabortorder") {
	TabortOrder();
	Header("Location: index.php");
}
?>
<html>
<head>
<title>Webbshoppen</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script type="text/javascript">
function FormularData(op,prodID,antal) {
	varukorg.op.value = op;
	varukorg.prodID.value = prodID;
	varukorg.antal.value = antal;
	varukorg.submit();
}

function TomVarukorg() {
	if (confirm("Vill du verkligen tömma varukorgen?")) {
		varukorg_hantering.op.value = 'tabortorder';
		varukorg_hantering.submit();
	}
}

function SkickaVarukorg() {
	if (confirm("Vill du skicka din order?")) {
		varukorg_hantering.op.value = 'skickaorder';
		varukorg_hantering.submit();
	}	
}
</script>
</head>

<body>
<table width="600" border="1" cellspacing="0" cellpadding="0">
  <tr>
    <td colspan="2" align="right" valign="bottom" height="50"><?php DoTop();?></td>
  </tr>
  <tr>
    <td width="250" height="500" align="left" valign="top"><?php DoLeft();?></td>
    <td width="650" align="left" valign="top"><?php DoMain();?></td>
  </tr>
  <tr>
    <td colspan="2" align="center" valign="middle"><?php DoBottom();?></td>
  </tr>
</table>
</body>
</html>

<?php
// Stäng databasanslutningen
mysql_close($dbh);

// Funktioner
function DoTop() {
	if (!empty($_SESSION['orderID'])) {
		if (AntalKorgen()!=0) {
			echo "Du har ".AntalKorgen()." varor i korgen.<br>\n";
			echo "<a href=\"index.php?op=visa_korg\">Visa varukorgen</a>\n";
		} else {
			echo "Inga varor i kundkorgen.";
		}
	} else {
		echo "Du har inte handlat något.";	
	}
}

function DoLeft() {
	global $dbh;
	// Lista upp alla kategorier
	$query = "SELECT * FROM kategorier ORDER BY kategori";
	$result = mysql_query($query, $dbh);
	while ($rad=mysql_fetch_array($result)) {
		echo "<a href=\"index.php?kat=".$rad['kategoriID']."\">".$rad['kategori']."</a><br>\n";
	}
}

function DoMain() {
	// Kontrollera hur vi blev anropade
	$op = $_GET['op'];
	switch($op) {
		case "lagg_till":
			LaggTillVara();
			break;
		case "visa_korg":
			VisaKorgen();
			break;
		case "andra":
			AndraAntal();
			break;
		case "tabort":
			TabortProdukt();
			break;
		case "skickaorder":
			VisaOrderuppgifter();
			break;
		case "skickaorder2":
			SkickaOrder();
			break;
		case "tack":
			VisaTack();
			break;
		default:
			VisaProdukter();
	}
}

function DoBottom() {
	echo "&nbsp;";
}

// Funktioner för shoppen
function LaggTillVara() {
	global $dbh;
	// Har vi en order att fylla på?
	if (empty($_SESSION['orderID'])) {
		// Nej, så skapa en ny order först
		$_SESSION['orderID'] = SkapaNyOrder();
	}
	$orderID = $_SESSION['orderID'];
	$prodID = $_GET['prodID'];
	$antal = $_GET['antal'];
	$kat = $_GET['kat'];
	// Kontrollera först om produkten redan finns i ordern
	// i så fall ökar vi bara antalet
	$query = "SELECT COUNT(*) FROM orderrad WHERE orderID=$orderID AND prodID=$prodID";
	$result = mysql_query($query, $dbh);
	if (mysql_result($result, 0, 0) != 0) {
		// Ja, produkten fanns, så öka bara antalet
		$query = "UPDATE orderrad SET antal=antal+$antal WHERE orderID=$orderID AND prodID=$prodID";
		$result = mysql_query($query, $dbh);
	} else {
		// Nej, fanns inte så lägg till produkten i ordern
		$query = "INSERT INTO orderrad(orderID, prodID, antal) VALUES($orderID, $prodID, $antal)";
		$result = mysql_query($query, $dbh);
	}
	Header("Location: index.php?kat=$kat");
}

function VisaProdukter() {

	global $dbh;
	// Visar alla produkter i en viss kategori
	$kat = $_GET['kat'];
	if (!empty($kat)) {
		echo "<table border=\"1\">\n";
		echo "<tr>\n";
		echo "<td width=\"150\">&nbsp;</td>\n";
		echo "<td width=\"200\">Produktbeskrivning</td>\n";
		echo "<td>Pris SEK</td>\n";
		echo "<td>&nbsp;</td>\n";
		echo "</tr>\n";
		$query = "SELECT * FROM produkter WHERE kategoriID=$kat";
		$result = mysql_query($query, $dbh);
		while($rad=mysql_fetch_array($result)) {
			echo "<form method=\"get\" action=\"index.php\">\n";
			echo "<tr>\n";
			
			// bilden visas inte
			echo "<td><img src=\"prod_bild.php?prodID=".$rad['prodID']."\"></td>\n";
			
			
			echo "<td align=\"left\" valign=\"bottom\">".$rad['beskrivning']."</td>\n";
			echo "<td align=\"left\" valign=\"bottom\">".$rad['pris']."</td>\n";
			echo "<td align=\"left\" valign=\"bottom\"><input type=\"text\" size=\"5\" name=\"antal\" value=\"1\"><input type=\"submit\" value=\"Beställ\"></td>\n";
			echo "<tr>\n";
			echo "<input type=\"hidden\" name=\"prodID\" value=\"".$rad['prodID']."\">\n";
			echo "<input type=\"hidden\" name=\"op\" value=\"lagg_till\">\n";
			echo "<input type=\"hidden\" name=\"kat\" value=\"$kat\">\n";
			echo "</form>\n";
		}
		echo "</table>\n";
	} else {
		// Ingen kategori vald så visa huduvsidans innehåll
		echo "Huvudsidans innehåll";
	}
}

function SkapaNyOrder() {
	global $dbh;
	// Skapar en ny order och returnerar ordernummret
	$datum = date("Y-m-d H:i:s");
	$query = "INSERT INTO orderhuvud(skapad, senast_aktiv) VALUES('#$datum#','#$datum#')";
	$result = mysql_query($query, $dbh);
	return mysql_insert_id($dbh);
}

function AntalKorgen() {
	global $dbh;
	// Returnerar antal varor i varukorgen
	$query = "SELECT COUNT(*) FROM orderrad WHERE orderID=".$_SESSION['orderID'];
	$result = mysql_query($query, $dbh);
	return mysql_result($result, 0, 0);
}

function VisaKorgen() {
	global $dbh;
	// Visar alla produkter i varukorgen om det finns några
	if (AntalKorgen()!=0) {
	
	$query = "SELECT produkter.beskrivning, produkter.pris, orderrad.antal, orderrad.prodID FROM produkter, orderrad WHERE produkter.prodID=orderrad.prodID AND orderrad.orderID=".$_SESSION['orderID'];
	$result = mysql_query($query, $dbh);
	// Vi använder ett dolt formulär för att skicka data tillsammans med JavaScript
	echo "<form action=\"index.php\" method=\"get\" name=\"varukorg\">\n";
	echo "<input type=\"hidden\" name=\"op\">\n";
	echo "<input type=\"hidden\" name=\"prodID\">\n";
	echo "<input type=\"hidden\" name=\"antal\">\n";
	echo "</form>\n";
	echo "<table border=\"1\">\n";
	echo "<tr>\n";
	echo "<td width=\"150\">&nbsp;</td>\n";
	echo "<td width=\"200\">Produkt</td>\n";
	echo "<td>a' pris</td>\n";
	echo "<td>Antal</td>\n";
	echo "<td>Summa</td>\n";
	echo "<td>&nbsp;</td>\n";
	echo "</td>\n";
	while ($rad=mysql_fetch_array($result)) {
		echo "<input type=\"hidden\" name=\"op\">\n";
		echo "<tr>\n";
		echo "<td><img src=\"prod_bild.php?prodID=".$rad['prodID']."\"></td>\n";
		echo "<td align=\"left\" valign=\"bottom\">".$rad['beskrivning']."</td>\n";
		echo "<td align=\"left\" valign=\"bottom\">".$rad['pris']."</td>\n";
		echo "<td align=\"left\" valign=\"bottom\"><input type=\"text\" size=\"5\" name=\"antal_".$rad['prodID']."\" value=\"".$rad['antal']."\"></td>\n";
		echo "<td align=\"left\" valign=\"bottom\">".($rad['pris']*$rad['antal'])."</td>\n";
		echo "<td>\n";
		echo "<input type=\"button\" value=\"Ändra\" onClick=\"FormularData('andra','".$rad['prodID']."',antal_".$rad['prodID'].".value);\"><br>\n";
		echo "<input type=\"button\" value=\"Ta bort\" onClick=\"FormularData('tabort','".$rad['prodID']."','')\">\n";
		echo "</td>\n";
		echo "</tr>\n";
	}
	echo "</table>\n";
	echo "<center>\n";
	echo "<form action=\"index.php\" method=\"get\" name=\"varukorg_hantering\">\n";
	echo "<input type=\"hidden\" name=\"op\">\n";
	echo "<input type=\"button\" value=\"Töm varukorgen\" onClick=\"TomVarukorg();\">\n";
	echo "<input type=\"button\" value=\"Skicka order\" onClick=\"SkickaVarukorg();\">\n";
	echo "</form>\n";
	echo "</center>\n";
	
	} else {
		Header("Location: index.php");
	}
}

function AndraAntal() {
	global $dbh;
	// Ändrar antalet i varukorgen för en viss produkt
	$prodID = $_GET['prodID'];
	$antal = $_GET['antal'];
	$orderID = $_SESSION['orderID'];
	// Matade kunden in 0 som antal tar vi bort produkten ur varukorgen
	if ($antal==0) {
		$query = "DELETE FROM orderrad WHERE orderID=$orderID AND prodID=$prodID";
		mysql_query($query, $dbh);
	} else {
		// Vi sätter nytt antal
		$query = "UPDATE orderrad SET antal=$antal WHERE orderID=$orderID AND prodID=$prodID";
		mysql_query($query, $dbh);
	}
	Header("Location: index.php?op=visa_korg");
}

function TabortProdukt() {
	global $dbh;
	// Tar bort en produkt ur varukorgen
	$prodID = $_GET['prodID'];
	$orderID = $_SESSION['orderID'];
	$query = "DELETE FROM orderrad WHERE orderID=$orderID AND prodID=$prodID";
	mysql_query($query, $dbh);
	Header("Location: index.php?op=visa_korg");
}

function TabortOrder() {
	global $dbh;
	// Tar bort en hel order och nollställer sessionen (ingen order)
	$orderID = $_SESSION['orderID'];
	$query = "DELETE FROM orderhuvud WHERE orderID=$orderID";
	mysql_query($query, $dbh);
	$query = "DELETE FROM orderrad WHERE orderID=$orderID";
	mysql_query($query, $dbh);
	$_SESSION['orderID'] = '';	
}

function VisaOrderuppgifter() {
	// Formuläret kunden måste fylla i
	echo "<center>\n";
	echo "<h2>Var vänlig fyll i dina uppgifter</h2>\n";
	echo "<h4>Det är viktigt du har en fungerande epostadress för att kunna bekräfta ordern</h3>\n";
	echo "<form action=\"index.php\" method=\"get\">\n";
	echo "<input type=\"hidden\" name=\"op\" value=\"skickaorder2\">\n";
	echo "<table border=\"1\">\n";
	echo "<tr>\n";
	echo "<td>Fullständigt namn:</td>\n";
	echo "<td><input type=\"\" name=\"namn\"></td>\n";
	echo "</tr>\n";
	echo "<tr>\n";
	echo "<td>Adress:</td>\n";
	echo "<td><input type=\"\" name=\"adress1\"></td>\n";
	echo "</tr>\n";
	echo "<tr>\n";
	echo "<td>Adress:</td>\n";
	echo "<td><input type=\"\" name=\"adress2\"></td>\n";
	echo "</tr>\n";
	echo "<tr>\n";
	echo "<td>Postnr:</td>\n";
	echo "<td><input type=\"\" name=\"postnr\"></td>\n";
	echo "</tr>\n";
	echo "<tr>\n";
	echo "<td>Postadress</td>\n";
	echo "<td><input type=\"\" name=\"postadress\"></td>\n";
	echo "</tr>\n";
	echo "<tr>\n";
	echo "<td>Telefon</td>\n";
	echo "<td><input type=\"\" name=\"telefon\"></td>\n";
	echo "</tr>\n";
	echo "<tr>\n";
	echo "<td>Mobiltelefon</td>\n";
	echo "<td><input type=\"\" name=\"mobiltelefon\"></td>\n";
	echo "</tr>\n";
	echo "<tr>\n";
	echo "<td>Epost</td>\n";
	echo "<td><input type=\"\" name=\"epost\"></td>\n";
	echo "</tr>\n";
	echo "<tr>\n";
	echo "<td colspan=\"2\" align=\"center\"><input type=\"submit\" value=\"Skicka order\"></td>\n";
	echo "</tr>\n";
	echo "</table>\n";
	echo "</form>\n";
	echo "</center>\n";
}
function SkickaOrder() {
	global $dbh;
	// Sätter ordern som väntande på bekräftelse från kunden och
	// skickar samtidigt ett meddelande om att orden måste bekräftas
	// till kundens epostadress. Givetvis måste kunden först fyllt i
	// sina uppgifter
	$namn = $_GET['namn'];
	$adress1 = $_GET['adress1'];
	$adress2 = $_GET['adress2'];
	$postnr = $_GET['postnr'];
	$postadress = $_GET['postadress'];
	$telefon = $_GET['telefon'];
	$mobiltelefon = $_GET['mobiltelefon'];
	$epost = $_GET['epost'];
	$orderID = $_SESSION['orderID'];
	
	// Vi använder även sessionen ID i bekräftelsen (lite mer säkerhet bara)
	$sid = session_id();
	$datum = date("Y-m-d H:i:s");
	$query = "UPDATE orderhuvud SET status='V', bekraftID='$sid', senast_aktiv='#$datum#', full_namn='$namn', adress1='$adress1', adress2='$adress2', postnr='$postnr', postadress='$postadress', telefon='$telefon', mobiltelefon='$mobiltelefon', epost='$epost' WHERE orderID=$orderID";
	mysql_query($query, $dbh);
	
	
	
	// Skapa ett epostmeddelande och skicka det till användaren
	include("Mail.php");

	$recipients = $epost;
	$headers["From"]    = "holm-fredrik@bredband.net";
	$headers["To"]      = $epost;
	$headers["Subject"] = "Bekräftelse av din order";

	$body = "Tack för din order!\n\rDin beställning kommer att skickas mot postförskott till\n\r";
	$body .= "$namn\n\r$adress1\n\r$adress2\n\r$postnr  $postadress\n\r";
	$body .= "\n\r\n\rDu måste bekräfta din order genom att klicka på länken nedan\n\r";
	$body .= "http://webbshop.sm4wwg.mine.nu/confirm.php?orderID=$orderID&confirm=$sid";
	$body .= "\n\r\n\rOm adressuppgifterna är felaktiga kan du aktivera din order på webbshoppen och\n\r";
	$body .= "skicka din order igen genom att klicka på länken nedan. På så sätt får du fylla i dina adressuppgifter igen.\n\r";
	$body .= "http://webbshop.sm4wwg.mine.nu/reactivate.php?orderID=$orderID&confirm=$sid\n\r";
	$body .= "\n\rDu har beställ förljande produkter:\n\r\n\r";
	$body .= "\n\rHoppas du blir nöjd med din beställning!";
	
	$params["host"] = "send.one.com";
	$params["port"] = "25";
	$params["auth"] = false;
	$params["username"] = "";
	$params["password"] = "";

	$mail_object =& Mail::factory("smtp", $params);
	$mail_object->send($recipients, $headers, $body);
	
	
	
	// Nollställ sessionen för orderID
	$_SESSION['orderID'] = '';
	Header("Location: index.php?op=tack");
}

function VisaTack() {
	// Visar tacksidan för beställningen
	echo "<center>\n";
	echo "<h3>Tack för din beställning.<br>Du kommer att få ett epostmeddelande som innehåller en länk som du<br>måste klicka på för att bekräfta beställningen.</h3>\n";
	echo "</center>\n";
}
?>
Medlem sedan mars 2007845 inlägg
#2

Om du tittar i boken står det säkert att du måste skapa mail.php själv.

Medlem sedan feb. 2003777 inlägg
#3

jag har nu fått mail att funka, men får inte rätt på dessa bilder, när jag laddar upp genom adminsidan så får jag värde i alla rader utom i bild i databasen

här är koden för ny produkt

function NyProdukt() {
	global $dbh;
	// Är personen inloggad?
	if ($_SESSION['inloggad']!='1') {
		// Nej, så vi skickar tillbaka till startsidan
		header("Location: admin.php");
	}
	$kategoriID = $_POST['kategoriID'];
	$prodID = $_POST['prodID'];
	$spara = $_POST['spara'];
	// Ska vi lista upp kategorierna?
	if (empty($spara)) {
		// Ja, visa alla kategorier
		echo "<center>\n";
		echo "<h3>Administrationsmeny - Ny produkt</h3>\n";
		echo "<form action=\"admin.php\" method=\"post\" enctype=\"multipart/form-data\">\n";
		echo "<input type=\"hidden\" name=\"op\" value=\"prod_ny\">\n";
		echo "<table border=\"1\">\n";
		echo "<tr>\n";
		echo "<td colspan=\"2\">Beskrivning:</td>\n";
		echo "</tr>\n";
		echo "<tr>\n";
		echo "<td colspan=\"2\"><textarea name=\"beskrivning\" cols=\"40\" rows=\"5\"></textarea></td>\n";
		echo "</tr>\n";
		echo "<tr>\n";
		echo "<td>Pris:</td><td><input type=\"text\" name=\"pris\"></td>\n";
		echo "</tr>\n";
		echo "<tr>\n";
		echo "<td>Bild:</td><td><input type=\"file\" name=\"bild\"></td>\n";
		echo "</tr>\n";
		echo "<tr>\n";
		echo "<td>Kategori:</td>\n";
		echo "<td><select name=\"kategoriID\">\n";
		// Hämta alla kategorier och visa dem i en listruta
		$result = mysql_query("SELECT * FROM kategorier", $dbh);
		while($rad = mysql_fetch_array($result)) {
			echo "<option value=\"".$rad['kategoriID']."\">".$rad['kategori']."</option>\n";
		}
		echo "</select></td>\n";
		echo "</tr>\n";
		echo "<td colspan=\"2\" align=\"center\"><input type=\"submit\" name=\"spara\" value=\"Spara\"></td>\n";
		echo "</tr>\n";
		echo "</table>\n";
		echo "</form>\n";
		echo "</center>\n";
	} elseif ($spara=="Spara") {
		// Vi ska spara den nya produkten
		// Vi börjar med att hantera den uppladdade bilden
		if (is_uploaded_file($_FILES['bild']['tmp_name'])) {
			// Okey, bilden laddades upp
			// sätt den maximala bredden
			$allowedWidth = 150;
			//lägg filen i en variabel
			$tempname = $_FILES['bild']['tmp_name'];
			$filnamn = $_FILES['bild']['name'];
			$filtyp = $_FILES['bild']['type'];
			$filstorlek = $_FILES['bild']['size'];
			// Beräkna bildens förminskning
			//hämtar stl på bilden, först bredd, sen höjd
			$image = getimagesize($tempname);
			$bredd = $image[0];
			$hojd = $image[1];
			$fakt = ($image[0]/$allowedWidth);
			$nybredd=$allowedWidth;
			$nyhojd=(int)($hojd/$fakt);
			// pjpeg?
			if($filtyp == "image/pjpeg") {
				$originalbild = imagecreatefromjpeg($tempname);
			} elseif ($filtyp == "image/gif") {
				$originalbild = imagecreatefromgif($tempname);
			}elseif ($filtyp == "image/x-png") {
				$originalbild = imagecreatefrompng($tempname);
			}
			//skapa miniatyrbildens mått
			$miniatyrbild = imagecreate($nybredd, $nyhojd);
			imagecopyresized($miniatyrbild, $originalbild, 0, 0, 0, 0, $nybredd, $nyhojd, $bredd, $hojd);
			//om det är en jpg-fil ... eller gif-fil ... eller png-fil
			if($filtyp == "image/pjpeg") {
				imagejpeg($miniatyrbild,$tempname.".img",100);
			} elseif ($filtyp == "image/gif") {
				imagegif($miniatyrbild,$tempname.".img");
			} elseif ($filtyp == "image/x-png") {
				imagepng($miniatyrbild,$tempname.".img");
			}
			imagedestroy($originalbild);
			imagedestroy($miniatyrbild);
			$bild_data = addslashes(fread(fopen($tempname, "rb"), filesize($tempname)));
			$miniatyr_data = addslashes(fread(fopen($tempname.".img", "rb"), filesize($tempname.".img")));
			unlink($tempname.".img");
			
			//rb eller r
		}
		$beskrivning = $_POST['beskrivning'];
		$pris = $_POST['pris'];
		
		// Kolla här...
		mysql_query("INSERT INTO produkter(beskrivning, bild, bildtyp, pris, kategoriID) VALUES('$beskrivning','$miniatyr_data','$filtyp','$pris','$kategoriID')", $dbh);
		header("Location: admin.php");
	}
}
?>
264 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)