• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Formularwerte in Datenbank eintragen + sonstige Php-Fragen.

  • Ersteller Ersteller Tobias
  • Erstellt am Erstellt am
T

Tobias

Guest
Hallo!
Seit langer Zeit beschäftige ich mich mal wieder mit PHP und möchte ein kleines Script schreiben.

Das meiste kann man googel, ich weiß!
Aber dort werden unterschiedliche Varianten gepostet und ich will mir nicht kreuz und quer verschiedene Stile aneigenen sondern versuchen bei einem zu bleiben.

Also mein aktuelles Problem:
Bekomme es nicht hin, die Daten vom Formular in die MySQL-Datenbank einzutragen.
Hier mein Code:

form.php
PHP:
<form action="eintragen.php" method="post">
    <fieldset>
        Name: <input type="text" name="autor" /> ist zu <input type="text" name="prozentualdabei" />% dabei. <br /> <br />
        Kommentar: <br />
        <textarea name="kommentar" rows="6" cols="40"></textarea> <br />
        <input type="submit" name="eintragen" value="Eintragen" />        
    </fieldset>
</form>

eintragen.php
PHP:
<?php
include ('connect.php');

if(isset($_POST['eintragen'])){
if(empty($_POST['autor']) || empty($_POST['prozentualdabei'])){

  $meldung = "Bitte Name und Prozentangabe eingeben!";
  
  }else{
  $autor = $_POST['autor'];
  $prozentualdabei = $_POST['prozentualdabei'];
  $kommentar = $_POST['kommentar'];
  

  $eintragen = mysql_query("INSERT INTO dabeiscript SET
  Autor = '".$autor."',
  Prozentualdabei = '".$prozentualdabei."',
  Kommentar = '".$kommentar."'");
}
}

?>

Fehlermeldung:

Code:
[B]Parse error[/B]:  syntax error, unexpected '{' in [B]/usr/export/www/vhosts/funnetwork/hosting/iiinet/dabei-script/eintragen.php[/B] on line [B]4[/B]


Finde den Syntax-Fehler nicht.
 
In dem von Dir geposteten Scriptausschnitt ist kein Fehler.

Aber ich weiß nicht, was in connect.php steht. Das könnte auch den Fehler auslösen.
 
In dem von Dir geposteten Scriptausschnitt ist kein Fehler.
Aber denn verstehe ich die Fehlermeldung nicht:
Parse error: syntax error, unexpected '{' in /usr//export/www/vhosts/funnetwork/hosting/iiinet/dabei-script/eintragen.php on line 4

In der Connect.php ist nicht viel drinne. Ein ganz kleiner einfacher Aufbau zur Datenbank, sprich mysql_connect und mysql_select_db

Und die Install.php wird nur ne Tabelle + Spalten angelegt, was auch erfolgreich und problemlos funktioniert hat. Hab in phpmyadmin nachgeguckt, wurde alles angelegt.

/ Bin gerade nicht zu Hause, deshalb kann ich den Code nicht posten.
 
Aber denn verstehe ich die Fehlermeldung nicht:
Fehlermeldungen muss man nicht immer verstehen. Es kommt immer darauf an, wie der Compiler/Interpreter arbeitet und an welcher Stelle er dann merkt, dass etwas nicht stimmt. Gerade bei Klammerfehlern kann der Fehler erst auch am Ende der Datei auffallen, wenn er merkt, dass eine schließende Klammer fehlt.
Oder in Sprachen, die ein Semikolon am Ende eines Befehls benötigen, da wird der Fehler oft erst in der nächsten Zeile angezeigt, da gibt es die abenteuerlichsten Situationen.

Untersuche die connect.php oder wenn Dich das nicht weiter bringt, dann kopiere die Datei in die Quelldatei anstelle des include, so wie PHP das machen würde und lass es dann nochmal laufen. Vielleicht ändert sich dann auch die Fehlermeldung oder der Fehler wird in einer anderen Zeile gezeigt.
 
Hallo Efchen,
nun bin ich endlich zu Hause.Hier mein restlicher Code.

Install.php (hat soweit geklappt)


PHP:
<?php 

    include ('connect.php');
    
    mysql_query ("CREATE TABLE dabeiscript (
                    ID INT AUTO_INCREMENT PRIMARY KEY,
                    Autor VARCHAR (30) NOT NULL,
                    Prozentualdabei VARCHAR (3) NOT NULL,
                    Kommentar TEXT NOT NULL
                );");
    
    echo mysql_error();
    echo "<br />";            
    echo "Installation war erfolgreich!"
    

    
?>


Connect.php
PHP:
<?php

    $dbname    =    '****';                                // Name der Datenbank
    $dbuser    =    '****';                                // Benutzername
    $dbpass    =    '****';                                // Passwort
    $dbhost    =    'localhost';                                // Host (meistens Localhost)
    
    mysql_connect ($dbhost, $dbuser, $dbpass);                // Verbindung aufbauen
    mysql_select_db ($dbname);                                // Datenbank auswählen
    
    echo "Verbindung erfolgreich aufgebaut!";
    
?>

Würde mich freuen, wenn man jetzt evtl. den Fehler findet.
 
Im Moment sehe ich auch nichts.
Debugge das halt mal Zeile für Zeile. Nimm Zeilen raus, mach dies und das, bis sich die Fehlermeldung ändert. Nimm das include raus und guck, was passiert, kopier das evtl. ins eintragen.php...wenn man nicht sieht, wo der Fehler ist, dann muss man halt rumprobieren.

Das würde bei mir nur keinen Sinn machen, weil es bei mir ja funktioniert :-)
 
Die Zeile 4 ist
PHP:
if(empty($_POST['autor']) || empty($_POST['prozentualdabei'])){
da befindet sich offenbar kein Fehler, daher hast du uns falschen oder bearbeiteten code gepostet :D
Nein, das denke/hoffe ich natürlich nicht.

Daher solltest du versuchen den Fehler so weit es geht einzugrenzen, wie Efchen schon gepostet hat. Kommentiere mal die betroffene Zeile und die schließende geschweifte klammer aus, die zu diesem Ausdruck gehört und schau ob der Fehler (oder ein anderer) immer noch auftaucht. Wenn ja, ist der Fehler woanders zu suchen. Wenn nicht, dann versuche eine andere Abfrage zu verwenden die den gleichen zweck erfüllt, z.B.:
PHP:
if (isset($_POST["autor"], $_POST["prozentualdabei"]) && trim($_POST["autor"]) != '' && trim($_POST["prozentualdabei"]) != '') {

Du kannst auch die ganze Zeile noch mal schreiben und die alte löschen (hört sich blöd an, hat mir aber schon ein paar mal geholfen :D, da ich den Baum vor lauter Bäumen nicht gesehen habe)
 
Hab das Problem zwar schon gelöst (war alles richtig, habe wohl vergessen meine Datein zu aktualisieren und erneut hochzuladen :D sry!) aber schön das du auf die Codezeile eingehst.

Das war mein nächstes Problem:
Der soll meckern, wenn da jemand sein Name oder Prozentzahl nicht eingibt, aber macht er nicht.!

Wenn ich dein geposteten Code verwende, meckert er NUR noch rum, auch wenn ich alles Eintrage ^^
 
dann hast du scheinbar nicht ganz die geforderte bedingung verstanden!
für die abfrage musste du natürlich den if-block gegen den else-block tauschen.. hätte ich dazuschreiben müssen, tut mir leid!
 
Löschen.

PHP:
$result = mysql_query("    SELECT
                            Autor,
                               Prozentualdabei,
                            Kommentar               
                           FROM
                            dabeiscript") 
                                
OR die(mysql_error());

            //"Header" von der Eintrag-Anzeige
            echo     "<table width=\"100%\" border=\"1\">";
            echo    "<tr>";
             echo    "<th width=\"17%\" scope=\"col\">Name:</th>";
             echo    "<th width=\"5%\" scope=\"col\">%</th>";
             echo    "<th width=\"78%\" scope=\"col\">Kommentar:</th>";
            echo    "</tr>";

if(mysql_num_rows($result)) {
        while($row = mysql_fetch_assoc($result)) {
        
        
            //Im Formular kann kein Html verwendet werden...
            $row['Autor'] = htmlentities($row['Autor']);
            $row['Prozentualdabei'] = htmlentities($row['Prozentualdabei']);
            $row['Kommentar'] = htmlentities($row['Kommentar']);


            
            //Einträge werden hier angezeigt....
            echo     "<tr>";
            echo    "<td>".$row['Autor']."</td>";
             echo    "<td>".$row['Prozentualdabei']."</td>";
             echo    "<td>".nl2br($row['Kommentar'])."</td>";
             echo    "</tr>";
            
            

        }}
            //Footer vom Eintrag-Anzeige
            echo     "</table>";


Das ist mein Code, für die Anzeige.
Also hier werden die bisherigen eingetragene Daten angezeigt.

Nun möchte ich GENAU diese Liste, wieder angezeigt bekommen aber hinter jeden Eintrag ein "löschen" haben.

Wie genau würde das aussehen`?
 
einfach hinter jeden beitrag ein link setzen "löschen" und dann auf eine datei verlinken mit ?id=id des dokumtens und dann in der Datei:
PHP:
$sql="DELETE FROM table WHERE id = '".$_GET['id']."'";
und den rest so wies war...
 
nein. jeder eintrag in der datenbank sollte eine ID haben, d.h. es sollte jede zeile ein spalte namens id haben in der sich eine eindeutige zahl befindet.

der link sieht dann so aus
Code:
<a href="delete.php?id=<?php echo $id_des_eintrags; ?>"> Löschen </a>

und dann verwendest du den code von rexini:
delete.php
PHP:
$sql="DELETE FROM table WHERE id = '".$_GET['id_des_eintrags']."' LIMIT 1";
 
nein. jeder eintrag in der datenbank sollte eine ID haben, d.h. es sollte jede zeile ein spalte namens id haben in der sich eine eindeutige zahl befindet.

der link sieht dann so aus
Code:
<a href="delete.php?id=<?php echo $id_des_eintrags; ?>"> Löschen </a>

und dann verwendest du den code von rexini:
delete.php
PHP:
$sql="DELETE FROM table WHERE id = '".$_GET['id_des_eintrags']."' LIMIT 1";

Danke!
Aber gibt es nicht noch ne andere Möglichkeit?
Wollte ungern NOCH eine seperate Datei (in dem falle delete.php) anlegen.

Kann man das auch irgendwie in einem Code basteln.

PHP:
   $id = $_GET['id'];  
 
    $loeschen = "DELETE FROM dabeiscript WHERE id=$id";  
    mysql_query ($loeschen) or die ("Konnte nicht geloescht werden!!!");

Aber wie mache es nun, dass er bei der Verlinkung nicht eine Datei (delete.php) ausführt sondern die $löschen

Vorschläge, Tipps und Anregungen sind gern gesehen ;)

Mfg

+
 
Zuletzt bearbeitet von einem Moderator:
klar, einfach delete.php durch die datei ersetzen die du gerne hättest
Code:
<a href="egal.php?id=<?php echo $id_des_eintrags; ?>"> Löschen </a>

oder
PHP:
<a href="<?php echo $_SERVER["PHP_SELF"]; ?>?id=<?php echo $id_des_eintrags; ?>"> Löschen </a>
wenn es die gleiche datei sein soll.

damit nur der löschvorgang ausgeführt wird, wenn der link aktiviert wurde, brauchst du noch eine überprüfung ob eine id übergeben wurde.

PHP:
if (isset($_GET["id"]) && is_numeric($_GET["id"])) {
  //löschvorgang ausführen etc.
}
 
Hey, danke!
Deine Antwort ist nachvollziehbar. Und mir fehlt leider noch die Praixs , um selber auf sowas zu kommen. :P

<a href="<?php echo $_SERVER["PHP_SELF"]; ?>?id=<?php echo $id_des_eintrags; ?>"> Löschen </a>

Eine Frage:
Hat es ein bestimmten Grund, dass du die PHP-Befehle /Tags in <?php ?> packst?

Also ich befinde mich ja sowieso in

<?php
echo ....
echo ....
etc.
?>

Da drinne werde ich auch dein Lösungsvorschlag einbinden.
Denn kann ich das <?php ?> ja weglassen, richtig?

Also

PHP:
echo "<a href=\"$_SERVER[\"PHP_SELF\"]?id=$id_des_eintrags;\"> Löschen </a>";
 
wie du am highlight erkennen kannst, geht das so nicht wie du das geschrieben hast. natürlich kannst du, wenn du dich bereits im php-code befindest die <?php und ?> weglassen, musst du sogar, aber vergiss dabei nicht, text von variablen zu trennen:

PHP:
<?php
echo "<a href=\"" . $_SERVER["PHP_SELF"] . "?id=" . $id_des_eintrags . "\"> Löschen </a>";
?>

ich mache echo ausgaben grundsätzlich mit ', dann kann ich mir meist das escapen sparen:
PHP:
<?php
echo '<a href="' . $_SERVER["PHP_SELF"] . '?id=' . $id_des_eintrags . '"> Löschen </a>';
?>
 
wie du am highlight erkennen kannst, geht das so nicht wie du das geschrieben hast. natürlich kannst du, wenn du dich bereits im php-code befindest die <?php und ?> weglassen, musst du sogar, aber vergiss dabei nicht, text von variablen zu trennen:

PHP:
<?php
echo "<a href=\"" . $_SERVER["PHP_SELF"] . "?id=" . $id_des_eintrags . "\"> Löschen </a>";
?>

ich mache echo ausgaben grundsätzlich mit ', dann kann ich mir meist das escapen sparen:
PHP:
<?php
echo '<a href="' . $_SERVER["PHP_SELF"] . '?id=' . $id_des_eintrags . '"> Löschen </a>';
?>


Aber wo bleibt der Teil???

PHP:
    $loeschen = "DELETE FROM dabeiscript WHERE id=$id";  
    mysql_query ($loeschen) or die ("Konnte nicht geloescht werden!!!");

Woher weiß, dein geposteter Link denn dass er was löschen soll!?

(Sorry für die Nachfragen, aber ich will ja nicht einfach Copy&Paste machen sondern den Code auch verstehen :P ;) An der Stelle danke für deine Geduld ^^)
 
der teil kommt doch zwischen diese Bedingung
PHP:
if (isset($_GET["id"]) && is_numeric($_GET["id"])) {
  //löschvorgang ausführen etc.
}

$id_des_eintrags wäre dann = $_GET["id"]

also
PHP:
$loeschen = "DELETE FROM dabeiscript WHERE id= '" . $_GET["id"] . "'";

wie gehabt
 
Man, ich glaube ich tue mich damit echt schwer. :D
Das Prinzip habe ich eigentlich schon verstanden, aber irgendwie bin ich trotzdem durcheinander.

Also ich habe hier nun meine delete.php (passwortschützen tue ich später..^^ erstmal den blöden Löschlink hinbekommen)

PHP:
<?php
include ('connect.php'); // Verbindung zur MySQL-Datenkbank


$result = mysql_query("    SELECT
                            Autor,
                               Prozentualdabei,
                            Kommentar               
                           FROM
                            dabeiscript") 
                                
OR die(mysql_error());

            //"Header" von der Eintrag-Anzeige
            echo     "<table width=\"100%\" border=\"1\">";
            echo    "<tr>";
             echo    "<th width=\"17%\" scope=\"col\">Name:</th>";
             echo    "<th width=\"5%\" scope=\"col\">%</th>";
             echo    "<th width=\"58%\" scope=\"col\">Kommentar:</th>";
             echo    "<th width=\"20%%\" scope=\"col\">Loeschen:</th>";
            echo    "</tr>";

if(mysql_num_rows($result)) {
        while($row = mysql_fetch_assoc($result)) {
        
        
            //Im Formular kann kein Html verwendet werden...
            $row['Autor'] = htmlentities($row['Autor']);
            $row['Prozentualdabei'] = htmlentities($row['Prozentualdabei']);
            $row['Kommentar'] = htmlentities($row['Kommentar']);


            
            //Einträge werden hier angezeigt....
            echo     "<tr>";
            echo    "<td>".$row['Autor']."</td>";
             echo    "<td>".$row['Prozentualdabei']."</td>";
             echo    "<td>".nl2br($row['Kommentar'])."</td>";
            echo    "<td>HIER SOLL DER LÖSCH-LINK hin..^^</td>";
             echo    "</tr>";
            
            

        }}
            //Footer vom Eintrag-Anzeige
            echo     "</table>";






?>

Ihr habt mir zwar alle nett geholfen aber ich bin mir nun nicht mehr wirklich sicher, wo ich welchen Code-Baustein wo einsetzen muss.

Also den Löschlink setze ich da oben in der Tabelle für "Hier soll der Löschlink hin" ein

aber wo kommt das andere genau hin?
 
Zurück
Oben