PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP und MySQL



Mays
15.04.2005, 21:42
Also ich versuche ein einfaches Newsscript zu schreiben, aber es gelingt mir nicht so wie es soll. Bis jetzt habe ich immer nur irgendwelche Script abgeschrieben, dieses habe ich nun koplett ohne Buch oder sonstige Hilfsmittel geschrieben.

Die Datenbank heißt vam und die Tabelle sieht so aus:
CREATE TABLE news (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Schreiber VARCHAR(35),
Titel VARCHAR(80),
Datum VARCHAR(30),
Eintrag TEXT
)


Vorweg die Datei zugriff.inc.php sieht so aus

<?php
@mysql_connect("localhost","root","") or die("Verbindung zu MySQL gescheitert!");
@mysql_select_db("vam") or die("Datenbankzugriff gescheitert");
?>

und die Datei admin.inc.php so


<?php
if ($_GET["mays"]=="abc" || isset($_GET["fas545fsad4sf"])) {
echo "<h3>Administratorenbereich</h3>";
include("zugriff.inc.php");
$sql1="SELECT * FROM news";
$result=mysql_query($sql1);
while ($row=mysql_fetch_assoc($result)) {
echo "[ <a href='$_SERVER[PHP_SERVER]?fas545fsad4sf=$row[id]'>" . "Eintrag löschen</a> ] ";
foreach ($row as $name => $key) {
echo "$key ";
}
echo "<br><br>";
}
}
if (isset($_GET["fas545fsad4sf"])) {
$aql1="DELET FROM news WHERE id='$_GET[fas545fsad4sf]'";
if (mysql_query($sql1)) {
echo "<p>Datensatz gelöscht -- bitte Reload wählen!</p>";
echo "<p><a href='$_SERVER[PHP_SELF]'>Ausloggen</a></p>";
}
}
?>



nun die index.php datei


<body>
<?php
include("admin.inc.php");
?>
News<br>
<?php
include("zugriff.inc.php");
$sql="SELECT * FROM news ORDER BY id DESC LIMIT 0, 4";
$result=mysql_query($sql);
while ($row=mysql_fetch_assoc($result)) {
echo "<hr><p><strong>" . $row["Titel"] . "</strong><br><br>" . nl2br($row["Eintrag"]) . "<br>Geschrieben von " . $row["Schreiber"] . " am " . $row["Datum"] . "</p><hr><br>";
}
mysql_close();
?>
</body>


nun die News werden ausgegeben, aber wenn ich über ...index.php?mays=abc reingehe und dann irgend einen Eintrag löschen will passiert nichts, eigendlich sollte noch dabei kommen, so was wo man halt News reinschreiben kann, aber erst mahl soll das andere gehen.

Ich weiß nicht ob es jetzt nur irgendwein dummer fehler ist oder ob ich irgendwie unlogisch denke.

Kessel
16.04.2005, 11:58
Ist das oben wirklich dein Code kopiert?
Weil du hast DELET geschrieben, aber der Befehl zum löschen heisst DELETE (mit e am ende ;))

Mays
16.04.2005, 12:10
ich hatte es Falsch geschrieben, aber es geht trotzdem nicht.

dadie
16.04.2005, 12:16
Alsoich habe mir das mal angesehn und glaube (habe es nett nachgeprüfft)

Das es an der index.php liegt undzwar schreibst du :



<body>
<?php
include("admin.inc.php");
?>
News<br>
<?php
include("zugriff.inc.php");
$sql="SELECT * FROM news ORDER BY id DESC LIMIT 0, 4";
$result=mysql_query($sql);
while ($row=mysql_fetch_assoc($result)) {
echo "<hr><p><strong>" . $row["Titel"] . "</strong><br><br>" . nl2br($row["Eintrag"]) . "<br>Geschrieben von " . $row["Schreiber"] . " am " . $row["Datum"] . "</p><hr><br>";
}
mysql_close();
?>
</body>


Ich bin jetzt kien echte Profi ich bin nur ein anfänger aber meineswissen muss du da
" . $row['Titel'] . "

schreiben.kann mich irren !

Edit: und der fehler beim löschen ist woll dieser ^^


if (isset($_GET["fas545fsad4sf"])) {
$aql1="DELET FROM news WHERE id='$_GET[fas545fsad4sf]'";
if (mysql_query($sql1)) {
echo "<p>Datensatz gelöscht -- bitte Reload wählen!</p>";
echo "<p><a href='$_SERVER[PHP_SELF]'>Ausloggen</a></p>";
}
}
?>

schreib mal if (@mysql_query($sql1)) {

Mays
16.04.2005, 12:43
Ich bin jetzt kien echte Profi ich bin nur ein anfänger aber meineswissen muss du da
" . $row['Titel'] . "


warum das den es wird doch nichts verschachtelt. Es ist da egal ob ich ' oder " setze.




schreib mal if (@mysql_query($sql1)) {

das @ benutzt man doch um einen Fehler oder so was zu unterdrücken oder?, also warum soll man das dann da setzten? Habe es mahl gemacht es ändert sich nichts, es wird nichts gelöcht.

Kessel
16.04.2005, 12:44
<?php
if ($_GET["mays"]=="abc" || isset($_GET["fas545fsad4sf"])) {
echo '<h3>Administratorenbereich</h3>';
include("zugriff.inc.php");
$sql1="SELECT * FROM news";
$result=mysql_query($sql1);
while ($row=mysql_fetch_assoc($result)) {
echo '[ <a href="$_SERVER["PHP_SELF"]?fas545fsad4sf=$row[id]">" . "Eintrag löschen</a> ] ';
foreach ($row as $name => $key) {
echo "$key ";
}
echo '<br><br>';
}
}
if (isset($_GET["fas545fsad4sf"])) {
$aql1="DELETE FROM news WHERE id='$_GET[fas545fsad4sf]'";
if (mysql_query($sql1)) {
echo '<p>Datensatz gelöscht -- bitte Reload wählen!</p>';
echo '<p><a href="$_SERVER["PHP_SELF"]">Ausloggen</a></p>';
}
}
?> So müsste das eigentlich klappen, kann es dir aber nicht garantieren.
Du hast $_SERVER[PHP_SERVER] benutzt, sollte wohl PHP_SELF heissen ;)

dead_orc
16.04.2005, 12:46
@dadie
Doppelte Anführungszeichen (") und einfache (') gleichen sich bis auf eine einzige Ausnahme: Bei doppelten werden Variablen und escapte Zeichen ersetzt, bei einfachen nicht!

<?php
$var = 'Text';
echo "Ich bin ein $var\r\n"; // gibt aus "Ich bin ein Text" mit einem Zeilenumbruch am Ende
echo 'Ich bin ein $var\r\n'; // gibt aus "Ich bin ein $var\r\n" ohne Zeilenumbruch am Ende
?>
Und das @-Zeichen dient AFAIK nur dazu, Fehlerausgaben bei einer Funktion zu unterbinden, oder? Demnach würde das nichts ändern!


@Topic: Werd mir den Code später durchlesen, hab jetzt nicht sehr viel Zeit!

Lukas
16.04.2005, 12:54
Ersetze in deinen SQL_Strings news mal durch `news`, das Problem hatte ich auch, als ich mit MySQL angefangen habe.


Ja, das @-Zeichen unterdrückt Fehlermeldungen. Kann man z.B. gebrauchen, wenn man bei einer fehlgeschlagenen Verbindung zum MySQL-Server nicht die Fehlermeldung, sondern stattdessen sowas wie "Der DB-Server ist momentan leider down." anzeigen will.

dadie
16.04.2005, 13:19
1,Aha ich dachte das @ währe die einzige möglichkeit einen befehlt naczuprüfen ob er geht naja

2,Das mit " und ' meine ich so $XYZ = "Ein Langer Satz " . $arrary["1"] . " Was weiss ich "

Mein Apache macht da einen fehler darum eigentlich auch jeden den ich kenne weil er denk

ich wollte folgendes schreiben

"Ein Langer Satz " . $arrary[ . "1"] . " Was weiss ich "

dadurch ergibst dich an ein Escape error zumindest ist das bei Mir so , bei Tripot so , bei Funpic so und bei Ohost so.

dead_orc
16.04.2005, 14:13
Hm, ich hab hier mal ne Datei, die zwar nicht ganz so funktioniert, wie erwartet, aber trotzdem:
Skript (http://janphilipplitza.ja.funpic.de/bla.php)
Source (http://janphilipplitza.ja.funpic.de/bla.php?source=1)
Hierbei ist mir aufgefallen, dass man keine numerischen Schlüssel für ein Array setzen kann, weil PHP keinen Unterschied zwischen "0", '0' oder 0 macht :(

Mays
16.04.2005, 18:42
Ersetze in deinen SQL_Strings news mal durch `news`, das Problem hatte ich auch, als ich mit MySQL angefangen habe.


das habe ich jetzt auch gemacht, aber es passiert immer noch nichts, es wird einfach nichts gelöcht.

Lukas
16.04.2005, 18:45
Was gibt MySQL denn für eine Fehlermeldung aus? Schreib mal unter das Script echo mysql_error();

Mays
16.04.2005, 19:27
@Kessel
ich habe das schon verbessert, schon beim ersten mahl

@masterquest
er gibt keine Fehlermeldung aus, desshalb versteh ich auch nicht warum es nicht geht.

dead_orc
17.04.2005, 07:35
<?php
if ($_GET["mays"]=="abc" || isset($_GET["fas545fsad4sf"])) {
echo "<h3>Administratorenbereich</h3>";
include("zugriff.inc.php");
$sql1="SELECT * FROM `news`";
$result=mysql_query($sql1);
while ($row=mysql_fetch_assoc($result)) {
echo "[ <a href='".$_SERVER['PHP_SERVER']."?fas545fsad4sf=".$row['id']."'>" . "Eintrag löschen</a> ] ";
foreach ($row as $name => $key) {
echo "$key ";
}
echo "<br><br>";
}
}
if (isset($_GET["fas545fsad4sf"])) {
$sql1="DELETE FROM news WHERE id='".$_GET['fas545fsad4sf']."'";
if (mysql_query($sql1)) {
echo "<p>Datensatz gelöscht -- bitte Reload wählen!</p>";
echo "<p><a href='".$_SERVER['PHP_SELF']."'>Ausloggen</a></p>";
}
}
?>
Versichs mal so. AFAIK werden in doppelten Anführungszeichen zwar Variablen wie $key ersetzt, nicht jedoch Arrays, weil PHP nicht genau erkennen kann, ob es die ersetzten soll, oder nicht.

[EDIT]
Sry, hab das mit dem DELET übersehen!

Manni
17.04.2005, 08:14
Hier mal die von mir verbesserte Version:


<?php
if($_GET["mays"] == "abc" || isset($_GET["fas545fsad4sf"])) {
echo "<h3>Administratorenbereich</h3>";
include("zugriff.inc.php");
$sql = "SELECT * FROM `news`";
$result = mysql_query($sql);
while ($row = mysql_fetch_assoc($result)) {
echo "[ <a href='".$PHP_SELF."?fas545fsad4sf=".$row['id']."'>Eintrag löschen</a> ] ";
foreach ($row as $name => $key) {
echo $key." ";
}
echo "<br><br>";
}
}
if(isset($_GET["fas545fsad4sf"])) {
$sql="DELETE FROM `news` WHERE `id`='".$_GET['fas545fsad4sf']."' LIMIT 1;";
if(mysql_query($sql)) {
echo "<p>Datensatz gelöscht -- bitte Reload wählen!</p>";
echo "<p><a href='".$_SERVER[PHP_SELF]."'>Ausloggen</a></p>";
}
}
?>

Es könnte zum Beispiel daran liegen, das du deine zweite Query in $aql abgelegt hast :(
Oder daran, dass irgendwie dieses DELETE von dead_orc nicht verbessert wurde (ich glaube das wurde schonmal gesagt...)

Ich hoffe es geht so ;)

Mays
17.04.2005, 10:35
Der Code von Manni_the_Dark geht, aber ich versteh nicht warum.

dead_orc
17.04.2005, 10:49
Die Erklärung habe ich eigentlich schon gepostet:

AFAIK werden in doppelten Anführungszeichen zwar Variablen wie $key ersetzt, nicht jedoch Arrays, weil PHP nicht genau erkennen kann, ob es die ersetzten soll, oder nicht.
Soll heißen, dass du Arrays extra aufführen musst. Also statt echo "Ich heiße $ich[name]"; schreiben echo "Ich heiße ".$ich['name'];

Mays
17.04.2005, 10:59
@dead_orc
Aber dann müsste deins doch auch gehen, tut es aber nicht. Es geht nur das von Manni_the_Dark und das versteh ich nicht.

Manni
17.04.2005, 11:27
Hab ich bereits oben gesagt, warum das nicht lief:


...
$aql="DELET FROM news WHERE id='".$_GET['fas545fsad4sf']."'";
if(mysql_query($sql)) {
....



Es könnte zum Beispiel daran liegen, das du deine zweite Query in $aql abgelegt hast

Eigentlich ein ziemlich einfacher Tippfehler ;)

Mays
17.04.2005, 12:17
Es ist doch egal ob ich sie $sql1 oder $sql nenne, es geht auch beides? Oder was meinst?
Ich glaub ich bin zu blöd dafür.

Manni
17.04.2005, 13:24
Du hattest $aql statt $sql geschrieben.

Mays
18.04.2005, 07:06
aso



Den Primäschlüssel, kann man doch nur einmahl setzten oder?, weil es gibt ja Seiten wo man einen Loginnamen und ein Nickname hat, beide können ja nur einmahl vorkommen, wie machen die den das?

Lukas
18.04.2005, 13:10
Afaik musst du dafür das Attribut unique setzen, das geht genauso wie primary key. Also etwa CREATE TABLE `users` (<Felder>, PRIMARY KEY (`id`), UNIQUE(`username`)

dead_orc
18.04.2005, 14:24
Ich weiß nicht, ob es auch so geht, AFAIK muss man jedoch zusätzlich noch einen Namen für die Unique-Keys vergeben. Etwa so:

CREATE TABLE `table` (
`feld` int(3) NOT NULL default 3,
UNIQUE KEY `name` (`feld`),
);

Manni
18.04.2005, 17:03
Wenn du es so wie bei masterquest machst, bekommt der Key den selben Namen wie das Feld. Wenn du also einen UNIQUE-Schlüssel für das Feld `username` machst, heisst dein Key auch "username".

Das vom Orc geht aber auch ;)

Mays
19.04.2005, 16:56
Nun bin ich dran ein Loginscript zu schreiben, aber bin wohl zu blöd dafür.

Ich habe mir nun ne Tabelle gemacht die so aussieht.
CREATE TABLE users(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
Loginname VARCHAR( 30 ) UNIQUE KEY ,
Nickname VARCHAR( 30 ) UNIQUE KEY ,
Mailadresse VARCHAR( 50 ) ,
Passwort VARCHAR( 50 ) ,
zahl INT
)

Also, bei dem Loginformular schicht man dann die Daten mit Post, den Loginname und das Passowort.
Nun soll ja geprüft ob es die Kombination aus Loginname und Passwort gibt, da gibt es schon probleme und ich weiß nicht wie ich es machen soll, das es in der Datenbank geprüft wird.
Wenn das Passwort und der Loginname stimmt,soll in die Tabelle bei zahl eine zufallszahl gesetzt werden und dann ein Cookie, auch mit dieser zahl, am rechner und nur wenn die Zahl die im Cookie und in der Datenbank bei zahl steht gleich ist, kann man dann den anderen bereich betreten.
Ist das sinnvoll es so zu machen, weil wenn nicht brauche ich erst gar nicht anzufangen.

rgb
19.04.2005, 17:26
Ich kopier einfach mal meins.
Bevor hier wieder irgendwelche Klugscheisser kommen; man kann auch gleich $_POST['name'] im mysql_query einsetzen;)



session_start();
$name = $_POST['name'];
$passwort = $_POST['passwort'];
include "global.php";
$result = mysql_query("SELECT `id` FROM mitglieder WHERE `name`='$name' AND `passwort`='".md5($passwort)."'");
$row = mysql_fetch_array($result);
echo mysql_error();
if(mysql_num_rows($result) > 0) {
$_SESSION["id"] = $row['id'];
}


:)
Edit: Das session startgedöns kannst du natürlich weglassen, genauso kannst du in der if abfrage beliebig irgendetwas einsetzen:).

Mays
20.04.2005, 15:09
Also ich kann damit nichts anfangen, wie wäre es den mit einer Erklährung

Warum "SELECT `id`", das versteh ich nicht, eigendlich versteh ich fast alles nicht.

dread
21.04.2005, 08:16
Er speichert die ID des Benutzers in der Session, damit er später wieder Informationen über diesen Benutzer abrufen kann und auch auf weiteren Seiten noch die Login-Kontrolle hat.
Er könnte auch den Namen speichern und SELECT name machen, völlig egal. Die ID ist normalerweise relativ klein, damit bietet sich diese an.

Er macht also eine SQL Abfrage der ID, bei der der Name gleich dem eingegebenen Namen und das Passwort gleich dem eingegebenen Passwort ist. Wenn das Ergebnis (hier rows) größer Null ist, dann speichert er die ID in der Session.

Ganz einfach.

Mays
27.04.2005, 12:18
Nach einen dummes fehler von mir habe ich meine ganze Datenbank gelöscht, wollt eigendlich nur eine Tabelle löschen, nun wollt ich sie neu anlegen, nun gibt es bei den Tabellen aber ein problem, es klappt nicht mehr. Er sagt in der zweiten Zeile ist ein Fehler.

CREATE TABLE user(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
Loginname VARCHAR( 30 ) UNIQUE KEY ,
Nickname VARCHAR( 30 ) UNIQUE KEY ,
Mailadresse VARCHAR( 50 ) ,
Passwort VARCHAR( 50 ) ,
Geburtstag DATE,
Wohnort VARCHAR( 40 ) ,
Text TEXT,
)



auch das mit den Datenändern in einer Tabelle bekomme ich nicht hin.


$sql7 = "UPDATE `user` SET `Passwort` = 'abc', `Text`= 'adasfhjasofhasdasfpashfas' WHERE `Loginname` = 'Tobias'";
mysql_query(sql7);

Es kommt kein Fehler es passiert einfach nichts.

dread
27.04.2005, 12:53
Lass dir mal den mysql_error ausgeben.


$sql7 = "UPDATE `user` SET `Passwort` = 'abc', `Text`= 'adasfhjasofhasdasfpashfas' WHERE `Loginname` = 'Tobias'";
mysql_query(sql7) or die(mysql_error());

Manni
27.04.2005, 13:28
Zu deinem ersten Problem:
Primarykeys müssen in einer Extrazeile definiert werden:

...
`id` INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
...

Und zu deinem zweite Problem:
Ich würde mal annehmen, dass es keinen Eintrag gibt, bei dem der Loginname "Tobias" ist...

Mays
27.04.2005, 14:35
Ich versteh das nicht, wenn ich das eingeben gehts
CREATE TABLE asdasdasd(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
Loginname VARCHAR( 30 ) UNIQUE KEY ,
Nickname VARCHAR( 30 ) UNIQUE KEY ,
Mailadresse VARCHAR( 50 ) ,
Passwort VARCHAR( 50 ) ,
Geburtstag DATE,
Wohnort VARCHAR( 40 ) ,
)

aber wenn ich das eingebe
CREATE TABLE user(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
Loginname VARCHAR( 30 ) UNIQUE KEY ,
Nickname VARCHAR( 30 ) UNIQUE KEY ,
Mailadresse VARCHAR( 50 ) ,
Passwort VARCHAR( 50 ) ,
Geburtstag DATE,
Wohnort VARCHAR( 40 ) ,
Text TEXT,
)

kommt der Fehler:
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'user(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
Loginname

es ist egal ob ich es so schreibe wie oben oder so wie Manni_the_Dark es gesagt hat, es passiert das selbe.



Zu dem anderen Problem von mir, also es gab einen Eintrag wo Loginnamen Tobias stand.

Manni
27.04.2005, 15:11
Versuchs mal damit:
CREATE TABLE `user` (
`id` INT NOT NULL AUTO_INCREMENT ,
`Loginname` VARCHAR( 30 ) NOT NULL ,
`Nickname` VARCHAR( 30 ) NOT NULL ,
`Mailadresse` VARCHAR( 50 ) NOT NULL ,
`Passwort` VARCHAR( 50 ) NOT NULL ,
`Geburtstag` DATE NOT NULL ,
`Wohnort` VARCHAR( 40 ) NOT NULL ,
PRIMARY KEY ( `id` ) ,
UNIQUE (`Loginname` , `Nickname`)
);

Das zweite Problem liegt daran, dass es in deiner Tabelle kein Feld mit dem Namen "Text" gibt...

Mays
28.04.2005, 19:57
Das mit der Tabelle klappt nun, danke, hab halt noch ein Feld mit Text hinzu gefügt.
Nun zu meinem anderen Problem, es ist jedes Feld da, das Script klapt auch, aber nur wenn ich die Seite mehrfach lade, sonst passiert nichts, woran kann das liegen.
Hier noch mahl das Programm, hatte auch einen Tippfehler drin, hatte sql statt $sql geschrieben.


include("zugriff.inc.php");
$sql = "UPDATE `user` SET `Text`='adasfhaaaaaaaaaaafpashfas' WHERE `Loginname`='tobias' LIMIT 1";
mysql_query($sql);
echo "fertig";

Mays
24.05.2005, 21:55
Mir ist gerade mahl aufgefallen das es egal ist ob man mysql_close() setzt oder nicht. Ich versteh nicht wofür es dann gut sein soll. Kann mir da jemand helfen, schon mahl danke.


Noch ein anderes Problem.
Wenn ich zum Beispiel im Gästebuch haben will das alle Einträge die älter als 7 Tag sind automatisch gelöscht werden, wie mach ich das? Ich habe ein Datum zum Beispiel 01.30.1989, da wurde der Beitrag geschrieben oder soll ich nicht das Datum speichern sondern die eine Zeit da (ich meine die eine Zeit die irgendwann mahl begonnen hat und immer weiter geht, komm im moment nicht auf den Namen, ich denk ihr wisst was ich meine) plus die Zeit die dann in Sieben tagen vergangen ist speichern und das Script schaut dann ob die Zeit die in der Tabelle steht kleiner ist asl die Andere, wenn ja wird der Beitrag gelöscht. Oder wie macht man das?

Lukas
24.05.2005, 22:04
Ich würde da einfach den Unix-Timestamp in die Datenbank schreiben (kriegst du mit der Funktion time()) und bei jedem Aufruf des Gästebuches alle Einträge aus der Tabelle löschen, bei denen der Timestamp kleiner ist als time() - 604800 (7 Tage sind 604800 Sekunden). In ein menschenlesbares Format kannst du das dann auch mit date() fummeln, übergib einfach als zweites Argument den Timestamp.

Zu mysql_close(): die bestehenden MySQL-Verbindungen werden beim Beenden des Scripts automatisch geschlossen. Die Funktion dient lediglich dazu, die Verbindung manuell zu schließen, wenn man sie z.B. nur am Anfang des Scripts benötigt.

Mays
24.05.2005, 22:25
Wenn am Anfang dann zum Beispiel ein Wert aus der Tabelle ausgelesen wird und das wars dann, und wenn man dann nicht die mysql_close() hinsetzt, bleibt der zugang bestehen, wie lange denn, doch nur so lange bis die seite 100% anfgerufen ist oder? Wenn man sie nicht schließt, wächst dann der Traffic, ist er mehr als wenn man den Zugang geschlossen hätte?

Chocwise
25.05.2005, 05:53
Wenn am Anfang dann zum Beispiel ein Wert aus der Tabelle ausgelesen wird und das wars dann, und wenn man dann nicht die mysql_close() hinsetzt, bleibt der zugang bestehen, wie lange denn, doch nur so lange bis die seite 100% anfgerufen ist oder? Wenn man sie nicht schließt, wächst dann der Traffic, ist er mehr als wenn man den Zugang geschlossen hätte?
Hajo. Das ist immer eine Frage von Relationen. Eine geöffnete Verbindung zur DB belegt immer etwas RAM und knabbert, wenn auch wenig, wenn gerade nichts abgefragt wird, an der CPU-Performance.

Nun ist allerdings die Frage ob es sinnvoll ist mysql_close() zu verwenden wenn die Verbindung halt nur ein paar Millisekunden früher geschlossen wird. Wenn ihr mich fragt, ist das für den gewöhnlichen Anwender unnötig.
Erst wenn man mit gewaltigen Datenmängen hantiert oder man ein Mammutprojekt betreibt.
Ich mächte wetten, das man bei einem Projekt wie Wikipedia vielleicht gut 2-5% Performance noch heraus kitzeln kann wenn man mysql_close() einsetzt. Und das bedeutet bei einem so großen Projekt oft, dass man sich einen Server sparen kann. ;)

Mays
26.05.2005, 20:46
mysql_close() muss man doch nur dann verwenden, wenn eine Seite auf zwei Datenbänke zugreift oder kann man einfach beide öffnen?

Nun zum Gästebuchscript, mein Problem ist es, dass nichts passiert, die daten werden weder geladen noch gespeichert und es kommt kein Fehler.
Das Abschickformular:
<form action="<?php $_SERVER
; ?>" method="post">
<table>
<tr><td>Name: </td><td><input type="text" name="schreiber"></input></td></tr>
<tr><td>Email-adresse </td><td><input type="text" name="email"></input></td></tr>
</table>
<textarea name="eintrag" cols="40" rows="7"></textarea><br>
<input type="submit" name="submit" value="abschicken"></input>
</form>
Der Code der es ausließt:
[PHP]
<?php
$eintrag = "SELECT * FROM gaestebuch ORDER BY id";
$result = mysql_query($eintrag);
while ($row = mysql_fetch_assoc($result)) {
echo '<p><b><a href="mailto:' . $mailadresse . '>' . nl2br(htmlspecialchars($row["schreiber"])) . '</a></b> schrieb am ' . $row["datum"] . '<br>' . nl2br(htmlspecialchars($row["eintrag"])) . '</p><hr>';
}
?>

Das Script was die daten speichert:


<?php
include("zugriff.php");
if (isset($_POST['submit'])) {
$schreiber = $_POST['schreiber'];
$email = $_POST['email'];
$eintrag = $_POST['eintrag'];
$sql_eintrag = "INSERT INTO `gaestebuch` ( `id` , `schreiber` , `eintrag` , `mailadresse` , `zeit` , `datum` ) VALUES ('','" . $schreiber . "','" . $eintrag . "','" . $email . "', time(), now())";
mysql_query($sql_eintrag);
echo "gemacht";
}
?>

Einen Schreibfehler schließe ich aus, ich denk das ich irgendwie was Falsch denke, also ich hab wohl einen logischen Fehler gemacht oder ein ganz Dummen.

dadie
26.05.2005, 20:51
mysql_close() muss man doch nur dann verwenden, wenn eine Seite auf zwei Datenbänke zugreift oder kann man einfach beide öffnen?



Nur mal so es sei gesagt das es noch für was anderres Gut ist zumindest meine ich das mal so gelesen zu haben.


Wenn du kein mysql_close() sätz und der server kein Externes Includen block kann ich Teoretisch deine seite Include und habe zugriff auf die DB

Ob das nun stimmt oder ein gehirngespinnst von mir ist sei mal da hingestellt -.-''

Aber vorsicht ist besser als nachsicht !