Kanske dålig rubrik. sql: select blogg.*, membersmembers.idUser, membersmembers.namnUser from blogg, membersmembers where blogg.forfattare = membersmembers.idUser and membersmembers.idUser = 12345 order by membersmembers.namnUser När jag kör denna select i min Mysql query browser så kommer alla tabell namn fram men inget innehåll. Glömde säga att om jag kör denna select så kommer det fram, men det blir två av varje(alltså dubbla poster). Hm, vad har du för datatyper på fälten, och vad lagrar du i fältet forfattare i inläggs-tabellen? Har dessa två tabeller, men dessa har ingen koppling från början med varandra. Vad innehåller forfattare? id-nummer? personnamn? användarnamn? (jag utgick nämligen ifrån att forfattare innehöll id-numret på författaren och ingenting annat) Ska försöka förklara lite bättre. Hm, jag begrep inte riktigt, men som jag förstår det så behöver du lista inlägg skrivna av en viss författare? Är nog lite dålig på att förklara, men det är något liknande som du säger. Alltså det som jag är ute efter är att kunna plocka fram inlägg efter en viss författare. Då är fortfarande min fråga: vad lagrar du i fältet forfattare? problemet är att jag inte lagrar något som kopplar de två tabellerna samman, utan endast det namn som skrivs i text fältet vid postning av inlägg. Okej nu ändrar jag frågeställningen lite med följande. Du borde ändra datatyp i tabellen på forfattare till integer, och ta bort fältet "Författare" ifrån formuläret. Variabeln $forfattare sätter du till värdet ifrån session med idUser. Vips har du id:t på den inloggade användaren som författare till alla inlägg Okej ska testa med detta, men hur menar du med "Variabeln $forfattare sätter du till värdet ifrån session med idUser. " Nja, egentligen inget annat att ändra mer än att du måste lagra värdet idUser från session i tabellen blogg Vet inte om jag hängde med på allt, men har ändrat i tabellen och satt författare till int. Hm, alltså, varför har du både fältet idUser och fältet forfattare i databasen? Alltså ska jag ta bort författare i databasen och endast ha idUser.??? Du ska ha antingen eller, namnet spelar ingen roll. Poängen är att du måste ha ett fält med valfritt namn, av typen integer, innehållandes ett id på en användare. Namnet på användaren behöver du inte (och bör inte) spara i den tabellen, namnet bör endast sparas i användartabellen. Okej, tog bort författare från tabellen och har det så här nu: blev lite fel, men har tagit bort fältet författare i formen också. Du måste få ut idUser ifrån session, det är steg ett (hur man gör i php vet jag inte, kan inte php.) När du sedan har det värdet så får du stoppa in det i sql-strängen Tack för all hjälp, nu är det löst.Visa rätt inlägg av författare
Söker lite tips om hur jag ska lösa mitt problem, men håller på med min blogg variant som kommer att kunna ha flera författare och varje författare har sitt eget inlogg. Men nu vill jag ha det så att varje författare skall kunna redigera och ta bort sitt inlägg eller kommentarer.
Funktionerna finns och fungerar, men om jag loggar in så kommer alla inlägg och kommentarer fram. Har styrt upp det med sessioner när jag loggar in så att admin kommer till en sida och de övriga till en annan.
Men jag vet inte vad som är bäst för att fånga rätt författare till sina egna inlägg.
Har 2 tabeller som är inblandade i detta
blogg
id|rubrik|text|forfattare|datum
membersmembers
idUser|namnUser|ansvarsomrade|passwordUser
När jag postar så postar jag till blogg(inlägg),allt funkar nu förutom att jag inte vet vad som är bäst eller riktigt att lösa detta på.
Hoppas att ni förstår hur jag menar.
Tacksam för tips om detta.
Sida för att läsa och redigera/ta bort
[php]
<?php
require_once('CHTMLPage.php');
$title = "read";
$style = "1-kolumns.css";
$page = new CHTMLPage($style);
$id = isset($_GET['id']) ? $_GET['id'] : '';
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
if (mysqli_connect_error()) {
echo "Connect failed: ".mysqli_connect_error()."<br>";
//exit();
}
$query = "SELECT * FROM blogg ORDER BY datum;";
//$query = "SELECT * FROM blogg WHERE id = '{$_GET['nid']}'";
var_dump($forfattare);
$res = $mysqli->query($query)
or die("Could not query database");
$query = "DELETE FROM blogg WHERE id = '$id'";
//$query = "DELETE FROM blogg WHERE id = $id LIMIT 1'";
$res1 = $mysqli->query($query) or die("Could not delete");
while($row = $res->fetch_object()) {
$html .= <<< EOD
<h2>$row->rubrik<br></h2>
$row->text<br><br>
$row->forfattare
$row->datum<br>
[Delete</p>][Editera</p>][Tillbaka</p>]
EOD;
}
//var_dump($rubrik);
/*
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
if (mysqli_connect_error()) {
echo "Connect failed: ".mysqli_connect_error()."<br>";
}
*/
//$query = "SELECT * FROM kommentarer WHERE nid = '{$_GET['nid']}'";
$query = "SELECT * FROM kommentarer";
$res1 = $mysqli->query($query)
or die("Could not query database");
while($row = $res1->fetch_object()) {
$html .= <<< EOD
<h2>$row->titel<br></h2>
$row->innehall<br><br>
$row->namn
$row->datum<br>
[Delete</p>][Editera</p>][Tillbaka</p>]
EOD;
}
$res->close();
$page->addPageBodyLeft($html);
$page->printPage($title);
?>
[/php]
Och sidan för t.ex författaren(alltså den han kommer till id inloggning)
[php]
<?php
// ===========================================================================================
require_once('CHTMLPage.php');
$title = "PTemplate1Columns";
$style = "1-kolumns.css";
$page = new CHTMLPage($style);
$html = <<<EOD
<center>
<h2>Författar-sida.</h2>
Skriv nytt inlägg<br><br>
Redigering
</center>
EOD;
$page->addPageBodyLeft($html);
// Print out the resulting page
$page->printPage($title);
?>
[/php]Sv: Visa rätt inlägg av författare
Kommer blogga fram alla inlägg, samt id och namn på författaren, från författaren med id 12345. Ta bort "and membersmembers.idUser = 12345" så får du samtliga inlägg på hela bloggen, ordnade efter författarnamnSv:Visa rätt inlägg av författare
Provade med båda satserna som du skrev, men likadant med bägge.
Provade även med att sätta endast "and membersmembers.idUser = 1" men hjälpte inte.
Tacksam för mer hjälp.Sv: Visa rätt inlägg av författare
select blogg.*, membersmembers.idUser, membersmembers.namnUser
from blogg, membersmembers
order by membersmembers.namnUser;
men förstår att det inte var tanken med det du skrev.Sv:Visa rätt inlägg av författare
Sv: Visa rätt inlägg av författare
CREATE TABLE IF NOT EXISTS membersmembers (
idUser int(11) NOT NULL auto_increment,
namnUser varchar(30) NOT NULL,
passwordUser varchar(32) NOT NULL,
ansvarsomrade varchar(32) NOT NULL,
emailUser varchar(100),
PRIMARY KEY (idUser)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2;
CREATE TABLE IF NOT EXISTS blogg (
id int(11) NOT NULL auto_increment,
rubrik varchar(300) NOT NULL,
text varchar(10000) NOT NULL,
forfattare varchar(50) NOT NULL,
datum datetime NOT NULL,
PRIMARY KEY(id),
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4;Sv:Visa rätt inlägg av författare
Sv: Visa rätt inlägg av författare
För att kunna skriva ett inlägg till blogg så måste man vara inloggad, då kommer man till sidan för att posta och där har jag tabellen blogg.
Den andra är endast för att kolla om du är behörig för att logga in eller inte.
Sedan har jag en sida som plockar fram alla inlägg och kommentarer (som det är nu) där jag kan deleta och redigera dessa. Men jag vill på något sätt kunna få fram t.ex olles inlägg endast när han har loggat in så att han inte kan ta bort några andras. Problemet som jag ser det är att i blogg kan man vara inloggad som olle men posta som nisse. Vet att det låter dumt, men på något sätt så borde jag väl kunna få fram rätt inlägg till rätt författare når jag är inloggad som jag har det nu.
Hoppas att du förstår hur jag menar.Sv:Visa rätt inlägg av författare
Sv: Visa rätt inlägg av författare
Det enda som styr vilken sida som jag kommer till är:
if($_SESSION['ansvarsomrade'] != "Admin")
//die("Endast admin har tillgång till denna sida!");
header("Location: ?p=forfattar");
så i princip så kommer alla författare till samma sida, men det är där som jag skulle behöva fånga och plocka fram rätt inlägg till en viss författare så att denna inte får fram alla utan endast sina egna inlägg.
Hoppas att det ser bättre ut.Sv:Visa rätt inlägg av författare
Sv: Visa rätt inlägg av författare
vet inte om det är bättre att fånga detta redan vid inloggningen på något sett.
visar min inlogg fil.
[php]
<?php
// ===========================================================================================
// Page specific code
// -------------------------------------------------------------------------------------------
//
// Create a new database object, connect to the database.
//
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
if (mysqli_connect_error()) {
echo "Connect failed: ".mysqli_connect_error()."<br>";
exit();
}
// -------------------------------------------------------------------------------------------
//
// Take care of _GET/_POST variables. Store them in a variable (if they are set).
//
$user = isset($_POST['namnUser']) ? $_POST['namnUser'] : '';
$password = isset($_POST['passwordUser']) ? $_POST['passwordUser'] : '';
// Prevent SQL injections
$user = $mysqli->real_escape_string($user);
$password = $mysqli->real_escape_string($password);
// -------------------------------------------------------------------------------------------
//
// Prepare and perform a SQL query.
//
$members = DB_PREFIX . 'members';
$query = <<< EOD
SELECT
idUser,
namnUser,
ansvarsomrade
FROM {$members}
WHERE
namnUser = '{$user}' AND
passwordUser = md5('{$password}')
;
EOD;
$res = $mysqli->query($query)
or die("<p>Could not query database,</p><code>{$mysqli->error}</code><code>{$query}</code>");
// -------------------------------------------------------------------------------------------
//
// Use the results of the query to populate a session that shows we are logged in
//
$row = $res->fetch_object();
//$_SESSION = Array(); // Clear the current session variables
// Must be one row in the resultset
if($res->num_rows === 1) {
$_SESSION['idUser'] = $row->idUser;
$_SESSION['namnUser'] = $row->namnUser;
$_SESSION['ansvarsomrade'] = $row->ansvarsomrade;
} else {
$_SESSION['errorMessage'] = "Inloggningen misslyckades";
$_POST['redirect'] = 'login';
}
$res->close();
// -------------------------------------------------------------------------------------------
//
// Close the connection to the database
//
$mysqli->close();
// -------------------------------------------------------------------------------------------
//
// Redirect to another page
//
$redirect = isset($_POST['redirect']) ? $_POST['redirect'] : 'adminPage';
header('Location: ' . WS_SITELINK . "?p={$redirect}");
exit;
?>
[/php]
vet att det står members i koden, men det blir membersmembers i dabasen. fråga mig inte varför.Sv:Visa rätt inlägg av författare
Är så att jag ju kan plocka fram detta via min session
echo "<pre>";
print_r($_SESSION);
echo "</pre>";
och får då följande
<pre>Array
(
[idUser] => 2
[namnUser] => Mats Roos
[ansvarsomrade] => L?rare
)
så då får jag fram idUser, men hur ska jag lösa detta med att kunna posta det till tabellen när jag skriver ett nytt inlägg.
Har denna kod till att posta.
<?php
// ===========================================================================================
//
require_once('CHTMLPage.php');
$title = "PTemplate1Columns";
$style = "1-kolumns.css";
$page = new CHTMLPage($style);
//$page->printHTMLHeader('Fooglers blogg idag den ' . date(DATE_RFC822));
echo "<pre>";
print_r($_SESSION);
echo "</pre>";
if (isset($_POST['submit'])) {
// -------------------------------------------------------------------------------------------
//
// Create a new database object, we are using the MySQLi-extension.
//
//
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
if (mysqli_connect_errno()) {
echo "Connect failed: ".mysqli_connect_error()."<br>";
}
$rubrik= $_POST['rubrik'];
$text = $_POST['text'];
$forfattare = $_POST['forfattare'];
$datum = date('Y-m-d H-i-s');
$id = $_GET['id'];
$idUser = $_POST['idUser'];
// $query = "INSERT INTO blogg (idUser) VALUES ($idUser)";
//$mysqli -> query ( $query );
// printf ( "New Record has id %d.\n" , $mysqli -> insert_id );
// $query = die("INSERT INTO blogg SET idUser='$idUser', rubrik='$rubrik ', text='$text' , forfattare='$forfattare' , datum='$datum'");
// $query = "INSERT INTO blogg SET idUser='$idUser', rubrik='$rubrik ', text='$text' , forfattare='$forfattare' , datum='$datum'" or die(mysqli_error());
$query = "INSERT INTO blogg SET rubrik='$rubrik ', text='$text' , forfattare='$forfattare' , datum='$datum'" or die(mysqli_error());
//$query = "SELECT * FROM membersmembers WHERE idUser = $idUser and passwordUser = md5($passwordUser)";
echo '<pre>';
print_r($_POST);
echo '</pre>';
var_dump($idUser);
$result = $mysqli->query($query, MYSQLI_USE_RESULT);
$result = array($result);
if ($mysqli->error) {
try {
throw new Exception("MySQL error $mysqli->error <br> Query:<br> $query", $msqli->errno);
} catch(Exception $e ) {
echo "Error No: ".$e->getCode(). " - ". $e->getMessage() . "<br >";
echo nl2br($e->getTraceAsString());
}
}
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
/*
if (!$mysqli->query("INSERT INTO blogg SET title='$title ', text='$text' , forfattare='$forfattare' , datum='$datum'")) {
printf("Errormessage: %s\n", $mysqli->error);
}
*/
$mysqli->close();
}
?>
<?php
$html = <<<EOD
<form method="post" action='?p=post' name="matain" onSubmit="return skicka_OnClick();">
<fieldset style="width: 420px;">
<legend>POSTA INLÄGG</legend>
<p>
Rubrik:<br>
<input type="text" name="rubrik" id="title" size="25" />
</p>
Text:<br>
<textarea name="text" rows="5" cols="30"></textarea>
</p>
<p>
Författare:<br>
<input type="text" name="forfattare" id="forfattare" size="25" />
</p>
<p>
<input type="submit" name="submit" value="Posta inlägg!" />
</p>
</fieldset>
</form>
<p>Tillbaka</p>
<script language="JavaScript">
function skicka_OnClick() {
var rubrik = document.matain.title.value;
var text = document.matain.text.value;
var forfattare = document.matain.forfattare.value;
if((rubrik.length != 0) && (text.length != 0) && (forfattare.length != 0)) {
return true;
} else {
alert("Du glömde att fylla i Rubrik, Inlägg eller Författare");
return false;
}
}
</script>
EOD;
$page->addPageBodyLeft($html);
// Print out the resulting page
$page->printPage($title);
?>
Sv: Visa rätt inlägg av författare
Sv:Visa rätt inlägg av författare
att jag byter ut forfattare till idUser i inserten rakt av, inget annat som jag behöver skriva om eller??
Har som sagt inte testat detta ännu.
$query = "INSERT INTO blogg SET idUser='$idUser', rubrik='$rubrik ', text='$text' , datum='$datum'" or die(mysqli_error());Sv: Visa rätt inlägg av författare
Sv:Visa rätt inlägg av författare
Sedan fick jag inte ihop hur jag skall lagra idUser fån sessionen i db.
Annars så provade jag bara att köra rakt över med att ta bort fältet författare och posta.
Fick följande fel.Utskrift.
Array
(
[idUser] => 1
[namnUser] => anders
[ansvarsomrade] => Admin
)
Array
(
[rubrik] => testing av blogg
[text] => kolla detta om det funkar, men vet ej.
[submit] => Posta inl?gg!
)
NULL Error No: 0 - MySQL error Incorrect integer value: '' for column 'idUser' at row 1
Query:
INSERT INTO blogg SET idUser='', rubrik='testing av blogg ', text='kolla detta om det funkar, men vet ej.' , forfattare='' , datum='2009-05-03 17-21-04'Sv: Visa rätt inlägg av författare
Sv:Visa rätt inlägg av författare
Sv: Visa rätt inlägg av författare
Sv:Visa rätt inlägg av författare
CREATE TABLE IF NOT EXISTS blogg (
id int(11) NOT NULL auto_increment,
idUser int(11) NOT NULL,
rubrik varchar(300) NOT NULL,
text varchar(10000) NOT NULL,
datum datetime NOT NULL,
PRIMARY KEY(id),
FOREIGN KEY(idUser) REFERENCES members(idUser)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4;
men kan inte posta till db. Har inte ändrat i koden ovan, alltså posta sidan.
Men vet fortfarande inte hur jag får med idUser
Error No: 0 - MySQL error Incorrect integer value: '' for column 'idUser' at row 1 Sv: Visa rätt inlägg av författare
Men hittar inte något hur jag skriver för att kunna få med iduser när jag postar.
Behöver verkligen hjälp med detta.Sv:Visa rätt inlägg av författare
Sv: Visa rätt inlägg av författare
fick lägga till detta
$idUser = $_SESSION['idUser'];
och ta bort
$idUser = $_POST['idUser'];
så funkar det.