SQL Wert einfügen/nicht einfügen anhand Datenbank

Shakall

Banned
Registriert
Juni 2010
Beiträge
147
Hallo ,
als erstes es geht darum das ich auf einer Seite ein Formular habe
PHP:
 echo' <form  action="auswert.php"  method="get"> ' ;

   echo'    <input type="text" name="wohnort" value="" size="20" maxlength="40" />';
   echo'    <input type="submit" name="sendeknopf" value="Abschicken" /> ';

  echo ' </form> ';


dieser wird dann auf einer seperaten seite geöffnet

PHP:
<?php
require ('klassen.php');
$db_link= connect();


    $wohnort = $_GET['wohnort'] ;
    $sql = 'select * from wohnort where wohnort="'. $wohnort .'"';
    $result = mysql_query($sql, $db_link);
    $menge = mysql_num_rows ( $result );

    
    
    if ($menge != 0)
      {
       header ('Location:error.php');
       exit();
    }
      else
    {
       header ("Location:ok.php");
    $sql = 'insert into wohnort ';
    $sql .= '(wohnort) ';
    $sql .= "values ('$_GET[wohnort]')";

    $result = mysql_query($sql, $db_link);
    }; 

require ('bot.html');
?>


ich wollte fragen wie man eventuell diesen befehl hier kürzen könnte , weil irgendwie blick ich da nicht durch.
Es soll nur ein Wert in die Datenbank die eine Tabelle hat namens "Wohnort" eingefügt werden , wenn der Wert noch nicht in der Datenbank ist. Falls er nicht da ist öffnet sich die location ok.php wo dann steht "Der Wert wurde eingefügt"
Ist dieses bereits in der Datenbank öffnet sich "error.php" und es steht der wert ist bereits in der datenbank...

die location sind kein Problem.


Steht eventuell auf selfhtml bzw selfphp genau wie sowas geht?
 
Ich will dir nicht auf die Füße treten, aber bevor du dich darum bemühst, das kürzer hinzubekommen, solltest du dich erst mal um die Sicherheit deiner Webseite kümmern. Nicht nur benutzt du mysql_query(), was offiziell als veraltet gilt und durch mysqli oder PDO ersetzt werden sollte, viel schlimmer noch: Das Skript hat ein riesiges Sicherheitsloch, weil du Daten aus $_GET ungefiltert in deine Abfrage einfügst und dadurch sehr einfach SQL-Injection ermöglichst.
 
Zeile 23 in deinem Beispiel enthält noch einen Fehler - schau dir die Zeile noch einmal genauer an. Zudem würde ich aus Performancegründen zählen wieviele Datensätze mit dem Wohnort verfügbar sind. Ist die Anzahl 0, fügst du anschließend den Wert ein, ansonsten gehst du direkt zu deiner error.php-Seite. Zudem könntest du auch deine Datenbank so modellieren, dass diese nur einen Wert dieses Wohnortes zulässt (Unique Key Constraint) - du bekommst dann von der Datenbank eins auf die Finger, wenn du versuchst trotzdem einen Wert einzufügen.

@NullPoiner:
Natürlich ist SQL-Injection und was es da nicht noch alles gibt ein tolles Thema - jedoch ist Shakall noch so weit am Anfang, dass erst einmal grundlegende Kenntnisse vermittelt werden müssen, bevor es um solche weiterführend Teile gehen.
 
Es geht darum das wir es so in der schule beigebracht bekommen haben und ich es auch so lernen soll.
Nur ich darf die seiten selfphp zb benutzen aber keine andere seite.
 
Bauergiesen schrieb:
Zudem würde ich aus Performancegründen zählen wieviele Datensätze mit dem Wohnort verfügbar sind. Ist die Anzahl 0, fügst du anschließend den Wert ein, ansonsten gehst du direkt zu deiner error.php-Seite.

Noch performanter statt COUNT(*) wäre in diesem Fall den Query einfach mit LIMIT 1 am Ende auszuführen. Die Datenbank muss dann nicht duch die komplette Tabelle iterieren sondern bricht beim ersten gefundenen Datensatz ab.
 
Zurück
Oben