Formular Einträge zählen

Raigen

Grünschnabel
Hallo liebe Tutorials.de Community,
ich bin noch kompletter PHP-Anfänger und ich hoffe ihr könnt mir bei meinem Problem helfen!

Ich arbeite zur Zeit an einem Script um YouTube Videos zu posten. Ein Bekannter hatte mir dabei geholfen, hat aber leider nun keine Zeit mehr um es mit mir zu vervollständigen, deshalb benötige ich eure Hilfe!

Mein Problem besteht darin das ich zur Zeit nur ein Video posten kann, da ich es nicht schaffe den Namen des Videos im Forumlar zu erweitern so das er nicht zweimal vorkommt!

Beispiel:

Video 1 = Name(YouTube)
Video 2 = Name(YouTube)
...

Deshalb habe ich versucht einen Counter zu schreiben der pro Eintrag, den Namen des Videos eben mit der Zahl des Eintrages erweitert.

Gewünschtes Ergebnis:

Video 1 = Name(YouTube1)
Video 2 = Name(YouTube2)
...

Allerdings konnte ich mich nur an Tutorials im Internet richten, die mir nicht wirklich geholfen haben. Was ich auch versucht habe, es wollte nicht klappen!

Damit ihr eine Einsicht bekommt, hier alle Dateien die mit dem Script zu tun haben:


Das Formular:
HTML:
<form name="Youtube" method="post" action="/exilist/youtube_process.php">
				
<!-- YouTube Videos -->
<div class="mediaHolder" id="Youtube">
					
<input type="checkbox" name="selectedYoutube[]" value="Youtube" onclick="YT.classToggle(this);" />
<h2>Ein YouTube Video hinzufügen</h2>
					
<div class="options">
<label><b>Titel:&nbsp;</b></label>
<input type="text" name="title_Youtube">
<br />
<br />
<label><b>Kategorie:&nbsp;</b></label>
 <select name="category_Youtube">
<option>Bosskills</option>
<option>Sonstiges</option>
</select>
<br />
<br />
<label><b>ID:&nbsp;</b></label>
<input type="text" name="id_Youtube"> &nbsp;&nbsp;<font color="#777777">http://www.youtube.com/watch?v=<font color="#FFF" style="font-weight:bold; text-decoration:underline">BpnsHq3uQiw</font></font>
</div>
				
</div>
<!-- end YouTube Videos -->
<input type="submit" value="Abschicken" /> 
			
</form>

youtube_process.php:
PHP:
<?php

$youtubeArray = $_POST['selectedYoutube'];
$preliminaryJson = array();

foreach( $youtubeArray as $youtube )
{
	$preliminaryJson[$youtube]['title'] = $_POST[ "title_{$youtube}" ];
	$preliminaryJson[$youtube]['category'] = $_POST[ "category_{$youtube}" ];
	$preliminaryJson[$youtube]['id'] = $_POST[ "id_{$youtube}" ];
}

$JSON = json_encode( $preliminaryJson );

$fileHandle = fopen( 'youtube.jsondb', 'w+' );
fwrite( $fileHandle, $JSON );
fclose( $fileHandle );

header("Location: /exilist/index.php?site=media");

?>


Mein Versuch irgendetwas in die Richtung zu erreichen:
PHP:
<?php
$file = fopen("/exilist/youtube_counter.jsondb","r+");
$counter = fgets($file, 4096);

if($counter == "")
{
   $counter = 0;
   }

fwrite($file, $counter);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Exilist.eu | YouTube Videos</title>
		
<!-- script -->
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.min.js"></script>
</head>
	
<body>
<div class="container">
<h1>Media</h1>
			
<!-- YouTube Videos ( Titel | ID )  -->
<form name="Youtube" method="post" action="/exilist/youtube_process.php">
				
<!-- YouTube Videos -->
<div class="mediaHolder" id="Youtube">
					
<input type="checkbox" name="selectedYoutube[]" 
value="<?php echo "Youtube[$counter++]"; ?>" onclick="YT.classToggle(this);" />
<h2>Ein YouTube Video hinzufügen</h2>
					
<div class="options">
<label><b>Titel:&nbsp;</b></label>
<input type="text" name="<?php echo "title_Youtube[$counter++]"; ?>">
<br />
<br />
<label><b>Kategorie:&nbsp;</b></label>
<select name="<?php echo "category_Youtube[$counter++]"; ?>">
<option>Bosskills</option>
<option>Sonstiges</option>
</select>
<br />
<br />
<label><b>ID:&nbsp;</b></label>
<input type="text" name="<?php echo "id_Youtube[$counter++]"; ?>">&nbsp;&nbsp;<font color="#777777">http://www.youtube.com/watch?v=<font color="#FFF" style="font-weight:bold; text-decoration:underline">BpnsHq3uQiw</font></font>
</div>
				
</div>
<!-- end YouTube Videos -->
<input type="submit" value="Abschicken" /> 
			
</form> 
			
<script type="text/javascript" src="/exilist/scripts/youtube/js/script.js"></script> 
			
</div> 
</body> 
</html>
<?php fclose($file); ?>


So wie es versucht habe, klappt es aber nicht. Die Zahlen werden nicht addiert sondern es wird einfach Youtube[0++] ausgegeben anstatt Youtube[1] zum Beispiel!


Ich hoffe ihr könnt sehen worauf ich hinaus will bzw. was ich erreichen will!


Mit freundlichen Grüßen,
Raigen
 
Grüße,

dass die Variablen einfach so eingeschrieben werden, liegt wahrscheinlich daran , dass du jene mit in den echo-Befehl packst.

du könntest das Ganze wie folgt umschreiben (an einem kleinen Beispiel erklärt):
PHP:
<?php
$counter = $counter++;
echo "id_Youtube[".$counter."]";
?>

oder aber du machst es so:

PHP:
<?php
for($i=0; $i<=irgendwas; $i++) {
$Name = ${"Youtube_".$a}
echo"$Name";
}
?>

Das sollte dir eigentlich einen Namen zusammensetzen können, der dann aus Youtube_ und der entsprechenden Zahl des Schleifendurchlaufs besteht.

P.S. Mein Beispiel ist nicht getestet (Es kann auch vorkommen, dass du etwas PHP-unspezifisches findest -> ich hab jetzt längere Zeit etwas mit Java gemacht und bitte das zu entschuldigen)
 
Vielen dank für deine Antwort. Es funktioniert, aber nur "begrenzt". Weiter als eine 0 kommt er nicht, habe es mit drei Videos probiert und alle heißen YouTube[0] anstatt das er die Zahlen nach oben addiert mit jedem Eintrag!

PHP:
 <input type="checkbox" name="selectedYoutube[]" 
value="<?php $counter = $counter++; echo "Youtube[".$counter."]";?>" onclick="YT.classToggle(this);" />
<h2>Ein YouTube Video hinzufügen</h2>
					
<div class="options">
<label><b>Titel:&nbsp;</b></label>
<input type="text" 
name="<?php $counter = $counter++; echo "title_Youtube[".$counter."]";?>">
<br />
 <br />
<label><b>Kategorie:&nbsp;</b></label>
 <select 
name="<?php $counter = $counter++; echo "category_Youtube[".$counter."]";?>">
<option>Bosskills</option>
<option>Sonstiges</option>
</select>
<br />
<br />
<label><b>ID:&nbsp;</b></label>
<input type="text" 
name="<?php $counter = $counter++; echo "id_Youtube[".$counter."]";?>">
&nbsp;&nbsp;<font color="#777777">http://www.youtube.com/watch?v=<font color="#FFF" style="font-weight:bold; text-decoration:underline">BpnsHq3uQiw</font></font>
</div>


Bin für jede Antwort dankbar! :)
 
Hmm... es scheint ein Problem mit dem ganzen Script zu sein! Ein (1) Video mit dem Script zu posten ist kein Problem. Sobald ich aber ein zweites Video posten will bekomme ich eine Fehlermeldung!

Warning: Invalid argument supplied for foreach() in /users/raigen/www/dbTest/process.php on line 5

Ich habe auf einem anderen Server das Script nochmal neu aufgesetzt für Test-Zwecke.

formular.php
HTML:
<!-- PHP Variablen -->

<?php
$file = fopen("counter.jsondb","a+");
$counter = fgets($file, 4096);

$counter = 0;
$counter = $counter++;

fwrite($file, $counter);
fclose($file);
?>

<!-- Formular, die HTML/HEAD/BODY Tags sich dazu denken! -->

<div class="container">
<h1>Media</h1>
			
<!-- Media ( Titel | Kategorie | ID )  -->
<form name="Youtube" method="post" action="process.php">
				
<!-- YouTube Videos -->
<div class="mediaHolder" id="Youtube">
		
<input type="checkbox" name="youtube[]" 
value="<?php echo "Youtube[".$counter."]"; ?>" />

<h2>Ein YouTube Video hinzufügen</h2>
<div class="divider"></div>
					
<div class="options">
<label><b>Titel:&nbsp;</b></label>
<input type="text" name="title">
<br />
<br />
<label><b>Kategorie:&nbsp;</b></label>
<select name="category">
<option>Bosskills</option>
<option>Guides</option>
<option>Sonstiges</option>
</select>
<br />
<br />
<label><b>ID:&nbsp;</b></label>
<input type="text" name="id">
 &nbsp;&nbsp;<font color="#777777">http://www.youtube.com/watch?v=<font color="#FFF" style="font-weight:bold; text-decoration:underline">BpnsHq3uQiw</font></font>
</div>
				
</div>
<!-- end YouTube Videos -->
<input type="submit" value="Abschicken" /> 
			
</form> 
</div>

process.php
PHP:
<?php
$youtubePost = $_POST['youtube'];
$youtubeArray = array();

foreach($youtubePost as $youtube)
{
	$youtubeArray[$youtube]['title'] = $_POST["title"];
	$youtubeArray[$youtube]['category'] = $_POST["category"];
	$youtubeArray[$youtube]['id'] = $_POST["id"];
}

$youtube_encode = json_encode($youtubeArray);

$fileHandle = fopen('youtube.jsondb', 'a+');
fwrite($fileHandle, $youtube_encode);
fclose($fileHandle);

header("Location: show.php");
?>

Kann es sein dass er probiert, das gleiche Array nochmal zu posten aber eben mit einem anderen Inhalt und sich deswegen verfängt? Der Inhalt wird weiterhin in die youtube.jsondb gepostet, allerdings ist das Problem wie schon erwähnt das der Inhalt mit dem gleichen Namen gepostet wird.

Mir ist auch aufgefallen dass der Counter garnicht weiter zählt, er schreibt die ganze Zeit nur 0, egal wieviele Videos ich poste, was auch darin resultiert dass alle YouTube Videos eben YouTube[0] heißen!

Nachdem ich drei Videos gepostet hab, sehen die youtube.jsondb und counter.jsondb Dateien so aus:

youtube.jsondb
{"Youtube[0]":{"title":"TEST 1","category":"Sonstiges","id":"test-id"}}
{"Youtube[0]":{"title":"TEST 2","category":"Sonstiges","id":"test-id2"}}
{"Youtube[0]":{"title":"TEST 3","category":"Sonstiges","id":"test-id3"}}

counter.jsondb

Ich hoffe ihr versteht mein Problem und könnt mir dabei helfen es zu lösen! Es muss ja irgendwie hinzubekommen sein das der Counter richtig weiterzählt.


Mit freundlichen Grüßen,
ein langsam verzweifelnder Raigen
 
Zurück