PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (http://www.php-resource.de/forum/)
-   Fragen zu Installation & Konfiguration (LAMP, WAMP & Co.) (http://www.php-resource.de/forum/fragen-zu-installation-and-konfiguration-lamp-wamp-and-co/)
-   -   Dringende Hilfe gesucht beim Praktikum(firebird/php)) (http://www.php-resource.de/forum/fragen-zu-installation-and-konfiguration-lamp-wamp-and-co/101908-dringende-hilfe-gesucht-beim-praktikum-firebird-php.html)

AmicaNoctis 18-07-2011 18:50

Code:

$database = new PDO("firebird:dbname=C:\\Apache2\\htdocs\\guestbook_entries.GDB;host=localhost","SYSDBA", "masterkey");
Code ist jetzt lesbarer :)

Jiraiya 18-07-2011 18:55

da kann ich aber nicht für garantieren das das auch stimmt.!
also die variante die ich habe haut zumindest hin und gibt genau das aus was ich auch geschrieben habe.

so is erledigt. die ausgabe ist angepasst und der Quelltext mit den neusten änderungen übernommen.
wenn dir noch was einfällt schreib ruhig. spätestens morgen werd ich bestimmt eh wieder ins forum gehen. da gehts ja dann um die eintragung und das interagieren mit der datenbank

AmicaNoctis 18-07-2011 19:08

Zitat:

Zitat von Jiraiya (Beitrag 655231)
da kann ich aber nicht für garantieren das das auch stimmt.!
also die variante die ich habe haut zumindest hin und gibt genau das aus was ich auch geschrieben habe.

Aber nur zufällig, weil PHP die Escape-Sequenzen \A, \h und \g nicht kennt und als Fallback so tut, als wäre es \\A, \\h und \\g. Sobald du aber in Unkenntnis dieses Zusammenhangs nach dem selben Prinzip eine Datenbank namens friends.gdb oder bestsellers.gdb öffnen willst, steht dann "...\friends.gdb" bzw. "...\bestsellers.gdb" dort und PHP wird es im ersten Falle als Steuerzeichen für Papiervorschub und im zweiten als Rückschritt erkennen – und das zu Recht!

Fakt ist, Backslashes die als solche gemeint sind und keine Steuerzeichen darstellen, sollten unbedingt escaped werden. Mehr sag ich dazu jetzt einfach mal nicht. Wenn du der Meinung bist, das ist richtig so, glaub es halt und bleib bei diesem schlechten Stil.

Jiraiya 18-07-2011 20:52

das wollte ich damit garnicht zum audruck bringen. und wieder bin ich dir wirklich dankbar für die aufklärung. und ich hoffe du glaubst mir dass das nicht ironisch oder irgendwas gemeint ist.
ich möchte das programmieren lernen und dass dazu ein schlechter stil am anfang nicht unnormal ist find ich zwar nicht schön aber auch nicht verwunderlich.
aber so kann man ebenso lernen, oder besser gesagt so kann man lernen fehler auszuräumen, denn diese muss man oft erst machen um sie zu erkennen zukönnen.
egal das gehört hier nicht hin find ich, sollte aber mal gesagt werden.
ich bin und werde dir weiterhin dankbar für jede art von ratschlag und hilfe sein.

Jiraiya 19-07-2011 11:51

einen wunderschönen guten Tag.
wie versprochen(befürchtet) hab ich nun ein problem mit dem Update befehl.
doch zuerst mal der quelltext, gößten teils übernommen von der seie vom letzten vollständigen post und abgewandelt

PHP-Code:

<?php
    $database 
= new PDO("firebird:dbname=C:\\Apache2\\htdocs\\guestbook_entries.GDB;host=localhost","SYSDBA""masterkey");
    
$database->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
    
    
$author " ";
    
$time =    0;
    
$text " ";
    
    
$sql "
            UPDATE 
                \"NEW_Table\" 
            SET 
                DATUM = '$time' , TEXT = '$text'
            WHERE {AUTHOR = $author} 
            
          "
;
            
    
$stmn $database->prepare($sql);
    
    
$author " ";
    
$time =    0;
    
$text " ";
    
    
$stmn->bindParam(":author" $author PDO::PARAM_STR);
    
$stmn->bindParam(":time" $time PDO::PARAM_INT);
    
$stmn->bindParam(":text" $text PDO::PARAM_STR);
    
    
$q = array(
            array(
                
"AUTHOR" => "MrX",
                
"TEXT" => "Hallo...",
                
"DATUM" => 123456789
                
),
            array(
                
"AUTHOR" => "MrZ",
                
"TEXT" => "Hallo...Ich bin Z",
                
"DATUM" => 1275554677
            
),
        );
        
        
    foreach(
$q as $query)
    {
        
$author $query["AUTHOR"];
        
$text $query["TEXT"];
        
$time $query["DATUM"];
        
        
$stmn->execute();
    }
    
$stmn -> closeCursor();
    
    
?>

und aml wieder diese wirre fehlermeldung:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: -104 Dynamic SQL Error SQL error code = -104 Token unknown - line 3, column 5 'NEW_Table' ' in C:\Apache2\htdocs\guestebook 2.php:18 Stack trace: #0 C:\Apache2\htdocs\guestebook 2.php(18): PDO->prepare('?????UPDATE ???...') #1 {main} thrown in C:\Apache2\htdocs\guestebook 2.php on line 18

ich habe auch schon die tabelle von dem bild um MrX und MrZ erweitert. jedoch kommt er ja garnicht bis zu diesem punkt.

AmicaNoctis 19-07-2011 11:57

NEW_Table ist mit Sicherheit keine String-Konstante, sondern soll einen Tabellennamen darstellen. Dass du für Tabellen- und Spaltennamen Double-Quotes nehmen musst, sagte ich bereits. Single-Quotes sind in SQL immer String-Begrenzer.

Außerdem bitte Prepared Statements nutzen. Dein Code ist anfällig für SQL Injections.

Edit: Ich sehe gerade, du willst ja selbst Prepared Statements nutzen, allerdings machst du es falsch. Bitte im PHP Handbuch die Beispiele ansehen, wie man Parameter bindet und vor allem welche Arten von Platzhaltern dabei zur Verfügung stehen.

Jiraiya 19-07-2011 12:04

ich habe die double quotes hinzugefügt aber genau jetzt mekkert der erst rum wegen string.

AmicaNoctis 19-07-2011 12:09

Natürlich tut er das, weil du damit den PHP-String beendest. Erinnerst du dich, wozu der Backslash da ist? Das wird hier jetzt langsam zu nem Grundlagenkurs und das ist nicht sinnvoll.

Jiraiya 19-07-2011 12:35

okay ich hab also nun die " wieder mit einem backslash versehen. zuminest laut einer anleitung sollte das helfen. allerdings hat er immer noch ein problem:


Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: -206 Dynamic SQL Error SQL error code = -206 Column unknown {AUTHOR At line 6, column 10 ' in C:\Apache2\htdocs\guestebook 2.php:18 Stack trace: #0 C:\Apache2\htdocs\guestebook 2.php(18): PDO->prepare('?????UPDATE ???...') #1 {main} thrown in C:\Apache2\htdocs\guestebook 2.php on line 18

ist das nun auf die Prepare statement angelegenheit zurückzuführen?
bevor ich weitere unnötige posts mache. wie richtig oder vertrauenswürde ist diese seite nach einem groben drüber schauen?
PDO(PHP Data Objects) | Coding-Bereich

ich mein ich hab bis jetzt das meiste an quelltext von dort. und das haut mir immer wieder diese fehler rein.

AmicaNoctis 19-07-2011 13:01

Diese Anleitung kann man nehmen, aber du hast es falsch übernommen. Die wirklich ultimative Referenz ist aber immer noch das PHP Handbuch. Dort wird es erklärt, beispielhaft gezeigt und von vielen Nutzern kommentiert.

Jiraiya 19-07-2011 13:06

da stimm ich dir zu. es ist wirklich praktisch. mein problem bei dem wie auch bei dem beispiel bei der seite ist, dass ich durch die ähnlichkeit zwischen feldnamen und variablenamen(Feldname aus tabelle calories und variable calories) aus den beispiel, wahrscheinlich die beschriftung falsch lege. allerdings auch nicht erfahre wie sie richtig ist, da es so zu hauf gemacht wird.

dieses problem zieht sich durch den gesamten quelltext nicht nur für die bindParam... denn da ist es erklärt

AmicaNoctis 19-07-2011 13:08

Statt den SQL-Code mit eingebetteten Variablen zu verhunzen, musst du nur die Parameter in der Form :name einbauen. Genau diese Parameter benutzt du dann in bindParam(). :rolleyes:

Jiraiya 19-07-2011 13:23

und im array geb ich dann den variablen die dahinterstehenden werte?
wie kommen aber dann die werte in die felder der tabelle?

AmicaNoctis 19-07-2011 14:32

Zitat:

Zitat von Jiraiya (Beitrag 655258)
und im array geb ich dann den variablen die dahinterstehenden werte?

Welches Array? Edit: Achso, ja, sieht ganz so aus. bindParam übernimmt die Variablen immer per Referenz, daher werden spätere Änderungen/Neuzuweisungen berücksichtigt. Näheres erfährst du im Handbuch.

Zitat:

Zitat von Jiraiya (Beitrag 655258)
wie kommen aber dann die werte in die felder der tabelle?

Durch das Binden und den anschließenden Aufruf von execute(). Falls du das nicht meinst, stell bitte konkretere Fragen.

Jiraiya 19-07-2011 14:50

die antwort ist vollkommen ausreichend. so hab ich das zumindest schonmal verstanden. allerdings komm ich immer noch nicht vorran. hab jetzt noch mal ne stunde mir die backslash angelegenheit durch gelesen und den unterschied von " und ' und ` und komm trotzdem in dem statement nicht weiter.

könnte ich da nochmal deine Rat erfragen und bitte jetzt etwas expliziter.

momentane fassung:
PHP-Code:

    
    $sql 
"UPDATE `NEW_TABLE`
            SET `DATUM` = :time , `TEXT` = :text
            WHERE `AUTHOR` = :author 
            "
;
    
$stmn =  $databe->prepare($sql):

$author " ";
$time 0;
$text" ";

    
$stmn->bindParam(":author" $author PDO::PARAM_STR);
    
$stmn->1bindParam(":time" $time PDO::PARAM_INT);
    
$stmn->bindParam(":text" $text PDO::PARAM_STR); 



Alle Zeitangaben in WEZ +2. Es ist jetzt 01:49 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG