Hallo

Na een hele poos zonder succes gezocht te hebben naar iemand die me eventueel kon helpen een systeem te maken waarmee ik inlog tickets kan verkopen voor mijn hotspot ga ik zelf maar een waging pogen ;)
Ik heb vrijwel geen ervaring met PHP & MySQL dus ik hoop dat jullie me een beetje kunnen helpen hier en daar, af en toe.

Ik dacht eerst maar eens beginnen ervoor zorgen dat er een voorraad aan geldige vouchers of tickets in een database zitten.

Ik heb met behulp van HeidiSQL een database gemaakt genaamd TEST en een ID table en een VOUCHERS table


/*!40100 SET CHARACTER SET latin1*/;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0*/;


#
# Database structure for database 'test'
#

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `test` /*!40100 DEFAULT CHARACTER SET latin1 */;

USE `test`;


#
# Table structure for table 'vouchers'
#

CREATE TABLE `vouchers` (
  `id` int(3) NOT NULL auto_increment,
  `tickets` varchar(50) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=99 /*!40100 DEFAULT CHARSET=latin1 COMMENT='Hotspot tickets'*/;



#
# Dumping data for table 'vouchers'
#

# (No data found.)

/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS*/;



Ik heb uit mijn hotspot router het bestandje gedownload met een aantal geldige inlog vouchers en dat in de root van de te maken site gezet zodat het toekomstige script de vouchers kan vinden. En toen op zoek gegaan hoe ik die tickets netjes in de table vouchers krijg.

Ik heb na wat gezoek via google en php.net het volgende in elkaar geknutseld.


<?php

// ----
$con = mysql_connect("xxxxxx","test","xxxxxx");
if (!$con)
  {
  die('Kan niet verbinden: ' . mysql_error());
  }
mysql_select_db("test", $con);
// ----

	$row = 1;
	$handle = fopen("vouchers.csv", "r");
	while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
	    $num = count($data);
	//    echo "<p> $num fields in line $row: <br /></p>\n";
	    $row++;
	    for ($c=0; $c < $num; $c++) {
	//        echo $data[$c] . "<br />\n";
	mysql_query("INSERT INTO vouchers (tickets) 
	VALUES ('$data[$c]')");
	    }
	}
	fclose($handle);

// ----
mysql_close($con);
// ----

?>


Dit lever wel op dat de text in het vouchers bestand in de vouchers table terecht komt maar het willekeurig erin gezet is het ziet er dus niet uit.

Het vouchers bestand ziet er als volgt uit:

# Voucher Tickets 1..25 for Roll 1
# Nr of Roll Bits     16
# Nr of Ticket Bits   10
# Nr of Checksum Bits 5
# magic initializer   888335219 (32 Bits used)
# Character Set used  2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ
#
" 3NyXnuLbU2e3"
" qFQWYpWGTBD"
" hWenFcwZS2F"
" Z2qjararqwa3"
" AHGVy6rMqe"
" 45mHHbtt4Ai3"
" jx3E7Xf7Zkc"
" qByHbPnL8Ec"
" Wi8dX7m2PMW"
" b6AYhUEZ5te"
" ccyjEicaVXc3"
" XUncKPSHNtF"
" tPheWBrvRr53"
" 5M75xVPJJxT"
" YeYzmhDMy7m"
" k6AXnr6haGm"
" VjGuEkdMFdh3"
" tyhYGBMtw2E"
" QvB2hEabK2x"
" 8EDVQmjuMPJ"
" LfjxAFUPnbc"
" y2ZbsdBi2Sr"
" qrFYPmVAvXa3"
" RySJiE7DPKJ"
" ChbXmNHnifc3"


De bedoeling is dat de vouchers elk in een eigen record terecht komen en de text die aan het begin staat word overgeslagen.
Mijn vraag is hoe kan ik dit bereiken?

Ik hoop dat jullie me willen helpen want ik zal nog vele vele vragen hebben komende tijd.

<?php
$bestand = 'vouchers.csv';
$codes = array();

if(file_exists($bestand))
{
if(is_readable($bestand))
{
$regels = file($bestand);

foreach($regels as $regelnummer => $regel)
{
echo '<b>'.$regelnummer.'</b> - '.$regel.'<br>'.PHP_EOL;

if($regel[0] == '"')
{
$codes[] = $regel;
}
}
}
}

echo '<pre>';
print_r($codes);
echo '</pre>';
?>

Die $codes kan je vervolgens in je database gooien. Of heb je daar ook hulp bij nodig?

Edit;

<?php
$codes[] = substr(trim($regel), 2, -1); ;
?>

Is netter ;).
Hoi Arjan,

Bedankt voor je hulp.

Ehm sja om eerlijk te zijn heb ik met zowat alles hulp nodig.
Ik heb wel eens wat beginners uitleg door gelezen en weet daarom wat basis dingen maar absoluut niet genoeg om nu te verzinnen hoe ik de codes een voor een in een eigen record krijg.

Ik heb nu paar uurtjes zitten pielen en zoeken en nog meer pielen want ik wil me natuurlijk niet laten kennen haha krijg soms wel 1 ticket in een record en dan weer het woordje array en dan weer eens een lege record maar verder komt ik helaas nog niet.

In onderstaande code zie je hoe ik dacht het te doen.

<?php

include ("connect.php");

$bestand    = 'vouchers.csv';
$codes      = array();

if(file_exists($bestand))
{
    if(is_readable($bestand))
    {
        $regels = file($bestand);

        foreach($regels as $regelnummer => $regel)
        {
            echo '<b>'.$regelnummer.'</b> - '.$regel.'<br>'.PHP_EOL;
            
            if($regel[0] == '"')
            {
                $codes[] = $regel;
            }
        }
    }
}

//echo '<pre>';
//print_r($codes);
//echo '</pre>';

$codes[] = substr(trim($regel), 2, -1); ;

mysql_query("INSERT INTO vouchers (tickets) 
VALUES print_r($codes)");

mysql_close($con);

?>


Ik heb bij VALUES al vanalles geprobeerd
VALUES print_r($regel)");
VALUES print_r($regels)");
VALUES print_r($codes)");

VALUES ('$regel')");
VALUES ('$regels')");
VALUES ('$codes')");

VALUES ($regel)");
VALUES ($regels)");
VALUES ($codes)");

met allerlei resultaten behalve het wenselijke
Misschien dat je nog even verder wilt helpen.

Ik zit er ook vaak mee hoe ik dingen die ik wil vinden moet zoeken.
Want je weet niet waar je naar moet zoeken en hoe het te formuleren.
Daar gaat enorm veel tijd inzitten.
<?php
$gelukt = 0;
$mislukt = 0;

foreach($codes as $code)
{
$query = "INSERT INTO vouchers (tickets) VALUES '".$code."'";
$result = mysql_query($query);

if($result && mysql_affected_rows() == 1)
{
$gelukt++;
}else{
$mislukt++;
}
}

echo '<p>Er zijn '.$gelukt.' tickets toegevoegd, '.$mislukt.' tickets helaas niet.</p>';
?>

Officieel zou je gewoon 1 query moeten maken met meerdere values; maar dit werkt ook.
Als ik het script als onderstaand draai dan levert dat "Er zijn 0 tickets toegevoegd, 26 tickets helaas niet." op.

Als ik het goed begrijp gebruik je substr om rond de vouchers de aanhaling tekens en spatie weg te halen. Alleen bij de laatste voucher gaat dat goed.


<?php

include ("connect.php");

$bestand    = 'vouchers.csv';
$codes      = array();

if(file_exists($bestand))
{
    if(is_readable($bestand))
    {
        $regels = file($bestand);

        foreach($regels as $regelnummer => $regel)
        {
            echo '<b>'.$regelnummer.'</b> - '.$regel.'<br>'.PHP_EOL;
            
            if($regel[0] == '"')
            {
                $codes[] = $regel;
            }
        }
    }
}

$codes[] = substr(trim($regel), 2, -1);

echo '<pre>';
print_r($codes);
echo '</pre>';

$gelukt     = 0;
$mislukt    = 0;

foreach($codes as $code)
{
    $query  = "INSERT INTO vouchers (tickets) VALUES '".$code."'";
    $result = mysql_query($query);
    
    if($result && mysql_affected_rows() == 1)
    {
        $gelukt++;
    }else{
        $mislukt++;
    }
}

echo '<p>Er zijn '.$gelukt.' tickets toegevoegd, '.$mislukt.' tickets helaas niet.</p>';

mysql_close($con);

?>

Nee, je hebt hem gecopypast op de verkeerde plek... Die substr & trim hoort op regel 20 te staan, hij vervangt die $codes[] = $regel... Daar waar jij hem nu toegevoegd hebt doe hij niks.
oh ja duh wat stom dat had ik niet door dus ;)
Nadat verbeterd te hebben werkte het script nog steeds niet.

Heb toen poosje ernaar zitten turen en tig keren doorgenomen wat er (ongeveer) gebeurd. Toen ontdekte ik dat bij VALUES (regel 37) geen haakjes stonden waar ze eerder wel stonden en dacht laat ik die eens erom zetten.
Toen werkte het, alles tickets netjes op een rij in de database gaaf :)

$query  = "INSERT INTO vouchers (tickets) VALUES ('".$code."')";

Mocht dat toch niet goed zijn laat me dan nog even weten.
Nu op naar de volgende stap.

Enorm bedankt ..!

Reageren