Script trägt nicht ein und es kommt keine Fehlermeldung

SantaCruze

Erfahrenes Mitglied
Hallo :) Und zwar habe ich noch ein Problemchen. Das Script welches ich hier poste, trägt nichts in die Tabelle ein , allerdings ist bei ErrorReporting ALL auch keine Fehlerausgabe. Das ganze sieht so aus:

HTML:
<form id="Answers" name="Answers" method="POST" action="newanswer_script.php">
<input type="hidden" name="fid" value="<?php echo $_GET["fid"]; ?>">
<input type="hidden" name="tid" value="<?php echo $_GET["tid"]; ?>">
  <table width="30%" border="0" align="center" cellpadding="1" cellspacing="1">
    <tr>
      <td width="46%">Name</td>
      <td width="54%"><label>
        <input name="name" type="text" id="name" size="50" maxlength="100" />
      </label></td>
    </tr>
    <tr>
      <td>Titel</td>
      <td><label>
        <input name="topic" type="text" id="topic" size="50" maxlength="100" />
      </label></td>
    </tr>
    <tr>
      <td>Text</td>
      <td><label>
        <textarea name="nachricht" cols="50" rows="3" id="textarea"></textarea>
      </label></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><input name="Submit" type="submit" id="Submit" value="Submit" /></td>
    </tr>
  </table>
</form>

PHP:
<?php
error_reporting(E_ALL);
include("connect.php");

// Variablen Deklarieren

$nachricht = $_POST["nachricht"];
$topic = $_POST["topic"];
$name = $_POST["name"];
$fid = $_POST["fid"];
$tid = $_POST["tid"];


// Beitrag in die DB schreiben
mysql_query("INSERT INTO answers SET text='$nachricht', topic='$topic', user='$name', fid = '$fid', tid = '$tid' , created(now)");

// Auflisten der Antworten
echo "Antwort gepostet! <a href='showanswers.php?fid=".$fid."&tid=".$tid."'> Zum Beitrag</a>";

?>
 
Bitte mal folgendes abändern und dann Fehlermeldung posten:
PHP:
// Beitrag in die DB schreiben
mysql_query("INSERT INTO answers SET text='$nachricht', topic='$topic', user='$name', fid = '$fid', tid = '$tid' , created(now)") or die(mysql_error());

/* Folgendes geht auch */

// Beitrag in die DB schreiben
if(mysql_query("INSERT INTO answers SET text='$nachricht', topic='$topic', user='$name', fid = '$fid', tid = '$tid' , created(now)") === false)
{
    echo mysql_error();
    exit;
}
 
Und bitte bitte änder es auch folgendermaßen (auch in weiteren Entwicklungen:

mysql_query("INSERT INTO answers SET text='{$nachricht}', topic='{$topic}', user='{$name}', fid = '{$fid}', tid = '{$tid}' , " . mktime() . ";")

Da brech ich in Tränen aus, wenn jemand Variablen einfach in die Strings reinschreibt ...

(Falls mir das keiner glaubt, dass das net so toll ist: hier sind die Benchmarks:

http://benchmark.nophia.de/benchmar...gle-quotes-oder-double-quotes-teil-2-b-4.html
)
 
Da brech ich in Tränen aus, wenn jemand Variablen einfach in die Strings reinschreibt ...
Ich breche in Tränen aus, wenn jemand sinnlose oder gar falsche Ratschläge gibt.
Die beiden Schreibweisen "$var" und "{$var}" nehmen sich kaum etwas; bei meinen Versuchen waren es gerade mal ± 3 % Unterschied in beide Richtungen. Klar, einen Vorteil hat die Schreibweise {$var} auf jeden Fall gegenüber der anderen und ist daher der anderen vorzuziehen, denn sie beugt eindeutig Fehlinterpretationen vor (denn "{$var}foobar" ist etwas anderes als "$varfoobar").

Doch in diesem Fall wäre es wichtiger darauf hinzuweisen, dass das Skript hervorragend für SQL-Injektionen geeignet ist. Auf eine Sicherheitslücke hinzuweisen ist weit aus wichtiger als auf einen möglichen Geschwindigkeitsgewinn, der in der Praxis auch vielleicht gar nicht zur Geltung kommt.
 
;-) ... "{$var}foobar" ist ein guter Grund und 3% für mich auch ... aber wo siehst du auf dem Wege eine SQL-Injektionsgefahr? (will was lernen wenns was zu lernen gibt)
 
Naja also mit {} würd ich das nicht machen, aber um das genau abzugrenzen kann man das ja so machen.

"INSERT INTO ta_bla SET id='" . $var . "', ...

mfg
 
@Gumbo - aber das sind doch keine Daten die über den Request reinkommen - für mich ist $var eine ganz normale Variable und die Fitlerung würde ich bereits vorher durchführen ... (abgesehen davon dass ich real_escape drüber laufen lassen würde)...
 
Dem ersten Beitrag von SantaCruze zu folge stammen die Daten aus einer POST-Anfrage. Und ist „register_globals“ aktiviert, kann der Ursprung der Variable noch schlechter nachvollzogen werden. Ob nun Filterung und Validierung vorher stattfinden, ist egal. Hauptsache sie finden überhaupt statt.
 
Zurück