2012-03-04 42 views
0

问题就解决了,做了一个愚蠢的错误,包括印刷和丝网版...为什么这个PHP脚本插入数据两次?


此脚本插入数据的两倍,我尝试了一些东西,我没有得到它的工作。有什么建议么?

<?php 
    include("config.inc.php"); 
$continue = ''; 
$sessiontekst = md5(date("d-m-Y")); 
$sessionname = "Secure"; 
if(!isset($_SESSION[$sessionname]) or $_SESSION[$sessionname] != $sessiontekst) 
{ 
$continue = 'Je bent niet ingelogd'; 
} 
if($continue == '') { 

以上是检查登录的部分。到这里的是,从形式

// startup 
    $result_final = ""; 
    $counter = 0; 

    // Arrays 
    $opmerking = $_POST['opmerkingen']; 
    $datum = $_POST['datum']; 
    $docent = $_POST['docent']; 
    $vak = $_POST['vak']; 
    $stroming = $_POST['stroming']; 
    $lokaal = $_POST['lokaal']; 
    $tijd = $_POST['tijd']; 


    while ($counter < count($datum)) 
    { 
    if ($datum[$counter] == '') 
    { echo 'Geen datum ingevoerd<br>';} 
    elseif ($tijd[$counter] == '') 
    { echo 'Geen tijd ingevoerd<br>';} 
    else { 
mysql_query("INSERT INTO toetsrooster (`docent`, `vak`, `lokaal`, `datum`, `tijd`, `richting`, `opmerkingen`) VALUES ('".addslashes($docent[$counter])."', '".addslashes($vak[$counter])."', '".addslashes($lokaal[$counter])."', '".addslashes($datum[$counter])."', '".addslashes($tijd[$counter])."', '".addslashes($stroming[$counter])."', '".addslashes($opmerking[$counter])."')"); 
$result_final .= "Toets ".($counter+1)." toegevoegd<br />"; 
    } 
    $counter++; 
    mysql_error(); 
    } 

显示脚本输出的部分处理数据的脚本,它说,它添加一次数据,但它的广告数据的两倍。

// Print Result 
echo <<<__HTML_END 

<html> 
<head> 
    <title>Toetsen toegevoegd</title> 
</head> 
<body> 
    $result_final 
</body> 
</html> 

__HTML_END; 
} 

而且又有点为登录

else { 
    echo $continue; 
} 
?> 

形式的代码的检查:

<? 
$continue = ''; 
$sessiontekst = md5(date("d-m-Y")); 
$sessionname = "Secure"; 
if(!isset($_SESSION[$sessionname]) or $_SESSION[$sessionname] != $sessiontekst) 
{ 
$continue = 'Je bent niet ingelogd'; 
} 
if($continue == '') { 
include("config.inc.php"); 
include("lijstenbouwer.inc.php"); 
//Standaard aantal 
$velden = 6; 
$veldenoutput = ""; 
$counter = 1; 
//Kijken of er een URL variabele is voor ?p=velden 
if($_GET['velden']) 
    $velden = (int)($_GET['velden']); 
//Velden bouwen 
while($counter <= $velden) 
    { 
$veldenoutput .= 
<<<__HTML_END 
<tr> 
<td> 
<select name='stroming[]'> 
      $stroming 
     </select></td><td><select name='vak[]'> 
      $vak 
     </select></td><td> 
     <select name='docent[]'> 
      $docent 
     </select></td><td><select name='lokaal[]'> 
      $lokaal 
     </select></td><td> 

    <input type="text" class="datepicker" id="$counter" name="datum[]" placeholder="Klik op de kalender"></td><td><input type="text" name="tijd[]" placeholder="12:00 - 13:00"></td><td><input type="text" name="opmerkingen[]" placeholder="Opmerkingen"></td> 
</tr> 
     <script> 
    $('.datepicker').each(function(){ 
    $(this).datepicker({ 
    showOn: "button", 
      buttonImage: "images/calendar.png", 
      buttonImageOnly: true, 
      dateFormat: 'dd-mm-yy', 
      dayNames : ['Zondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrijdag', 'Zaterdag'], 
      dayNamesMin: ['Zo', 'Ma', 'Di', 'Wo', 'Do', 'Vr', 'Za'], 
      firstDay: 1, 
      monthNames: ['Januari', 'Februari', 'Maart', 'April', 'Mei', 'Juni', 'Juli', 'Augustus', 'September', 'Oktober', 'November', 'December'] 
      }); 
}); 
    </script> 
__HTML_END; 
$counter++; 
    } 
//Output 
echo <<<__HTML_END 

<table width="100%"> 
<form enctype='multipart/form-data' action='index.php?p=verwerking/toetoevoegen' method='post' name='toevoegen'> 
<tr> 
<td>Stroming</td><td>Vak</td><td>Docent</td><td>Lokaal</td><td>Datum</td><td>Tijd</td><td>Opmerkingen</td> 
</tr> 
$veldenoutput 
</table><input class="verzenden" name="verzenden" type="submit" value="Verzend"></form> 
__HTML_END; 
} 
else { 
    echo $continue; 
} 
?> 

当进入这个数据:The data,后续代码var_dump是:

array(8) { ["stroming"]=> array(2) { [0]=> string(1) "1" [1]=> string(1) "1" } ["vak"]=> array(2) { [0]=> string(1) "1" [1]=> string(1) "1" } ["docent"]=> array(2) { [0]=> string(1) "1" [1]=> string(1) "1" } ["lokaal"]=> array(2) { [0]=> string(1) "1" [1]=> string(1) "1" } ["datum"]=> array(2) { [0]=> string(10) "01-03-2012" [1]=> string(10) "02-03-2012" } ["tijd"]=> array(2) { [0]=> string(6) "Time 1" [1]=> string(6) "Time 2" } ["opmerkingen"]=> array(2) { [0]=> string(9) "Comment 1" [1]=> string(9) "Comment 2" } ["verzenden"]=> string(7) "Verzend" } 
+1

'$ datum'包含什么?现在如果它包含一个元素,你的while循环将执行两次。 – 2012-03-04 16:57:28

+0

您的mysql_query()调用在while循环内。 – CBusBus 2012-03-04 17:01:00

回答

2

你可以提供$_POST['datum']的值作为你的查询被执行两次的例子吗?显而易见的答案是while ($counter < count($datum))的循环体被执行两次。如果是count($datum) > 1就是这种情况。

您还应该使用mysql_real_escape_string或使用prepared statements而不是addslashes转义。

我跑了这个在本地测试你的代码。如果你只是执行这个缩短版本,你可以尝试是否发生错误。

<?php 

$result_final = ""; 
$counter = 0; 

$opmerking = array('Comment 1', 'Comment 2'); 
$datum = array('01-03-2012', '02-03-2012'); 
$docent = array('1', '1'); 
$vak = array('1', '1'); 
$stroming = array('1', '1'); 
$lokaal = array('1', '1'); 
$tijd = array('Time 1', 'Time 2'); 

while ($counter < count($datum)) 
{ 
    if ($datum[$counter] == '') 
    { 
     echo 'Geen datum ingevoerd<br>'; 
    } 
    elseif ($tijd[$counter] == '') 
    { 
     echo 'Geen tijd ingevoerd<br>'; 
    } 
    else 
    { 
     var_dump("INSERT INTO toetsrooster (`docent`, `vak`, `lokaal`, `datum`, `tijd`, `richting`, `opmerkingen`) VALUES ('".addslashes($docent[$counter])."', '".addslashes($vak[$counter])."', '".addslashes($lokaal[$counter])."', '".addslashes($datum[$counter])."', '".addslashes($tijd[$counter])."', '".addslashes($stroming[$counter])."', '".addslashes($opmerking[$counter])."')"); 
     $result_final .= "Toets ".($counter+1)." toegevoegd<br />"; 
    } 
    $counter++; 
    mysql_error(); 
} 

echo <<<__HTML_END 

<html> 
<head> 
    <title>Toetsen toegevoegd</title> 
</head> 
<body> 
    $result_final 
</body> 
</html> 

__HTML_END; 

?> 
+0

$ _POST ['datum']是一个包含日期的数组。日期格式如下:04-03-2012 – Nick 2012-03-04 17:09:31

+0

所以你有答案。如果'$ _POST ['datum']'是一个具有多个值的数组,'count($ datum)'将是'> 1',并且您的'while'循环将被执行多次。 – Basti 2012-03-04 17:11:57

+0

究竟是什么问题?你想只插入一次数据,还是要输出两行插入?我用你的代码做了一个简单的测试,并且在插入两行后得到了'$ result_final'的Toets 1 toegevoegd
Toets 2 toegevoegd
''。 – Basti 2012-03-04 17:19:10