PHP ' oder " oder "'. was wird wann benutzt ?

yeronimo

Erfahrenes Mitglied
Also ich hab da das Problem das ich sehr häufig die anwendung von hochkommas ', den gänsefüßchen :) " oder sogar diesen hier: "'. durcheinander bringe. gibt es da irgendwelche faustregeln wann was benutzt wird

es gibt ja auch noch unterschiede, wenn man echo " benutzt oder wenn man echo ' benutzt.....
Alles etwas verwirrend, aber vielleicht hat ja jemand von euch ein paar regeln bei der hand oder vielleicht auch eselsbrücken mit denen man sich sowas besser merken kann :) !


danke schonmal
 
Hi,

Die Anführungszeichen sollte man nur verwenden wenn man Variablen in der Ausgabe auswerten möchte.

Beispiel:
PHP:
echo "Kaiser $kaiser ist toll"; // $kaiser wird ausgewertet
PHP:
echo 'Kaiser $kaiser ist toll'; //keine Auswertung

Richtig mit dem Hochkomma wäre
PHP:
echo 'Kaiser '. $kaiser .' ist toll';

Sicher könnte man die Anführungszeichen immer verwenden, aber dadurch das eine Auswertung stattfindet, wird das Script bei häufiger Anwendung, verhältnismäßig langsamer ist als die Methode mit dem Hochkomma.
 
danke schonmal, aber wie ist das z.b. bei variablen wie arrays oder in mysql befehlen :

$test = "select * from test where id = (jetz tkommt die frage) $_POST[id] oder $_POST['id'] oder "'.$_POST['id'].'"

oder bei

insert into (test1,test2,test3)values(wie geht das hier ?"$_POST['id']",$_POST[id],"'.$_POST['id'].'")
welche variante ist richtig ?

und bei z.b. values in input feldern habe ich das gleiche problem.

<input type="text" value="" name"test">

wie setze ich da bei value $_POST[id] ein ? mit hochkommas, ohne ? mit gäsenfüßchen ?

da ich schon gesehen habe das z.. bei einem echo $_POST['id]; ausgegeben wird und funktioniert und auch echo $_POST[id]; funktionietr verstehe ich die ganzen unterschiede nicht soi ganz.



hoffe du kannst mir das beantworten :) danke
 
Am sinnvollsten wären diese Möglichkeiten:
PHP:
$sql1 = 'select * from test where id = '. $_POST['id'] .';

$sql = 'insert into (test1) values('. $_POST['id'] .')';

echo '<input type="text" value="'. $_POST['id'] .'" name="test">';

Gehen würde aber auch:
PHP:
$sql1 = "select * from test where id = '$_POST['id']'";

$sql = "insert into (test1) values("$_POST['id']")";

echo "<input type=\"text\" value=\"$_POST['id']\" name=\"test\">';
 
ID quoten? Böse :)

Ich würde dir empfehlen, die saubersten Lösungen zu verinnerlichen:

PHP:
$sql = "SELECT * FROM table WHERE id = " . $id . ";";
$sql = 'SELECT * FROM table WHERE id = ' . $id . ';';
Gerade bei einem Editor mit Syntaxhighlighting erkennt man sofort, wo man Variablen gesetzt hat.

Eine Variante wurde aber garnicht genannt:

PHP:
$sql = "SELECT * FROM table WHERE id = {$id};";
Ich meine, das geht dann sogar mit Single Quotes (Angabe ohne Gewähr).

Und immer schön mysql_escape_string() verwenden, um SQL Injection vorzubeugen ;)
 
Ich würde dir empfehlen, die saubersten Lösungen zu verinnerlichen:

PHP:
$sql = "SELECT * FROM table WHERE id = " . $id . ";";
$sql = 'SELECT * FROM table WHERE id = ' . $id . ';';
Gerade bei einem Editor mit Syntaxhighlighting erkennt man sofort, wo man Variablen gesetzt hat.

Ist nicht das hier das sauberste?:

PHP:
$sql = "SELECT * FROM table WHERE id = '" . $id . "';";

Also mit ' um $id ?
 
Zu erwähnen wäre eventuell auch noch, dass Zeilenumbrüche mit \n nur in den doppelten Anführungszeichen funktionieren.

Aus dem Grund hab ich mir angewöhnt, ausgaben (echo etc.) mit doppelten Anführungszeichen zu notieren.

PHP:
echo "<span id=\"test\">Test Ausgabe</span>\n\r";
 
So musst du aber alles HTML escapen. Finde ich nicht so schön. So gehts auch:
PHP:
echo '<span id="test">Test Ausgabe</span>' ."\n\r";
 
um mal zusammenzufassen :

in mysql statements generell ->
PHP:
$sql = "SELECT * FROM table WHERE id = " . $id . ";";
$sql = 'SELECT * FROM table WHERE id = ' . $id . ';';
in echos ->
PHP:
 echo '<input type="text" value="'. $_POST['id'] .'" name="test">';

finde ich generell die schönste variante. das mit dem escapen sieht, wenn man das ueberall im code macht, absolut unuebersichtlich aus.

danke schonmal für die antworten!
 
Zurück