PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ned lachen *g*


Harley
15.11.2002, 19:37
Hallo Leute,

ich will versuchen mir php beizubringen (wieauchimmer), nun habe ich mal angefangen mit 2 dateien eine DB Abfrage zu machen und habe da auch einen Teil vom php manual verwendet.

Nun ist es ja so das jeder html code aus der php datei kommt, wie kann man das ganze so machen, daß man sich seine seiten erstelle in html und dann die inhalte per include zieht?
Also ich meine ähnlich wie beim Vb, da hat man ja den html code in den templates und der inhalt kommt dann durch die gesetzte variable. Also wenn das ned so einfach geht, dann werde ich mal weiter lernen, aber wenn doch dann gebt mir mal nen tip:)

hier mein peinliches script:
<?PHP
// Index.php



include('inc/config.php');

//Verbindung aufbauen, auswählen einer Datenbank
$dbcon = mysql_connect($hostname, $username, $password) or die('Keine Verbindung zum SQL-Server möglich!');
$dbconerfolg = "<b>Verbindung zum Datenbankserver erfolgreich</b><hr>";
mysql_select_db($database) or die('Datenbankverbindung fehlgeschalgen');

// ausführen einer SQL Anfrage
$query = ("SELECT actiontype, actiontime FROM cf_actions ORDER BY actiontype DESC LIMIT 10");
$result = mysql_query($query) or die("Anfrage fehlgeschlagen") or die("Datenausgabe fehlgeschlagen");
$ausgaberfolg = "<b><u>Ausgabe der Einträge</b></u><br><br>";

// HTML out
print "<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN>\n";
print "<html>\n";
print "<body bgcolor=#dfg454>\n";
print "$dbconerfolg<br><br>$ausgaberfolg";

print "<table bgcolor=#888888 border=#000000>\n";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
print "\t<tr>\n";
foreach ($line as $col_value)
print "\t\t<td>$col_value</td>\n";

}

print "\t</tr>\n";{

}

print "</table>\n";
print "</body>\n";
print "</html>\n";

mysql_free_result($result);
mysql_close($dbcon);

?>

martin
15.11.2002, 22:37
nur ganz kurz...ich stürz mich gleich ins wochende... :D


das script funktioniert nicht, oder?
zumindest dürfte es nicht, ich habs abernicht getestst.

wozu diese variable?


$dbconerfolg = "<b>Verbindung zum Datenbankserver erfolgreich</b><hr>";


soll das nicht direkt im browser angezeigt werden?


echo '<b>Verbindung zum Datenbankserver erfolgreich</b><hr>';


würde das direkt ausgeben.

-----------


$result = mysql_query($query) or die("Anfrage fehlgeschlagen") or die("Datenausgabe fehlgeschlagen");


ich hab das nie ausprobiert, aber ich bin mir ziemlich sicher, dass das so nicht funktionieren wird mit zwei mal "or die()";

du kannst dir auch den mysqlfehler direkt anzeigen lassen, in dem du or die(mysql_error()); schreibst.

mysql_error() = fehlermeldung
mysql_errno() = fehlernummer

das ist das, was vB bei fehlern auch anzeigt. zumindest wärend der "entwicklungspahse" ist es sinnvoll die mysqlfehler direkt anzuzeigen. später kannste da ja auch noch nen ausführlicheren fehlertext hinzusetzen.


der ganze html kram mit "print"...
kein mensch benutzt print für sowas, dafür gibt es "echo".
du musst aber nicht jede zeile einzeln ausgeben, es funktioniert auch mit mehreren gleichzeitig, also sowas wie:

echo '
zeile 1 laslpaasdjko aopsdkpasdpaosdasd
zeile 2 jsadfjüpasodjpüajsdpüasod
noch mehr zeilen
und noch mehr
';

php macht bei "echo" oder "print" nen unterschied zwischen doppelten " anführungszeichen und einfachen '.

bei doppelten anführungszeichen
beispiel:

echo "dies wird jetzt im browser angezeigt";

such der php interpreter darin nach variablen, oder allem anderen was irgendwie verarbeitet werden muss.
nur ist das ja einfach nur ein kleiner satz der ausgegeben werden muss, deshalb ist die mühe vergeblich, also zeitverschwendung.
dafür gibt es die einfachen anführungszeichen.

echo 'dies wird jetzt im browser angezeigt';

wenn der text aber ne variable anthalten würde, z.b.:

$var = 'boot';

echo "ich fahre gerne mit meinem $var";

müssten du die doppelten anführungszeichen verwenden, sonst wird $var nicht durch "boot" ersetzt, sondern es wird einfach als normaler text interpretiert und dann würd im browser:

ich fahre gerne mit meinem $var
stehen.

für das was du gemacht hast, gibts aber auch noch ne effizientere methode.
du kannst in php jederzeit zwischen php code und normalem html code wechseln.

beispiel:

anstatt

// HTML out
print "<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN>\n";
print "<html>\n";
print "<body bgcolor=#dfg454>\n";
print "$dbconerfolg<br><br>$ausgaberfolg";


kannst du

// HTML out
?> // raus aus php, alles was jetzt kommt wird direkt als html in den browser ausgegeben.

<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN>
<html>
<body bgcolor=#dfg454>
<?php echo "$dbconerfolg"; ?>
<br><br>
<?php echo "$ausgaberfolg"; ?>
...weiterer html code

<?php // wieder in den normalen php modus wechseln.
weiterer php code...


der unterschied ist jetzt, dass der html code direkt ausgegeben wurde, und nur für die beiden variablen $dbconnerfolg und $ausgabefolg kurzzeitig in den php modus gewechselt wurde.
das ist der effizienteste weg sowas zu lösen.
allerdings ist das ziemlich nervig, wenn man ne menge html code auszugeben hat und darin dann 100 variablen versteckt hat, für die man jedesmal wieder in den php modus wechseln muss.

du kannst das z.b. auch für while oder for oder foreach schleifen nutzen, wenn du nur html code ausgeben willst.


var $i = 1;
while ($i < 10) {

?> // raus aus php

dies ist ein durchlauf meiner while schleife

<?php // wieder rein in php
$i++; // $i um 1 erhöhen

} // ende der schleife


das würde bei jedem durchlauf einmal "dies ist ein durchlauf meiner while schleife" im browser ausgeben. du könntest das natürlich auch mit echo oder print ausgeben, aber so gehts schneller.


-------------


while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {


mysql_fetch_array ist eine gewöhnlich ziemlich überflüssige funktion. da wird ein assoziatives und ein numerisches array erzeugt. beides braucht man aber gewöhnlich nie, also ist das zeitverschwendung. deshalb hast du da auch das "MYSQL_ASSOC" reingesetzt. das bewirkt, dass nur ein assoziatives array erzeugt wird.
nur gibt es dafür seit php 4.04 glaub ich auch eine eigene funktion.

while ($line = mysql_fetch_assoc($result) {

solltest du schreiben.
letztendlich spielt das keine rolle, es bewirkt beides das selbe. aber wenns die funktion schon gibt, kann man die ja auch nutzen.



es gibt noch einiges, ich hab nur keine zeit mehr, ich schreib morgen mal noch was.

Harley
16.11.2002, 00:24
Hi,
Du wirst Dich wundern, dass script funkelt einwandfrei so wie es ist. Nun ich hab mich halt mal so eingelesen und da stand das halt mit dem Print, daher frage ich auch weil mir das auch seltsam vorkommt. Nun muss ich erstmal genau lesen was Du da alles geschrieben hast, hilft mir bestimmt schon weiter.


EDIT: Was kannst Du mir denn empfehlen um PHP am besten lernen zu können in meinen freien Stunden?

THX