PHP en MYSQL BLOG

Status
Niet open voor verdere reacties.

brownmouse

Gebruiker
Lid geworden
6 jul 2007
Berichten
497
hoi ik heb een vraag.
ik heb dus me eigen blog.
http://www.timos-photos.nl/blog/

en wil dus als ik een bericht wil toevoegen dat je dan naar een pagina gaat bijv
voegtoe.php dat je dan een naam en een text moet typen.

dat hij dat opslaat in je database.
en dat hij dat dan gaat laden op de pagina index.php

meschien snap je waar ik het over heb.
nou als iemand de codes daarvoor meschien kent of wil maken dan
vind ik dat echt top.

PS: zou het ook kunnen dat hij er aparte pagina´s voor kan aanmaken

MVG Timo
 
ik heb het niet getest, maar dit is ongeveer het idee. Ik heb gelijk ook een stukje code toegevoegd die voorkomt dat je twee keer hetzelfde post (als je op vernieuwen klikt).

voegtoe.php:
PHP:
<?php
$time=time();
$_SESSION['rand']=rand(0,100);
?>
<form method='post' action='index.php'>
<input type='hidden' name='time' value='<?php echo "$time"; ?>'>
<input type='hidden' name='rand' value='<?php echo $_SESSION['rand'];?>'>
<input type='text' name='header'>
<textarea name='inhoud'></textarea>
<input type='submit' value='submit'>
</form>

aan de bovenkant van index.php
PHP:
if($_SESSION['rand']==$_POST['rand']){
$_SESSION['rand']=rand(101,200);
$header=$_POST['header'];
$inhoud=$_POST['inhoud'];
$time=$_POST['time'];
$query="INSERT INTO 'database' (`ID`,`header`,`inhoud`,`time`) VALUES('','$header','inhoud','time');";
$res=mysql_query($query);
}

apparte pagina's is niet zo moeilijk:

$pagina=$_GET['pagina']
$query="SELECT * FROM `database` where `pagina`='$pagina'";

je kan dan door in de addresbalk achter de url het volgende te zetten:
PHP:
?pagina=dezepagina

een bepaalde pagina oproepen. Dan moet je dat natuurlijk wel in de database hebben staan.

ik hoop dat ik je hiermee een beetje geholpen hebt,

succes :thumb:
 
PHP:
$query="INSERT INTO 'database' (`ID`,`header`,`inhoud`,`time`) VALUES('','$header','inhoud','time');";

Daar ben je 2 $-tekens vergeten

PHP:
$query="INSERT INTO 'database' (`ID`,`header`,`inhoud`,`time`) VALUES('','$header','$inhoud','$time');";

Mooi stukje code verder!
 
ik heb het niet getest, maar dit is ongeveer het idee. Ik heb gelijk ook een stukje code toegevoegd die voorkomt dat je twee keer hetzelfde post (als je op vernieuwen klikt).

voegtoe.php:
PHP:
<?php
$time=time();
$_SESSION['rand']=rand(0,100);
?>
<form method='post' action='index.php'>
<input type='hidden' name='time' value='<?php echo "$time"; ?>'>
<input type='hidden' name='rand' value='<?php echo $_SESSION['rand'];?>'>
<input type='text' name='header'>
<textarea name='inhoud'></textarea>
<input type='submit' value='submit'>
</form>

aan de bovenkant van index.php
PHP:
if($_SESSION['rand']==$_POST['rand']){
$_SESSION['rand']=rand(101,200);
$header=$_POST['header'];
$inhoud=$_POST['inhoud'];
$time=$_POST['time'];
$query="INSERT INTO 'database' (`ID`,`header`,`inhoud`,`time`) VALUES('','$header','inhoud','time');";
$res=mysql_query($query);
}

apparte pagina's is niet zo moeilijk:

$pagina=$_GET['pagina']
$query="SELECT * FROM `database` where `pagina`='$pagina'";

je kan dan door in de addresbalk achter de url het volgende te zetten:
PHP:
?pagina=dezepagina

een bepaalde pagina oproepen. Dan moet je dat natuurlijk wel in de database hebben staan.

ik hoop dat ik je hiermee een beetje geholpen hebt,

succes :thumb:

Echt bedankt maar is het gedeelte wat is in m'n database moet zetten en waar ik me databse info moet invullen
ja anders kan hij toch niks opslaan
 
heb je op dit moment al een database voor je blog, of heb je die nog niet?

als je al wel een database hebt, kan je die laten zien, en dan kan ik die eventueel aanpassen, als je die nog niet hebt kan ik je helpen met het maken van een.
 
heb je op dit moment al een database voor je blog, of heb je die nog niet?

als je al wel een database hebt, kan je die laten zien, en dan kan ik die eventueel aanpassen, als je die nog niet hebt kan ik je helpen met het maken van een.

ik gebruik een MYSQL Database

met de naam : mmu0102_
en gebruiksnaam :timo
en wachtwoord : *********

gaat je lekker niet aan in gebruik voor de blog de tabel:
blog
 
en als ik dus index.php wil kijken o heb ff naar default.php gedaan zie ik deze melding

PHP:
if($_SESSION['rand']==$_POST['rand']){ $_SESSION['rand']=rand(101,200); $header=$_POST['header']; $inhoud=$_POST['inhoud']; $time=$_POST['time']; $query="INSERT INTO 'database' (`ID`,`header`,`inhoud`,`time`) VALUES('','$header','$inhoud','$time');"; $res=mysql_query($query); }

heb al opgelost je had geen

<?PHP

?> gedaan
 
Laatst bewerkt:
en als ik dus index.php wil kijken o heb ff naar default.php gedaan zie ik deze melding

PHP:
if($_SESSION['rand']==$_POST['rand']){ $_SESSION['rand']=rand(101,200); $header=$_POST['header']; $inhoud=$_POST['inhoud']; $time=$_POST['time']; $query="INSERT INTO 'database' (`ID`,`header`,`inhoud`,`time`) VALUES('','$header','$inhoud','$time');"; $res=mysql_query($query); }

is dit een foutmelding die op de pagina verschijnt?

djesy zei:
sorry ben net begonnen met MYSQL dus weet niet wat structuur is

gebruik je phpmyadmin? dat zou de uitleg namelijk een stuk makkelijker maken.
 
als je op de hoofdpagina bent, selecteer de database die je gebruikt. Dan zie je waarschijnlijk aan de linkerkant je tabel blog staan (als je deze hebt). Wanneer je hierop klikt, kan je in de bovenkant van de pagina op de knop structuur klikken. Wat zie je daar staan?
 
als je op de hoofdpagina bent, selecteer de database die je gebruikt. Dan zie je waarschijnlijk aan de linkerkant je tabel blog staan (als je deze hebt). Wanneer je hierop klikt, kan je in de bovenkant van de pagina op de knop structuur klikken. Wat zie je daar staan?

bedeol u dit:
screen.bmp
 
ja, ik denk trouwens dat het handig is wat beter in te richten. Het is ten eerste altijd een goede gewoonte om met een ID met auto_increment en primary key te werken. Zo geef je alle inhoud van je database een unike waarde, en kan je het altijd terugvinden.

Mijn voorstel is, dat je je huidige database verwijdert en deze invoegd (ga naar sql, en zet de code daarin):

PHP:
CREATE TABLE `blog` (
`ID` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`title` VARCHAR( 100 ) NOT NULL ,
`text` TEXT NOT NULL ,
`time` VARCHAR( 32 ) NOT NULL 
)


Je moet dan nog wel wat aan de code veranderen:

voegtoe.php:
PHP:
<?php 
$time=time(); 
$_SESSION['rand']=rand(0,100); 
?> 
<form method='post' action='index.php'> 
<input type='hidden' name='time' value='<?php echo "$time"; ?>'> 
<input type='hidden' name='rand' value='<?php echo $_SESSION['rand'];?>'> 
<input type='text' name='title'> 
<textarea name='text'></textarea> 
<input type='submit' value='submit'> 
</form> 
?>

en bovenaan index.php (of default.php):
PHP:
if($_SESSION['rand']==$_POST['rand']){ 
$_SESSION['rand']=rand(101,200); 
$title=$_POST['title']; 
$text=$_POST['text']; 
$time=$_POST['time']; 
$query="INSERT INTO 'database' (`ID`,`title`,`text`,`time`) VALUES('','$header','$inhoud','$time');"; 
$res=mysql_query($query); 
}

(met dank aan ErikBooy007 voor de 2 $-tekens :thumb:)
 
ja, ik denk trouwens dat het handig is wat beter in te richten. Het is ten eerste altijd een goede gewoonte om met een ID met auto_increment en primary key te werken. Zo geef je alle inhoud van je database een unike waarde, en kan je het altijd terugvinden.

Mijn voorstel is, dat je je huidige database verwijdert en deze invoegd (ga naar sql, en zet de code daarin):

PHP:
CREATE TABLE `blog` (
`ID` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`title` VARCHAR( 100 ) NOT NULL ,
`text` TEXT NOT NULL ,
`time` VARCHAR( 32 ) NOT NULL 
)


Je moet dan nog wel wat aan de code veranderen:

voegtoe.php:
PHP:
<?php 
$time=time(); 
$_SESSION['rand']=rand(0,100); 
?> 
<form method='post' action='index.php'> 
<input type='hidden' name='time' value='<?php echo "$time"; ?>'> 
<input type='hidden' name='rand' value='<?php echo $_SESSION['rand'];?>'> 
<input type='text' name='title'> 
<textarea name='text'></textarea> 
<input type='submit' value='submit'> 
</form> 
?>

en bovenaan index.php (of default.php):
PHP:
if($_SESSION['rand']==$_POST['rand']){ 
$_SESSION['rand']=rand(101,200); 
$title=$_POST['title']; 
$text=$_POST['text']; 
$time=$_POST['time']; 
$query="INSERT INTO 'database' (`ID`,`title`,`text`,`time`) VALUES('','$header','$inhoud','$time');"; 
$res=mysql_query($query); 
}

(met dank aan ErikBooy007 voor de 2 $-tekens :thumb:)

nog niet hij wil wel netjes verzenden en krijg netjes default.php maar hij slaat niet op maar hij kan ook geen contact maken met de databse
 
verander default.php eens hierin. Wat komt eruit? ($dbh is de uitkomst van mysql_connect)
PHP:
if($_SESSION['rand']==$_POST['rand']){  
$_SESSION['rand']=rand(101,200);  
$title=$_POST['title'];  
$text=$_POST['text'];  
$time=$_POST['time'];  
$query="INSERT INTO 'database' (`ID`,`title`,`text`,`time`) VALUES('','$header','$inhoud','$time');";  
$res=mysql_query($query);  
$fout=mysql_errno($dbh);
    if ($fout != 0) {
    $fout=mysql_error($dbh);
    echo "<font color=\#FF0000\"><center>An error occured. This is the error message:$fout. <br> This was the query: $query</center></font>";
    mysql_close($dbh);
    echo "</body></html>";
    exit;
}
}
 
verander default.php eens hierin. Wat komt eruit? ($dbh is de uitkomst van mysql_connect)
PHP:
if($_SESSION['rand']==$_POST['rand']){  
$_SESSION['rand']=rand(101,200);  
$title=$_POST['title'];  
$text=$_POST['text'];  
$time=$_POST['time'];  
$query="INSERT INTO 'database' (`ID`,`title`,`text`,`time`) VALUES('','$header','$inhoud','$time');";  
$res=mysql_query($query);  
$fout=mysql_errno($dbh);
    if ($fout != 0) {
    $fout=mysql_error($dbh);
    echo "<font color=\#FF0000\"><center>An error occured. This is the error message:$fout. <br> This was the query: $query</center></font>";
    mysql_close($dbh);
    echo "</body></html>";
    exit;
}
}

volgens mij snap je mij niet ik moet iets hebben om in de datbase te komen iets wat hier op lijkt

PHP:
<?php

                // database configuratie
                $dbname = "mmu0102_"; // database naam
                $user = "timo"; // gebruikersnaam van mysql
                $pass = "*********"; // wachtwoord van mysql
                $host = "localhost"; // host naar mysql

?>
 
@Haroim:

Gebruik alleen nooit een timestamp voor zulke dingen. Zijn meerdere redenen voor:

- Je kunt een timestamp niet lezen.
- Je moet 't altijd omzetten.
- MySQL kent er geen (handige) functies voor.

Gebruik in plaats daarvan een DATETIME-veld in MySQL.

INSERT INTO blog (datum) VALUES (NOW())

Voordelen:

- Je kunt alle datumberekeningen (e.d.) in je query doen met behulp van de date-functies van MySQL.
- Aanzienlijke snelheidswinst.
- Leesbare datum, maar wel in YYYY-MM-DD, maar dat is met DATE_FORMAT weer om te zetten.


Verder is het niet nodig om backticks te gebruiken. Sterker nog; het is eerder fout dan goed. Als je ze per ongeluk weglaat krijg je een hoop ellende, buiten dat heeft het als enige 'functie' dat je beschermde termen als veldnamen kunt gebruiken. Dat is per definitie fout, ze zijn niet voor niets beschermd.

Meer informatie:
http://wiki.phpfreakz.nl/Backticks


Daarnaast is het ongebruikelijk om het ID-veld in je query te definiëren, dat hoeft niet. Gewoon INSERT INTO ([veldnamen] VALUES ([waardes]).


Verder worden variabelen doorgaans buiten quotes gezet, al is het alleen maar om de leesbaarheid te bevorderen.

PHP:
$sQuery = "INSERT INTO a (x, y, z) VALUES ('".$x."', '".$y."', '".$z."'")";

Zie voor meer informatie:
http://wiki.phpfreakz.nl/Variabelen_buiten_quotes

Daarnaast moet je áltijd je input beveiligen, ook al komt de informatie uit een formulier die op een beschermde pagina staat.
Je wilt voorkomen dat mensen gevaarlijke informatie aanleveren. Slecht-beveiligde query's kunnen je database verwoesten, zie dat dus te voorkomen.
http://en.wikipedia.org/wiki/SQL_injection

In PHP voorkom je zulke ellende door 'mysql_real_escape_string()':

PHP:
$sQuery = "INSERT INTO table (field) VALUES ('".mysql_real_escape_string($_POST['field'])."')";


Verder nog even over de database: gebruik bij voorkeur geen hoofdletters bij veldnamen. MySQL zet ze terug naar kleine letters; betekent meer rekenkracht/langere duur van query's.


Nog een punt om de snelheid te bevorderen: gebruik gewoon $_POST['x'] en $_POST['y'], zet ze niet apart in variabelen. Er is niets mis met het gebruiken van de waarden uit de $_POST-array. Het aanmaken van nieuwe variabelen kost alleen maar meer tijd.



Dat waren even wat punten die me zo gauw opvielen, succes!
 
Laatst bewerkt:
@Haroim:

Gebruik alleen nooit een timestamp voor zulke dingen. Zijn meerdere redenen voor:

- Je kunt een timestamp niet lezen.
- Je moet 't altijd omzetten.
- MySQL kent er geen (handige) functies voor.

Gebruik in plaats daarvan een DATETIME-veld in MySQL.

INSERT INTO blog (datum) VALUES (NOW())

Voordelen:

- Je kunt alle datumberekeningen (e.d.) in je query doen met behulp van de date-functies van MySQL.
- Aanzienlijke snelheidswinst.
- Leesbare datum, maar wel in YYYY-MM-DD, maar dat is met DATE_FORMAT weer om te zetten.


Verder is het niet nodig om backticks te gebruiken. Sterker nog; het is eerder fout dan goed. Als je ze per ongeluk weglaat krijg je een hoop ellende, buiten dat heeft het als enige 'functie' dat je beschermde termen als veldnamen kunt gebruiken. Dat is per definitie fout, ze zijn niet voor niets beschermd.

Meer informatie:
http://wiki.phpfreakz.nl/Backticks


Daarnaast is het ongebruikelijk om het ID-veld in je query te definiëren, dat hoeft niet. Gewoon INSERT INTO ([veldnamen] VALUES ([waardes]).


Verder worden variabelen doorgaans buiten quotes gezet, al is het alleen maar om de leesbaarheid te bevorderen.

PHP:
$sQuery = "INSERT INTO a (x, y, z) VALUES ('".$x."', '".$y."', '".$z."'")";

Zie voor meer informatie:
http://wiki.phpfreakz.nl/Variabelen_buiten_quotes

Daarnaast moet je áltijd je input beveiligen, ook al komt de informatie uit een formulier die op een beschermde pagina staat.
Je wilt voorkomen dat mensen gevaarlijke informatie aanleveren. Slecht-beveiligde query's kunnen je database verwoesten, zie dat dus te voorkomen.
http://en.wikipedia.org/wiki/SQL_injection

In PHP voorkom je zulke ellende door 'mysql_real_escape_string()':

PHP:
$sQuery = "INSERT INTO table (field) VALUES ('".mysql_real_escape_string($_POST['field'])."')";


Verder nog even over de database: gebruik bij voorkeur geen hoofdletters bij veldnamen. MySQL zet ze terug naar kleine letters; betekent meer rekenkracht/langere duur van query's.


Nog een punt om de snelheid te bevorderen: gebruik gewoon $_POST['x'] en $_POST['y'], zet ze niet apart in variabelen. Er is niets mis met het gebruiken van de waarden uit de $_POST-array. Het aanmaken van nieuwe variabelen kost alleen maar meer tijd.



Dat waren even wat punten die me zo gauw opvielen, succes!

srry daar snap ik al helemaal niks van :confused: maar als ik zo naar die PHP codes kijk ho willen ze contact met me databe maken dan wand die moet ik toch erens invullen ik snap het niet meer ( ja srry ben pas 14 stap net in de wereld van PHP en MYSQL
 
Die post was voor Haroim.


Wat jij vooral moet doen is beginnen bij het begin. PHP en MySQL hebben in beginsel niets met elkaar te maken. Het is raadzaam eerst de basis van PHP te leren. Dan kun je overgaan tot het leren van het ontwerpen van databases, om vervolgens die kennis te verenigen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan