WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   UPDATE geht in PHP nicht, direkt aber schon (http://www.wcm.at/forum/showthread.php?t=199278)

Potassium 14.09.2006 02:42

UPDATE geht in PHP nicht, direkt aber schon
 
Code:

$sql = "UPDATE ".TABLE_PROFILES." SET Profile_Text = '".$Text."' WHERE Profile_Type = '".$Type."' AND User_ID = '".$_SESSION["UID"]."' LIMIT 1";
$query = mysql_query($sql);

wenn man $sql ausgeben lässt erhällt man folgendes:

Code:

UPDATE inst_user_profiles SET Profile_Text = 'test1234' WHERE Profile_Type = '7' AND User_ID = '1' LIMIT 1
Führt man die Query direkt aus zb mit MySQL-Front, dann funktionert es ohne Probleme und das Feld Profile_Text bekommt den Wert test1234.
Führt man die Query mit PHP aus, dann bekommt das Feld keinen Wert zugewiesen und weis ned warum.
Habt ihr irgendeine Idee?

hewlett 14.09.2006 08:51

dein Problem liegt hier:
Code:

".$_SESSION["UID"]."
zu viele Anführungszeichen.

http://www.millin.de/downloads/3-935...rzeichhtml.htm

Potassium 14.09.2006 10:13

Das is es leider ned.
Habs testweise auf '".$_SESSION['UID']."' geändert. Nützt auch nix.
Hab die gleiche Abfrage aber überall im Code und da geht sie.

hewlett 14.09.2006 10:49

was machst denn nachher mit der query variable? poste das mal!

Potassium 14.09.2006 10:52

PHP-Code:

if($do == "edit_profile"){
    
$Type = !empty($_GET["Type"]) ? $_GET["Type"] : "";
    if(!empty(
$Type)){
        
$Text $_POST["Text"];
        
$sql "UPDATE ".TABLE_PROFILES." SET Profile_Text = '".$Text."' WHERE Profile_Type = '".$Type."' AND User_ID = '".$_SESSION['UID']."' LIMIT 1";
        echo 
$sql;
        
$query mysql_query($sql);#,__FILE__,__LINE__);
        
echo mysql_error();
        
$Body "Das Profil wurde erfolgreich aktualisiert.
Klicken Sie [url='']hier[/url] um das geänderte Profil anzusehen.
[url='']Zurück zur Profilverwaltung[/url]

"
;
    }



hLa 14.09.2006 11:34

ich vermute den Fehler bei "LIMIT" ... hab es noch nicht selbst ausprobieren können aber die Vermutung meinerseits geht dahin.

hewlett 14.09.2006 11:35

versuchs mal so:
PHP-Code:

$sql "UPDATE ".TABLE_PROFILES." SET Profile_Text = '$Text' WHERE (Profile_Type = $Type AND User_ID = $_SESSION['UID'])"


Potassium 14.09.2006 11:37

das kann nicht gegen wegen $_SESSION das gibt folgenden Fehler:
Zitat:

Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in E:\htdocs\inst_cms\admin\profile_mgmt.php on line 87

hewlett 14.09.2006 11:39

dann mach halt noch hochkomma rein.

Potassium 14.09.2006 11:43

PHP-Code:

    $sql "UPDATE ".TABLE_PROFILES." SET Profile_Text = '$Text' WHERE (Profile_Type = $Type AND User_ID = ".$_SESSION['UID'].")"

Auch so funktioniert es nicht leider...

hewlett 14.09.2006 11:49

und die felder heißen auch in der genau so?

und wennst das sql ausgibst und direkt in phpmyadmin ausführst?

Potassium 14.09.2006 11:52

wie gesagt, wenn ich den ausgegebene query-string manuell ausführe funktioniert es perfekt.
Felder heißen 100% genau so.

hewlett 14.09.2006 12:22

export mal die tabelle aus der db und stell den code hier rein dann probier ich das selber mal. lässt mir keine ruhe!

Philipp 14.09.2006 12:23

Ich würde es einmal so probieren:

PHP-Code:

if ($do == "edit_profile")

    if (isset(
$_GET['Type']) and isset($_POST['Text']))
    {  
        
mysql_query("UPDATE ".TABLE_PROFILES." SET Profile_Text = '".addslashes($_POST['Text'])."' WHERE Profile_Type = '".intval($_GET['Type'])."' AND User_ID = '".intval($_SESSION['UID'])."' LIMIT 1") or die("MySQL Fehler: ".mysql_errno()." ".mysql_error());
        
$Body "Das Profil wurde erfolgreich aktualisiert.
Klicken Sie [url='']hier[/url] um das geänderte Profil anzusehen.
[url='']Zurück zur Profilverwaltung[/url]

"

    } 



Potassium 14.09.2006 12:26

@hewlett:
Code:

CREATE TABLE `inst_user_profiles` (
  `Profile_ID` int(6) unsigned NOT NULL auto_increment,
  `User_ID` tinyint(4) NOT NULL default '0',
  `Profile_Type` tinyint(4) NOT NULL default '0',
  `Profile_Text` text NOT NULL,
  PRIMARY KEY  (`Profile_ID`)
) TYPE=MyISAM;

@Phillip: Genausowenig Wirkung wie bei einer Query. :(

Philipp 14.09.2006 12:33

Und es gibt keine Fehlermeldung? Was passiert wenn Du LIMIT 1 entfernst?

Code:

NOT NULL default '0'
NOT NULL wird bei default '0' schwer gehen ;). MySQL 5.0 würde diese Tabelle aufgrund dieses Syntaxfehlers erst gar nicht mehr anlegen.

Potassium 14.09.2006 12:46

LIMIT 1 entfernen nützt nix.
Fehler werden keinerlei angezeigt und affected_rows gibt 1 zurück.
Er bearbeitet das Feld ja auch sichtlich. Wenn ich zb vorher einen anderen Wert reinschreib und dann die Query laufen lassen ist das Feld nachher leer.
schreib ich hingegen $Text = "+++".$_POST["Text"]."+++";
dann steht nachher im DB-Feld drinnen "++++++"
hab das mim NOT NULL ausgebessert aber 0 != NULL oda?

Philipp 14.09.2006 13:58

Zitat:

Original geschrieben von Potassium
schreib ich hingegen $Text = "+++".$_POST["Text"]."+++";
dann steht nachher im DB-Feld drinnen "++++++"

Du meinst $Text = "+++".addslashes($_POST['Text'])."+++"; ;)

Wie sieht den eigentlich das dazupassende Formular aus?

Zitat:

Original geschrieben von Potassium
hab das mim NOT NULL ausgebessert aber 0 != NULL oda?
Bei einem numerischen Feld schon

Potassium 14.09.2006 14:00

Am Forular liegts wohl:
Code:

<form name="scheissdreck" method="post" action="profile_mgmt.php?do=edit_profile&Type=<%TYPE%>" enctype="application/x-www-form-urlencoded">
<h3>KOVO-Link bearbeiten</h3><hr>

<!--<input type="hidden" name="do" value="edit_profile">
<input type="hidden" name="sType" value="<%TYPE%>">-->
<input type="text" name="KOVO" value="<%TEXT%>" size="80">


<input type="reset" value="Zurücksetzen"> <input type="submit" name="subvalue="Speichern">
</form>

wenn man die GET parameter weg macht und die hiddenfields unkommentiert dann funktionierts WTF?

Philipp 14.09.2006 14:22

Und wo wird da $_POST['Text'] definiert? Ich sehe nur $_POST['sType'] und $_POST['KOVO']

Potassium 14.09.2006 14:24

jo das hat vorher Text geheißen, das war eine meiner verzweifelten Versuche das zum laufen zu bringen. Hab ich aber alles auch im SQL geändert...

James 15.09.2006 14:42

weiss ja ned ob du das schon probiert hast. Denke zwar schon aber so würde ich zum testen anfangen, um herauszufinden an was es liegt...

mal checken ob die variablen auch text intus haben

PHP-Code:

echo $_POST['Text'];
echo 
"
"
;
echo 
$_POST['sType']; 
echo 
"
"
;
echo 
$_POST['KOVO'];
echo 
"
"


wenn das passt würde ich das querry nehmen und 1:1 ohne vars mal ins php script schreiben... um zu schaun ob das php script überhaupt das querry ausführt....

Potassium 15.09.2006 14:43

hab ich beides getan ;)
und in beiden fällen war alles ok.

James 15.09.2006 14:51

naja dann würde ich anfangen jede variable einzeln eizusetzen ins querry und zwischendurch immer probieren...

Dann solltest ja am schluss wissen, an welchen teil im querry es liegt

Potassium 15.09.2006 14:52

wie schon erwähnt es lag nicht an der query sondern am formular und am browser. mit IE und FF ging es mit Opera 9.1 gings ned.

iG0r 17.09.2006 20:49

ol selbst löschen geht nicht, ignorieren :P

gorie 18.09.2006 13:14

Zitat:

Original geschrieben von Potassium
[b]@hewlett:
Code:

CREATE TABLE `inst_user_profiles` (
  `Profile_ID` int(6) unsigned NOT NULL auto_increment,
  `User_ID` tinyint(4) NOT NULL default '0',
  `Profile_Type` tinyint(4) NOT NULL default '0',
  `Profile_Text` text NOT NULL,
  PRIMARY KEY  (`Profile_ID`)
) TYPE=MyISAM;


ich würd bei der Tabelle ein Hochkomma reintun in der Abfrage
"UPDATE `$tablename` ...." wenn im Tabellennamen _ vorkommen gibt es desöfteren Probleme

Potassium 11.10.2006 18:58

http://www.leyrer.priv.at/martin/Ein...a_and_PHP.html


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag