3 Fragen zu MySQL-PHP

mh. das mit dem neueintrag könnte doch daran liegen, dass du die variable $neueintrag immer direkt settz. sie ist also definiert und das fragt doch deine if($neueintrag){} ab oder??

ich habe so etwas ähnliches bei mir laufen und ich habe das so gelöst:

PHP:
$formular="<form>[hier die ganzen formular felder]
<input type="submit" name="action" value="eintrag">
<input type="submit" name="action" value="loeschen">"

dann kannst du per

if($action=="eintrag"){eintragenfunktion; echo $formular;}

elseif($action=="loeschen"){löschenfunkton; echo $formular;}

else{

echo $formular;}
so in der art funktioniert es bei mir ganz gut.

ich würde vielelicht auch die überprüfung nach der leeren message in den neueintragen block machen. wofür wervendest du löschen?? zum löschen eines beitrages?? dann haste die anwahl des richtigen beitrages weggelassen beim script oder??

hoffe habe nicht absoluten schwachsin gemacht:)
 
Das Problem mit dem Header ist folgendes:
Die Antwort des Webservers auf die Anfrage des Browsers besteht aus 2 Teile.
Erst kommt der Header, da steht drin wie groß das Dokument ist, wann es zuletzt geändert wurde usw..
Dann kommt das eigentliche Dokument.
Wenn Du in Deinem Script irgendwas ausgibst schickt der Webserver natürlich den Header weg, damit er auch das eigentlich Dokument senden kann.

Im Grunde heisst die Fehlermeldung einfach, der Header is schon weg, also kann man im auch nix mehr anfügen..

Du sollest das Formular also unbedingt hinter das Script setzen, sonst klappts net..


Per OutputBuffer klappts trotzdem, wens interessiert: http://www.php.net/manual/de/ref.outcontrol.php
 
Hab jetzt den neueun Code gepostet das Header Problem ist noch da.
Das mit dem ständigen neueintragen werde ich anders lösen, er soll wenn der Button eintragen gedruckt ist in die Datenbank schreiben und auf ner anderen Seite in einer Tabelle ausgeben. Wie mach ich das.

PHP:
<html>

<body>
<head>
       <title>Forum</title>
</head>


<?php

$db = mysql_connect("localhost","root","root");
mysql_select_db("gbook");

if( empty( $_POST['message'] ) )
{
    header( "Location: beitrageanz.php" );
    exit;
}


   

if (isset($eintragen)) {

   echo "Willkommen";
   
}

if (isset($neueintrag)) {

   $sqlkommando = "INSERT INTO guestbook (name, email, homepage, message) VALUES ('$name', '$email', '$homepage', '$message')";

   mysql_query($sqlkommando) or die("Error: " . mysql_error());

}

if (isset($loschen)) {

 mysql_query("delete from guestbook");

    }


$result = mysql_query("SELECT name, message from guestbook order by id ASC");


if ($result) {

$number = mysql_num_rows($result);
echo "<p>Es sind $number Datensätze gelesen worden.";
echo "<table border=0 cellspacing=5 cellpadding=10 width=80%>";

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

           echo "<tr><td style=background-color:CFCFCF; width=70%>";
           echo implode("</td><td style=background-color:CFCFCF;>",$row);
           echo "</td></tr>\n";
           
}

           echo "<table>";

           
}



mysql_close();
?>


           
<form>


<table border='1' cellspacing='5' cellpadding='2'>
<tr><td>Name:<br><input type="text" name="name" size="25"></td></tr>
<tr><td>Email:<br><input type="text" name="email" size="25"></td></tr>
<tr><td>Homepage:<br><input type="text" name="homepage" size="25"></td></tr>
<tr><td>Message:<br><textarea name="message" cols="60" rows="10"></textarea></td></tr>
<tr><td><input type="submit" name="loschen" value="loschen"></td>
<td><input type="submit" name="neueintrag" value="Eintragen"></td>
</tr>
</table>
</form>







</body>
</html>
 
Liest du dir überhaupt durch was die anderen sagen?
Wenn ein header() Befehl genutzt wird darf vorher noch nichts clientseitiges ausgegeben worden sein!
 
Du meinst in etwa so, doch trotzdem kommt der Fehler.

PHP:
<?php

$db = mysql_connect("localhost","root","root");
mysql_select_db("gbook");

if( empty( $_POST['message'] ) )
{
    header( "Location: beitrageanz.php" );
    exit;
}


   

if (isset($eintragen)) {

   echo "Willkommen";
   
}

if (isset($neueintrag)) {

   $sqlkommando = "INSERT INTO guestbook (name, email, homepage, message) VALUES ('$name', '$email', '$homepage', '$message')";

   mysql_query($sqlkommando) or die("Error: " . mysql_error());

}

if (isset($loschen)) {

 mysql_query("delete from guestbook");

    }


$result = mysql_query("SELECT name, message from guestbook order by id ASC");


if ($result) {

$number = mysql_num_rows($result);
echo "<p>Es sind $number Datensätze gelesen worden.";
echo "<table border=0 cellspacing=5 cellpadding=10 width=80%>";

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

           echo "<tr><td style=background-color:CFCFCF; width=70%>";
           echo implode("</td><td style=background-color:CFCFCF;>",$row);
           echo "</td></tr>\n";
           
}

           echo "<table>";

           
}



mysql_close();
?>

<html>

<body>
<head>
       <title>Forum</title>
</head>
           
<form>


<table border='1' cellspacing='5' cellpadding='2'>
<tr><td>Name:<br><input type="text" name="name" size="25"></td></tr>
<tr><td>Email:<br><input type="text" name="email" size="25"></td></tr>
<tr><td>Homepage:<br><input type="text" name="homepage" size="25"></td></tr>
<tr><td>Message:<br><textarea name="message" cols="60" rows="10"></textarea></td></tr>
<tr><td><input type="submit" name="loschen" value="loschen"></td>
<td><input type="submit" name="neueintrag" value="Eintragen"></td>
</tr>
</table>
</form>







</body>
</html>
 
HGNRGH ...

Grundlegendes zu PHP-Projekten:
Mach Dir VORHER gedanken, zeichne ein Struktogramm.

Zu Gästebüchern:

am einfachsten arbeitet man mit switch statt mit if-else-konstrukten

also:

PHP:
switch ($schalter) {
    case formular:
        // formular etc.
        break;
    case post:
        // in db eintragen, etc.
        break;
    case fehler:
        echo "fehler";
        break;
    default:
        echo "huch, kein schalter gesetzt";
}

Duplikate kann man z. B. abwehren indem man

a) die Zeit des sendens überprüft und vergleicht ob genug zeit verstrichen ist zum eintragen
b) jeder IP nur einen Eintrag pro stunde erlaubt
c) cookies setzt

Dafür müßte die Tabelle aber weitere Spalten haben: timestamp und/oder ip.

so.. zum Header Problem:

vor

PHP:
header( "Location: wasweisichusw." );

dürfen keine ECHO oder PRINT oder ähnliche Befehle stehen, das schließt auch ein wenn html vorher steht z. B.:

PHP:
<html>
<head>
<title>
</title>
</head>
<body>
<?php
// php script
header( "Location: wasweisichusw." );
?>
</body>
</html>

denn dann wird der header auch natürlich schon längst verschickt.

kurz:

PHP:
header( "Location: wasweisichusw." );

muß JUNGFRÄULICH sein und als erstes kommen :)
 
Zuletzt bearbeitet:
Habs jetzt so gemacht doch der Header macht noch immer Probleme:

He Neurodeamon meist du anstatt if (isset($eintragen)) soll ich switch ($eintragen) benutzen


PHP:
<?php

header( "Location: beitrageanz.php." );


$db = mysql_connect("localhost","root","root");
mysql_select_db("gbook");


   

if (isset($eintragen)) {

   echo "Willkommen";
   
}

if (isset($neueintrag)) {

   $sqlkommando = "INSERT INTO guestbook (name, email, homepage, message) VALUES ('$name', '$email', '$homepage', '$message')";

   mysql_query($sqlkommando) or die("Error: " . mysql_error());

}

if (isset($loschen)) {

 mysql_query("delete from guestbook");

    }


$result = mysql_query("SELECT name, message from guestbook order by id ASC");


if ($result) {

$number = mysql_num_rows($result);
echo "<p>Es sind $number Datensätze gelesen worden.";
echo "<table border=0 cellspacing=5 cellpadding=10 width=80%>";

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

           echo "<tr><td style=background-color:CFCFCF; width=70%>";
           echo implode("</td><td style=background-color:CFCFCF;>",$row);
           echo "</td></tr>\n";
           
}

           echo "<table>";

           
}



mysql_close();
?>
<html>

<body>
<head>
       <title>Forum</title>
</head>


           
<form>


<table border='1' cellspacing='5' cellpadding='2'>
<tr><td>Name:<br><input type="text" name="name" size="25"></td></tr>
<tr><td>Email:<br><input type="text" name="email" size="25"></td></tr>
<tr><td>Homepage:<br><input type="text" name="homepage" size="25"></td></tr>
<tr><td>Message:<br><textarea name="message" cols="60" rows="10"></textarea></td></tr>
<tr><td><input type="submit" name="loschen" value="loschen"></td>
<td><input type="submit" name="neueintrag" value="Eintragen"></td>
</tr>
</table>
</form>







</body>
</html>
 
Zuletzt bearbeitet:
mei, mach mal den punkt da weg :)

header( "Location: beitrageanz.php." );

Also den hinter "beitrageanz.php":
PHP:
header( "Location: beitrageanz.php" );

bei mir war da nur ein punkt weil der "usw." abkürzt :)



So, momentan fragst Du ja den Status mit isset ab - mit switch kannst du Strukturiert arbeiten. Es wird sich nicht vermeiden lassen if und isset, etc. zu benutzen aber Du kannst es Dir ein wenig erleichtern und übersichtlicher machen, sobald scripte länger und unübersichtlicher werden.
 
Das Header Problem ist noch immer da. bitte um hilfe

PHP:
<?php

header( "Location: beitrageanz.php" );


$db = mysql_connect("localhost","root","root");
mysql_select_db("gbook");

if( empty( $_POST['message'] ) )
{


}


   

if (isset($eintragen)) {

   echo "Willkommen";
   
}

if (isset($neueintrag)) {

   $sqlkommando = "INSERT INTO guestbook (name, email, homepage, message) VALUES ('$name', '$email', '$homepage', '$message')";

   mysql_query($sqlkommando) or die("Error: " . mysql_error());

}

if (isset($loschen)) {

 mysql_query("delete from guestbook");

    }


$result = mysql_query("SELECT name, message from guestbook order by id ASC");


if ($result) {

$number = mysql_num_rows($result);
echo "<p>Es sind $number Datensätze gelesen worden.";
echo "<table border=0 cellspacing=5 cellpadding=10 width=80%>";

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

           echo "<tr><td style=background-color:CFCFCF; width=70%>";
           echo implode("</td><td style=background-color:CFCFCF;>",$row);
           echo "</td></tr>\n";
           
}

           echo "<table>";

           
}



mysql_close();
?>
<html>

<body>
<head>
       <title>Forum</title>
</head>


           
<form>


<table border='1' cellspacing='5' cellpadding='2'>
<tr><td>Name:<br><input type="text" name="name" size="25"></td></tr>
<tr><td>Email:<br><input type="text" name="email" size="25"></td></tr>
<tr><td>Homepage:<br><input type="text" name="homepage" size="25"></td></tr>
<tr><td>Message:<br><textarea name="message" cols="60" rows="10"></textarea></td></tr>
<tr><td><input type="submit" name="loschen" value="loschen"></td>
<td><input type="submit" name="neueintrag" value="Eintragen"></td>
</tr>
</table>
</form>







</body>
</html>
 
So langsam bringst mich zum verzweifeln ....

Ich denke, das tausend andere Fehler von den wahren Fehlern abhalten :-)

wenn du den quellcode so anfängst, wozu geht das script überhaupt weiter? es wird doch bevor irgendwas passiert auf beitrageanz.php umgeleitet, der Fehler kann also nicht in diesem Script liegen, denn es wird gar nicht aufgerufen ....

PHP:
<?php

header( "Location: beitrageanz.php" );

Welche Fehlermeldung bekommst Du jetzt genau?

Bist Du sicher die Grundzüge von PHP zu kennen?

argh ...
 
Zurück