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

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

11

25.05.2013, 16:31

Ich würde auch mal trim benutzen. string(4) 2 kann durch Leerzeichen (oder ähnliches) verursacht werden. Allerdings erklärt das nicht, dass (int) $_POST['Punkte']; nicht funktioniert. Sehr merkwürdig das ganze.
Btw.: Es ist ratsam generell einfache Anführungszeichen zu benutzen anstatt normale. Bei normalen versucht PHP Variablen in diesem String ausfindig zu machen und zu ersetzen, was meistens unnötig und sowieso sehr schlechter Stil ist.
Sprich: $_POST['Punkte'] anstelle von $_POST["Punkte"]
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

12

25.05.2013, 19:01

So, hier also meine kompletten Dateien.

Das Formular, welches die Daten sendet (Ohne Html-Grundgerüst):

Quellcode

1
2
3
4
5
6
7
8
9
10
11
<form action="messageSend.php"  method="post">

<input name="Betreff" type="text" size="55" maxlength="55">
<textarea name="Inhalt" wrap="virtual" cols="50" rows="15"></textarea>
<input type="text" name="EmpfaengerID" value="<?php echo $AbsenderID; ?>" style="display:none;"/>
<input type="text" name="EmpfaengerK" value="<?php echo $AbsenderK; ?>" style="display:none;"/>
<input type="text" name="AbsenderID" value="<?php echo $_SESSION["ID"]; ?>" style="display:none;"/>
<input type="text" name="AbsenderK" value="0" style="display:none;"/>

<input type="submit" value=" submit "> <input type="button" value="cancel" onclick="showhide('Messagefenster');">
</form>


Und das eigentliche Script:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
session_start();

$Betreff = $_POST["Betreff"];
$Inhalt = nl2br($_POST["Inhalt"]);
$EmpfaengerID = $_POST["EmpfaengerID"];
$EmpfaengerK = $_POST["EmpfaengerK"];
$AbsenderID = $_POST["AbsenderID"];
$AbsenderK = $_POST["AbsenderK"];

$timestamp = time();
$Datum = date("d.m.Y", $timestamp);

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

$abfrage = "INSERT INTO `Nachrichten`(`Absender` ,`AbsenderK` ,`Empfaenger` ,`EmpfaengerK` ,`Betreff` ,`Nachricht` ,`Datum` ,`Gelesen`) VALUES ('.(int)$AbsenderID.',  '.(int)$AbsenderK.',  '.(int)$EmpfaengerID.',  '.(int)$EmpfaengerK.',  '$Betreff',  '$Inhalt',  '$Datum',  '0')"; 
$ergebnis = mysql_query($abfrage); 

echo "Betreff $Betreff <br>";
echo "Inhalt $Inhalt <br>";
echo "EmpfID $EmpfaengerID <br>";
echo "EmpfK $EmpfaengerK <br>";
echo "AbsID $AbsenderID <br>";
echo "AbsK $AbsenderK <br>";

if ($ergebnis == true)
{
echo "<meta http-equiv=\"refresh\" content=\"5; URL=home.php\">"; //Nach der Ausführung User zur Startseite weiterleiten
}
else
{
    echo "Error";
}
?>


Und hier der Tabellen-Aufbau der MySql-Datenbank:


Vielleicht seht ihr ja den Fehler, oder es liegt am Server(?)
Danke auf jedenfal schon mal für die Hilfe.


@Architekt
Komischerweise wenn ich die Funktion trim() benutze und danach versuche die Variable auszugeben, wird nun nichts mehr angezeigt.

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

13

25.05.2013, 20:05

Sprich du machst $punkte = trim($_POST['Punkte']); ? Und echo $punkte; gibt nichts aus? Dann war da auch nie mehr als Leerzeichen drin.
Und was soll dieser Käse eig.?

Quellcode

1
$abfrage = "INSERT INTO `Nachrichten`(`Absender` ,`AbsenderK` ,`Empfaenger` ,`EmpfaengerK` ,`Betreff` ,`Nachricht` ,`Datum` ,`Gelesen`) VALUES ('.(int)$AbsenderID.',  '.(int)$AbsenderK.',  '.(int)$EmpfaengerID.',  '.(int)$EmpfaengerK.',  '$Betreff',  '$Inhalt',  '$Datum',  '0')"; 

Wieso machst du

Zitat

' .
wenn der string doch mit

Zitat

"
eingeleitet wird? Das macht IMO keinen Sinn.
Probier mal das hier (ungeprüft):

Quellcode

1
$abfrage = 'INSERT INTO Nachrichten (Absender, AbsenderK, Empfaenger, EmpfaengerK, Betreff, Nachricht, Datum, Gelesen) VALUES ('  .  $AbsenderID  .  ',  '  .  (int)$AbsenderK . ',  ' . (int)$EmpfaengerID . ',  ' . (int)$EmpfaengerK . ',  ' . $Betreff . ',  ' . $Inhalt . ',  ' . $Datum . ',  0)';

Und guck dir mal PDO an.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

14

25.05.2013, 22:03

Dann wäre hier noch diese Zeile:

Quellcode

1
<input type="text" name="AbsenderID" value="<?php echo $_SESSION["ID"]; ?>" style="display:none;"/>

Warum schickst du die SessionID an den Client, um sie danach wieder zum Server zu schicken? Was hindert dich daran, im darauffolgenden Skript $_SESSION["ID"] auszulesen?
Es gibt ein Grundprinzip bei der Entwicklung von Webanwendungen: Jede Eingabe des Benutzers ist böse. Und dementsprechend müssen die Daten behandelt werden.

Das zweite Problem: Du erstellst Textboxen und versteckst sie mit CSS wieder. Welches Problem hast du mit type="hidden"?

Nun zu deinem Problem. Leider werden jetzt andere Bezeichner verwendet, aber ich gehe mal davon aus, dass das Problem bei allen ints besteht. Kann es damit zusammenhängen, dass value über PHP gesetzt wird?

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

15

25.05.2013, 22:58

Dann wäre hier noch diese Zeile:

Quellcode

1
<input type="text" name="AbsenderID" value="<?php echo $_SESSION["ID"]; ?>" style="display:none;"/>

Warum schickst du die SessionID an den Client, um sie danach wieder zum Server zu schicken? Was hindert dich daran, im darauffolgenden Skript $_SESSION["ID"] auszulesen?

$_SESSION['ID']
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

16

26.05.2013, 11:26

Ok, danke für die Antworten, die CSS-Eigenschaft des Textfeldes habe ich geändert.

@Architekt:

Quellcode

1
$abfrage = "INSERT INTO `Nachrichten`(`Absender` ,`AbsenderK` ,`Empfaenger` ,`EmpfaengerK` ,`Betreff` ,`Nachricht` ,`Datum` ,`Gelesen`) VALUES ('.(int)$AbsenderID.',  '.(int)$AbsenderK.',  '.(int)$EmpfaengerID.',  '.(int)$EmpfaengerK.',  '$Betreff',  '$Inhalt',  '$Datum',  '0')"; 

Erzeugt folgende Ausgabe:

Was bedeutet die Abfrage wurde zumindest erfolgreich ausgeführt.

Deine Version

Quellcode

1
$abfrage = 'INSERT INTO Nachrichten (Absender, AbsenderK, Empfaenger, EmpfaengerK, Betreff, Nachricht, Datum, Gelesen) VALUES ('  .  $AbsenderID  .  ',  '  .  (int)$AbsenderK . ',  ' . (int)$EmpfaengerID . ',  ' . (int)$EmpfaengerK . ',  ' . $Betreff . ',  ' . $Inhalt . ',  ' . $Datum . ',  0)';

Erzeugt auch die gleiche Ausgabe, nur mit dem vermerk "Error", was ausgegeben wird, wenn die Abfrage nicht durchgeführt werden konnte. Ich denke die Spaltennamen müssen in Anführungszeichen stehen, ist in PhpMyAdmin das gleiche. Warum müssen vor und hinter den Punkten Leerzeichen stehen?


Meine letzter Gedanke wäre nun die Daten zur Not als Cookies zu speichern und dann mit dem anderen Script auszulesen. Wäre zwar etwas umständlich und wahrscheinlich noch leichter zu manipulieren, aber ich hätte dann wenigstens kein Problem mit dem Datentyp mehr.

Edit:
Ok war nur ein Anführungszeichen zu wenig, jetzt klappt die Abfrage ohne Anführungszeichen beim Spaltenname im PhpMyAdmin, aber das hat ja auch schon vorher funktioniert, das Problem ist im Script immer noch der Datentyp.
Bei der gleichen Abfrage im Script erscheint aber Error.

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »MitgliedXYZ« (26.05.2013, 11:37)


Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

17

26.05.2013, 11:34

Die Leerzeichen müssen nicht dahin, sieht aber übersichtlicher aus. Aber du solltest dir wirklich nochmal was zu PHP durchlesen, du kommst ja völlig durcheinander wann du einfache und wann doppelte Anführungszeichen benutzt...
Mein Tipp: Nimm PDO und die Prepared Statements, wie schon vorgeschlagen.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

18

26.05.2013, 11:56

Ok, der Fehler liegt wirklich nicht an der Formularübertragung.
Habe jetzt alle Int-Werte schon vorher in des Session-Array abgespeichert und dann mit dem anderen Script wieder ausgelesen, wenn ich die Daten mit echo ausgebe, kommen sie auch an, aber die Datenbank liefert wieder Error.

Hab nochmal mit var_dump() die Variablen überprüft, Leerzeilen scheinen nun nicht mehr dabei zu sein, dennoch ist der Datentyp bei String.
Ausgabe:

Zitat

string(1) "2"

Und nun lies sich der Wert auch gleich am Anfang in Int umwandeln:

Zitat

int(2)

Wobei, ist die Umwandlung nun erfolgreich, also sagt mir die Ausgabe das der int-Wert bei 2 liegt, oder sagt mir diese Ausgabe, dass der Wer leer ist aber die Zahl zweistellig?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »MitgliedXYZ« (26.05.2013, 12:03)


Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

19

26.05.2013, 12:59

int(2) sagt dass die Variable den Wert 2 hat und es sich um einen Integer handelt.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

20

26.05.2013, 15:01

Ok, das Thema kann als erledigt betrachtet werden, das Script funktioniert nun.
Die Übertragung der Integer-Werte per Post funktioniert bei mir zwar immer noch nicht, aber da ich alle Daten nun im Session-Array auf dem Server speichere funktioniert es nun auch.

Hier mal die funktionierende Sql-Abfrage:

Quellcode

1
$abfrage = "INSERT INTO `Nachrichten`(`Absender` ,`AbsenderK` ,`Empfaenger` ,`EmpfaengerK` ,`Betreff` ,`Nachricht` ,`Datum` ,`Gelesen`) VALUES ('.$AbsenderID.',  '.$AbsenderK.',  '.$EmpfaengerID.',  '.$EmpfaengerK.',  '$Betreff',  '$Inhalt',  '$Datum',  '0')";


Danke auf jedenfall für eure Hilfe.

Werbeanzeige