2017-01-05 4 views
0

Итак, я сделал программу для подтверждения номера карты. Итак, теперь я хочу сохранить номер карты вместе с другими полезными данными в таблице mysql, но номер кредитной карты isn 't появляется на столе .. Его просто показывая 0, я изменил тип данных на varchar, и теперь его просто показывающий массив, и я получаю эту ошибку на php-странице «Массив для преобразования строк в C: \ xamppp \ htdocs \ cpu5001 \ cards.php в строке 38" .. Вот мой код:PHP/MYSQL: данные не отображаются в таблице

<style> 
#park{ 
border-radius: 25px; 
background:#D0D3D4; 
height: 750px; 
padding-top: 10px; 
margin-top:10px; 
} 
</style> 
<?php 
session_start(); 
$ids=$_SESSION['tsmUserName']; 
if (isset($_POST['submit'])){ 


    $number=$_POST['cc']; 
    $expiray=$_POST['expire']; 
    $Cardholder=$_POST['cardholder']; 
    $country=$_POST['country']; 
    $total=0; 
    $i=1; 
    $last4= substr($number,-4,4); 
    $number=str_split($number); 
    $number=array_reverse($number); 
    foreach($number as $digit){ 
     if($i%2==0){ 
      $digit*=2; 
      if($digit>9){ 
       $digit -=9; 
      } 
     } 
     $total += $digit; 
     $i++; 
    } 
    if($total%10==0){ 
     echo "Your credit card number ending in ".$last4." is valid"; 
     require_once("connection.php"); 
    $my_query="INSERT INTO `card`(`No`, `Username`, `CreditCard`, `ExpirationDate`, `CardHolderName`, `Country`) VALUES (NULL,'$ids','$number','$expiray','$Cardholder','$country')"; 
    $result=mysqli_query($connection,$my_query); 
      if($result) 
      { 
       echo 'thank you'; 
      } 
      else 
      { 
       echo 'error'; 
      } 
      mysqli_close($connection); 
    } 
    else 
    { 
     echo "Your credit card number ending in ".$last4." is invalid"; 
    } 


} 
?> 
<html> 
<head> 
    <title>Credit Card Number</title> 
</head> 
<body> 
<label style="margin-left:630px; font-size: 1.6em;"> Credit card info </label> 
<div id="park"> 
<div id="info" style="background:#F5F5DC; width:500px;height:570px; margin-left:450px;border-radius: 25px;margin-top:150px; "> 
<img src="credit_2.PNG" style="margin-top:-130px; margin-left:120px;"> 
<form action="cards.php" method='POST'> 
    </br></br> 
    <label style="margin-left:192px; font-size:1.5em;"> Credit Number </label> 
    </br></br> 
    <input type="text" name="cc" style="margin-left:150px; width:210px;"> 
    </br></br> 
    <label style="margin-left:200px; font-size:1.5em;"> Expiray date </label> 
    </br></br> 
    <input type="date" name="expire" style="margin-left:150px; width:210px;"> 
    </br></br> 
    <label style="margin-left:190px; font-size:1.5em;"> Card Holder </label> 
    </br></br> 
    <input type="text" name="cardholder" style="margin-left:150px; width:210px;"> 
    </br></br> 
    <label style="margin-left:210px;font-size:1.5em;"> Country </label> 
    </br></br> 
    <input type="text" name="country" style="margin-left:150px; width:210px;"> 
    </br></br> 
    <input type="submit" name="submit" style="margin-left:230px;"> 
    </form> 
</div> 
</div> 
    </body> 
</html> 
+0

где линия 38? –

+0

$ my_query = "INSERT INTO' card' ('No',' Username', 'CreditCard',' ExpirationDate', 'CardHolderName',' SecurityNo') VALUES (NULL, '$ ids', '$ number', ' $ expiray», '$ Держатель карты', '$ безопасность')"; –

+0

Ошибка говорит вам, в чем проблема. Вы пытаетесь преобразовать массив в строку. $ number стал массивом, когда вы сделали str_split. –

ответ

2

Витек был прав - вы превратили строку $ число в массив с str_split, поэтому, возможно, сделать это (используя $ цифры вместо $ номер):

$numbers=str_split($number); 
$numbers=array_reverse($number); 
foreach($numbers as $digit){ 
    if($i%2==0){ 
     $digit*=2; 
     if($digit>9){ 
      $digit -=9; 
     } 
    } 
    $total += $digit; 
    $i++; 
} 

Как другие упоминали, есть несколько вопросов, которые должны быть упомянуты, а также:

  • код, как это (очень) уязвимы для SQL инъекций (https://xkcd.com/327/), вы можете прочитать здесь, как использовать подготовленные заявления, которые являются более безопасными: http://php.net/manual/en/mysqli.quickstart.prepared-statements.php
  • , даже если вы устраните уязвимость выше, вам нужно принять множество мер предосторожности, если вы храните номера кредитных карт в своей собственной базе данных - я избегал этого в течение 15 лет разработки и надеюсь, что мне никогда не понадобится - возможно, подумайте о том, как использовать сторонние сервисы, совместимые с PCI, например, полоса (и соответствие PCI, которое вам понадобится, является PAIN)
  • в целом лучше разделить логику просмотра и базы данных на отдельные компоненты. http://www.phptherightway.com/ содержит много информации о передовом опыте, я бы рекомендовал прочитать;)

Надеюсь, это поможет.

0

Вы переназначили $number в массив, когда вы сделали $number=str_split($number);. Сделайте это, и вы должны быть хорошо:

$numberChecker=str_split($number); 
$numberChecker=array_reverse($number); 
foreach($numberChecker as $digit){ 
... 
} 

Side Примечание: вы действительно должны использовать MySQLi prepared statements.

Смежные вопросы