Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

1

24.05.2013, 12:11

PHP / MySql Int-Post Variable ohne Wert

Hallo Community,

ja ich hatte schon mal eine ähnliche Frage, dieses mal ist es aber kein Tippfehler. Ich habe eine html-Seite die einige Variablen an mein script per Post übergibt. Wenn ich diese Werte ausgeben lasse, werden mir diese auch angezeigt. Jetzt will ich die übergebenen Werte in einen neuen Datensatz in der MySql Datenbank einfügen. Komischerweise werden nur die String Werte eingefügt, die Spalten in denen die int-Werte stehen sollten sind gleich 0.

Hier mal ein Beispiel:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
$Benutzername = $_POST["Benutzername"];$Punkte= $_POST["Punkte"];

echo "Benutzer: $Benutzername <br> Punkte: $Punkte"; // Nur zur Überprüfung, damit es nicht daran liegen kann das keine Werte übergeben worden sind

include('server.php');$verbindung = mysql_connect ($Servername, $Serveruser, $Serverpasswort);

mysql_select_db($Datenbankenname);

$abfrage = "INSERT INTO `Higscore`(`Benutzername` ,`Punkte`) VALUES ('$Benutzername',  '$Punkte')";

$ergebnis = mysql_query($abfrage); 



Gibt z.b.
"Benutzer: User1
Punkte: 15"
zurück, aber in der Datenbank sieht die neue Zeile so aus: "User1 | 0". Woran kann das liegen?
Ich übergebe die Variablen mit unsichtbaren Textfeldern.

Damit es nicht an der Tabelle liegt, ohne übergebene Werte funktioniert es:

Quellcode

1
2
3
4
5
6
7
$Benutzername = "User2";
$Punkte= 25;
include('server.php');
$verbindung = mysql_connect ($Servername, $Serveruser, $Serverpasswort);
mysql_select_db($Datenbankenname);
$abfrage = "INSERT INTO `Higscore`(`Benutzername` ,`Punkte`) VALUES ('$Benutzername',  '$Punkte')";
$ergebnis = mysql_query($abfrage); 


Datenbankzeile: "User2 | 25".

Der Fehler liegt wahrscheinlich daran, dass die übergebenen Werte von Typ String sind, die Tabelle aber einen Int-Wert benötigt. Wenn ich einfach vor die jeweiligen Variablen "(int)" schreibe, haben diese auch den Wert 0. Woran kann das liegen?

Danke schon mal für die Hilfe.

patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

2

24.05.2013, 16:24

mach mal ein var_dump($Punkte); und sieh dir die Ausgabe an. Ist dort wirklich nur die Zahl, oder ein paar zusätzliche Zeichen im String?

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

3

24.05.2013, 17:21

Kannst auch mal versuchen explizit zu casten (ja das geht in PHP):

Quellcode

1
$abfrage = "INSERT INTO `Higscore`(`Benutzername` ,`Punkte`) VALUES ('$Benutzername',  '".(int)$Punkte."')";


Dann wie bereits gesagt, testen ob in der übergebenen Variable keine anderen Zeichen stehen.
Übrigens sollte man niemals (!) einfach so Werte aus einem Formular in die Datenbank schreiben.

Sichergehen das nichts passiert:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
function secureInput($input){
    $input = trim(htmlentities($input));
    
    if(get_magic_quotes_gpc()){
        $input = stripslashes($input);
    }
    
    $input = mysql_real_escape_string($input);
    
    return $input;
}

patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

4

24.05.2013, 17:44

Die sicherste Möglichkeit sind aber Prepared Statements, wenn möglich würde ich sie immer verwenden.

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

5

24.05.2013, 17:45

magic quotes? wtf? das gibt es seit 5.4 gar nicht mehr...

Lieber einfach prepared statements und gut ist.

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

6

25.05.2013, 11:21

Ok, danke für die vielen Antworten.
var_dump lieferte folgendes:

Zitat

string(4) "2"

Wenn ich es mit echo Ausgeben lasse, sehe ich nur die 2, also der Wert der Textbox. Was bedeutet die "4" in "string(4)", der Wert der Variable ist doch 2?

Quellcode

1
.(int)$Punkte.

Das verändert leider auch nichts, die Spalte hat immer noch den Wert "0".

Was mich wundert: Warum ist es denn so schlimm das die Variable vom Typ String ist, ich übergebe doch die Abfrage sowieso als String Wert.
Woran könnte es sonst noch liegen?

Und wenn ich gleich am Anfang die Werte so übernehme:

Quellcode

1
$Punkte = (int) $_POST["Punkte"];

Gibt mit var_dump das aus "int(0)", dann hab ich zwar einen Integerwert, der aber leider nun immer 0 ist.

Und wenn ich folgendes teste:

Quellcode

1
2
3
4
if (is_numeric($_POST['Punkte']))
    {
        echo "Kann umgewandelt werden.";
    }

wird mir nichts ausgegeben.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »MitgliedXYZ« (25.05.2013, 11:31)


DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

7

25.05.2013, 11:42

Zitat

magic quotes? wtf? das gibt es seit 5.4 gar nicht mehr...

Ups, ist nicht meine Funktion, ich guck nicht ständig nach was up-to-date ist. Ist bei PHP sowieso blöd.

patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

8

25.05.2013, 15:41

Die 4 bedeutet normalerweise, dass die Zeichenkette 4 Zeichen lang ist. Die normale Ausgabe sollte string(1) "2" sein, habe es gerade nachgeprüft. Kannst du mal das Formular oder den Link posten, der diese Werte übergibt?

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

9

25.05.2013, 15:46

[...] ich guck nicht ständig nach was up-to-date ist. Ist bei PHP sowieso blöd.


Das ist natürlich schwachsinn.

Aber zum Thema:
Zeig doch mal wie genau die Tabelle aussieht. Welche Typen haben die einzelnen spalten?

patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

10

25.05.2013, 16:21

Ich denke, da läuft auf der PHP-Seite schon etwas falsch, da eine Ziffer als String bei ihm 4 Zeichen hat. Ich denke, da läuft etwas bei der Wertübergabe falsch, es wäre also logisch mal den Link oder das Formular zu untersuchen.

Werbeanzeige