2016-05-23 54 views
-2

我不是最好的PHP,但可以得到它的工作,因爲我的腳本坐着它,但使數據庫看起來像一團糟。如何鏈接它如何提交和我的代碼截圖。我試圖讓它一次提交所有數據到我的SQL表中的1行(行),但它運行每個插入查詢一次接一個,因爲我有它使數據庫一團糟。我怎樣才能縮短這段代碼,讓它一次執行所有的插入查詢。發送php提交到MySQL

這裏是我的PHP:

<?php 

// send dataset 1 
if (isset($_REQUEST['sendName'])) { 

$yourfield=preg_replace('/[^a-zA-Z0-9\ ]/','',$_REQUEST['sendName']); 
$yourfield=htmlspecialchars($yourfield); 

} else { 
die('User did not send any data to be saved! field1'); 
} 

$pdo_dsn='mysql:dbname=smsdata;host=localhost'; 
$pdo_user='root';  
$pdo_password='mypasswd'; 

try { 

$conn = new PDO($pdo_dsn, $pdo_user, $pdo_password); 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$qry=$conn->prepare('INSERT INTO SMSTable (sendName) VALUES (:sendName)'); 
$qry->execute(Array(":sendName" => $yourfield)); 

} catch (PDOException $e) { 
echo 'Error: ' . $e->getMessage() . " file: " . $e->getFile() . " line: " . $e->getLine(); 
exit; 
} 


// send dataset 2 
if (isset($_REQUEST['sendNumber'])) { 

$yourfield=preg_replace('/[^a-zA-Z0-9\ ]/','',$_REQUEST['sendNumber']); 
$yourfield=htmlspecialchars($yourfield); 

} else { 
die('User did not send any data to be saved! field2'); 
} 

$pdo_dsn='mysql:dbname=smsdata;host=localhost'; 
$pdo_user='root';  
$pdo_password='mypasswd'; 

try { 

$conn = new PDO($pdo_dsn, $pdo_user, $pdo_password); 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$qry=$conn->prepare('INSERT INTO SMSTable (sendNumber) VALUES (:sendNumber)'); 
$qry->execute(Array(":sendNumber" => $yourfield)); 

} catch (PDOException $e) { 
echo 'Error: ' . $e->getMessage() . " file: " . $e->getFile() . " line: " . $e->getLine(); 
exit; 
} 


// send dataset 3 
if (isset($_REQUEST['sendEmail'])) { 

$yourfield=preg_replace('/[^a-zA-Z0-9\ ]/','',$_REQUEST['sendEmail']); 
$yourfield=htmlspecialchars($yourfield); 

} else { 
die('User did not send any data to be saved! field3'); 
} 

$pdo_dsn='mysql:dbname=smsdata;host=localhost'; 
$pdo_user='root';  
$pdo_password='mypasswd'; 

try { 

$conn = new PDO($pdo_dsn, $pdo_user, $pdo_password); 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$qry=$conn->prepare('INSERT INTO SMSTable (sendEmail) VALUES (:sendEmail)'); 
$qry->execute(Array(":sendEmail" => $yourfield)); 

} catch (PDOException $e) { 
echo 'Error: ' . $e->getMessage() . " file: " . $e->getFile() . " line: " . $e->getLine(); 
exit; 
} 
} 
else{ 
print "<meta http-equiv=\"refresh\" content=\"0;URL=error.htm\">"; 
} 
?> 

,這裏是它做什麼它不整齊地把它放在同一行,因爲我想它使一個爛攤子如屏幕截圖的數據庫,但確實工作得不是我需要它。 http://prnt.sc/b7kum1在屏幕截圖中可以看到它如何「步進」數據,但是我應該一次性將它跨越頂端線。

我知道我的代碼效率極其低下這就是爲什麼我在這裏:)

+1

執行*一個*'INSERT'語句而不是*三*。 – David

+0

以及我如何使用當前的代碼做這件事,我嘗試在最後一節中將它們組合起來,並給出了500錯誤。嘗試在所有3個部分做一個新的變量來做到這一點,它給了我php的線路錯誤。我不知道如何將變量全部拉到一起,並且一次僅插入一個變量,並且它可以正常工作,但會造成數據庫混亂。 –

回答

1

每次調用INSERT它會創建一個新的行,所以你插入的不同行的表的各參數的時間。你應該只插入一行所有3個參數。

$params = array(); 
foreach (array('sendName', 'sendNumber', 'sendEmail') as $field) { 
    if (!isset($_REQUEST[$field])) { 
     die("User didn't send $field"); 
    } 
    $params[$field] = preg_replace('/[^a-zA-Z0-9\s]/','',$_REQUEST[$field]); 
} 

$pdo_dsn='mysql:dbname=smsdata;host=localhost'; 
$pdo_user='root';  
$pdo_password='mypasswd'; 

try { 

    $conn = new PDO($pdo_dsn, $pdo_user, $pdo_password); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $qry=$conn->prepare('INSERT INTO SMSTable (sendName, sendNumber, sendEmail) VALUES (:sendName, :sendNumber, :sendEmail)'); 
    $qry->execute($params); 

} catch (PDOException $e) { 
    echo 'Error: ' . $e->getMessage() . " file: " . $e->getFile() . " line: " . $e->getLine(); 
    exit; 
} 

我拿出電話htmlentities。在網頁上顯示數據時應該使用它,而不是在數據庫中存儲時使用。

+0

作品完美,謝謝。我添加了我的其餘領域(沒有發佈完整的代碼)它會一直很長。現在就開始工作。 –