php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 15.04.2006, 00:16  
Erfahrener Benutzer
 
Registriert seit: 14.04.2006
Beiträge: 111
tayke
Standard Eintrag in die Datenbank klappt nicht

Hallo,

ich möchte wie folgt einen Titel in eine Datenbank schreiben, nur leider wird nichts übertragen.
Die Verbindung klappt und es wird auch ein leerer Eintrag in der Datenbank erstellt.

Code:
<?php
if(!empty($_POST['submit'])){
$link = mysql_pconnect('localhost','root','passwort');


if (!$link) {
   die('keine Verbindung möglich:' . mysql_error());
}
echo 'Verbindung erfolgreich';

mysql_select_db('test');
$title = trim($_POST['titel']);
mysql_query('INSERT INTO testtabelle (titel) VALUES('$titel')');
}
?>


<form name="eintrag" method="post">
<input name="titel" type="text">


<input type="submit" name="submit" value="Eintragen">
</form>
Falls man das "besser" schreiben kann, könnt ihr mir gerne Tipps geben!
tayke ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 15.04.2006, 00:27  
Gast
 
Beiträge: n/a
Standard

ähm nunja also ich würde mal sagen, du hast das formular ohne irgendwelche verbindung zu deinem php teil stehen.
so von den überlegungen her schon gut

PHP-Code:
<?php
$con 
mysql_connect("localhost","root","passwort") or die("Keine Verbindung möglich!"); 
    echo 
mysql_error();
    
mysql_select_db(test,$con) or die("Auswahl der Datenbank fehlgeschlagen");

?>
<form name="eintrag" method="post">
<input name="titel" type="text">


<input type="submit" name="submit" value="Eintragen">
</form>
<?php
    
if($_SERVER['REQUEST_METHOD'] == "POST")
    {
        
$_POST['titel'] = strip_tags($_POST['titel']);            
        if(empty(
$_POST['titel']))
            echo 
"Keinen Titel angegeben!
"
;
         }
        else
        {    
          
$sql="INSERT INTO guestbook ( id, titel)
          VALUES (
          '', 
          '"
.$_POST['titel']."'
          )"
;
          
$res mysql_query($sql) or die(mysql_error());
             }
 
    
mysql_close()    
?>
hoffe hab jetzt keinen fehler nach dem feuchtfröhlichen abend gemacht, musst du mal testen aber dann dürfte es funktionieren.

aber so würde ich das ganze lösen.

mfg jensa
 
Alt 15.04.2006, 00:55  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard Re: Eintrag in die Datenbank klappt nicht

Zitat:
Zitat von tayke
PHP-Code:
<?php
mysql_query
('INSERT INTO testtabelle (titel) VALUES('$titel')');
?>
Falls man das "besser" schreiben kann, könnt ihr mir gerne Tipps geben!
Man könnte ihn einrücken.

Such Dir mal einen Editor mit Syntax-Highlighting. Dann siehst Du sofort, dass die Anführungszeichen Mist sind.

Bist Du sicher, dass da überhaupt was eingetragen wird?
Der obige Code bringt einen Syntax-Error wernn er mal ausgeführt werden sollte.

Ich werfe mal meine Glaskugel an und vermute, dass Du ein Formular hast, wo der Submit-Button "zufällig" auch submit heißt.
Und mit dem IE ist der Name nicht gesetzt.
Daher wird der Code wohl nie ausgeführt. Ohne das Formular zu sehen ist das aber ne Vermutung.

@jensa:
Wenn Du noch verrätst, wo der Eintrag für die Spalte 'id' herkommen soll, könnte man mal über Deinen Vorschlag reden.
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
Alt 15.04.2006, 01:31  
Gast
 
Beiträge: n/a
Standard Re: Eintrag in die Datenbank klappt nicht

Zitat:
Zitat von Der_Gerhard
Ich werfe mal meine Glaskugel an und vermute, dass Du ein Formular hast, wo der Submit-Button "zufällig" auch submit heißt.
Und mit dem IE ist der Name nicht gesetzt.
Ach ja?
Code:
<?php 

if (! isset($_POST['text'])) 
    $_POST['text'] = ''; 

printf('<form action="%s" method="post"> 
<input type="text" name="text" value="%s"> 
<input type="submit" name="submit" value="Los!"> 
</form>', 
    $_SERVER['SCRIPT_NAME'], 
    $_POST['text']); 

print '<pre>';
print_r($_POST); 
print '</pre>';
print $_SERVER['HTTP_USER_AGENT'];
?>
Ausgabe (nach dem Klick auf Submit):
Zitat:
Array
(
[text] => blubb
[submit] => Los!
)

Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)
Welche IE Version meinst Du denn eigentlich?
 
Alt 15.04.2006, 03:09  
Moderator
 
Benutzerbild von agrajag
 
Registriert seit: 02.10.2006
Beiträge: 3.820
PHP-Kenntnisse:
Fortgeschritten
agrajag wird schon bald berühmt werdenagrajag wird schon bald berühmt werden
Standard Re: Eintrag in die Datenbank klappt nicht

Zitat:
Zitat von ignatz
Zitat:
Zitat von Der_Gerhard
Ich werfe mal meine Glaskugel an und vermute, dass Du ein Formular hast, wo der Submit-Button "zufällig" auch submit heißt.
Und mit dem IE ist der Name nicht gesetzt.
Ach ja?
Ja - kann passieren.

[quote][...]Ausgabe (nach dem Klick auf Submit):
Zitat:
Array
(
[text] => blubb
[submit] => Los!
)
Wenn du nicht klickst sondern das Formular per ENTER abschickst, schickt der IE (zumindest in den Versionen die ich kenne) den Wert des Submit-Buttons nicht mit....
__________________
Today you...Tomorrow me.
agrajag ist offline  
Alt 15.04.2006, 07:28  
Erfahrener Benutzer
 
Registriert seit: 13.11.2005
Beiträge: 2.583
xabbuh
Standard Re: Eintrag in die Datenbank klappt nicht

Zitat:
Zitat von Werbegeschenk
Wenn du nicht klickst sondern das Formular per ENTER abschickst, schickt der IE (zumindest in den Versionen die ich kenne) den Wert des Submit-Buttons nicht mit....
Das ist dann allerdings unabhängig davon, wie der Submit-Button heißt.
xabbuh ist offline  
Alt 15.04.2006, 07:45  
Gast
 
Beiträge: n/a
Standard

Zitat:
Die Verbindung klappt und es wird auch ein leerer Eintrag in der Datenbank erstellt.
Also liegt es nicht an der Verzweigung.

Beschäftigen wir uns lieber mal damit:
Code:
$title = trim($_POST['titel']);
Besser so:
Code:
$title = get_magic_quotes_gpc() 
    ? trim($_POST['titel'])
    : mysql_escape_string(trim($_POST['titel']));
Und da geht es weiter:
Code:
mysql_query('INSERT INTO testtabelle (titel) VALUES('$titel')');
Die Zeile ist syntaktisch falsch.
Code:
mysql_query("INSERT INTO testtabelle (titel) VALUES('$titel')");
Das Leerzeichen nach VALUES fehlt:
Code:
mysql_query("INSERT INTO testtabelle (titel) VALUES ('$titel')");
Und eine Fehlermeldung wäre auch nicht schlecht:
Code:
mysql_query("INSERT INTO testtabelle (titel) VALUES ('$titel')") OR die(mysql_error());
 
Alt 15.04.2006, 08:06  
Gast
 
Beiträge: n/a
Standard

Das Leerzeichen ist an dieser Stelle egal, da die Klammer als Trennzeichen wirkt. Und wenn da
INSERT INTO testtabelle(titel)VALUES('$titel')
steht, ist es mysql auch recht. Besser lesbarer finde ich es aber mit Leerzeichen auch.
Eingerückt über mehrere Zeilen verteilt sogar noch mehr, aber bei so einem kleinen Statement ist das nicht wild.

Da es eigentlich für das restliche Skript nicht wichtig ist, ob es einen POST-Wert submit gibt, kann man auch einfach auf titel abtesten - also das, was wirklich benötigt wird.

Mysql stört sich nicht an html Elementen, aber bspw an Anführungszeichen. Also nicht strip_tags sondern mysql_real_escape_string
magic_quote bzw addslashes ist unzureichend. Wenn magic_quotes gesetzt ist, muss es erst mit stripslashes rückgängig gemacht und dann mysql_real_escape_string angewendet werden.

Und dann noch bei select_db eine Fehlerbehandlung und alles, was abgetestet werden muss, ist abgedeckt.

PHP-Code:
<?php
error_reporting
(E_ALL);
ini_set('display_errors'true);
?>
<html>
    <head>
        <title>Datenbanktest</title>
    </head>
    <body>
        POST:

        <pre><?php print_r($_POST); ?></pre>
        <hr />
<?php
if(!empty($_POST['titel'])) {
    
$link mysql_connect('localhost','localuser','localpass')
        or die(
'keine Verbindung möglich:' mysql_error());
    
    echo 
"<div>Verbindung erfolgreich</div>\n";

    
mysql_select_db('test'$link)
        or die(
mysql_error());
        
    
$titel =     get_magic_quotes_gpc()
        ? 
mysql_real_escape_string(trim(stripslashes($_POST['titel'])), $link)
    : 
mysql_real_escape_string(trim($_POST['titel']), $link);
    
    
$query "INSERT INTO testtabelle (titel) VALUES('$titel')";
    echo 
'<div>wird ausgeführt: 'htmlentities($query), "</div>\n";
    
    
mysql_query($query$link)
        or die(
mysql_error());
}
?>
        <form name="eintrag" method="post">
            <div>
                <input name="titel" type="text">
                

                <input type="submit" value="Eintragen">
            </div>
        </form>
    </body>
</html>
 
Alt 15.04.2006, 08:53  
Erfahrener Benutzer
 
Registriert seit: 14.04.2006
Beiträge: 111
tayke
Standard

Ahh, danke für eure Antworten!

@Bruchpilot
Wenn ich jetzt ein weiteres Eingabefeld hinzufügen möchte, was muss dann noch alles bei deinem Beispiel dazu?
tayke ist offline  
Alt 15.04.2006, 08:59  
Gast
 
Beiträge: n/a
Standard

- abtesten ob der notwendige Wert vorhanden ist (und gültig)
- Wert für sql Abfragen sichern (bswp mysql_real_escape_string)
- gesicherten Wert in die Abfrage einbauen

Wenn es mehr Werte werden und Du entsprechende Fehlermeldungen ausgeben willst und das Formular jeweils mit den Eingaben des Benutzer beibehalten willst, nimmt Dir http://pear.php.net/package/HTML_QuickForm einen Teil der Arbeit ab.
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Eintrag in der Datenbank überprüfen Medium PHP Tipps 2008 5 05.01.2008 09:59
SQL Datenbank eintrag funktioniert nicht! TaStEn PHP Tipps 2007 12 28.02.2007 10:58
Menü mit Unterpunkten supertramp Beitragsarchiv 7 18.10.2005 22:40
checkboxen, problematik beim Datenbank eintrag PHP Tipps 2005-2 3 02.09.2005 20:51
per E-Mail link ein Datenbank eintrag Datenbanken 16 26.08.2005 19:13
datenbank abfrage findet eintrag nicht PHP Tipps 2005-2 3 11.08.2005 19:52
[Erledigt] Variable mit Eintrag aus Datenbank vergleichen Datenbanken 3 31.03.2005 11:21
[Erledigt] Eintrag in Datenbank erstellen Datenbanken 5 28.12.2004 12:53
Eintrag in Datenbank PHP Tipps 2004-2 4 27.12.2004 22:19
Eintrag in Datenbank mittels Formular? Datenbanken 5 16.12.2004 17:36
Eintrag in MySQL datenbank Tschuu PHP Tipps 2004-2 3 14.12.2004 17:02
Datenbank Abfrage mit Unterseiten pro Eintrag PHP Tipps 2004 6 14.10.2004 16:05
wo ist der Fehler? Eintrag aus Datenbank löschen Ente PHP Tipps 2004 2 24.08.2004 15:04
Wie kann ich den lezten Eintrag wieder auslesen? Pimbolie1979 Datenbanken 7 19.08.2004 10:49
letzte eintrag in datenbank PHP Tipps 2004 9 05.07.2004 16:35


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:35 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.