SQL-Eingabe über ein Formular

Alles, was PHP betrifft, kann hier besprochen werden.

SQL-Eingabe über ein Formular

Postby airis » 11. November 2004 10:01

Hallo PHP-Gemeinde,

ich habe ein Problem mit einer SQL-Eingabe über ein Formular, die vereinfacht folgendermaßen aussieht:
Code: Select all
.....
.....
.....
<form action="<?php echo $PHP_SELF ?>" method="post">
        <table border=1>
        <tr> <td align="right"> Name</td>
             <td> <input name="name" value="<?php echo $name ?>"> </td> </tr>
        <tr> <td align="right"> Vorname </td>
             <td> <input name="Vorname" value="<?php echo $vorname ?>"> </td> </tr>
        <tr> <td align="right"> &nbsp; </td>
             <td> <input value="go" type="submit">  </td> </tr>
        </table>
    </form>


<?php

        $sql = "insert into tabelle (name, vorname) "
         . "values ('$name', '$vorname')";

        $result=@mysql_query($sql,$conn)
        or die("DB-Abfrage <b>$sql</b> ist fehlgeschlagen");
        ?>

            <p>OK, Daten in die Datenbank geschrieben.
?>

.....
.....
.....

Es kommt immer folgende Meldung:
DB-Abfrage insert into tabelle (name, vorname) values ('', '') ist fehlgeschlagen.

Was muss ich anders machen, damit ich auch eine Eingabe vornehmen kann?

Danke für Eure Antworten.
Airis
airis
 
Posts: 134
Joined: 18. May 2004 12:33

Postby PF4 » 11. November 2004 11:20

Wenn das so drin steht kann das garnicht gehen,
wo is die if abfrage die feststellt ob das Forumlar bereits gesendet wurde?

So wie es da steht wird das formular ausgegeben und sofort danach das SQL Query abgesendet.
PF4
 
Posts: 528
Joined: 10. March 2003 09:15

Postby airis » 11. November 2004 12:37

Hallo PF4,

meinst Du etwa so:
Code: Select all
if($sql->anzahl > 1 ){
    Ihre Daten wurden übernommen)


bin nicht sonderlich firm in PHP, habe mir das aus mehreren Schnips zusammengebaut, vieleicht kannst Du mir helfen.

Airis
airis
 
Posts: 134
Joined: 18. May 2004 12:33

Postby Jan H. Krüger » 11. November 2004 12:49

Du könntest dein Formular wie folgt ändern:

Code: Select all
<form action="<?php echo $PHP_SELF ?>" method="post">
<input type="hidden" name="action" value="insert">
<table border=1>
  <tr>
    <td align="right"> Name</td>
    <td> <input name="name" value="<?php echo $name ?>"> </td>
  </tr>
  <tr>
    <td align="right"> Vorname </td>
    <td> <input name="vorname" value="<?php echo $vorname ?>"> </td>
  </tr>
  <tr>
    <td align="right"> &nbsp; </td>
    <td> <input value="go" type="submit">  </td>
  </tr>
</table>
</form>


Und dann vor dem SQL-Statement eine Abfrage einfügen:

Code: Select all
<?php
if (isset($action) && ($action == "insert") ) {
        $sql = "insert into tabelle (name, vorname) values ('$name', '$vorname')";
        $result=@mysql_query($sql,$conn) or die("DB-Abfrage <b>$sql</b> ist fehlgeschlagen");
}
else {
/*** Ansonsten Anzeige des Formulares ***/
...
...
...
}
?>


So wird nur dann der SQL-Code ausgeführt wenn keine Daten mit dem Formular eingegeben wurden. Wurde nicht auf den "go"-Button gedrückt wird das Formular zur Eingabe angezeigt.
Jan H. Krüger
 
Posts: 152
Joined: 24. October 2004 19:42

Postby airis » 11. November 2004 15:22

Hallo Jan H. Krüger,

habs so eingegeben, hat aber das gleiche Resultat:

DB-Abfrage insert into tabelle (name, vorname) values ('', '') ist fehlgeschlagen


kommt nun wenn ich eine Eingabe mache oder nur den GO-Button drücke.
Hast Du eine andere Idee?

Airis
airis
 
Posts: 134
Joined: 18. May 2004 12:33

Postby Jan H. Krüger » 11. November 2004 15:41

Wird die Verbindung zur Datenbank auch bereits richtig erstellt ?
Sind die Spaltennamen richtig?

Ansonsten, hier eine Variante welche definitiv funktioniert. Bitte nicht als reines Beispiel nehmen, das ist nur schnell getippt und recht unsauber.

Code: Select all
<?php
if (isset($action) && ($action == "insert") ) {
$nachname = $_POST["nachname"];
$vorname = $_POST["vorname"];

/*** Hier die entsprechenden Werte eintragen. ***/
$dbhost = "";
$dbname = "";
$dbpass = "";
$dbuser = "";
   
mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname);

$sql = "insert into namen (name, vorname) values ('$nachname', '$vorname')";
mysql_query($sql) or die("DB-Abfrage <b>$sql</b> ist fehlgeschlagen");
echo '<p>OK, Daten in die Datenbank geschrieben.</p>';
}
else {
/*** Ansonsten Anzeige des Formulares ***/
?>
<form action="<?php echo $PHP_SELF ?>" method="post">
<input type="hidden" name="action" value="insert">
<table border=1>
  <tr>
    <td align="right"> Name</td>
    <td> <input name="nachname" type="text" value="<?php echo $name ?>"> </td>
  </tr>
  <tr>
    <td align="right"> Vorname </td>
    <td> <input name="vorname" type="text" value="<?php echo $vorname ?>"> </td>
  </tr>
  <tr>
    <td align="right"> &nbsp; </td>
    <td> <input value="go" type="submit">  </td>
  </tr>
</table>
</form>

<?php
}
?>


Und hier die dazugehörige Tabellendefinition:

Code: Select all
CREATE TABLE `namen` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(100) NOT NULL default '',
  `vorname` varchar(100) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM;
Jan H. Krüger
 
Posts: 152
Joined: 24. October 2004 19:42

Postby airis » 11. November 2004 16:50

Hallo Jan H. Krüger,

funzt jetzt super, genau was ich wollte. Danke.

viele Grüsse
Airis
airis
 
Posts: 134
Joined: 18. May 2004 12:33

Postby Jan H. Krüger » 11. November 2004 16:53

Kein Problem.
Woran lag es denn bei dir, das würde mich schonmal interessieren.
Jan H. Krüger
 
Posts: 152
Joined: 24. October 2004 19:42

Postby airis » 12. November 2004 18:07

Hallo Jan H. Krüger,

Woran lag es denn bei dir, das würde mich schonmal interessieren.


Sorry, ich kann Dir keine Antwort geben, ich weis es selbst nicht. Ich probiere jetzt schon zwei Tage mit dem Sch...., aber ich komme nicht dahinter.
Mittlerweile habe ich dein Script ubernommen und es für meine Bedürfnisse angepasst. Hier bekomme ich auch diese Meldung:
OK, Daten in die Datenbank geschrieben.

nur die Zeile der Tabelle bleibt leer.
Auch bei mehrmaligen Versuchen und diversen Änderungen werden immer nur leere Zeilen erzeugt.
Kannst Du mir einen Tipp geben?

Airis
airis
 
Posts: 134
Joined: 18. May 2004 12:33

Postby Jan H. Krüger » 12. November 2004 18:18

Nicht wirklich da der obige Code sowohl jetzt hier zu Hause als auch in der Firma wo ich das schnell getippt hatte funktioniert.

Was hast du denn geändert, vielleicht ist deswegen was durcheinander gekommen ?

Nachtrag:
Gib doch mal nach den $_POST[] Befehlen die beiden Variablen aus, werden sie angezeigt? Wenn nicht, ändere mal das $_POST[] gegen $_REQUEST[]. Denke zwars nicht das das was ändert aber ausprobieren kannst du es ja mal.
Jan H. Krüger
 
Posts: 152
Joined: 24. October 2004 19:42

Postby airis » 12. November 2004 19:53

Hallo Jan,

habe in der Zwischenzeit einiges probiert, jedoch ohne Erfolg.
Eine generelle Frage:
Müssen die Tabellen-Textfelder mit denen im PHP-Script 100% übereinstimmen?
Der Hintergrund ist folgender: Ich möchte ein PHP-Programm nutzen (Tabelle Addresse mit 20 Textfelder) und dieses mit Kundendaten füllen.
Mein Datenblatt hat aber nur 15 Textfelder (ich benötige nicht mehr Daten).
Die Tabelle will die Daten einfach nicht annehmen, obwohl ich ein ok bekomme.

Airis
airis
 
Posts: 134
Joined: 18. May 2004 12:33

Postby Jan H. Krüger » 12. November 2004 20:10

Also ich weiß nicht ob ich das von dir eben wirklich verstanden habe aber ich versuch es mal.

Angenommen du hast eine Tabelle kunde in der 5 Felder (id, name, vorname, plz, ort) enthalten sind.

Um nun Daten in diese Tabelle zu speichern könntest du folgendes Statement benutzen:
INSERT INTO kunde VALUES ($id, $name, $vorname, $plz, $ort);
Damit wird ein kompletter Datensatz in die Datenbank geschrieben.

Es könnte aber nun auch sein das du nicht den Ort speichern willst. Ein:
INSERT INTO kunde VALUES ($id, $name, $vorname, $plz);
führt dabei zu einem Fehler. Das DBMS weiß einfach nicht wo es gelieferten Daten hinschreiben soll.
Um dennoch das ganze zu speichern musst du in der Abfrage genau angeben welcher Parameter in welche Spalte geschrieben werden soll:
INSERT INTO namen (id, name) VALUES (3, "Blub");
So weiß die Datenbank genau wo der Inhalt einer Variablen hin soll.

Selbstverständlich kannst du nicht mehr Daten versuchen in die Tabelle zu quetschen. Ein
INSERT INTO namen VALUES ($id, $name, $vorname, $plz, $ort, $mail);
wird wiederrum nicht gehen da hier die Datenbank nicht weiß wohin mit dem überflüssigem Wert.

Aber alle Fälle in denen es nich geht sollten eigentlich eine Fehlermeldung seitens MySQL hervorrufen.
Jan H. Krüger
 
Posts: 152
Joined: 24. October 2004 19:42

Postby airis » 12. November 2004 20:31

Hi Jan,

besten Dank für Deine schnelle Antwort.

Es ist in meinem Fall so wie von Dir beschrieben:
Es könnte aber nun auch sein das du nicht den Ort speichern willst. Ein:
INSERT INTO kunde VALUES ($id, $name, $vorname, $plz);
führt dabei zu einem Fehler.

Diese Angabe von Dir verstehe ich allerdings nicht ganz:
INSERT INTO namen (id, name) VALUES (3, "Blub");
So weiß die Datenbank genau wo der Inhalt einer Variablen hin soll.

Was ist "Blub"?
Kann ich schreiben:
insert into address (FIRSTNAME, LASTNAME, ADDRESS, CITY, POSTALCODE, COUNTRY,)
values (1,'$Firstname', 2,'$Lastname', 6,'$Address', 7,'$City', 8,'$Postalcode', '9,$Country', )";

oder habe ich Dich falsch verstanden?
Airis
airis
 
Posts: 134
Joined: 18. May 2004 12:33

Postby Jan H. Krüger » 12. November 2004 20:35

"Blub" war in diesem Falle schlicht ein Beispielwert, erkennbar an den " ". Die 3 ist die für das Beispiel gewählte ID des Datensatzes.
Ganz konkret bedeutet das Beispiel:
Schreibe die 3 in die Spalte id, schreibe den String "Blub" in die Spalte name.

Schau dir aber nochmal dein und dann mein dein Statement, völlig unabhängig davon wie die einzutragenende Werte benannt sind, ab und zähle sie mal. Die einzelnen Werte werden durch ein Komma getrennt.
Dann müsste dir schon auffallen warum dein Statement nicht funktionieren wird,
Jan H. Krüger
 
Posts: 152
Joined: 24. October 2004 19:42

Postby airis » 12. November 2004 20:52

Sorry, ich blicke nicht mehr durch.
Kann ich das so nicht machen? :
Zitat:

insert into address (FIRSTNAME, LASTNAME, ADDRESS, CITY, POSTALCODE, COUNTRY)
values (1,'$Firstname', 2,'$Lastname', 6,'$Address', 7,'$City', 8,'$Postalcode', '9,$Country')";

wenn in der Tabelle folgendes steht:
FIRSTNAME, LASTNAME, ADDRESS, CITY, POSTALCODE, COUNTRY, PHONEWORK, FAX, EMAIL, URL

oder sehe ich da etwas falsch..
airis
 
Posts: 134
Joined: 18. May 2004 12:33

Next

Return to PHP

Who is online

Users browsing this forum: No registered users and 22 guests