neptun: server syntax fehler in SQL - HILFE

Hallo!
Ich habe einen kurzen Update befehl, der perfekt funktioniert, wenn ich ihn direkt in PHPMyAdmin hineinschreibe, aber in der normalen Ausgabe diesen Fehler verursacht:

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 'b_k_id=2 and b_datum=2009-04-14' at line 1

Das betroffene Codestück sieht folgendermaßen aus:

<?php  
$result = mysql_query("Update bestellungen set b_status=$check where d b_k_id=$kid and b_datum=$dat ") or die (mysql_error());  
?>  

und im normalen echo ohne query steht auch alles schön drinnen:
Update bestellungen set b_status=bestellt where b_k_id= 2 and b_datum=2009-04-14

Bitte sagt mir was ich falsch habe bitte bitte!

Danke schonmal im vorraus!

LG neptun

  1. Hi,

    Das betroffene Codestück sieht folgendermaßen aus:

    <?php

    $result = mysql_query("Update bestellungen set b_status=$check where d b_k_id=$kid and b_datum=$dat ") or die (mysql_error());
    ?>

      
    Das ist PHP-Code - der interessiert die Datenbank überhaupt nicht, und uns demzufolge genauso wenig, wenn du ein Datenbank-Problem hast.  
      
    
    > und im normalen echo ohne query steht auch alles schön drinnen:  
    > Update bestellungen set b\_status=bestellt where b\_k\_id= 2 and b\_datum=2009-04-14  
    >   
    > Bitte sagt mir was ich falsch habe bitte bitte!  
      
    Hast du ein Spalte namens bestellt in der Tabelle, deren Inhalt in die Spalte b\_status übertragen werden soll?  
    Wenn nein, dann notiere bestellt nicht so, als ob es ein Spaltenname wäre, sondern als Textliteral, wenn du ein solches meinst.  
      
    MfG ChrisB  
      
    
    -- 
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    
    1. Hi,

      »» Das betroffene Codestück sieht folgendermaßen aus:
      »» ~~~php

      <?php

      »» $result = mysql_query("Update bestellungen set b_status=$check where d b_k_id=$kid and b_datum=$dat ") or die (mysql_error());
      »» ?>
      »»

      
      >   
      > Das ist PHP-Code - der interessiert die Datenbank überhaupt nicht, und uns demzufolge genauso wenig, wenn du ein Datenbank-Problem hast.  
        
      Also wie gesagt meine Datenbank hat kein Problem, PHPMyAdmin auch nicht. Nur die Server Syntax  
        
      
      >   
      > »» und im normalen echo ohne query steht auch alles schön drinnen:  
      > »» Update bestellungen set b\_status=bestellt where b\_k\_id= 2 and b\_datum=2009-04-14  
      > »»  
      > »» Bitte sagt mir was ich falsch habe bitte bitte!  
      >   
      > Hast du ein Spalte namens bestellt in der Tabelle, deren Inhalt in die Spalte b\_status übertragen werden soll?  
      > Wenn nein, dann notiere bestellt nicht so, als ob es ein Spaltenname wäre, sondern als Textliteral, wenn du ein solches meinst.  
      >   
      > MfG ChrisB  
      >   
      >   
        
      tabelle mit den spalten b\_status, b\_k\_id und b\_datum.  
      ich habe alle mir bekannten klammerungen ausprobiert, und ich weiß nicht was falsch ist, kannst du mir das bitte sagen?  
        
      LG neptun
      
      1. Hi,

        Also wie gesagt meine Datenbank hat kein Problem

        Nein, aber du eins mit ihr.

        PHPMyAdmin auch nicht.

        Mit *exakt* der gleichen Query? Copy&Paste deiner Kontrollausgabe, Test im PMA? Wäre mir neu, dass der solche Fehler automatisch korrigiert.

        ich habe alle mir bekannten klammerungen ausprobiert, und ich weiß nicht was falsch ist, kannst du mir das bitte sagen?

        Wer redet denn von Klammerung?
        http://dev.mysql.com/doc/refman/5.1/en/string-syntax.html

        MfG ChrisB

        --
        Light travels faster than sound - that's why most people appear bright until you hear them speak.
        1. ja genau mit copy and paste nichts dazu nichts weg, einfach so wies dasteht beim echo genommen und in SQL hineingegeben und OK gedrückt, und gemacht hat ers!

          ich mein " und ' mit Klammerung im Sinne von Einklammerung weils ja auch abgrenzen, wie nennt man sie denn wirklich?

          sorry, aber das alles bringt mich nicht weiter, ich mir meinen code schon von allen mir bekannt ecken und enden angesehen, ich weiß es zumindest nicht besser!

          Lg neptun

          1. Hi,

            ich mein " und ' mit Klammerung im Sinne von Einklammerung weils ja auch abgrenzen, wie nennt man sie denn wirklich?

            Anführungszeichen und Hochkommata?
            Die nennt man bspw. String-Begrenzer.

            sorry, aber das alles bringt mich nicht weiter, ich mir meinen code schon von allen mir bekannt ecken und enden angesehen, ich weiß es zumindest nicht besser!

            Die verlinkte Stelle im Manual hast du gelesen und verstanden?

            Wie sieht dein jetziger Versuch aus, und wie lautet die dazu gehörige Fehlermeldung?

            MfG ChrisB

            --
            Light travels faster than sound - that's why most people appear bright until you hear them speak.
            1. sorry, hab ich zwar eigentlich schon mal gelernt, aber der Begriff selber ist nicht hängen geblieben.

              Ja ich verstehe schon wie man sie einsetzen kann, und was das bewirkt. Kann durchaus sein ich dass ich irgendeinen Anfängerfehler drinnen hab, und einfach den Wald vor lauter Bäume nicht mehr sehe.

              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 'b_k_id='2' and b_datum='2009-04-14'' at line 1

              UND SO WÜRD ICHS MACHEN:
              $result = mysql_query("Update bestellungen set b_status='$check' where d b_k_id='$kid' and b_datum='$dat' ") or die (mysql_error());

              Lg neptun

              1. Hi,

                where d b_k_id='$kid'

                ^^^

                Was ist das ...?

                MfG ChrisB

                --
                Light travels faster than sound - that's why most people appear bright until you hear them speak.
                1. das ist gerade dazwischen geraten, aber eigentlich solls ohne sein, ja der berüchtigte Vorführeffekt, nein aber jetzt ernsthaft, ist eigentlich ohne dem einsam d im nirgendwo, und geht deshalb aber trotzdem nicht.

                  LG neptun

                  1. Hi,

                    das ist gerade dazwischen geraten, aber eigentlich solls ohne sein, ja der berüchtigte Vorführeffekt, nein aber jetzt ernsthaft, ist eigentlich ohne dem einsam d im nirgendwo, und geht deshalb aber trotzdem nicht.

                    Bitte poste jetzt noch mal *ganz* *exakt*, wie die Query aussieht, die du *wirklich* an die Datenbank sendest.
                    Also noch mal Kontrollausgabe, und dann Copy&Paste hier ins Forum.

                    MfG ChrisB

                    --
                    Light travels faster than sound - that's why most people appear bright until you hear them speak.
                    1. dieses Problem hat sich gerade in Luft aufgelöst(warum? was anders ist? nichts!) aber ein neues ist dazugekommen vielleicht kannst du mir da auch helfen und zwar möchte ich dass der Admin den Bestellstatus per select box ändern kann eben mit submit - update.php und header wieder retour.

                      ja soweit so gut, geht auch zumindest was das umstellen bestrifft.
                      ABER

                      ich weiß nicht wo ich falsch gedacht habe.
                      Irgendwie ändert er immer nur einen ds und zwar den letzten, ganz egal wo ich was ändere also auch wo ich submit drücke, es steht immer das selbe datum und die selbe Kunden_ID.

                      das ist meine query:

                      <?php  
                        
                      if(isset($_SESSION['SESS_IS_ADMIN'])){  
                      	  
                        
                      	include'mysql_connect.php';  
                        
                        
                      $result = mysql_query("Select * from bestellungen") or die();  
                        
                        
                      echo "<h1>Bestell&uuml;bersicht</h1>";  
                        
                      echo "<form action='bestellstatusaendern.php' method=POST>";  
                      echo "<table border='0' id='dbaendern'>";  
                      echo "<tr><th>Bestell ID</th><th>Kunden ID</th><th>Bestelldatum</th><th>Bestellstatus</th><th>&Auml;ndern</th><th>Zahlungsart</th><th>Versandart</th></tr>";	  
                        
                        
                      	while($ds=mysql_fetch_array($result))  
                      {  
                      	  
                      	echo "<tr><td>$ds[0]</td>";  
                      	echo "<td>$ds[1]</td>";  
                      	echo "<td>$ds[2]</td>";  
                      	echo "<td>$ds[3]</td>";	  
                      	echo "<td>";  
                          echo "		<select name='check' size='3'>";  
                          echo "  			<option name='check'>bestellt</option>";  
                         	echo "  			<option name='check</h5>'>in Auftrag</option>";  
                          echo " 				<option name='check'>geliefert</option>";  
                          echo "		</select>";  
                      	echo "	  </td>";  
                      	echo "<td>$ds[4]</td>";  
                      	echo "<td>$ds[5]</td>";  
                      	echo "<td><input type='hidden' name='status' value='$ds[3]'><input type='hidden' name='kid' value='$ds[1]'><input type='hidden' name='dat' value='$ds[2]'><input type='submit' name='submit' value='submit'></td></tr>";  
                      	  
                      	  
                        
                      	}  
                        
                      	echo "</table>";  
                      	echo "</form>";  
                        
                      }  
                      ?>
                      

                      danke aber nochmal für vorher, ich weiß zwar nicht warum es die selbe query mal für nicht gültig und eine stunde später wieder für gültig hält, aber naja, solange es jetzt funktioniert - mir egal :)

                      LG neptun

                      1. Hi,

                        Irgendwie ändert er immer nur einen ds und zwar den letzten, ganz egal wo ich was ändere also auch wo ich submit drücke, es steht immer das selbe datum und die selbe Kunden_ID.

                        Du erstellst in deiner Schleife mehrere Select- und Input-Felder, die jeweils den gleichen Namen haben. PHP ist aber zu doof, die dadurch übermittelten Parameter richtig auszuwerten, und stellt dem Script nur noch den jeweils letzten dieser Werte zur Verfügung.

                        Das kannst du ändern, in dem du eckige Klammern an den Feldnamen anfügst - name="feldname[]". Dann stellt dir PHP die Werte in einem Array unter $_POST['feldname'] zur Verfügung, das du bspw. mit einer foreach-Schleife durchlaufen kannst.

                        Und, um die Zusammengehörigkeit der Daten besser abzubilden und sicherzustellen, kannst du in den Klammern auch noch den gewünschten Schlüsselwert, unter dem die Werte im Array abgelegt werden sollen, angeben - also bspw. name="feldname[0]", name="feldname[1]", etc.

                        MfG ChrisB

                        --
                        Light travels faster than sound - that's why most people appear bright until you hear them speak.