2016-07-22 16 views
0

Ich schreibe eine PHP-Seite, die auf einem Server ausgeführt wird und akzeptiert einige POST-Parameter und fügt sie zu einem Server nach Validierung mit REGEX. Aus irgendeinem Grund zeigt mein Server (mit WAMP-Server) eine leere Ergebnismenge an, nachdem der Code erfolgreich ausgeführt wurde und nachdem ich am Ende auf die Seite umgeleitet wurde.WAMP Server mySQL-Datentyp? MySQL-Datenbank wird nicht in PHP aktualisiert?

Ich denke, es könnte mein Code sein, aber es könnte auch die Art sein, wie der Server eingerichtet wird, derzeit sind alle meine Spalten vom Typ "int (11)" und ich weiß nicht, welchen Typ ich wählen soll.

<?php 
if(isset($_POST["name"]) && isset($_POST["email"]) && isset($_POST["pnumber"])){ 
    $name = $_POST["name"]; 
    $number = $_POST["pnumber"]; 
    $email = $_POST["email"]; 
    $db = new PDO("mysql:dbname=daythree", "root", ""); 
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    if(preg_match("/^[0-9]{10}$/", $number) && 
     preg_match("/^[A-Za-z]{2,}[\sA-Za-z]*$/", $name) && 
     preg_match("/^[A-z0-9_\-]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z.]{2,4}$/", $email)){ 

     $sql = "INSERT INTO daythree ('name', 'email', 'number') VALUES ('. $name .', '. $email. ', '. $number .')"; 

     header("Location: evilmasterminds.php"); 
     die(); 
    } 

} 

Vielen Dank und Entschuldigung für irgendwelche Probleme.

+0

'Int' ist nicht die richtige Wahl für' name' zu ​​gehen und 'email' und die SQL-Anweisung falsch ist - sollte vielleicht mehr wie '$ sql =" INSERT INTO daythree ('Name', 'E-Mail', 'Nummer') VALUES ('{$ name}', '{$ email}', '{$ number}') ";' – RamRaider

+0

und warum, wenn Sie mit PDO arbeiten, verwenden Sie keine vorbereiteten Anweisungen - Sie negieren die eine Sache, die vor böswilliger SQL-Injektion schützt, indem Sie POST-Variablen in den SQL einbetten? Verwenden Sie keine einfachen Anführungszeichen um Spaltennamen - verwenden Sie stattdessen den Backtick! – RamRaider

+0

Ich habe die $ sql-Zeile zu diesem geändert; Ich habe nur seit ein paar Monaten programmiert und dies ist mehr als ein Experiment für mich, Datenbanken für den persönlichen Gebrauch zu bearbeiten, so bin ich nicht besorgt über die Sicherheitsseite :) Auch, danke für die Hilfe! :) Übrigens, was soll ich Int ändern? Es gibt ziemlich viele Optionen und ich bin mir nicht sicher, welches wäre richtig :( – JsDart

Antwort

0

Nicht getestet, aber wie Sie PDO vielleicht etwas mehr wie folgt verwenden - es sollte Ihnen zumindest in die richtige Richtung zeigen.

if(isset($_POST["name"],$_POST["email"],$_POST["pnumber"])){ 

    $name = $_POST["name"]; 
    $number = $_POST["pnumber"]; 
    $email = $_POST["email"]; 


    try{ 
     $db = new PDO("mysql:dbname=daythree", "root", ""); 
     $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     if(preg_match("/^[0-9]{10}$/", $number) && 
      preg_match("/^[A-Za-z]{2,}[\sA-Za-z]*$/", $name) && 
      preg_match("/^[A-z0-9_\-]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z.]{2,4}$/", $email)){ 


      $sql='insert into `daythree` (`name`,`email`,`number`) values (:name,:email,:number);'; 
      $stmt=$db->prepare($sql); 
      $stmt->execute(array(
       ':name'  => $name, 
       ':email' => $email, 
       ':number' => $number 
      )); 

      exit(header("Location: evilmasterminds.php")); 
     } 

    }catch(PDOException $e){ 
     exit('Error: '.$e->getMessage()); 
    } 
} 

Was Spaltentypen name und email an Sicherheit grenzender Wahrscheinlichkeit varchar während number könnte int je in den verwendeten Zahlen auf tatsächliche Format sein sollte erhalten Sie - wieder eine Varchar-Spalte könnte besser geeignet sein.

Update: Code geändert für Punkt durch @riggsfolly in Bezug auf Ausnahmen zu berücksichtigen

+0

Ziemlich sicher, die Verbindungszeichenfolge ist auch falsch, und es ist nicht als richtig in irgendeiner Weise verbunden getestet – RiggsFolly

+0

Wie OP MYSQL zu setzen werfen Sie Ausnahmen auf, es wäre eine gute Idee, die PDO-Anweisungen in einen try/catch-Block zu setzen – RiggsFolly

+0

Ein guter Punkt gut gemacht @RiggsFolly – RamRaider