PHP en MYSQL BLOG

Status
Niet open voor verdere reacties.
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.

ja maar meer en deel van PHP ken ik ik moet nu ff een klein stapje over gaan naar MYSQL wand ik moet wat met me databse doen anders werkt het niet
 
@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

van het gebruiken van het DATETIME-veld ben ik persoonlijk niet zo'n voorstander.

In de praktijk heb ik nog nooit gemerkt dat me dit tijderlies opleverde.

Daarnaast is het regelen van de tijd via php veel makkelijker, niet alleen omdat je zonder het telkens opnieuw opvragen via mysql (het opvragen via mysql kost volgens mij ook wel veel tijd), maar ook om dat het via timstamp en php allemaal veel eenvoudiger is.

Ten derde heb ik nog nooit last gehad van beperkingen, dus volgens mij is met timestamp en php genoeg mogelijk (zeker voor een blog).



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

daar heb je gelijk in: het hoeft niet in een query, maar ik vind het persoonlijk wel erg netjes en overzichtelijk.

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
dat wist ik niet. Ik heb het artikel even vluchtig doorgelezen, maar ik moet eerlijk zeggen dat ik nog nooit problemen heb gehad doordat ik de ` neerzette. Ik heb wel problemen gehad toen ik dat vergeten was.

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.
Je hebt gelijk bij normale input. Maar omdat dit over een simpele blog gaat, waar alleen de schrijver bij zou moeten kunnen, lijkt het me een beetje overdreven.

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.
hmm.. interessant. Hoe pas je deze $_POST-array toe?

Dat waren even wat punten die me zo gauw opvielen, succes!
dit is mijn reactie, hoop op je antwoorden. Alvast bedankt.

maar om nu terug te gaan naar de vraag:

bedoel je dit?
PHP:
               $dbname = "mmu0102_"; // database naam 
                $user = "timo"; // gebruikersnaam van mysql 
                $pass = "*********"; // wachtwoord van mysql 
                $host = "localhost"; // host naar mysql 
$dbh=mysql_connect("$host","$user","$pass");
mysql_select_db( "$dbname" ) or trigger_error( mysql_error() );
 
van het gebruiken van het DATETIME-veld ben ik persoonlijk niet zo'n voorstander.

In de praktijk heb ik nog nooit gemerkt dat me dit tijderlies opleverde.

Daarnaast is het regelen van de tijd via php veel makkelijker, niet alleen omdat je zonder het telkens opnieuw opvragen via mysql (het opvragen via mysql kost volgens mij ook wel veel tijd), maar ook om dat het via timstamp en php allemaal veel eenvoudiger is.

Ten derde heb ik nog nooit last gehad van beperkingen, dus volgens mij is met timestamp en php genoeg mogelijk (zeker voor een blog).

Toch zul je bij (vooral) grotere projecten merken dat het enorm veel scheelt. Vooral de leesbaarheid van DATETIME is vele malen groter dan de leesbaarheid van een timestamp. Buiten dat is de timestamp maar beperkt geldig (zoals je ongetwijfeld weet), dus dat komt de bruikbaarheid niet ten goede. Een van de belangrijkste punten is de consistentie waarmee je werkt.
Hoe sla je geboortedata op in de database? Als DATE neem ik aan? Dan kun je mooi gebruik maken van de AGE()-functie van MySQL bijvoorbeeld. Als je daarvoor een DATE-veld gebruikt, waarom dan geen DATETIME voor iets als een blog?

Omdat m'n vorige argumenten blijkbaar niet overtuigend genoeg waren; hoe ga je dat doen als je blogs uit de maand mei wil tonen?

SELECT blog FROM blogs WHERE timestamp > 134512511 AND timestamp < 1413451234?

Of is het handiger de BETWEEN-operator van MySQL te gebruiken op een DATE-veld?

Hier; alle DATE-functies:
http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html

Zit ook wat timestamprotzooi bij, maar die heb je als het goed is in de toekomst niet meer nodig. ;)


Verder heb ik het niet over het gebruiken van de MySQL-date in PHP, ik heb het over het gebruiken van een timestamp in MySQL. In principe heb je een timestamp (bijna) nooit nodig. Voor de huidige tijd hoef je inderdaad geen MySQL te gebruiken, dan kun je gewoon de date()-functie van MySQL gebruiken.

daar heb je gelijk in: het hoeft niet in een query, maar ik vind het persoonlijk wel erg netjes en overzichtelijk.

Als het niet hoeft, moet je het niet doen. In tegenstelling tot wat je nu denkt, bevordert het de overzichtelijkheid niet. Als je een tabel hebt met 15 velden, en je wilt er 3 voor invullen, noem je dan ook de andere 12, gewoon omdat het kan?
Gewoon niet doen, is niets netjes aan. Zie alle handleidingen van SQL. Buiten dat zou je in andere databases problemen kunnen krijgen met zulke methodes. Leer ze dus zo snel mogelijk af.

dat wist ik niet. Ik heb het artikel even vluchtig doorgelezen, maar ik moet eerlijk zeggen dat ik nog nooit problemen heb gehad doordat ik de ` neerzette. Ik heb wel problemen gehad toen ik dat vergeten was.

Het is ook geen probleem als je ze wél neerzet, maar vooral als je ze níet neerzet. Dat is ook gelijk het probleem. Lees verder het artikel nog eens goed door, en zie van je keus af. ;)

Je hebt gelijk bij normale input. Maar omdat dit over een simpele blog gaat, waar alleen de schrijver bij zou moeten kunnen, lijkt het me een beetje overdreven.

Ooit gehoord van 'Assumption is the Mother of All ****-ups'? Neem nooit aan dat de user invoert wat jij wilt dat hij invoert. Als je mysql_real_escape_string() gebruikt kan er nooit iets fout gaan. Het kost geen extra moeite, maar levert wel een grote winst op. Wat als je het even door iemand anders laat invullen? Of het gaat implementeren in een andere applicatie? Misschien ben je dan wel vergeten dat je je input niet beveiligt. Iemand voert een SQL-statement in bij 'titel', en hatseflats, je hele database foetsie.

hmm.. interessant. Hoe pas je deze $_POST-array toe?

Gewoon zoals je het nu ook doet. Zoals je weet worden alle waarden uit een formulier dat de POST-methode gebruikt gegooid in de 'superglobal' POST. Deze spreken we aan met $_POST (net als alle andere superglobals, zoals $_GET, $_SERVER, etc.).
Het is een zogenaamde 'associative array'. Een array waarbij de 'keys' niet 0, 1, 2 of 3 zijn, maar een naam hebben die verwijst naar de inhoud.
Als je een formulier hebt met de velden 'name' en 'surname', zijn deze aan te roepen met $_POST['name'] en $_POST['surname'].
Zo verwerkt PHP de formulieren. Wat jij doet is dit:

$name = $_POST['name'];
$surname = $_POST['surname']

Echter; het is veel consistenter, sneller en overzichtelijker om gewoon $_POST['name'] te gebruiken. Veronderstel dat ik met $_POST['name'] een aantal acties wil ondernemen, doe ik dat gewoon zo:

PHP:
if($_POST['name'] == 'x' && strlen($_POST['name'] == 15){

echo 'blabla';

}

Ik gebruik gewoon de $_POST['name'], en niet een overbodige variabele '$name'.
 
ey dit word echt helmaal te gek nu snap ik er niks meer van.

ik moet alleen weten waarom hij niks in de DB zet En eruit Haalt.

meer onzin hoef ik niet te weten

srry als dit boos of raar klinkt.

beetje boos op me beroer
 
@djesy
ik had het al onderaan de vorige post gezet, maar ik zet het nu even bovenaan:

bedoel je dit?
PHP:
          $dbname = "mmu0102_"; // database naam  
                $user = "timo"; // gebruikersnaam van mysql  
                $pass = "*********"; // wachtwoord van mysql  
                $host = "localhost"; // host naar mysql  
$dbh=mysql_connect("$host","$user","$pass"); 
mysql_select_db( "$dbname" ) or trigger_error( mysql_error() );

@SvU

Toch zul je bij (vooral) grotere projecten merken dat het enorm veel scheelt. Vooral de leesbaarheid van DATETIME is vele malen groter dan de leesbaarheid van een timestamp. Buiten dat is de timestamp maar beperkt geldig (zoals je ongetwijfeld weet), dus dat komt de bruikbaarheid niet ten goede.
bedoel je de 32-bit overflow? vergeef me als ik dit een beetje flauw argument vind. Het hele linux systeem werkt hierop. Ik neem aan dat in 2038 we allemaal naar een 64 bit systeem zijn overgestapt, en dat php zich daar ook op heeft aangepast zonder dataverlies. Correct me if i am wrong.

en van de belangrijkste punten is de consistentie waarmee je werkt.
Hoe sla je geboortedata op in de database? Als DATE neem ik aan? Dan kun je mooi gebruik maken van de AGE()-functie van MySQL bijvoorbeeld. Als je daarvoor een DATE-veld gebruikt, waarom dan geen DATETIME voor iets als een blog?

Omdat m'n vorige argumenten blijkbaar niet overtuigend genoeg waren; hoe ga je dat doen als je blogs uit de maand mei wil tonen?

SELECT blog FROM blogs WHERE timestamp > 134512511 AND timestamp < 1413451234?

Of is het handiger de BETWEEN-operator van MySQL te gebruiken op een DATE-veld?
ik het over dat probleem nog nooit nagedacht, omdat ik dat nog niet ben tegen gekomen. Maar als ik er even over nadenk dan zou ik het met de mktime functie van php doen. Dat werkt lijkt mij even makkelijk.

Hier; alle DATE-functies:
http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html

Zit ook wat timestamprotzooi bij, maar die heb je als het goed is in de toekomst niet meer nodig. ;)


Verder heb ik het niet over het gebruiken van de MySQL-date in PHP, ik heb het over het gebruiken van een timestamp in MySQL. In principe heb je een timestamp (bijna) nooit nodig. Voor de huidige tijd hoef je inderdaad geen MySQL te gebruiken, dan kun je gewoon de date()-functie van MySQL gebruiken.



Als het niet hoeft, moet je het niet doen. In tegenstelling tot wat je nu denkt, bevordert het de overzichtelijkheid niet. Als je een tabel hebt met 15 velden, en je wilt er 3 voor invullen, noem je dan ook de andere 12, gewoon omdat het kan?
Gewoon niet doen, is niets netjes aan. Zie alle handleidingen van SQL. Buiten dat zou je in andere databases problemen kunnen krijgen met zulke methodes. Leer ze dus zo snel mogelijk af.
ik werk meestal met kleine query's, waar ik alle velden gebruik (behalve dan die ID die automatisch wordt gedaan), dus om dan zomaar 1 weg te laten vind ik zelf altijd een beetje onoverzichtelijk. Maar dat is natuurlijk ieders eigen voorkeur.
Het is ook geen probleem als je ze wél neerzet, maar vooral als je ze níet neerzet. Dat is ook gelijk het probleem. Lees verder het artikel nog eens goed door, en zie van je keus af. ;)
ik heb het artikel nu helemaal gelezen, en ik vind het een beetje vaag. Wat bedoelen ze met 'Door ze in het totaal niet te gebruiken'. Bedoelen ze dat je de `-tekens niet zou moeten gebruiken (hoe zit het dan met de gereserveerde woorden) of dat je de gereserveerde woorden moet vermijden?
Ooit gehoord van 'Assumption is the Mother of All ****-ups'? Neem nooit aan dat de user invoert wat jij wilt dat hij invoert. Als je mysql_real_escape_string() gebruikt kan er nooit iets fout gaan. Het kost geen extra moeite, maar levert wel een grote winst op. Wat als je het even door iemand anders laat invullen? Of het gaat implementeren in een andere applicatie? Misschien ben je dan wel vergeten dat je je input niet beveiligt. Iemand voert een SQL-statement in bij 'titel', en hatseflats, je hele database foetsie.
nooit gehoord van 'Assumption is the Mother of All ****-ups', maar volgens mij ben je met mysql_real_escape_string() nog niet helemaal klaar. maargoed, ik ben geen expert hierin dus je zal wel gelijk hebben :D
Gewoon zoals je het nu ook doet. Zoals je weet worden alle waarden uit een formulier dat de POST-methode gebruikt gegooid in de 'superglobal' POST. Deze spreken we aan met $_POST (net als alle andere superglobals, zoals $_GET, $_SERVER, etc.).
Het is een zogenaamde 'associative array'. Een array waarbij de 'keys' niet 0, 1, 2 of 3 zijn, maar een naam hebben die verwijst naar de inhoud.
Als je een formulier hebt met de velden 'name' en 'surname', zijn deze aan te roepen met $_POST['name'] en $_POST['surname'].
Zo verwerkt PHP de formulieren. Wat jij doet is dit:

$name = $_POST['name'];
$surname = $_POST['surname']

Echter; het is veel consistenter, sneller en overzichtelijker om gewoon $_POST['name'] te gebruiken. Veronderstel dat ik met $_POST['name'] een aantal acties wil ondernemen, doe ik dat gewoon zo:

PHP:
if($_POST['name'] == 'x' && strlen($_POST['name'] == 15){

echo 'blabla';

}

Ik gebruik gewoon de $_POST['name'], en niet een overbodige variabele '$name'.

er zijn meedere reden waarom ik het eerst omzet in $name. Ten eerste omdat als je het veel gebruikt op een pagina scheelt het toch wel wat tijd als je $name kan invullen in plaats van telkens $_POST['name'] (veel rare karakerts, dus redelijk wat typetijd).

Ten tweede geeft mysql veel ploblemen met het gebruik van $_POST['name'] samen met echo. En ik snap niet wat je precies hier mee bedoeld of wil mee berijken:
PHP:
if($_POST['name'] == 'x' && strlen($_POST['name'] == 15){

echo 'blabla';

}

edit: er kunnen wat foutjes ingelsopen zijn, het waren een paar lange posts om op te reageren :P
 
Laatst bewerkt:
PHP:
          $dbname = "mmu0102_"; // database naam  
                $user = "timo"; // gebruikersnaam van mysql  
                $pass = "*********"; // wachtwoord van mysql  
                $host = "localhost"; // host naar mysql  
$dbh=mysql_connect("$host","$user","$pass"); 
mysql_select_db( "$dbname" ) or trigger_error( mysql_error() );

en

PHP:
if($_POST['name'] == 'x' && strlen($_POST['name'] == 15){

echo 'blabla';

}

moet ik gebruiken maar hoe
 
als ik even snel kijk zou ik het volgende doen, het zou zo moeten werken, hoewel het vast beter kan.

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:
<?php
         $dbname = "mmu0102_"; // database naam   
                $user = "timo"; // gebruikersnaam van mysql   
                $pass = "*********"; // wachtwoord van mysql   
                $host = "localhost"; // host naar mysql   
$dbh=mysql_connect("$host","$user","$pass");  
mysql_select_db( "$dbname" ) or trigger_error( mysql_error() );  


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);  
}  
?>
 
als ik even snel kijk zou ik het volgende doen, het zou zo moeten werken, hoewel het vast beter kan.

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:
<?php
         $dbname = "mmu0102_"; // database naam   
                $user = "timo"; // gebruikersnaam van mysql   
                $pass = "*********"; // wachtwoord van mysql   
                $host = "localhost"; // host naar mysql   
$dbh=mysql_connect("$host","$user","$pass");  
mysql_select_db( "$dbname" ) or trigger_error( mysql_error() );  


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);  
}  
?>


of ik heb het fout of julie hebben iets niet goed.

je moet toch bij voegtoe ook dat gedoe met w8woord en naam enc doen wand nou vertuurt hij het toch niet
 
nee, dat hoeft niet, want dat wachtwoord is alleen nodig als je verbinding maakt met de mysql database. Wat je in feite in voegtoe.php doet is alleen een html formulier invullen. In default.php zet je de info in de database, en dan heb je de pass etc. nodig.
 
nee, dat hoeft niet, want dat wachtwoord is alleen nodig als je verbinding maakt met de mysql database. Wat je in feite in voegtoe.php doet is alleen een html formulier invullen. In default.php zet je de info in de database, en dan heb je de pass etc. nodig.

maar als ik in me DB zie ik ook niks staan
 
ik heb er een plaar kleine foutjes ontdekt. de volgende code werkt nu bij mij:

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

default.php
PHP:
<?php 
session_start();
         $dbname = "helpmij"; // database naam    
                $user = "root"; // gebruikersnaam van mysql    
                $pass = ""; // wachtwoord van mysql    
                $host = "localhost"; // host naar mysql    
$dbh=mysql_connect("$host","$user","$pass");   
mysql_select_db( "$dbname" ) or trigger_error( mysql_error() );   

$title=$_POST['title'];   
$text=$_POST['text'];   
$time=$_POST['time'];
$rand=$_POST['rand'];

if($_SESSION['rand']==$_POST['rand']){   
$_SESSION['rand']=rand(101,200);   
   
$query="INSERT INTO `blog` (`ID`,`title`,`text`,`time`) VALUES('','$title','$text','$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; 
} 
}   
?>
 
ik dacht dat je het op twee verschillende pagina's wou :s

maar goed, als je het zo wilt, kan het beter op deze manier:

PHP:
<?php 
session_start();
         $dbname = "helpmij"; // database naam    
                $user = "root"; // gebruikersnaam van mysql    
                $pass = ""; // wachtwoord van mysql    
                $host = "localhost"; // host naar mysql    
$dbh=mysql_connect("$host","$user","$pass");   
mysql_select_db( "$dbname" ) or trigger_error( mysql_error() );   

$time=time();  

if($_SESSION['rand']==$_POST['rand']){   
$_SESSION['rand']=rand(101,200);   
$title=$_POST['title'];   
$text=$_POST['text'];   
$time=$_POST['time'];

$query="INSERT INTO `blog` (`ID`,`title`,`text`,`time`) VALUES('','$title','$text','$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; 
} 
echo "Post gemaakt.";
}   

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

als je deze code gebruikt, lukt het dan wel, om het in de database te krijgen?
 
ik dacht dat je het op twee verschillende pagina's wou :s

maar goed, als je het zo wilt, kan het beter op deze manier:

PHP:
<?php 
session_start();
         $dbname = "helpmij"; // database naam    
                $user = "root"; // gebruikersnaam van mysql    
                $pass = ""; // wachtwoord van mysql    
                $host = "localhost"; // host naar mysql    
$dbh=mysql_connect("$host","$user","$pass");   
mysql_select_db( "$dbname" ) or trigger_error( mysql_error() );   

$time=time();  

if($_SESSION['rand']==$_POST['rand']){   
$_SESSION['rand']=rand(101,200);   
$title=$_POST['title'];   
$text=$_POST['text'];   
$time=$_POST['time'];

$query="INSERT INTO `blog` (`ID`,`title`,`text`,`time`) VALUES('','$title','$text','$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; 
} 
echo "Post gemaakt.";
}   

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

als je deze code gebruikt, lukt het dan wel, om het in de database te krijgen?

is dit alleen voegtoe.php
 
het laten zien is weer een andere code. Maar dat laat ik mogen wel zien. Het is nu bedtijd voor 14 jarigen (en 18 jarigen) ;)

nog even een klein dingetje: wat je ook kan doen is de action in voegtoe.php veranderen naar action='?page=default.php', dan hou je de pagina stijl.

tot morgen
 
eerst nog even een foutje uit default.php halen:
PHP:
<?php 
session_start();

         $dbname = "mmu0102_"; // database naam    
                $user = "timo"; // gebruikersnaam van mysql    
                $pass = "*********"; // wachtwoord van mysql    
                $host = "localhost"; // host naar mysql    
$dbh=mysql_connect("$host","$user","$pass");   
mysql_select_db( "$dbname" ) or trigger_error( mysql_error() ); 

$time=time();  

if($_SESSION['rand']==$_POST['rand'] AND $_POST['rand']!=''){   
$_SESSION['rand']=rand(101,200);   
$title=$_POST['title'];   
$text=$_POST['text'];   
$time=$_POST['time'];

$query="INSERT INTO `blog` (`ID`,`title`,`text`,`time`) VALUES('','$title','$text','$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; 
} 
echo "Post gemaakt.";
}

Ik zal nu even een uitgebreide uitleg geven van hoe je een code maakt die gegevens uit de database op een pagina weergeeft, zodat je het daarna zelf ook zou kunnen. Als je dit overbodig vind, ga dan direct naar onderen. Daar heb ik het eindresultaat neergezet.

Je wilt een code die de gegevens uit de database haalt, en ze op je pagina laat zien. Ik maar ik heven een nieuw bestand voor aan: show.php. Om te beginnen moeten we op deze pagina een connectie te maken met de database, omdat we daar gegevens uit gaan ophalen:

PHP:
<?php 
         $dbname = "mmu0102_"; // database naam    
                $user = "timo"; // gebruikersnaam van mysql    
                $pass = "*********"; // wachtwoord van mysql    
                $host = "localhost"; // host naar mysql    
$dbh=mysql_connect("$host","$user","$pass");   
mysql_select_db( "$dbname" ) or trigger_error( mysql_error() );

je ziet dat ik hier geen session_start() gebruik, omdat ik niet vanplan ben om sessions op deze pagina te gaan gebruiken. Als je dat wel wilt doen, voeg gewoon op een apparte regel session_start() toe. Zet session_start() zo hoog mogelijk (het liefst gelijk na de <?php).

nu moeten we de gegevens uit de database gaan halen. Daarvoor moeten we eerst een query opstellen. We willen dus uit de tabel blog alles selecteren. In mysql taal ziet dat er zo uit: SELECT * FROM `blog`;. Je kan hier als je nog iets specifieks wilt selecteren een where achter zetten, bijvoorbeeld: SELECT * FROM `blog` where `ID`='1';. Maar de eerste is voor nu nog even goed genoeg.

PHP:
$query="SELECT * FROM `blog`;";

We hebben nu wel een query, maar we moeten deze ook nog uitvoeren. in princiepe kan het met een lijn ($res=mysql_query($query); ), maar als je een fout in je query hebt staan is het altijd wel handig om deze te laten weergeven. Daarom gebruik ik daarvoor meestal de volgende code.

PHP:
$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; 
}

de eerste regel voert de opdracht uit, en zet alles in de variabele $res.
De tweede regel neemt als er een fout is deze over in de variabele $fout, en zolang er geen fout is, geeft die 0.
In de derde regel controleer de code of er een fout is (dus of $fout niet gelijk is aan 0)
in de vierde regeld kan je je eigen persoonelijke foutbericht weergeven. Meestal is het handig om het foutbericht te laten weergeven en de query. Maar je kan ook gewoon neerzetten dat er een fout is opgetreden, en dat ze jouw moeten waarschuwen.
De vijfde t/m de zevende regel sluit alles af, en stopt het script. Dit is niet perse nodig, maar wel veilig.

We hebben nu dus alle opgevraagde gegevens uit de database in de variabele $res staan. Maar helaas kunnen we er nog niet zo veel mee in deze vorm. we zullen het eerst om moeten zetten in leesbare gegevens. Dat kan op twee manieren:

PHP:
$row=mysql_fetch_row($res);
of
PHP:
$row=mysql_fetch_assoc($res);

de mysql_fetch_row() geeft de resultaten weer in een array, waar je op de volgende manier bij kan:
PHP:
$ID=$row[0];
$title=$row[1];
etc.
Deze is dus afhankelijk van de volgorde in je database.

de mysql_fetch_assoc() geeft de resultaten ook in een array, maar op de volgende manier:
PHP:
$ID=$row['ID'];
$title=$row['title'];
etc.
Deze is dus hafhankelijk van de naam van de rij in je database.

de keuze is dus aan jouw, maar in dit geval zal ik de mysql_fetch_assoc() gebruiken. De code tot nu toe ziet er dus zo uit:

PHP:
<?php 
$dbname = "helpmij"; // database naam      
                $user = "root"; // gebruikersnaam van mysql      
                $pass = ""; // wachtwoord van mysql      
                $host = "localhost"; // host naar mysql      
$dbh=mysql_connect("$host","$user","$pass");     
mysql_select_db( "$dbname" ) or trigger_error( mysql_error() );

$query="SELECT * FROM `blog`;"; 
$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;  
}  

$row=mysql_fetch_assoc($res);
$ID=$row['ID']; 
$title=$row['title']; 
$text=$row['text'];
$time=$row['time'];

de gegevens staan nu onder elkaar in een array, maar we willen ze een voor een eruithalen. Ook dit kan weer op verschillende manieren. Ik zal hier met een for loop werken. Een forloop ziet er zo uit:

PHP:
for($teller=0;$teller<$aantal_loops;$teller++){

}

in ons geval willen we dat het aantal loops gelijk is aan hoeveel blog posts we moeten weergeven, en dus hoeveel rijen er in onze database staan:

PHP:
$aantal_loops=mysql_num_rows($res);

we moeten nu alleen nog even de tijd in een leesbaar formaat omzetten (voor meer informatie hierover zie http://nl.php.net/manual/en/function.date.php):

$leesbare_tijd=date(j-m-y h:i:s, $time);

hier is hoe de code er nu uit ziet:

PHP:
<?php 
$dbname = "helpmij"; // database naam      
                $user = "root"; // gebruikersnaam van mysql      
                $pass = ""; // wachtwoord van mysql      
                $host = "localhost"; // host naar mysql      
$dbh=mysql_connect("$host","$user","$pass");     
mysql_select_db( "$dbname" ) or trigger_error( mysql_error() );

$query="SELECT * FROM `blog`;"; 
$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;  
}  
$aantal_loops=mysql_num_rows($res);
for($teller=0;$teller<$aantal_loops;$teller++){
$row=mysql_fetch_assoc($res);
$ID=$row['ID']; 
$title=$row['title']; 
$text=$row['text'];
$time=$row['time'];
$leesbare_tijd=date("j-m-y h:i:s", $time);
}



We hebben nu alle gegevens opgehaald, en we kunnen nu beginnen aan het leuke werk, het neerzetten van je blog!

het makkelijkste is het om een tabel voor iedere post te maken, maar denk eraan dat dit in de loop gezet moet worden.

PHP:
echo "<center><table border='1'>";
echo "<tr align='center'><td><h2>$title</h2>";
echo "<tr align='center'><td>This post was made on $leesbare_tijd";
echo "<tr align='center'><td>$text";
echo "</table></center>";

en dat was het dan zo'n beetje. Je kan dit natuurlijk nog heel erg gaan uitbreiden, met apparte pagina's voor elke blog, dat lezers comment's kunnen plaatsen, een mooie css stylesheet toevoegen etc.

Dit is dan nu de uiteindelijke code:

PHP:
<?php 
<?php 
         $dbname = "mmu0102_"; // database naam    
                $user = "timo"; // gebruikersnaam van mysql    
                $pass = "*********"; // wachtwoord van mysql    
                $host = "localhost"; // host naar mysql    
$dbh=mysql_connect("$host","$user","$pass");   
mysql_select_db( "$dbname" ) or trigger_error( mysql_error() );    

$query="SELECT * FROM `blog`;"; 
$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;  
}  
$aantal_loops=mysql_num_rows($res);
for($teller=0;$teller<$aantal_loops;$teller++){
$row=mysql_fetch_assoc($res);
$ID=$row['ID']; 
$title=$row['title']; 
$text=$row['text'];
$time=$row['time'];
$leesbare_tijd=date("j-m-y h:i:s", $time);
echo "<center><table border='1'>";
echo "<tr align='center'><td><h2>$title</h2>";
echo "<tr align='center'><td>This post was made on $leesbare_tijd";
echo "<tr align='center'><td>$text";
echo "</table></center>";
}
?>

hoeveel je kan kletsen over zo'n klein stukje code :D. In ieder geval veel plezier ermee.

succes :thumb:
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan