Array übergeben und mit foreach in DB schreiben lassen.

Topol

Mitglied
Hallo,

ich habe momentan ein Problem:

Es handelt sich um ein Eventerstellscript(im Prinzip ein Formular mit sofortiger jquery anzeige)

Dort möchte ich zusätzlich meine User auswählen lassen. Dies geschieht mit meinem Script per DB-Abfrage welches schlussendlich Listeninhalte mit Hidden Input types generiert:

PHP:
         <input type="hidden" name="fcbklist_value[]" id="fcbklist_value[]" value="<?php echo $row['userID'];?>" />

Jetzt wieder zum Eventerstellerscript. Dieses führt in der index.php folgendes Formular:

PHP:
		<form action="#" method="post" name="EventForm" id="EventForm">

Mit folgendem Jquery Code:
PHP:
	$(document).ready(function(){	
		
		// click to submit an event
		$('#CreateEvent').click(function(){

			var a = $("#EventInput").val();
			if(a != "Was planen sie?")
			{
				$.post("event.php?val=1&"+$("#EventForm").serialize(), {
	
				}, function(response){
					$('#ShowEvents').prepend($(response).fadeIn('slow'));
					clearForm();
				});
			}
			else
			{
				alert("Bitte einen Namen für ihr Event eingeben.");
				$("#EventInput").focus();
			}
		});

Nach Submit wird also die event.php, in der aus der REQUEST der Datenbankeintrag erstellt wird, aufgerufen in der folgender Code steht:

PHP:
function checkValues($value)
{
	$value = trim($value);
	if (get_magic_quotes_gpc()) 
	{
		$value = stripslashes($value);
	}
	$value = strtr($value,array_flip(get_html_translation_table(HTML_ENTITIES)));
	$value = strip_tags($value);
	$value = mysql_real_escape_string($value);
	$value = htmlspecialchars($value);
	return $value;
}	
$limit = "";
$users_ip = $_SERVER['REMOTE_ADDR'];



if(@$_REQUEST['val'])
{
	$EventInput 	= checkValues($_REQUEST['EventInput']);
	$datepicker 	= checkValues($_REQUEST['datepicker']);
	
	$datepicker 	= $datepicker.' '.$_REQUEST['start_time_min'];
	$datepicker 	= strtotime($datepicker);
	
	$where_text 	= checkValues($_REQUEST['Where']);
	$WhoInvited 	= checkValues($_REQUEST['WhoInvited']);
	
	mysql_query("INSERT INTO events (EventInput,datepicker,where_text,WhoInvited,users_ip,date_created,userID) VALUES('".$EventInput."','".$datepicker."','".$where_text."','".$WhoInvited."','".$users_ip."','".strtotime(date("Y-m-d H:i:s"))."','".$uid."')");
	
	$limit = "limit 1";
}


Ich möchte nun zusätzlich das Array aus meinem Userauswahlprogramm in die Datenbank schreiben. Versuch habe ich es mit:

PHP:
	$array 	= $_REQUEST['fcbklist_value'];
	
		foreach ($array as $value)
			{	
				mysql_query("INSERT INTO eventusers (userID, inviterID) VALUES ('".$value."', '".$userid."')") or die(mysql_error());
			}

Leider komme ich es nicht gebacken den DB Eintrag richtig zu erstellen. Habe ich einen Denkfehler oder einen Syntaxfehler? Eigentlich wollte ich aus das übergebene Array "val" das Array "fcblist_value" rausholen und per foreach-Abfrage in die DB schreiben lassen.

Wäre um jegliche Tipps dankbar!

MfG Topo
 
Nach Klick auf Submit Button wird kein neues Ajax-Event eingeblendet. Ein Datenbankantrag mit dem Event wird erstellt. Jedoch kein DB-Eintrag der ausgewählten User.
 
Soo, ich hab jetzt den ersten Fehler entdeckt, ein Script war nicht ganz vom Form Tag umschlossen.

Nun aber zum bestehenden Problem:

Es liegt definitiv an der Foreach Abfrage in der event.php . Wenn ich diese auskommentiere funktioniert das Ajax und Vardump gibt folgendes aus:

array(16) { ["val"]=> string(1) "1" ["EventInput"]=> string(5) "dasda" ["datepicker"]=> string(10) "05/09/2012" ["start_time_min"]=> string(4) "2:00" ["Where"]=> string(4) "dsad" ["WhoInvited"]=> string(4) "Wer?" ["fcbklist_value"]=> array(4) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "5" [3]=> string(1) "6" } ["fcbklist_values"]=> string(1) "}"

Soweit ich das erkennen kann ist das nun ein Array im Array (Multidimensional?). Jetzt wäre meine Frage wie ich die Foreach Abfrage richtigerweise darstellen muss.

Meine Überlegung war in der If-Abfrage:

PHP:
if(@$_REQUEST['val'])
{

...

$array 	= $_REQUEST['fcbklist_value'];

foreach ($array as $value)
			{	
			mysql_query("INSERT INTO eventusers (userID, inviterID) VALUES ('".$value."',                     '".$uid."')") or die(mysql_error());
			}
			
}


MfG Topo



EDIT: Ok. Funktioniert.

Aber ich hätte noch eine Frage. Wie stelle ich es am einfachsten an. Ich habe ein Script in dem ich alle User als Listeneinträge mit integrierten Hidden Input Feldern ausgibt. Leider übergibt es mir alle Felder

PHP:
    <li>        
        <strong><?php echo $row['username'];?></strong><br /> 
        <span class="fcbkitem_text"><?php echo $row['email'];?></span>
        <input type="hidden" name="fcbklist_value[]" id="fcbklist_value[]" value="<?php echo $row['userID'];?>" />       
    </li>

Bei click auf das Feld wird es markiert. Ich müsste aber beim Übergeben mit dem Submit noch überprüfen ob sie markiert sind. Bisher werden alle in das Array übergeben. Hat wer ne Idee?
 
Zuletzt bearbeitet:
Nur mal als Bemerk: Verwende, wenn möglich, niemals $_REQUEST, sondern lieber die entsprechenden Superglobalen $_GET, $_POST, $_COOKIE, $_SESSION und $_ENV. Damit hast du eine Sicherheitslücke weniger.
 
Zurück