Forum
Tipps
News
Menu-Icon

Stange problem, Update-Funktion mit PHP

Hallo zusammen
Habe hier ein sehr merkwürdiges und für mich unerklährliches Problem...
Es geht um eine Updatefunktion, welche nur Funktioniert, wenn ich den Softwarename nicht editiere. D.h. wenn der Softwarename nicht geändert wird, Lizenzkey oder Version aber schon geht dies auch. Sobald der Softwarename mit im Spiel ist, geht es nicht mehr. Die Variabel $softwarename behält aber die Richtigkeit der Daten bis eine Zeile oberhalb des mysql_query's. Ich poste einfach mal das ganze file, hoffe jemand findet einen Fehler..

Thx, Stif

<?php
$senden 
$_POST["Senden"];
$absenden $_POST["Absenden"];
$loeschen $_POST["Loeschen"];

//-----------------------------------------------------------------------------
//Daten für die Datenbank aus dem Formular verarbeiten
//-----------------------------------------------------------------------------
$softwarename $_POST[&#39;softwarename&#39;];
$version $_POST[&#39;version&#39;];
$lizenzkey $_POST[&#39;lizenzkey&#39;];


//-----------------------------------------------------------------------------
//Übernehmen der KundenID von der vorherigen Seite
//-----------------------------------------------------------------------------
if(!$senden AND !$absenden AND !$loeschen)
{
$kundenIDFS $_GET["id"];

//-----------------------------------------------------------------------------
//Prüfen, ob auf der Seite vorher ein Kunde ausgewählt wurde. Wenn nicht, wird
//die Fehlermeldung ausgegeben und der User wird nach 4 sek. automatisch auf
//die vorherige Seite zurückgebracht.
//-----------------------------------------------------------------------------
if(empty($kundenIDFS))
 {
 
?>

  <table>
   <tr>
    <td width="30px"></td>
    <td class="meldung">Zuerst einen Kunden ausw&auml;hlen</td>
   </tr>
   <tr>
    <td height="10px"></td>
   </tr>
  </table>
 
  <meta http-equiv="refresh" content="4; url=index.php?site=itres_overview">
 <?php
 
}

}
?>

<table>
 <tr>
  <td width="30px"></td>
  <td> <h5>Software wählen</h5></td>
 </tr>
 <tr>
  <td width="30px"></td>
  <td>
<form action="index.php?site=software_edit" method="post">
 <input type="hidden" name="softwarename" value="<?php echo $softwarename?>">
 <input type="hidden" name="kundenIDFS" value="<?php echo $kundenIDFS?>">

 <select name="softwarename">
 <?php
//-----------------------------------------------------------------------------
//Hier werden alle Softwareeinträge die es gibt ausgelesen und 
//in ein Auswahlformular eingetragen
//-----------------------------------------------------------------------------
 
error_reporting(0);
 
  
$res mysql_query("SELECT * FROM t_software WHERE kundenIDFS = &#39;$kundenIDFS&#39;");
  while(
$row mysql_fetch_array($res))
   {
    echo 
"<option value=";
echo $row["softwarename"];
echo ">";
echo $row["softwarename"];
echo "</option>";
   }
 
?>

 </select>
 <input class="button" type="submit" value="absenden" name="Absenden" />
</form>
  </td>
 </tr>
</table>
<?php
 
$softwarename $_POST["softwarename"];

$res2 mysql_query("SELECT * FROM t_software WHERE softwarename = &#39;$softwarename&#39;");

$row2 mysql_fetch_array($res2);

$softwareID $row2[&#39;softwareID&#39;];
   
 
?>

 <table>
 <tr>
  <td width="30px"></td>
  <td></td>
 </tr>
 <tr>
  <td width="30px"></td>
  <td>
<?php

//-----------------------------------------------------------------------------
//Daten in die Datenbank eintragen
//-----------------------------------------------------------------------------
 
if($senden)
  {
  if (empty(
$softwarename))
    {
     
$fault_softwarename "Softwarename fehlt";
    }
   
   if (empty(
$lizenzkey))
    {
     
$fault_lizenzkey "Lizenzkey fehlt";
    }
  
  if (
$softwarename AND $lizenzkey != "")
    {
  
 echo "<h4>Software erfolgreich editiert</h4>";
  
     
mysql_query("UPDATE t_software SET softwarename = &#39;".$softwarename."&#39;, version = &#39;".$version."&#39;, lizenzkey = &#39;".$lizenzkey."&#39; WHERE softwareID = $softwareID");
}
  }
  
//-----------------------------------------------------------------------------
//Sobald der Button "Löschen" geklickt wird, löscht es den Arbeitsrapport
//welcher ausgewählt wurde
//-----------------------------------------------------------------------------
  
if ($loeschen)
   {
    echo 
"<h4>Software erfolgreich gel&ouml;scht</h4>";

    
mysql_query("DELETE FROM t_software WHERE softwareID = &#39;$softwareID&#39;");
   }
?>

  </td>
 </tr>
</table>
<table>
 <form action="index.php?site=software_edit" method="post">
 <input type="hidden" name="kundenIDFS" value="<?php echo $kundenIDFS?>">
 <input type="hidden" name="softwareID" value="<?php echo $softwareID?>">
 <tr>
  <td width="30px" align="right">*</td>
  <td width="200px">Softwarename</td>
  <td width="350px"><input maxlength="30" size="60" type="text" name="softwarename" value="<?php echo $row2[&#39;softwarename&#39;]; ?>" /></td>
  <td class="meldung"><?php echo $fault_softwarename?></td>
 </tr>
 <tr>
  <td width="30px" align="right"></td>
  <td width="200px">Version</td>
  <td width="350px"><input maxlength="30" size="60" type="text" name="version" value="<?php echo $row2[&#39;version&#39;]; ?>" /></td>
  <td></td>
 </tr>
 <tr>
  <td width="30px" align="right">*</td>
  <td width="502px">Lizenzkey</td>
  <td width="350px"><input maxlength="30" size="60" type="text" name="lizenzkey" value="<?php echo $row2[&#39;lizenzkey&#39;]; ?>" /></td>
  <td class="meldung"><?php echo $fault_lizenzkey?></td>
 </tr>
 <tr>
  <td></td>
  <td width="25%" align="right"><input class="button" name="Senden" type="submit" value="Speichern" /></td>
  <td><input class="button" name="Reset" type="reset" value="Reset"/></td>
 </tr>
 <tr>
  <td height="30px"></td>
  <td></td>
 </tr>
 <tr>
  <td width="30px"></td>
  <td class="meldung">Arbeitsrapport l&ouml;schen</td>
  <td><input size="50" class="button" name="Loeschen" type="submit" value="L&ouml;schen"/></td>
  <td></td>
 </tr>
 </form>
 <tr>
  <td height="5px"></td>
 </tr>
</table>

Antworten zu Stange problem, Update-Funktion mit PHP:

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Moin |

Kann es sein, dass in der Update-Query hinten ein Hochkomma fehlt? Sieht irgendwie so aus im Quelltext, aber dann müsste theoretisch immer ein SQL-Fehler kommen.

Es wäre sicher hilfreich, wenn du error-reporting nicht auf 0 setzt. Wie willst du denn da Fehler rausbekommen?

Hast du mal versucht, dir die "fertige" SQL-Query ausgeben zu lassen, um diese auf syntaktische und sematische Richtigkeit zu prüfen? Da kannst du am besten untersuchen, was da abläuft ;)

greez 8)
JoSsiF

Nein, da fehlt kein Hochkomma :)
Leider..

Es gibt keinen SQL-Fehler aus, da rein SQL-Technisch ja auch alles erfüllt ist. Habe es versucht, mit error-reporting auf 1 zu setzen.

Wie du das mit dem ferigen SQL-Query ausgeben meinst, verstehe ich nicht. Kannst du mir dies bitte noch genauer erklähren?  ::)

Thx

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Auch eine Möglichkeit wäre, dir die mySQL-Fehler direkt ausgeben zu lassen und abzubrechen, wenn was nicht stimmt.
Dazu musst du folgendes machen:

$res = mysql_query(deineuery) or die(mysql_error());

Mario 8)

Habe es jetzt mal so versucht, wie du es beschrieben hast Mario..
Wenn ich nur Version oder Lizenzkey ändere, wird keine Fehlermeldung ausgeführt und der Datensatz wird auch geändert.

Sobald ich aber den Softwarename ändern möchte, erscheint ein Error, der mir nicht gerade viel weiterhilft  :P

Zitat
   
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 '' at line 1

Dies sind keine Gänsefüsschen, sondern zwei einfache Hochkommas...

Kann in meinem Script aber kein "Sonderzeichen"-Fehler ausfindig machen..


Edit:
Sobald ich das hinterste Argument in einfach Hochkommas setze, wird gar keine Mysql-Fehlermeldung ausgegeben. Der Softwarename wird aber trotzdem nicht geupdatet...

WHERE softwareID = '$softwareID'
So siehts jetzt aus
« Letzte Änderung: 08.03.06, 11:36:50 von Stif-Meister »

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Wegen dem angeblich fehlenden Hochkomma: sorry, ich hatte die horizontale Scrollleiste übersehen ;D

Mach mal folgendes: Schreibe dir deinen UPDATE-SQL-Aufruf in eine String-Variable, also ...

$sql = "UPDATE ...";
... und gib diese mit einem echo noch vor mysql_query() aus. Du kannst auch zu Testzwecken den eigentlichen Datenbankaufruf ganz weglassen. Es geht erstmal darum, was beim Ändern des Softwarenamens in der SQL-Query steht.

greez 8)
JoSsiF

Oke, habe ich gemacht...

Sieht nun so aus:

$resultat = ("UPDATE...");

echo $resultat;
 
mysql_query($resultat);

Sobald ich den Softwarename ändere, hat der keine softwareID mehr.
Wenn ich nur die Version oder Lizenzkey ändere, behält er seine Software. Danke, hat mich wenigstens soweit gebracht, dass ich nun weiss, wo in etwa der Fehler liegt. Somit verliert der irgendwo unterwegs die SoftwareID, sobald der Softwarename geändert wird.

Ich denke, das hier der Hund begraben liegt:
$softwarename = $_POST["softwarename"];
$res2 = mysql_query("SELECT * FROM t_software WHERE softwarename = '$softwarename'");

$row2 = mysql_fetch_array($res2);

$softwareID = $row2['softwareID'];

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Sehe ich auch so.

Kleiner Tipp: man nutzt IDs, weil diese oftmals das einzige eindeutige Merkmal eines Datensatzes sind. Somit solltest du bei Änderungen, die nur einen speziellen Datensatz betreffen, diesen immer über die ID ansprechen. Mit allen Konsequenzen, also ID durchschleifen (evtl. als Hidden Field) etc. ;)

greez 8)
JoSsiF

Habe jetzt eine Lösung gefunden... :)
Das Mittagessen hat mich geistig inspiriert :D

Die Lösung für das Ganze Übel:

if (!$senden)
 {
 
$softwarename = $_POST["softwarename"];

$res2 = mysql_query("SELECT * FROM t_software WHERE softwarename = '$softwarename'");

$row2 = mysql_fetch_array($res2);

$softwareID = $row2['softwareID'];
 }

thx to all
« Letzte Änderung: 08.03.06, 13:40:59 von Stif-Meister »

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Was gab's denn schönes?

Bräuchte auch mal bissl Inspiration! Vielleicht greif ich auf Flayers Bong zurück ;D

greez 8)
JoSsiF

Es gab Spaghetti :)

Aber was für ein Bong von Flayer?!  ???

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Hmmmmm...lecker! :D

Wegen Bong und so: Check mal Antwort #17 in diesem Thread:
http://www.computerhilfen.de/hilfen/index.php/topic,104287.15.html

*gg*

greez 8)
JoSsiF

Haha, oke, alles klar :)


« wie kann ich aus dieser seite ein bild einfügen?Problem beim Email senden mit PHP »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Beta Version
Unter einer Beta Version versteht man ein Programm, das sich in einer Testphase, also noch vor der finalen Version, die veröffentlicht wird, befindet. Allgemein wird...

Bulk Version
Eine Bulk-Version ist nicht für den Einzelverkauf gedacht, sondern für Händler, die daraus ein Komplettangebot zusammenstellen. Oft erhält man nur die...

Retail Version
Eine Ware ist eine Retail-Version (oder auch "Kit-Version" genannt), wenn sie für den Endverbraucher bestimmt ist. Im Grunde kauft der Kunde im Laden immer die Retai...