Ik ben nog steeds bezig met een scriptje.
Deze moet informatie posten in de database van Albums/Single's.
Deze worden over 2 db table verdeelt 1. albums en 2. album_track en zijn gekoppelt met foreign key.
Dit werkt opzich helemaal na behoren en in album_track word ook de album_id mee gepost.
Als ik 1 nieuwe album post met 1 track werkt dit goed.
Omdat ik voor de tracks een js file heb waardoor ik met een + en - button extra input velden kan maken zodat ik meerdere tracks kan toevoegen als hier behoefde voor is. Het maken van extra velden werkt ook goed en zonder problemen. Alleen zodra ik dus een album toe wil voegen met 2 tracks dan post hij in de database:
In albums: id - artiest - titel enzz
In album_track: id - album_id track_nr - track
En dat 2x met als gevolg dat ik 2 albums heb met elk 1 track. Dit had meoten zijn 1 album met 2 tracks.
Tevens maak ik gebruik van formulier afhandeling om te kijken of er fouten zijn of de velden wel zijn ingevult.
Als ik 1 track niet in vul krijg ik netjes daar een melding van maar de input veld word niet rood aangegeven.
Dit word wel gedaan bij de overige velden in het formulier.
Wie kan mij opweg helpen bij deze 2 problemen.
Enige surgesties voor een andere multi input mag ook als dit makelijke kan.
Hier onder mijn insert.php en het stukje van de track input velden.
insert.php
<?php
// Er word iets gepost met het Formulier.
// We gaan de gegevens ophalen en daarna kijken of alles klopt.
if ( $_SERVER['REQUEST_METHOD'] == 'POST' &&
isset($_POST['artiest'], $_POST['titel'], $_POST['bericht'], $_POST['youtube'], $_POST['type'], $_POST['track_nr'.$i], $_POST['track'.$i]) )
{
// We gaan de errors in een array bijhouden
$aErrors = array();
// Een Album/Single Artiest naam heeft letters, spaties en misschien een apostrof of koppelteken
// maar niet alleen spaties
if ( !isset($_POST['artiest']) or !preg_match( '~^[\w\d\' -]+$~', $_POST['artiest'] ) or trim($_POST['artiest']) == '' ) {
$aErrors['artiest'] = 'Vul een geldige Artiest naam in.';
}
// Een Album/Single Titel heeft letters, spaties en misschien een apostrof of koppelteken
// maar niet alleen spaties
if ( !isset($_POST['titel']) or !preg_match( '~^[\w\d\' -]+$~', $_POST['titel'] ) or trim($_POST['titel']) == '' ) {
$aErrors['titel'] = 'Vul een geldige Titel naam in.';
}
// Een Bericht bevat letters en spaties
if ( !isset($_POST['bericht']) ) {
$aErrors['bericht'] = 'Vul een geldige Bericht in. ';
}
// Een Type bevat letters en spaties
if ( !isset($_POST['youtube']) ) {
$aErrors['youtube'] = 'Vul een geldige Youtube Code in. ';
}
// Een Type bevat letters en spaties
if ( !isset($_POST['type']) ) {
$aErrors['type'] = 'Vul een geldige Type in. ';
}
for($i=1;$i<=(int)($_POST["track_nr"]);$i++)
{
// Een track_nr bevat letters en spaties (minimaal 3)
if ( !isset($_POST['track_nr'.$i]) ) {
$aErrors['track_nr'.$i] = 'Vul een geldige Track_nr in. Minimaal 1 cijfer !! ';
}
// Een track bevat letters en spaties (minimaal 3)
if ( !isset($_POST['track'.$i]) or !preg_match( '~^[\w ]{3,}$~', $_POST['track'.$i] ) ) {
$aErrors['track'.$i] = 'Vul een geldige Track in. Minimaal 3 Letters !! ';
}
//Geen errors gevonden. We kunnen beginnen met het uitvoeren en webschrijfen van de gegevens.
if ( count($aErrors) == 0 )
{
// start transactie
$query->query( "START TRANSACTION" );
// Zet de DEBUG_MODE Aan (true) of Uit (false)
// Het is aan te raden om true alleen te gebruiken bij het testen van de script.
define( 'DEBUG_MODE', true );
// voeg de gebruiker toe
if ( $query->query( "INSERT INTO
albums
(
artiest,
titel,
bericht,
youtube,
type,
datetime
)
VALUES
(
'".mysqli_real_escape_string($query,$_POST[ 'artiest' ])."',
'".mysqli_real_escape_string($query,$_POST[ 'titel' ])."',
'".mysqli_real_escape_string($query,$_POST[ 'bericht' ])."',
'".mysqli_real_escape_string($query,$_POST[ 'youtube' ])."',
'".mysqli_real_escape_string($query,$_POST[ 'type' ])."',
NOW()
)" ) )
{
// de query is gelukt, voeg het adres toe
$strQuery = sprintf(
"INSERT INTO
album_track
(
album_id,
track_nr,
track
)
VALUES
(
%d,
'".mysqli_real_escape_string($query,$_POST[ 'track_nr'.$i ])."',
'".mysqli_real_escape_string($query,$_POST[ 'track'.$i ])."'
)",
$query->insert_id
);
$result = mysqli_query($query, $strQuery, MYSQLI_USE_RESULT);
// Hier beginnen wij met de Fout Afhandeling
// Voor meer info zie: http://www.pfz.nl/wiki/mysql-foutafhandeling-in-php
if ( false === $result )
{
echo '<p>Er is iets fout gegaan bij het invoeren van de Album/Single gegevens.<br />';
$var = var_dump($_POST[‘username’]);
echo '<pre>';
print_r($_REQUEST);
echo '</pre>';
if ( constant( 'DEBUG_MODE' ) )
{
echo '<br />Foutmelding: ' . mysql_error() . '
<br />Query: ' . htmlspecialchars( $strQuery );
}
echo '</p>';
}
else
{
if ( $query->query( $strQuery ) )
{
// beide queries zijn gelukt, voltooi de transactie
$query->query( "COMMIT" );
echo 'De Album/Single is toegevoegd';
echo '<pre>';
print_r($_POST);
echo '</pre>';
}
else
{
// de Trackquery is mislukt, maak de transactie ongedaan
$query->query( "ROLLBACK" );
echo 'De Album/Single is niet toegevoegd, de track(s) kon niet worden opgeslagen';
$var = var_dump($_POST[‘artiest’]);
}
}
}
else
{
// de Albumquery is mislukt, beëindig de transactie
echo 'De Album/Single is niet toegevoegd aan de tabel Albums';
$query->query( "ROLLBACK" );
}
}
}
}
?>
toevoegen.php
<fieldset>
<legend>Track Informatie:</legend>
<table width="550">
<tr>
<td width="85" valign="top" align="right">
Track Nr:
</td>
<td>
<?php echo isset($aErrors["track_nr".$i]) ? '<td class="error">' : '<td>' ?>
<input type="text" name="track_nr1" size="6" value="<?php echo isset($_POST["track_nr".$i]) ? htmlspecialchars($_POST["track_nr".$i]) : '' ?>" /><br />
<span id="mySpan"></span>
</td>
<td width="75" valign="top" align="right">
Track:
</td>
<td align="left">
<?php echo isset($aErrors["track".$i]) ? '<td class="error">' : '<td>' ?>
<input type="text" name="track1" size="35" value="<?php echo isset($_POST["track".$i]) ? htmlspecialchars($_POST["track".$i]) : '' ?>" /><br />
<span id="mySpan1"></span>
</td>
<td width="100" valign="top">
<input name="Create" type="button" value="+" onclick="Javascript:fncCreateElement();">
<input name="Delete" type="button" value="-" onclick="Javascript:fncDeleteElement();">
</td>
</tr>
</table>
</fieldset>
885 views