2009-07-26 9 views
0

Der folgende Code fügt zwei Datensätze in meine Datenbank ein, aber ich möchte nur einen Datensatz einfügen. Warum wird die Zeile zweimal eingefügt?SQL in PHP Einfügen von zwei Zeilen anstelle von einer

<? 
if (!$con) 
{ 
    die('Could not connect: ' . mysql_error()); 
} 

$i=1; 

while($i<=1) 
{ 
    if (isset($_POST['submit'])) 
    { 
     $sql="INSERT INTO customers 
        (company, salutation, first_name, 
        last_name, phone, email, fax, 
        street, town, county, postcode, 
        type, notes) 
       VALUES 
        ('$_POST[company]', 
        '$_POST[salutation]', 
        '$_POST[first_name]', 
        '$_POST[last_name]', 
        '$_POST[phone]', 
        '$_POST[fax]', 
        '$_POST[email]', 
        '$_POST[street]', 
        '$_POST[town]', 
        '$_POST[county]', 
        '$_POST[postcode]', 
        '$_POST[type]', 
        '$_POST[notes]')"; 

     if (!mysql_query($sql,$con)) 
     { 
      die('Error: ' . mysql_error()); 
     } 
    } 

    $i++; 
} 
?> 
+0

Zuallererst sollten Sie Ihre Eingabedaten auf jeden Fall mit etwas wie mysql_real_escape_string; Zweitens, warum die While-Schleife? –

+0

Und vielleicht eine Bestellung in Ihrem Code: P – kiewic

+0

$ _POST [Firma] sollte sein $ _POST ['Firma'] – dar7yl

Antwort

0

Ist in der Tabelle CUSTOMERS mindestens ein Primärschlüssel definiert, um Dubletten zu stoppen?

Ist Ihre PHP-Webanwendung intelligent genug, um zu verhindern, dass jemand diese Seite erreicht, wenn bereits ein Eintrag in der Tabelle CUSTOMERS für die Spaltenkombination in der Tabelle vorhanden ist?

0

Ich kann nicht nur von diesem sagen. Und dieser Code ist kaum lesbar Einrückung ist schlimmer als nur nicht existent und die Art, wie Sie Ihre Post-Variablen in Ihre Abfrage einbetten macht es auch nicht klarer (und es könnte tatsächlich eine Sicherheitslücke verursachen).

Versuchen Sie, echo $sql; nach Ihrem $sql = ... Monster zu schreiben. Sie werden sehen können, ob zwei Abfragen ausgeführt werden, oder ob es nur eine Abfrage ist, die zwei Zeilen einfügt, und im letzten Fall wird es wahrscheinlich einen Hinweis darauf geben, warum es das getan hat. Wenn es dir nicht hilft, poste deine Ergebnisse dort, und ich oder jemand anderes hier kann es dir ansehen. Aber bedenken Sie, dass es für uns mit solch unscheinbarem Code nicht einfach oder angenehm ist.

0

Ich habe Ihren Code durchgearbeitet und sehe keinen Grund für den doppelten Einsatz. Gibt es noch etwas, worüber wir wissen sollten? Es sollte nicht das Problem verursachen, aber warum gibt es eine while-Schleife in Ihrem Code? Gibt es eine Möglichkeit, diese Seite zweimal einzureichen? Gibt es einen Auslöser?

2

Bei einer Schätzung würde ich sagen, es ist, weil es zweimal ausgeführt wird. (Es ist kein Smarmy - es ist wahrscheinlich ein Kontrollfluss-Problem, da es nichts zu tun scheint, das das obige zweimal einfügen würde.)

Das heißt, da sind einige besorgniserregende Dinge drin wie zB fehlender Eingabe-Escaping, etc. zB: Was ist der Zweck der $ i-Variable?

Verwandte Themen