kostenloser Webspace werbefrei: lima-city


nochn mysql problem

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    s****l

    da im alten thread irgendwie keiner mehr antwortet sah ich mich gezwungen einen neuen aufzumachen :slant:
    also wenn ich beim INSERT INTO bei VALUES z.b. ("$variable1", "$variable2") angebe dann wird in die tabelle $variable eingetragen und nicht wie ich es haben wollte der WERT von der variablen! wenn ich die anführungsstriche weglasse, wird gar nichts eingetragen! wie muss ich das machen?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Wo ist der alte Thread, so ist das irgendwie schlecht nachzuvollziehen.


    An sich muss das in etwa so aussehen.

    INSERT INTO tabelle (Feld1, Feld2) VALUES ('$Variable1', '$Variable2')

    Beitrag geaendert: 31.5.2007 15:07:58 von karpfen
  4. Autor dieses Themas

    s****l

    da gibts keinen zusammenhang ;)
    jo so wie dus geschrieben hast hab ichs auch schon gemacht aber dann wurde gar nix eingetragen.

  5. da gibts keinen zusammenhang ;)
    jo so wie dus geschrieben hast hab ichs auch schon gemacht aber dann wurde gar nix eingetragen.


    Gibts da keinen Quellcode aus dessen Zusammenhang man vielleicht etwas schlauer werden könnte? Vielleicht liegt der Fehler ja schon vorher oder woanders begraben.

    Ich habe das dann in PHP ca. so realisiert. Mit einer query und einer Variablen:

    $result = mysql_query("INSERT INTO tabelle (Feld1,Feld2) VALUES ('$Variable1','$Variable2')");


    Beitrag geaendert: 31.5.2007 15:34:40 von karpfen
  6. s******s

    so habe ich das auch bei mir und es geht auch...

    vielleicht solltest du mal schauen ob in den variablen überhaupt etwas drin steht. lass die doch mal mit echo ""; ausgeben

    dominopage
  7. Es kommt darauf an was in der Variable drin steht... und welche Anführungszeichen er verwendet... so auf den Ersten Blick würde ich sagen hast du die Punkte zum Verbinden der Variablen mit dem Text vergessen - es sei denn du hast doppelte Anführungszeichen verwendet (was hier im Forum umgewandelt wird).
    Aber hier mal Grundsätzliches...

    Integer und Bool-Werte werden ohne Anführungszeichen angegeben.
    Hingegen Strings (Zeichenketten) werden mit Anführungszeichen eingeschlossen.

    Sieht dann in etwa so aus... ($name = String, alle anderen Integers)
    <?
      // Stringvariable urldecoden und für die Datenbank präperieren
      $name = urldecode($name);
      $name = mysql_escape_string($name);
    
      // SQL String zusammenbauen mit einfachen Anführungszeichen
      $sql = 'INSERT INTO tabellenname (id,aaa,bbb,ccc,ddd,eee)
          VALUES ('.$id.',\''.$name.'\','.$www.','.$xxx.','.$yyy.','.$zzz.');';
    
      // SQL String an Datenbank schicken
      $res = mysql_query($sql);
    
      // prüfen ob Datenbankanfrage erfolgreich
      if (!$res) {
         echo 'Fehler im Datensatz: '.mysql_error().'<br>';
      }
    ?>



    Mal zur Erklärung:
    Strings werden in PHP durch Einfaches Anführungszeichen (über dem #) oder durch doppelte Anführungszeichen (über der 2) angegeben. Der Unterschied zwischen beiden ist NUR dass alles was zwischen doppelten AZ steht, intern nochmal auf die Existenz von Variablen Namen untersucht wird und ggf. die Variablen gegen die Werte ersetzt werden.

    Außerdem werden in PHP Strings durch den Punkt-Operator aneinandergekettet.
    D.h. $test = "Das ist" . " ein Test"; wird in der Variable $test als "Das ist ein Test" gespeichert. Möchte man eine Variablenwert im Text ausgeben umschließt man diese mit dem Punkt-Operator.
    z.B.:
    $x = 2;
    $test = "Das ist der " .$x. " Test";
    wird zu:
    "Das ist der 2 Test" ;-)



    Hier mal der Zusammenbau mit einfachen Anführungszeichen:
    SQL Abfragen haben von SQL aus die Form:

    INSERT INTO tablename (aaa,bbb,ccc) VALUES (11,'zwei',333);

    Von Insert bis ( nach dem Values ist also ein fester String.

    $sql = 'INSERT INTO tablename (aaa,bbb,ccc) VALUES (';

    jetzt muß man die Variable mit Wert $ff = 11 hinzufügen.
    also:
    $sql = 'INSERT INTO tablename (aaa,bbb,ccc) VALUES (' .$ff;

    jetzt kommt ein Komma und ein String $gg = "zwei" der in Anführungsstiche stehen muß...
    also:
    $sql = 'INSERT INTO tablename (aaa,bbb,ccc) VALUES (' .$ff. ',\'' .$gg. '\'';

    Beachte: \' gehört zur Zeichenkette und spiegelt keine Begrenzing der Zeichenkette wieder. \' ist "entquotet". Sind also dann die Anführungsstriche in "... ,'zwei', ...)

    Als nächstes hängen wir dann noch die Zahl $hh=333 dran... und das Ende );
    also:
    $sql = 'INSERT INTO tablename (aaa,bbb,ccc) VALUES (' .$ff. ',\'' .$gg. '\',' .$hh. ');';


    Soo das wäre also unser SQL String und den halt mit mysql_query zur DB-Schicken.
    Wer mag kann sich den String ja auch mal mit echo $sql; ausgeben lassen ;-)


    Hoffe habs bissl verständlich rüber gebracht...

    Grüßle

    Beitrag geaendert: 31.5.2007 15:57:15 von scout
  8. Autor dieses Themas

    s****l

    ich hab alles auf string gesetzt, klappt aber immer noch nicht (es wird gar nichts in die db eingetragen)!
    das hier ist der quellcode:
    $ip = "IP: " . $_SERVER['REMOTE_ADDR'];
          $referer = $_SERVER['HTTP_REFERER'];
          $browser = $_SERVER['HTTP_USER_AGENT'];
          $date = "Datum: " . date("j.n.Y");
          $time = "Zeit: " . date("H:i");
          settype($ip, "string");
          settype($referer, "string");
          settype($browser, "string");
          settype($date, "string");
          settype($time, "string");
          if (empty($referer))
          {
              $referer = "Kein Referer";
          }
          else
          {
              $referer = "Referer: " . $_SERVER['HTTP_REFERER'];
          }
          include "mysql_connect.php";
          $insert = "INSERT INTO stats ('ip','referer','browser','date','time') VALUES ('$ip,$referer,$browser','$date','$time')";
          mysql_query($insert);

    wie muss ich das machen?
    mit anführungsstrichen brauche ich jetzt glaub ich nicht mehr sagen, wir kennen ja lima ;)

    Beitrag geaendert: 31.5.2007 20:32:44 von scrawl


  9. $insert = "INSERT INTO stats ('ip','referer','browser','date','time') VALUES ('$ip,$referer,$browser','$date','$time')";


    Probier es mal so-->
    $insert = "INSERT INTO stats (ip, referer, browser, date, time) VALUES ('$ip', '$referer', '$browser','$date','$time')";

    Soweit ich weiß löscht Lima die Anführungszeichen noch nicht, also ist da ein Fehler. Außerdem prüfe mal ob die Groß- und Kleinschreibung immer gleich ist.
  10. Autor dieses Themas

    s****l

    so wie du geschrieben hast hab ichs auch schon probiert. wird aber nichts eingetragen.
    groß-und kleinschreibung is ganz sicher richtig.

    PS: wenn man auf zitieren drückt hat man die richtigen anführungsstriche
  11. chatter schrieb:


    $insert = 'INSERT INTO stats ('ip','referer','browser','date','time') VALUES ('$ip,$referer,$browser','$date','$time')';


    Probier es mal so-->
    $insert = 'INSERT INTO stats (ip, referer, browser, date, time) VALUES ('$ip', '$referer', '$browser','$date','$time')';

    Soweit ich weiß löscht Lima die Anführungszeichen noch nicht, also ist da ein Fehler. Außerdem prüfe mal ob die Groß- und Kleinschreibung immer gleich ist.


    ...so geht es auch nicht, weil er die Variablen nicht mit den sonstigen Zeichen verbindet! Deine Strings stehen einfach in der Weltgeschichte rum. Du mußt die mit dem Punktoperator wie ich oben schonmal geschrieben habe verbinden ;-)

    Das Ergebnis sieht dann so aus:

    $insert = 'INSERT INTO stats (ip,referer,browser,date,time) VALUES ('.$ip.','.$referer.','.$browser.','.$date.','.$time.')';
    ^^^^Punkte beachten^^^^


    Wieso speicherst du zum Bsp. den String 'Zeit: 12:00' in der Datenbank, anstatt nur ein Timestamp?


    ...ok hab dein Script mal bissl angepasst:
    <?php
        $ip = $_SERVER['REMOTE_ADDR'];
        $referer = $_SERVER['HTTP_REFERER'];
        $browser = $_SERVER['HTTP_USER_AGENT'];
        $datetime = time();  // beinhaltet sowohl Zeit als auch Datum
    
        if (empty($ip)) {		$ip = 'unbekannt'; }
    	if (empty($referer)) {  $referer = 'unbekannt'; }
    	if (empty($browser)) {	$browser = 'unbekannt'; }
    
        include 'mysql_connect.php';
        $insert = 'INSERT INTO stats (ip,referer,browser,access_time) VALUES ('.$ip.','.$referer.','.$browser.','.$datetime.');';
        $res = mysql_query($insert);
        if (!$res) {
            echo 'Fehler: Datensatz konnte nicht eingetragen werden.';
        }
    ?>



    Grüßle

    PS: und Jungs im Forum werden alle doppelten Anführungsstriche in einfache Anführungsstriche umgewandelt ;-) ...in PHP werden die Anführungsstriche leider unterschiedlich behandelt

    Beitrag geaendert: 1.6.2007 10:02:34 von scout
  12. Mensch leute es passt mal wieder keiner von euch auf ^^



    $insert = "INSERT INTO stats ('ip','referer','browser','date','time') 
          
    
           VALUES ('$ip,$referer,$browser','$date','$time')";
          
    
          mysql_query($insert);



    Beitrag geaendert: 31.5.2007 20:32:44 von scrawl


    Also zunächst einmal dürfen in der ersten Klammer die Namen nicht in Anführungszeichen stehen, glaube das dann Php oder mysql die Sachen falsch interpretiert.

    In der Zweiten Klammer hast du mal so eben zwisch $ip und $browser 3---> ' <-- Anführungsklammern ausgelassen , wenn du das machst dann kann die DB auch nichts damit anfangen, da du sicher in der Datenbank eingestellt hast, dass $ip eine Zahl sein soll und die anderen Werte nicht 'NULL' sein dürfen.

    In diesem Fall wird dann einfach nichts eingetragen deshalb müsste im Prinzip der Code von scout schon Scout in etwa gehen , doch ich glaube wenn du die Variablen mit nem Punkt dranhängst, musst du die ' mit doppelten Anführungszeichen einklammern, also

    VALUES ( '' ' ''.$id. '' ' , ' ''.$referer ... usw

    LG Yan-Lun


    Beitrag geaendert: 1.6.2007 10:13:52 von yan-lun
  13. yan-lun schrieb:
    ...
    In diesem Fall wird dann einfach nichts eingetragen deshalb müsste im Prinzip der Code von scout schon Scout in etwa gehen , doch ich glaube wenn du die Variablen mit nem Punkt dranhängst, musst du die ' mit doppelten Anführungszeichen einklammern, also

    VALUES ( '' ' ''.$id. '' ' , ' ''.$referer ... usw

    LG Yan-Lun


    @Yan-Lun: Ähm jain ... das mit den doppelten Anführungszeichen funktioniert nur dann, wenn du am Anfang mit doppelten Anführungszeichen begonnen hast.
    also so:

    $input = ''INSERT INTO stats (ip,referer,...) VALUES (''.$id.'',''.$referer... '';

    2. holt er ja nur die Werte aus $_SERVER['REMOTE_ADDR'] ...sind also Strings! Eine Umwandlung zum Bsp in eine Hex-Zahl macht er ja nicht ;-)


    Grüßle
  14. $insert = 'INSERT INTO stats ('ip','referer','browser','date','time') 
           VALUES ('$ip,$referer,$browser','$date','$time');';
          mysql_query($insert);

    Sollte auch gehen(die Äußeren anführungszeichen als doppellstrich), da er dann die inneren einfachen hochkomata als String wertet und die Vatiablen normal einfügt.
    Ansonsten kleiner Tipp am Rande ... nutze statt date,time doch einfach den timestamp, damit lässt sich das Datum nachher problemlos in jegliches Datums und Zeit format konvertieren, und z.B. auch die Zeit zwischen zwei Logins lässt sich leichter berechnen.

    Beitrag geaendert: 1.6.2007 11:57:15 von keiax

    Beitrag geaendert: 1.6.2007 11:57:56 von keiax
  15. Autor dieses Themas

    s****l

    ich habs jetzt:
    $ip = $_SERVER['REMOTE_ADDR'];
    $referer = $_SERVER['HTTP_REFERER'];
    $browser = $_SERVER['HTTP_USER_AGENT'];
    $date = date("j.n.Y");
    $time = date("H:i");
    settype($ip, "string");
    settype($referer, "string");
    settype($browser, "string");
    settype($date, "string");
    settype($time, "string");
    if (empty($referer))
    {
        $referer = "Kein Referer";
    }
    include "mysql_connect.php";
    $insert = "INSERT INTO stats (ip,referer,browser,date,time) VALUES ('$ip','$referer','$browser','$date','$time')";
    mysql_query($insert);
  16. leider finde ich keinen zusamenhang
  17. Autor dieses Themas

    s****l


    leider finde ich keinen zusamenhang

    1. welcher zusammenhang? da gibt es keinen
    2. ich habs doch jetzt

    Beitrag geändert: 13.6.2007 19:58:57 von scrawl
  18. Autor dieses Themas

    s****l

    jetzt hab ich noch ein problem:
    $sql = "SELECT name,description,date,time,url,category,counter,id FROM downloads WHERE section = ".$_GET['category']."ORDER BY id ASC";

    da soll ein syntaxfehler sein...
    alle anführungsstriche bis auf $_GET['category'] sind doppelte.
    was ist da falsch?
  19. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!