Add "S" prefix to values when meeting dropdown condition - html

I wish to add a "S" prefix(without quotes) to my $tranid, if user select "SH" from the dropdown list.
So it will become S$tranid, so it will become S000001
i was trying concat previously but seems like i mess up and it doesnt work at all.
#This is my strsql query
/** Start To Save New record **/
if($action == "SAVE_DATA")
{
if($tranid == "")
{
$strSQL = "select cs.getInvNo('SH') as tranid; ";
$result = mysql_query($strSQL) or die ("sql error in retrieving trans id.");
if ($row = mysql_fetch_array($result))
{
$tranid = $row['tranid'];
}
}
$strSQL = "insert into cs.cs_inv_header(inv_no,inv_date,inv_so,inv_bill_to,inv_ship_to,inv_loc,";
$strSQL .="inv_cust_code,inv_po,inv_term,inv_curr,inv_ship_via,inv_status,inv_cby,inv_cdate) ";
$strSQL .= "values('$tranid','$shipDate','$so','$custNo','$shipTo','$loc','$custNo','$ref',";
$strSQL .= "'$term','$curr','$shipVia','Y','".$_SESSION['SYS_CS']['USER_ID']."',now());";
mysql_query($strSQL,$link) or die ("sql error on inserting cs.cs_inv_header.");
unset ($strSQL);
$strSQL = "insert into cs.cs_inv_det(invd_no,invd_part,invd_desc,invd_qty,invd_uom,invd_cost,";
$strSQL .="invd_total,invd_vend_part,invd_rmk_ori,invd_rmk,invd_cby,invd_cdate) ";
$strSQL .= "values('$tranid','$part','$desc',$qty,'$uom',$cost,$total,'$custPart','$rmk',";
$strSQL .= "'".mysql_real_escape_string($rmk)."','".$_SESSION['SYS_CS']['USER_ID']."',now());";
mysql_query($strSQL,$link) or die ("sql error on inserting cs.cs_inv_det.");
unset ($strSQL);
echo "<div class=std align=center>Invoice : $tranid Successfully created...</div>";
$tranid = "";
$so = "";
$custNo = "";
$term = "";
$ref = "";
$shipVia = "DDP";
$curr = "";
$part = "";
$uom = "";
$cost = "";
$qty = "";
$total = "";
$desc = "";
$rmk = "";
$loc= "";
}
/** End of Saving new record **/
#this is my dropdown menu code
<select name="selLoc">
<option value = "">--Please Select--</option>
<option value = "HB" <? if($loc=='HB') echo 'selected' ?>>HB-Thailand</option>
<option value = "HH" <? if($loc=='HH') echo 'selected' ?>>HH-Thailand</option>
<option value = "MH" <? if($loc=='MH') echo 'selected' ?>>MH-Malaysia</option>
<option value = "SH" <? if($loc=='SH') echo 'selected' ?>>SH/option>
</select></td>

You can simply do like this on the values line
$strSQL .="values('S$tranid','$part','$desc',$qty,'$uom',$cost,$total,'$custPart','$rmk',";

Related

Multiple WHERE find_in_set lookups

I'm wanting to pull steamid from multiple clubs. Website is based on an Invision Community site.
The output is a list of steamids which is imported into our game servers.
My simple pull from one club code below works perfectly:
<?php
$servername = "";
$username = "";
$password = "";
$dbname = "";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT
core_members.steamid,
core_members.member_id,
core_members.name,
core_clubs_memberships.member_id,
core_clubs_memberships.club_id
FROM core_members
INNER JOIN core_clubs_memberships
ON core_members.member_id = core_clubs_memberships.member_id
WHERE
(core_members.steamid IS NOT NULL AND TRIM(core_members.steamid) <> '') AND (find_in_set('1',core_clubs_memberships.club_id))
ORDER BY core_members.member_id ASC";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo $row["steamid"]. " ". $row["name"];
echo ("\r\n");
}
} else {
echo "0 results";
}
$conn->close();
?>
Whenever I try to add a second group, the code doesn't work, for example I tried:
<?php
$servername = "";
$username = "";
$password = "";
$dbname = "";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT
core_members.steamid,
core_members.member_id,
core_members.name,
core_clubs_memberships.member_id,
core_clubs_memberships.club_id
FROM core_members
INNER JOIN core_clubs_memberships
ON core_members.member_id = core_clubs_memberships.member_id
WHERE
(core_members.steamid IS NOT NULL AND TRIM(core_members.steamid) <> '') AND ((find_in_set('1',core_clubs_memberships.club_id) OR (find_in_set('6',core_clubs_memberships.club_id)))
ORDER BY core_members.member_id ASC";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo $row["steamid"]. " ". $row["name"];
echo ("\r\n");
}
} else {
echo "0 results";
}
$conn->close();
?>

Sage Pay v3.00 Integration

Can anyone help me incorporate the Sagepay v3.00 AES/CBC/PKCS#5 algorithm (encryption) into the following file. I'm really struggling to understand how to include so that customer data is encrypted to the new standard and then decrypted on the way back. Using Sagepay Form with a very old version of cs-cart, though have successfully managed to upgrade from version 2.22 to 2.23, but Sagepay are pulling all support from July.
Not sure how much of this script is relevant to the encryption:
<?php
if ( !defined('IN_CSCART') ) { die('Access denied'); }
if (defined('PAYMENT_NOTIFICATION')) {
// Get the password
$payment_id=db_get_field("SELECT $db_tables[payments].payment_id FROM $db_tables[payments] LEFT JOIN $db_tables[payment_processors] ON $db_tables[payment_processors].processor_id = $db_tables[payments].processor_id WHERE $db_tables[payment_processors].processor_script='protx_form.php'");
$processor_data = fn_get_payment_method_data($payment_id);
$result = "&".simpleXor(base64Decode($_REQUEST['crypt']), $processor_data["params"]["password"])."&";
preg_match("/Status=(.+)&/U", $result, $a);
if(trim($a[1]) == "OK") {
$pp_response['order_status'] = ($processor_data["params"]["transaction_type"] == 'PAYMENT') ? 'P' : 'O';
preg_match("/TxAuthNo=(.+)&/U", $result, $authno);
$pp_response["reason_text"] = "AuthNo: ".$authno[1];
preg_match("/VPSTxID={(.+)}/U", $result, $transaction_id);
$pp_response["transaction_id"] = #$transaction_id[1];
} else {
$pp_response['order_status'] = 'F';
preg_match("/StatusDetail=(.+)&/U", $result, $stat);
$pp_response["reason_text"] = "Status: ".trim($stat[1])." (".trim($a[1]).") ";
}
preg_match("/AVSCV2=(.*)&/U", $result, $avs);
if(!empty($avs[1])) {
$pp_response['descr_avs'] = $avs[1];
}
include $payment_files_dir.'payment_cc_complete.php';
fn_order_placement_routines($order_id);
}
else
{
global $http_location, $b_order, $_total_back;
$post_address = ($processor_data['params']['testmode'] != "N") ? "https://test.sagepay.com/gateway/service/vspform-register.vsp" : "https://live.sagepay.com/gateway/service/vspform-register.vsp";
$post["VPSProtocol"] = "2.23";
$post["TxType"] = $processor_data["params"]["transaction_type"];
$post["Vendor"] = htmlspecialchars($processor_data["params"]["vendor"]);
// Form Cart products
$strings = 0;
if (is_array($cart['products'])) {
$strings += count($cart['products']);
}
if (!empty($cart['products'])) {
foreach ($cart['products'] as $v) {
$_product = db_get_field("SELECT product FROM $db_tables[product_descriptions] WHERE product_id='$v[product_id]' AND lang_code='$cart_language'");
$products_string .= ":".str_replace(":", " ", $_product).":".$v['amount'].":".fn_format_price($v['subtotal']/$v['amount']).":::".fn_format_price($v['subtotal']);
}
}
if (!empty($cart['payment_surcharge'])) {
$products_string .= ":Payment surcharge:---:---:---:---:".fn_format_price($cart['payment_surcharge']);
$strings ++;
}
if (!empty($cart['shipping_cost'])) {
$products_string .= ":Shipping cost:---:---:---:---:".fn_format_price($cart['shipping_cost']);
$strings ++;
}
$post_encrypted .= "Basket=".$strings.$products_string;
$post["Crypt"] = base64_encode(simpleXor($post_encrypted, $processor_data["params"]["password"]));
$post["Crypt"] = htmlspecialchars($post["Crypt"]);
$msg = fn_get_lang_var('text_cc_processor_connection');
$msg = str_replace('[processor]', 'Protx Server', $msg);
echo <<<EOT
<html>
<body onLoad="document.process.submit();">
<form action="{$post_address}" method="POST" name="process">
<INPUT type=hidden name="VPSProtocol" value="{$post['VPSProtocol']}">
<INPUT type=hidden name="Vendor" value="{$post['Vendor']}">
<INPUT type=hidden name="TxType" value="{$post['TxType']}">
<INPUT type=hidden name="Crypt" value="{$post['Crypt']}">
<p>
<div align=center>{$msg}</div>
</p>
</body>
</html>
EOT;
}
exit;
//
// ---------------- Additional functions ------------
//
function simpleXor($InString, $Key) {
$KeyList = array();
$output = "";
for($i = 0; $i < strlen($Key); $i++){
$KeyList[$i] = ord(substr($Key, $i, 1));
}
for($i = 0; $i < strlen($InString); $i++) {
$output.= chr(ord(substr($InString, $i, 1)) ^ ($KeyList[$i % strlen($Key)]));
}
return $output;
}
function base64Decode($scrambled) {
// Initialise output variable
$output = "";
// Fix plus to space conversion issue
$scrambled = str_replace(" ","+",$scrambled);
// Do encoding
$output = base64_decode($scrambled);
// Return the result
return $output;
}
?>
You could try dropping the following functions into the script, then swapping out simpleXor for encryptAes. Make sure that you also add an '#' symbol as the first character of the crypt string (and strip it off when decoding the response from Sage Pay).
function addPKCS5Padding($input)
{
$blockSize = 16;
$padd = "";
$length = $blockSize - (strlen($input) % $blockSize);
for ($i = 1; $i <= $length; $i++)
{
$padd .= chr($length);
}
return $input . $padd;
}
function removePKCS5Padding($input)
{
$blockSize = 16;
$padChar = ord($input[strlen($input) - 1]);
$unpadded = substr($input, 0, (-1) * $padChar);
return $unpadded;
}
function encryptAes($string, $key)
{
$string = addPKCS5Padding($string);
$crypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $string, MCRYPT_MODE_CBC, $key);
return strtoupper(bin2hex($crypt));
}
function decryptAes($strIn, $password)
{
$strInitVector = $password;
$strIn = pack('H*', $hex);
$string = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $password, $strIn, MCRYPT_MODE_CBC,$strInitVector);
return removePKCS5Padding($string);
}
You could try this. I can't test it, so let me know how you get on.
<?php
if ( !defined('IN_CSCART') ) { die('Access denied'); }
if (defined('PAYMENT_NOTIFICATION')) {
// Get the password
$payment_id=db_get_field("SELECT $db_tables[payments].payment_id FROM $db_tables[payments] LEFT JOIN $db_tables[payment_processors] ON $db_tables
[payment_processors].processor_id = $db_tables[payments].processor_id WHERE $db_tables[payment_processors].processor_script='protx_form.php'");
$processor_data = fn_get_payment_method_data($payment_id);
#Rik added:
$result = "&".decryptAes($_REQUEST['crypt'], $processor_data["params"]["password"])."&";
#$result = "&".simpleXor(base64Decode($_REQUEST['crypt']), $processor_data["params"]["password"])."&";
preg_match("/Status=(.+)&/U", $result, $a);
if(trim($a[1]) == "OK") {
$pp_response['order_status'] = ($processor_data["params"]["transaction_type"] == 'PAYMENT') ? 'P' : 'O';
preg_match("/TxAuthNo=(.+)&/U", $result, $authno);
$pp_response["reason_text"] = "AuthNo: ".$authno[1];
preg_match("/VPSTxID={(.+)}/U", $result, $transaction_id);
$pp_response["transaction_id"] = #$transaction_id[1];
} else {
$pp_response['order_status'] = 'F';
preg_match("/StatusDetail=(.+)&/U", $result, $stat);
$pp_response["reason_text"] = "Status: ".trim($stat[1])." (".trim($a[1]).") ";
}
preg_match("/AVSCV2=(.*)&/U", $result, $avs);
if(!empty($avs[1])) {
$pp_response['descr_avs'] = $avs[1];
}
include $payment_files_dir.'payment_cc_complete.php';
fn_order_placement_routines($order_id);
}
else
{
global $http_location, $b_order, $_total_back;
$post_address = ($processor_data['params']['testmode'] != "N") ? "https://test.sagepay.com/gateway/service/vspform-register.vsp" :
"https://live.sagepay.com/gateway/service/vspform-register.vsp";
$post["VPSProtocol"] = "2.23";
$post["TxType"] = $processor_data["params"]["transaction_type"];
$post["Vendor"] = htmlspecialchars($processor_data["params"]["vendor"]);
// Form Cart products
$strings = 0;
if (is_array($cart['products'])) {
$strings += count($cart['products']);
}
if (!empty($cart['products'])) {
foreach ($cart['products'] as $v) {
$_product = db_get_field("SELECT product FROM $db_tables[product_descriptions] WHERE product_id='$v[product_id]' AND lang_code='$cart_language'");
$products_string .= ":".str_replace(":", " ", $_product).":".$v['amount'].":".fn_format_price($v['subtotal']/$v['amount']).":::".fn_format_price($v
['subtotal']);
}
}
if (!empty($cart['payment_surcharge'])) {
$products_string .= ":Payment surcharge:---:---:---:---:".fn_format_price($cart['payment_surcharge']);
$strings ++;
}
if (!empty($cart['shipping_cost'])) {
$products_string .= ":Shipping cost:---:---:---:---:".fn_format_price($cart['shipping_cost']);
$strings ++;
}
$post_encrypted .= "Basket=".$strings.$products_string;
#Rik added:
$post["Crypt"] = "#".encryptAes($post_encrypted, $processor_data["params"]["password"]);
# $post["Crypt"] = base64_encode(simpleXor($post_encrypted, $processor_data["params"]["password"]));
# $post["Crypt"] = htmlspecialchars($post["Crypt"]);
$msg = fn_get_lang_var('text_cc_processor_connection');
$msg = str_replace('[processor]', 'Protx Server', $msg);
echo <<<EOT
<html>
<body onLoad="document.process.submit();">
<form action="{$post_address}" method="POST" name="process">
<INPUT type=hidden name="VPSProtocol" value="{$post['VPSProtocol']}">
<INPUT type=hidden name="Vendor" value="{$post['Vendor']}">
<INPUT type=hidden name="TxType" value="{$post['TxType']}">
<INPUT type=hidden name="Crypt" value="{$post['Crypt']}">
<p>
<div align=center>{$msg}</div>
</p>
</body>
</html>
EOT;
}
exit;
//
// ---------------- Additional functions ------------
//
function simpleXor($InString, $Key) {
$KeyList = array();
$output = "";
for($i = 0; $i < strlen($Key); $i++){
$KeyList[$i] = ord(substr($Key, $i, 1));
}
for($i = 0; $i < strlen($InString); $i++) {
$output.= chr(ord(substr($InString, $i, 1)) ^ ($KeyList[$i % strlen($Key)]));
}
return $output;
}
function base64Decode($scrambled) {
// Initialise output variable
$output = "";
// Fix plus to space conversion issue
$scrambled = str_replace(" ","+",$scrambled);
// Do encoding
$output = base64_decode($scrambled);
// Return the result
return $output;
}
#added by Rik
function addPKCS5Padding($input)
{
$blockSize = 16;
$padd = "";
$length = $blockSize - (strlen($input) % $blockSize);
for ($i = 1; $i <= $length; $i++)
{
$padd .= chr($length);
}
return $input . $padd;
}
function removePKCS5Padding($input)
{
$blockSize = 16;
$padChar = ord($input[strlen($input) - 1]);
$unpadded = substr($input, 0, (-1) * $padChar);
return $unpadded;
}
function encryptAes($string, $key)
{
$string = addPKCS5Padding($string);
$crypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $string, MCRYPT_MODE_CBC, $key);
return strtoupper(bin2hex($crypt));
}
function decryptAes($strIn, $password)
{
#Sagepay specific - remove the '#'
$strIn = substr($strIn,1)
$strInitVector = $password;
$strIn = pack('H*', $hex);
$string = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $password, $strIn, MCRYPT_MODE_CBC,$strInitVector);
return removePKCS5Padding($string);
}
?>
/*First build your data. */
$data = 'variableA='.$this->variableA;
$data .= '&variableB='.$this->variableB;
...
$data .= '&variableZ='.$this->variableZ;
/** Encript data */
$dataEncrip = $this->encData($data);
/** function to Encrypt *//
public function encData($data){
$data = $this->pkcs5_pad( $data, 16);
$dataEnc = "#".bin2hex( mcrypt_encrypt( MCRYPT_RIJNDAEL_128,
$this->passwordToEncript,
$data,
MCRYPT_MODE_CBC,
$this->getPasswordToEncrypt()));
return $dataEnc;
}
/** Pkcs5_pad */
public function pkcs5_pad( $data, $blocksize ){
$pad = $blocksize - (strlen( $data ) % $blocksize);
return $data . str_repeat( chr( $pad ), $pad );
}

PHPEXCEL mysql php insert empty rows

I am trying to use phpexcel to let users upload a spreadsheet and insert into mysql. I have it working except if the user has blank rows in the spreadsheet it puts several unnecessary rows in the database. I have read and mysql doesnt support check constraints and most of that would need to be done at the application level which is what I am trying to do. How in PHP could have it check if a specific column is empty and skip that row. Any help would be appreciated or if there is a better solution I am up for all options. I was trying for a while to get it that is the bldg column was empty than just skip that row but wasnt having any luck..
<?php require '../Classes/PHPExcel.php';
require_once '../Classes/PHPExcel/IOFactory.php';
$path = "../upload/uploads/$Filename";
$objPHPExcel = PHPExcel_IOFactory::load($path);
foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
$worksheetTitle = $worksheet->getTitle();
$highestRow = $worksheet->getHighestRow();
$highestColumn = 'L'; // e.g 'F'
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
$nrColumns = ord($highestColumn) - 64;
$objReader = PHPExcel_IOFactory::createReaderForFile($path);
$objReader->setReadDataOnly(true);
echo '<br>Data: <table width="100%" cellpadding="3" cellspacing="0"><tr>';
for ($row = 16; $row <= $highestRow; ++ $row) {
echo '<tr>';
for ($col = 0; $col < $highestColumnIndex; ++ $col) {
$cell = $worksheet->getCellByColumnAndRow($col, $row);
$val = $cell->getValue();
if($row === 1)
echo '<td style="background:#000; color:#fff;">' . $val . '</td>';
else
echo '<td>' . $val . '</td>';
}
echo '</tr>';
}
echo '</table>';
for ($row = 16; $row <= $highestRow; ++ $row) {
$val=array();
for ($col = 0; $col < $highestColumnIndex; ++ $col) {
$cell = $worksheet->getCellByColumnAndRow($col, $row);
$val[] = $cell->getValue();
}
$sql="insert into excess1(date_excessed, bldg, floor, jack, equipment_owner, contact_name, contact_phone, qty, type_of_excess, asset_tag, service_tag, comments)
values('".$val[0] . "','" . $val[1] . "','" . $val[2]. "','" . $val[3]. "','" . $val[4]. "','" . $val[5]. "','".$val[6] . "','".$val[7] . "','".$val[8] . "','".$val[9] . "','".$val[10] . "','".$val[11] . "')";
$result = mysql_query($sql) or die(mysql_error());
print "$result";
}
}
unlink("../upload/uploads/$Filename");
?>
</article>
$inputFileType = PHPExcel_IOFactory::identify($filename);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load($inputFileName);
$allDataInSheet = $objPHPExcel->getActiveSheet()->toArray(null, true, true, true);
$i=0;
foreach ($allDataInSheet as $value) {
if ($value === null){
continue;
} //this is skipping empty rows
$data[$i] = $value['A'];
$data[$i] = $value['B'];
$i++;
}

Storing database structure

Is there some tool that can store for me the database structure, say in some xml file or something like that.
And later from the code it can generate for me the sql query for this database creation ?
Currently I am working with MySQL , but it probably does not matter .
Just I not want to maintain my self all those things.
In my experience I have used MySQL Workbench to take care of issues like this. If you download Workbench (assuming you don't have it already) from http://wb.mysql.com/ you will have the option to "Create an EER diagram from an existing database." This will create an EER diagram which is a good visual presentation of the database with which you are working. The .mwb file that you can then save can be loaded and then "forward engineered" into local/external database.
Mysqldump is another alternative to use at the command line. It will, by default, dump out the entire schema structure and contained data. However, if you are just looking for database structure including views and routines and you do not care about the data itself then you need to throw some extra parameters into the command.
In my experience Mysqldump is quick and easy whereas EER diagrams are easier to share with others and then forward engineer back onto other DBs from the Workbench application.
EDIT
You should note that just because you export the database create table queries to a .sql file or .mwb file that you can't just copy and paste the text into another platform (Microsoft SQL, Oracle, etc) and expect it to work. Syntax across different versions of SQL is (obviously) different.
THE FOLLOWING ANSWER USES PHP, I am keeping it here for future users.
I wrote code specifically to do that (in PHP):
$db = mysql_connect($dbhost, $dbuser, $dbpass) or die("MySQL Error: " . mysql_error());
mysql_select_db($dbname) or die("MySQL Error: " . mysql_error());
$allTables = Array
(
//put all table names in this array
);
foreach($allTables as $tbl){
define($tbl, $tbl);
}
$clm = '$columns';
$inds = '$indexes';
$query = "SHOW TABLES IN {$dbname}";
$tables = array();
$result = mysql_query($query) or die("ERROR ONE:".mysql_error());
while($row = mysql_fetch_array($result)){
$tables[] = $row["Tables_in_{$dbname}"];
}
//TO GET ARRAY FOR TABLE DISPLAY:
$cols = array();
foreach($tables as $tbl){
// echo "<br/>".
$query = "SHOW COLUMNS FROM $tbl";
$cols[$tbl] = array();
$result = mysql_query($query) or die("ERROR ONE:".mysql_error());
while($row = mysql_fetch_array($result)){
$cols[$tbl][] = array('Field'=>$row['Field'],
'Type'=>$row['Type'],
'Null'=>$row['Null'],
'Default'=>$row['Default'],
'Extra'=>$row['Extra'],
);
}
}
$index = array();
$query = "SELECT * FROM information_schema.statistics
WHERE TABLE_SCHEMA = '{$dbname}';
";
$result = mysql_query($query) or die("ERROR ONE:".mysql_error());
while($row = mysql_fetch_array($result)){
$index[$row['TABLE_NAME']][] = array('INDEX_NAME'=>$row['INDEX_NAME'],
'COLUMN_NAME'=>$row['COLUMN_NAME'],
'INDEX_TYPE'=>$row['INDEX_TYPE'],
'INDEX_NAME'=>$row['INDEX_NAME'],
'SEQ_IN_INDEX'=>$row['SEQ_IN_INDEX'],
);
}
//echo "<pre>";print_r($index);
//exit;
//TO GET THE ARRAY VARIABLE
echo "<pre>
<?php
$clm = Array (";
foreach ($cols as $key=>$tbl){
echo "
$key => Array (";
foreach($tbl as $col){
echo "
Array ( ";
foreach($col as $k=>$val){
echo "
'$k' => \"$val\",";
}
echo "
),";
}
echo "
),";
}
echo "
);";
echo "</pre>";
echo "<pre>
$inds = Array (";
foreach ($index as $key=>$tbl){
echo "
$key => Array (";
foreach($tbl as $col){
echo "
Array ( ";
foreach($col as $k=>$val){
echo "
'$k' => \"$val\",";
}
echo "
),";
}
echo "
),";
}
echo "
);
?>";
echo "</pre>";
Paste the result to this in a php file (called currentDB.php).
Then in another file is where the creation happens with the file you created:
define('BY_COL', 'column');
define('BY_IND', 'index');
$allTables = Array
(
//put all table names in this array
);
foreach($allTables as $tbl){
define($tbl, $tbl);
}
include_once 'currentDB.php';
$query = "SHOW TABLES IN $dbname";
$tables = array();
$result = mysql_query($query) or die("ERROR ONE:".mysql_error());
while($row = mysql_fetch_array($result)){
$tables[] = $row["Tables_in_$dbname"];
}
$checkTables = checkTables($tables);
echo "THE FOLLOWING TABLES <b>ARE</b> IN THE DB: <br />
<pre>";print_r(array_diff($allTables,$checkTables));echo "</pre><br />";
if($checkTables){
echo "THE FOLLOWING TABLES <b>ARE NOT</b> IN THE DB: <br />".
// "<pre>";print_r($checkTables);echo "</pre><br />";
"";
createTables($checkTables);
$query = "SHOW TABLES IN $dbname";
$tables = array();
$result = mysql_query($query) or die("ERROR ONE:".mysql_error());
while($row = mysql_fetch_array($result)){
$tables[] = $row["Tables_in_$dbname"];
}
}
//TO GET ARRAY FOR TABLE DISPLAY:
$cols = array();
foreach($tables as $tbl){
// echo "<br/>".
$query = "SHOW COLUMNS FROM $tbl";
$cols[$tbl] = array();
$result = mysql_query($query) or die("ERROR ONE:".mysql_error());
while($row = mysql_fetch_array($result)){
$cols[$tbl][] = array('Field'=>$row['Field'],
'Type'=>$row['Type'],
'Null'=>$row['Null'],
'Default'=>$row['Default'],
'Extra'=>$row['Extra'],
);
}
}
$checkTables = checkCols($cols);
if($checkTables){
echo "THE FOLLOWING COLS <b>ARE DIFFERENT</b> IN THE DB: <br />".
// "<pre>";print_r($checkTables);echo "</pre><br />".
"";
alterTable($checkTables);
}
$index = array();
$query = "SELECT * FROM information_schema.statistics
WHERE TABLE_SCHEMA = '$dbname';
";
$result = mysql_query($query) or die("ERROR ONE:".mysql_error());
while($row = mysql_fetch_array($result)){
$index[$row['TABLE_NAME']][] = array('INDEX_NAME'=>$row['INDEX_NAME'],
'COLUMN_NAME'=>$row['COLUMN_NAME'],
'INDEX_TYPE'=>$row['INDEX_TYPE'],
'INDEX_NAME'=>$row['INDEX_NAME'],
'SEQ_IN_INDEX'=>$row['SEQ_IN_INDEX'],
);
}
$checkTables = checkIndexes($index);
if($checkTables){
echo "THE FOLLOWING INDEXES <b>ARE DIFFERENT</b> IN THE DB: <br />".
// "<pre>";print_r($checkTables);echo "</pre><br />".
"";
alterTable($checkTables,BY_IND);
}
//echo "<pre>";print_r($indexes);echo "</pre><br />";
function checkTables($array){
$tbls = $GLOBALS['allTables'];
$diff = array_diff($tbls,$array);
if($diff){
return $diff;
}
return array();
}
function checkCols($array){
$cols = $GLOBALS['columns'];
$diff = array_diff_no_cast($cols,$array);
if($diff){
// echo "HI<br />";
return $diff;
}
return array();
}
function checkIndexes($array){
$ind = $GLOBALS['indexes'];
$diff = array_diff_no_cast($ind,$array);
if($diff){
// echo "HI<br />";
return $diff;
}
return array();
}
function createTables($tables){
$cols = $GLOBALS['columns'];
$ind = $GLOBALS['indexes'];
foreach($tables as $t){
$thisCols = (isset($cols[$t])?$cols[$t]:array());
$thisInd = (isset($ind[$t])?fromIndex($ind[$t]):array());
$create = "CREATE TABLE `$t` (\n";
foreach($thisCols as $k=>$c){
// echo "<pre>$k\n{$c['Default']}</pre>";
if($c['Default']=='CURRENT_TIMESTAMP'){
// echo "IN HERE";
$c['Extra'] = " ON UPDATE CURRENT_TIMESTAMP";
}
$create .= "`{$c['Field']}` {$c['Type']} ".
(($c['Null']=='NO')?'NOT NULL':'')." ".
((strlen($c['Default'])>0)?"DEFAULT ".
(is_quoted($c['Default'])?"'{$c['Default']}'":"{$c['Default']}"):'').
"{$c['Extra']}";
if(count($thisCols)!==($k+1)){
$create .= ",\n";
}
else
$create .= "\n";
}
$i = 0;
foreach($thisInd as $k=>$c){
if($i == 0){
$create .= ",\n";
}
if($c['INDEX_NAME']=='PRIMARY'){
$create .= "PRIMARY ";
}
else{
$iName = explode("_",$c['INDEX_NAME']);
if(array_search("UNIQUE",$iName)){
$create .= "UNIQUE ";
}
}
$create .= "KEY ".
(($c['INDEX_NAME']=='PRIMARY')?'':"`{$c['INDEX_NAME']}`")." ({$c['COLUMN_NAME']})";
if(count($thisInd)!==($i+1)){
$create .= ",\n";
}
else
$create .= "\n";
// echo "<pre>";print_r($c);echo "</pre>";
$i++;
}
$create .= ");";
// echo "<pre>$create</pre>";
mysql_query($create) or die("ERROR CREATE:".mysql_error());
echo "CREATED $t<br />";
}
// die;
}
function fromIndex($ind){
$return = array();
foreach($ind as $i){
$return[$i['INDEX_NAME']]['INDEX_NAME'] = $i['INDEX_NAME'];
// echo $i['COLUMN_NAME']." -- <br/>".
$return[$i['INDEX_NAME']]['COLUMN_NAME'] = (isset($return[$i['INDEX_NAME']]['COLUMN_NAME'])?"{$return[$i['INDEX_NAME']]['COLUMN_NAME']}, `{$i['COLUMN_NAME']}`":"`{$i['COLUMN_NAME']}`");
}
// echo "<pre>";print_r($return);echo "</pre>";
// die;
return $return;
}
function alterTable($table, $type = BY_COL){
// echo "<u>";
switch ($type){
case BY_COL:
// echo BY_COL;
$tbls = $GLOBALS['cols'];
$realTbls = $GLOBALS['columns'];
// echo "<pre>";print_r($table);echo"</pre>";
// die;
foreach($table as $k=>$t){
// echo
// $query = "SHOW COLUMNS FROM $k";
// echo "<br />";
foreach($t as $ky=>$col){
// echo
if($ky == 0){
$after = 'FIRST';
}
else {
$after = "AFTER `{$realTbls[$k][$ky-1]['Field']}`";
}
$primary = false;
if($col['Default']=='CURRENT_TIMETAMP'){
$col['Extra'] .= " ON UPDATE CURRENT_TIMESTAMP";
}
if($col['Extra'] == 'auto_increment'){
$query2 = "ALTER TABLE `$k` ADD PRIMARY KEY ( `{$col['Field']}` )";
$query3 = "ALTER TABLE `$k` CHANGE COLUMN `{$col['Field']}`
`{$col['Field']}` {$col['Type']} ".($col['Null']=='YES'?'NULL':'NOT NULL').
((!empty($col['Default']))? ' DEFAULT '.(is_quoted($col['Default'])?"'{$col['Default']}'":$col['Default']):'').
" {$col['Extra']}".
" $after;";
$primary = true;
$col['Extra'] = "";
}
// echo
$query = "ALTER TABLE `$k` ".(field_in_array($tbls[$k],$col['Field'])?"CHANGE COLUMN `{$col['Field']}`":"ADD COLUMN").
" `{$col['Field']}` {$col['Type']} ".($col['Null']=='YES'?'NULL':'NOT NULL').
((!empty($col['Default']))? ' DEFAULT '.(is_quoted($col['Default'])?"'{$col['Default']}'":$col['Default']):'').
" {$col['Extra']}".
" $after;";
// echo "<br/>";
mysql_query($query) or die("ERROR CREATE: $query".mysql_error());
if($primary){
mysql_query($query2) or die("ERROR CREATE: $query2".mysql_error());
mysql_query($query3) or die("ERROR CREATE: $query3".mysql_error());
}
echo "ADDED $k: {$col['Field']}";
echo "<br />";
}
// if($k == 'sessions'){
// echo "<pre>$ky:\n";print_r($tbls[$k]);die;
// }
}
break;
case BY_IND:
// echo BY_IND;
$tbls = $GLOBALS['index'];
foreach($table as $k=>$t){
$addTbls= fromIndex($table[$k]);
$thisInd = (isset($tbls[$k])?fromIndex($tbls[$k]):array());
// echo "<pre>$k:\n";print_r($addTbls);
foreach($addTbls as $added){
$beg = "INDEX";
if($added['INDEX_NAME']=='PRIMARY'){
$beg = "PRIMARY KEY";
$added['INDEX_NAME'] = '';
}
else{
$iName = explode("_",$added['INDEX_NAME']);
if(array_search("UNIQUE",$iName)){
$beg = "UNIQUE ".$beg;
}
}
// echo
$query = "ALTER TABLE `$k` ".(field_in_array($thisInd,$added['INDEX_NAME'],'INDEX_NAME')?"DROP INDEX `{$added['INDEX_NAME']}`, ":'')."ADD $beg `{$added['INDEX_NAME']}` ({$added['COLUMN_NAME']})";
mysql_query($query) or die("ERROR CREATE:".mysql_error());
echo "ADDED $k: {$added['INDEX_NAME']}";
echo "<br />";
}
}
// die;
break;
}
// echo "</u><br />";
}
function is_quoted($str){
if(is_numeric($str))
return false;
if($str == 'CURRENT_TIMESTAMP')
return false;
return true;
}
function field_in_array($arr, $field, $type = 'Field'){
foreach($arr as $val){
// echo "HERE: $field, $type";
// print_r($val);echo "<br/>";
if($val[$type]==$field){
// echo "HI";
return true;
}
}
return false;
}
##################################
# FUNCTION - multidim diff #
##################################
function array_diff_no_cast(&$ar1, &$ar2) {
$diff = Array();
foreach ($ar1 as $key => $val1) {
foreach($val1 as $k=>$val2){
if (!isset($ar2[$key]) || array_search($val2, $ar2[$key]) === false) {
$diff[$key][$k] = $val2;
}
}
}
return $diff;
}
You can export your database with Mysqldump. The web page has all the details on how to use it.
If you want the SQL to create the table, you can use:
SHOW CREATE TABLE tblname
If you have data, foreign keys, stored procedures and views in your database then the MySQL Workbench can forward reverse all that for you.
For MySQL and others, you might want to try the DESCRIBE TABLE.
You might want to look into the mysqldump utility. It will create a copy of your database in SQL format. (Note to avoid a problem I ran into: Be sure to run it with --routines if you want to also capture your stored functions and procedures!)
A typical command would look something like this:
mysqldump --routines -Q --opt -p -u username databasename >savefile.sql
Also, for large databases, these files can get quite large. You might also want to consider gzipping them or otherwise compressing them on the fly, using something like:
mysqldump --routines -Q --opt -p -u username databasename | gzip >savefile.sql.gz
use phpMyAdmin u can export your structure to XML,SQL,CSV and many other by using export option

PHP MySQL script gone wrong

I'm working on a site and created this experimental script which populates a category menu dynamically based on the database entry.
It worked for a day and then suddenly stopped. I changed my includes for requires and it gave me this error message
Fatal error: Maximum execution time of 30 seconds exceeded in /home1/advertbo/public_html/dev_area/origocloud/include/views/blog/dbget.php on line 34
function getBlogMenu(){
$dbhost = 'localhost';
$dbuser = ' ';
$dbpass = ' ';
$con = mysql_connect($dbhost, $dbuser, $dbpass);
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("ado_ocblog", $con);
$htmlString = "";
$result = mysql_query(
"SELECT *
FROM subCat
JOIN headCat ON subCat.headid = headCat.id
ORDER BY headid ASC;");
$array = mysql_fetch_array($result);
mysql_close($con);
$pre = NULL;
$hc = 0;
$sc = 1;
while ($array) {
if($pre == NULL){
$pre = $row["headc"];
$test[0][0]=$row["headc"];
$test[0][1]=$row["subc"];
}
else
{
if($pre ==$row["headc"]){
$sc++;
$test[$hc][$sc] = $row["subc"];
}
else
{
$hc++;
$sc = 1;
$test[$hc][0]=$row["headc"];
$test[$hc][$sc]=$row["subc"];
$pre = $row["headc"];
}
}
}
foreach( $test as $arrays=>$cat)
{
$first = TRUE;
foreach($cat as $element)
{
if($first == TRUE)
{
$htmlString.= '<h3>'.$element.'</h3>
<div>
<ul>
';
$first = FALSE;
}
else
{
$htmlString.= '<li><a class="sub_menu" href="#">'.$element.'</a></li>';
}
}
$htmlString.= '</ul> </div>';
}
return $htmlString;
}
I'm really stuck, the page just keeps timing out the point where i call the function
Try this:
while ($array = mysql_fetch_array($result)) {}
Take a look on PHP docs http://php.net/mysql_fetch_array
If does not work, your SQL Query returns too much values and craches the php execution
=]
I think it's time to take a step back and look at what you're doing :) This function should do what you want (even if you fixed the infinite loop problem in the function you gave, I don't think it would act how you want it to.):
function getBlogMenu(){
$dbhost = 'localhost';
$dbuser = ' ';
$dbpass = ' ';
$con = mysql_connect($dbhost, $dbuser, $dbpass);
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("ado_ocblog", $con);
$htmlString = "";
$result = mysql_query(
"SELECT *
FROM subCat
JOIN headCat ON subCat.headid = headCat.id
ORDER BY headid ASC;");
// arrays can have strings as keys as well as numbers,
// and setting $some_array[] = 'value'; (note the empty brackets [])
// automatically appends 'value' to the end of $some_array,
// so you don't have to keep track of or increment indexes
while ($row = mysql_fetch_assoc($result))
{
$test[$row["headc"]][] = $row["subc"];
}
// don't close the connection until after we're done reading the rows
mysql_close($con);
// $test looks like: array('headc1' => array('subc1', 'subc2', 'sub3'), 'headc2' => array('subc4', 'subc5'), ...)
// so we step through each headc, and within that loop, step through each headc's array of subc's.
foreach($test as $headc => $subc_array)
{
$htmlString.= '<h3>'.$headc.'</h3><div><ul>';
foreach($subc_array as $subc)
{
$htmlString.= '<li><a class="sub_menu" href="#">'.$subc.'</a></li>';
}
$htmlString.= '</ul></div>';
}
return $htmlString;
}