Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Daten werden nicht gespeichert [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Daten werden nicht gespeichert


 
Spunk95
19-08-2010, 21:17 
 
Hi, ich bins wieder :)
Bin übrigens bis jetzt sehr zufrieden und glücklich über die Hilfe die ich hier bekommen habe, vielen Dank dafür ;)

Zu meinem neuen Problem:
Bei manchen SQL Anfragen werden die Daten einfach nicht gespeichert, bei anderen schon. Es kommt keine Fehlermeldung, es scheint alles zu klappen, aber die Daten werden nicht eingetragen..

Hier ein Beispiel (Es geht um eine Bewertung):

Das Formular:

<form action="index.php?s=creation&id=<?echo $cid?>&add=vote" method="post">
<select name="vote">
<option value="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
</select>
<input type=submit id="settings_box_vote" name="submit" value="Vote">
</form>



Der Insert Code: if($_GET["add"] == "vote")
{
if ($_POST["vote"] != "")
{

$sql_vote = "INSERT INTO votes (from, stars, cid)
VALUES ('".$username."', '".$_POST["vote"]."', '".$cid."')";
mysql_query($sql_vote);
echo "Vote eingetragen";
}
else
{
echo "Kein Vote angegeben";
}
}

Die Datenbank sieht so aus:

id int(30) Nein Kein AUTO_INCREMENT from varchar(30) latin1_swedish_ci Nein Kein
stars varchar(3) latin1_swedish_ci Nein Kein
cid varchar(30) latin1_swedish_ci Nein Kein
deleted varchar(3) latin1_swedish_ci Nein 0

Hab ein Bild angehängt ;)


Ich hab mir den Code jetzt seit Tagen angeschaut, aber ich komm nicht auf den Fehler :(

Ich hoffe jemand von euch findet ihn, vielen Dank im Vorraus ;)

 
combie
19-08-2010, 21:21 
 
Wenn der INSERT fehl schlägt, meldet MySQL einen Fehler. Du aber ignorierst dieses.
Dein Code ist (höchstwahrscheinlich) anfällig für SQL Injections.
Wenn du die unterbindest, dann sollte auch das Speichern zuverlässig klappen.

Tipp:
mysql_error()
mysql_real_escape_string()

 
Spunk95
19-08-2010, 21:29 
 
Wenn der INSERT fehl schlägt, meldet MySQL einen Fehler. Du aber ignorierst dieses.
Dein Code ist (höchstwahrscheinlich) anfällig für SQL Injections.
Wenn du die unterbindest, dann sollte auch das Speichern zuverlässig klappen.

Tipp:
mysql_error()
mysql_real_escape_string()

Danke für die schnelle Antwort, habs keider noch nicht ganz verstanden :o
Soll ich noch ne if Anfrage einbauen, für denn Fall, dass es Fehlschlägt? Die beiden Tipps kenn ich nicht so gut, hab ich noch nice benutzt :D Aber ich denke mal du meinst es so oder?

if (!isset ($sql_vote)){
echo mysql_error($sql_vote);
}

 
combie
19-08-2010, 21:32 
 
if (!isset ($sql_vote)){
echo mysql_error($sql_votes);
}
Quatsch!

Warum schaust du nicht mal ins Handbuch?

 
Spunk95
19-08-2010, 21:42 
 
Hab grade in das PHP Handbuch hier geschaut (oder welches meinst du?)... Aber da hab ich dazu nichts gefunden. Ich weiß auch nicht genau wonach ich suchen soll ;)
Find ich den Fehler nun wenn ich ihn ausgeben lasse oder anders?

 
combie
19-08-2010, 21:58 
 
Was sagt das Handbuch zu mysql_query() ?

Richtig, es liefert bei einem erfolgreichen Insert True und bei einem fehlgeschlagenen False!
Prüfe das!
Nutze das!
Lasse dir im Fehlerfall den Fehler mit mysql_error() zeigen.

mysql_real_escape_string() mittlerweile eingebaut?
Nein?
Warum nicht?
Tue das.

Find ich den Fehler nun wenn ich ihn ausgeben lasse
Solange du das ignorierst, wirst du ihn nicht finden.

 
Spunk95
19-08-2010, 22:05 
 
Die Fehlermeldung:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from, stars, cid) VALUES ('Spunk', '1', '3')' at line 1

mysql_real_escape_string() werd ich mir jetzt durchlesen, also was das ist :)
Danke

 
combie
19-08-2010, 22:16 
 
near 'from
from ist ein reserviertes Wort!
Siehe: "SELECT bla FROM blub"

Es ist also keine gute Idee dieses Wort als Spaltennamen zu verwenden. MySQL ist allerdings gnädig und erlaubt es den Begriff in Backticks zu setzen.

mysql_real_escape_string() werd ich mir jetzt durchlesen, also was das ist
Ja, das solltest du tun!
Und nicht nur lesen, sondern auch einsetzen!

 
Spunk95
19-08-2010, 22:28 
 
Du bist ein Held!

Hab mysql_real_escape_string() jetzt eingebaut und vor allem from in from_user umbenannt und jetzt funktioniert es :)

Vielen vielen Dank :)

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 05:18 Uhr.