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)
mysql_query wird nicht ausgeführt, keine Fehlermeldung [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
mysql_query wird nicht ausgeführt, keine Fehlermeldung


 
Spunk95
16-02-2011, 18:47 
 
function sendanswer ($pmid,$uid,$text){
$timestamp = time();
$text = mysql_real_escape_string($text);
$sql = mysql_query("
INSERT INTO msg_answers (pmid, uid, text, date)
Values ('".$pmid."', '".$uid."', '".$text."', '".$timestamp."')");
if($sql){
$update = mysql_query("
UPDATE msg SET opened = '".$uid."'
AND last_answer = '".$timestamp."'
WHERE id = '".$pmid."'");
if($update){
return true;
}else{
return false;
}
}else{
return false;
}
}


Ich habe diese Funktion geschieben um Antworten auf bereits bestehende Nachrichten einzutragen. Das eintragen der Antwort klappt auch, aber die Hauptnachricht wird nicht aktualisiert (also das zweiter mysql_query). Es kommt aber auch keine Fehlermeldung selbst mit report all errors.

Hab ich einen Fehler im Code oder weiß jemand woran es liegen könnte?

// Lösung:

Statt And muss bei einer Update Anfrage ein Komma stehen.

 
wahsaga
16-02-2011, 18:55 
 
Zum x-tausendsten Mal: mysql_error nutzen!

 
onemorenerd
16-02-2011, 18:55 
 
mysql_error

 
Spunk95
16-02-2011, 18:59 
 
Hab ich doch... Wie oben gesagt, es kommt keine Fehlermeldung

 
h3ll
16-02-2011, 19:00 
 
In dem Code ist nirgendwo ein Aufruf von mysql_error().

 
AmicaNoctis
16-02-2011, 19:01 
 
Wenn du es nicht verstehst, schlag es nach und hör auf mit "hab ich doch". Hast du eben nicht, du gibst lediglich false zurück, statt mysql_error() abzufragen!

 
Spunk95
16-02-2011, 19:04 
 
Nicht immer gleich beleidigend werden. Ich hab eine Version ohne mysql_error gepostet, aber ich habs natürlich auch mit ausprobiert.

function sendanswer ($pmid,$uid,$text){
$timestamp = time();
$text = mysql_real_escape_string($text);
$sql = mysql_query("INSERT INTO msg_answers (pmid, uid, text, date)
Values ('".$pmid."', '".$uid."', '".$text."', '".$timestamp."')");
if($sql){
$update = mysql_query("UPDATE msg SET opened = '".$uid."'
AND last_answer = '".$timestamp."'
WHERE id = '".$pmid."'");
if($update){
?><div class="warning"><?echo mysql_error();?></div><?
return false;
}else{
return false;
}
}else{
return false;
}
}

Dann gebe ich übrigens false zurück, damit man die Fehlermeldung auch sieht (bei true wird man weitergeleitet).

 
wahsaga
16-02-2011, 19:08 
 
Nicht immer gleich beleidigend werden.
Gut - du dann aber bitte nicht immer mit ausgeschalteten Gehirn programmieren.

$update = mysql_query("UPDATE msg SET opened = '".$uid."' AND last_answer = '".$timestamp."' WHERE id = '".$pmid."'");
if($update){
?><div class="warning"><?echo mysql_error();?></div>
Wenn die Query erfolgreich verarbeitet werden konnte, gibt mysql_error natürlich nichts aus - also ist es witzlos, dass du es nur in genau dem Fall aufrufst.

 
Spunk95
16-02-2011, 19:11 
 
Das ist ja das seltsame: Obwohl es nicht gemacht wird, scheint es zu kappen. Die Klasse "warning" wird ja angezeigt, nur halt ohne Text.

 
onemorenerd
16-02-2011, 19:17 
 
Setze mysql_error vors erste if!

 
Spunk95
16-02-2011, 19:23 
 
Auch dann leider keine Meldung..

 
wahsaga
16-02-2011, 19:30 
 
Dann bau ganz oben in die Funktion eine nicht bedingungsabhängige Kontrollausgabe ein - um erst mal zu schauen, ob die Funktion auch ausgeführt wird, oder ob du an der ganz falschen Stelle suchst ...

function sendanswer ($pmid,$uid,$text){
die('Wir befinden uns in sendanswer()!');
$timestamp = time();
// ...

 
Spunk95
16-02-2011, 19:32 
 
Die Funktion wird ja auf jeden Fall ausgeführt, weil die Klasse warning erscheint und die Antwort wird ja auch eingetragen...
Aber danke für den Vorschlag :)

// habs ausprobiert, "Wir befinden uns in sendanswer()" wird angezeigt.

 
litterauspirna
16-02-2011, 19:34 
 
Vieleicht sendest du auch mal deinen Code wo du das hingeschrieben hast.

Schreibe hinter mysql_query("dein query string") or die mysql_error();

Und das bei beiden Querys, oder wirf mal nen Blick ins Manual wie und wo du das hin platzieren musst.

Schraube auch mal das PHP error_reporting() voll auf und lass dir mal die Variablen ausgeben die du ins Update schreibst.

 
wahsaga
16-02-2011, 19:41 
 
Vielleicht ist dein UPDATE-Statement auch gar nicht syntaktisch fehlerhaft, sondern nur inhaltlich - und es gibt gar nichts upzudaten, weil es keinen der Selektion per WHERE-Klausel entsprechenden Datensatz gibt, oder der bestehende bereits die „neuen“ Werte hat.

Lass dir die generierte Query zur Kontrolle ausgeben, und teste sie per Copy&Paste in phpMyAdmin o.ä.

 
Spunk95
16-02-2011, 20:01 
 
Gute Tipps, werd ich versuchen.
Habe mir schon die pmid und uid ausgeben lassen, war alles korrekt, in der Datenbakn (prüfe ich mit phpMyAdmin) gibt es auch einen Datensatz mit der pmid aber die spalte wo uid stehen sollte wurde nicht aktualisiert.

$uid war in diesem Fall 1 und in der Datenbank steht 0 (standartwert).
Werde mal alles ausprobieren, was ihr vorgeschlagen habt und gleich hierreineditieren.

// edit1 Hier der Code drumherum:

if(isset($_GET["pmid"])){
$pmid = $_GET["pmid"];
if($_GET["new"] == "answer"){
if($_POST["answer"] != ""){
$text = $_POST["answer"];
$eintragen = sendanswer($pmid,$userid,$text);
if(!$eintragen){
?><div class="box_hell" style="width:800px;">
<div class="msg_warning">Fehler beim Eintragen der Nachricht.</div>
</div><?
}
else{ // Wenn alles klappt:
?><meta http-equiv="refresh" content="0;
URL=index.php?s=msg&pmid=<?echo $pmid;?>"><?
}
}else{
?><div class="box_hell" style="width:800px;">
<div class="msg_warning">Keine Nachricht angegeben.</div>
</div><?
}

}
}

Danke schonmal bis hier :)

//edit2: Leider immer noch keinen Fehler gefunden..

 
Spunk95
16-02-2011, 20:51 
 
function sendanswer ($pmid,$uid,$text){
$update = mysql_query("UPDATE msg SET opened = '1' AND last_answer = '1294761891' WHERE id = '24'")
or die(mysql_error());
if($update){
return true;
}else{
return false;
}
}

Nichtmal so klappt es... Da muss doch was faul sein? ^^

 
AmicaNoctis
16-02-2011, 20:54 
 
Warum steht dort ein AND? Meinst du vielleicht ein Komma?

 
Spunk95
16-02-2011, 21:02 
 
Warum steht dort ein AND? Meinst du vielleicht ein Komma?

Haha, genau xD Danke danke danke :)
Komisch, das da keine Fehlermeldungen kommen.

 
wahsaga
16-02-2011, 21:26 
 
Komisch, das da keine Fehlermeldungen kommen.
Nein, nicht komisch, weil syntaktisch vollkommen korrekt.

last_answer = '1294761891' ist ein Vergleichsausdruck, der true oder false bzw. in nummerischem Kontext 1 oder 0 ergeben kann.

Und den verknüpfst du mit dem Textliteral '1', bevor du das Gesamtergebnis dieser Verknüpfung in die Spalte opened schreiben lässt.

Der komplette Ausdruck
'1' AND last_answer = '1294761891'
ergibt also 1 oder 0, je nachdem, ob in der Spalte last_answer bereits '1294761891' drin steht oder nicht.
Dieses Ergebnis wird dann in opened eingetragen, und die Spalte last_answer bleibt unverändert, weil in deinem UPDATE-Statement gar keine Wertzuweisung für diese enthalten war.


@Amica: Gutes Adlerauge, Danke.

 
h3ll
17-02-2011, 08:45 
 
Warum wird hier eigentlich kein mysql_real_escape_string() verwendet?

 
Spunk95
17-02-2011, 14:27 
 
@h3all: Beim Text hab ichs ja gemacht. Muss ichs auch für die anderen Sachen? Weil das ist ja nicht vom User eingegeben.

@wahsaga: Danke für die Erklärung, habs halbwegs verstanden :)

Und danke nochmal an AmicaNoctis :)

 
eagle275
17-02-2011, 15:29 
 
"
UPDATE msg
SET opened = '".$uid."' AND last_answer = '".$timestamp."'
WHERE id = '".$pmid."'
"


also ich hab mal gelernt, dass AND und OR für logische Verknüpfungen verwendet werden, nicht aber um mehrere Änderungen aufzureihen ...

ersetze in dieser Abfrage mal das AND durch ein Komma ....

 
wahsaga
17-02-2011, 15:34 
 
ersetze in dieser Abfrage mal das AND durch ein Komma ....
Und du, lies vielleicht erst mal den kompletten bisherigen Thread-Verlauf ... :-)

 
Spunk95
17-02-2011, 18:39 
 
Haha steht sogar in seiner Signatur :D
Na ja, ich editier mal eben die Lösung in den Startpost und dann kann hier zu :)

// Danke für eure Hilfe :)


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:38 Uhr.