SQL Abfrage in Array lesen und wieder schreiben.

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Nili76
Mitglied
Beiträge: 38
Registriert: 15.05.2007 22:29

SQL Abfrage in Array lesen und wieder schreiben.

Beitrag von Nili76 »

Hallo zusammen,

ich habe zwar schon gesucht, aber die richtigen Stichwörter wohl nicht eingegeben....

Ich habe mir eine SQL Abfrage gebastelt, die so aussieht :

Code: Alles auswählen

	$sql = "SELECT * FROM phpbb_user_own_links c WHERE c.user_id = " . $userdata['user_id'] . " ORDER BY c.link_id "; //$userdata['user_id'];
	if( !($result = $db->sql_query($sql)) )
	{
	message_die(GENERAL_ERROR, 'Could not query own link list', '', __LINE__, __FILE__, $sql);
	}
	$user_own_links_count = $db->sql_numrows($result);

if ( $user_own_links_count == 0 )
{	
	$own_link_name = 'Keine Links definiert';
	$template->assign_block_vars('no_link_row',array('OWN_LINK_NAME' => $own_link_name));
}

else 
{ 
	$j = 0;
while ( $row = $db->sql_fetchrow($result) )
{
	$own_link_id = $row['link_id'];	
	$own_link_name = $row['link_bez'];
	$own_link = $row['link'];	

	$template->assign_block_vars('link_row',array(
		'OWN_LINK_ID' => $own_link_id,
		'OWN_LINK_NAME' => $own_link_name,
		'OWN_LINK' => $own_link)
	);

	$j++;
}}

Hier das Template:

Code: Alles auswählen


<!-- BEGIN own_links -->
	<tr>
<td class="row1" width="38%"><span class="gensmall">Link {own_links.OWN_LINK_ID}:</span><br /></td>

	<td class="row2" width="20%">
<input type="text" class="post" style="width:200px" name="own_link_bez" size="25" maxlength="255" value="{own_links.OWN_LINK_BEZ}"/><br /></td>
<td class="row3">
<input type="text" class="post" style="width:300px" name="own_link" size="25" maxlength="255" value="{own_links.OWN_LINK}"/><br /></td>

	</tr>
<!-- END own_links -->
Nun werden mir ja nun mehrere Zeilen ausgegeben, die ich auch verändern kann. Aber wie gebe ich das wieder zurück an die Datenbank?

Ist bestimmt nur ne kleine Sache. Mit einer For Schleife vielleicht?
Also ein einfaches UPDATE TABLE geht wohl kaum, da ich da doch nur eine Variable angebe, oder geht das auch mit arrays ?

Ich danke schon jetzt für Eure (hoffentlich sinnvolle) Antwort.

Gruß
Nils
Benutzeravatar
Seimon
Mitglied
Beiträge: 893
Registriert: 23.02.2005 18:10
Wohnort: Linz, Österreich

Beitrag von Seimon »

Ich hoff ich hab dich richtig verstanden...

Du könntest aus der php den Laufindex rausgeben.

Code: Alles auswählen

'COUNT' => $j,
Den hängst du dann an den Namen deiner Post-Variablen an

Code: Alles auswählen

name="own_link_bez_{own_links.COUNT}"
und kannst dann die Einträge in einer Schleife einlesen, verarbeiten und in die db schreiben.
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

So könnte man das zwar machen, aber noch ein wenig eleganter wäre es vielleicht so:

Code: Alles auswählen

name="own_link_bez[{own_links.COUNT}]"
Dann solltest du in PHP gleich ein Array zur Verfügung stehen haben welches du z.b. mit foreach() durchlaufen kannst.

Du kannst die Variable auch gleich ganz weglassen:

Code: Alles auswählen

name="own_link_bez[]"
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Benutzeravatar
Seimon
Mitglied
Beiträge: 893
Registriert: 23.02.2005 18:10
Wohnort: Linz, Österreich

Beitrag von Seimon »

Chapeau! :)
Nili76
Mitglied
Beiträge: 38
Registriert: 15.05.2007 22:29

Beitrag von Nili76 »

Vielen Dank für die Hilfe.

Aber leider bin ich wohl noch zu wenig in der Materie.
Wenn ich nun in der tpl die [] setze.... Wie bekomme ich denn die Werte in der php..?

Muss ich nun nicht noch irgendwo noch eine Übergabe definieren?

Ich glaube, ich hänge gerade an etwas grundsätzlichem...

Gruß
Nils
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Die Übergabe regelt PHP automatisch. Du bekommst die Daten als Array in der Post Variable geliefert, wenn du also das Beispiel von oben verwenden würdest ständen die Daten in

Code: Alles auswählen

$_POST['own_link_bez']
drin. Du könntest sie dann z.b. so durchlaufen:

Code: Alles auswählen

foreach($_POST['own_link_bez'] as $value)
{
do_something($value);
}
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Nili76
Mitglied
Beiträge: 38
Registriert: 15.05.2007 22:29

Beitrag von Nili76 »

Aber mit

Code: Alles auswählen

$_POST['own_link_bez']
habe ich doch nur jeweils den Wert von own_link_bez in $value stehen.

Bevor ich nun mit $value ein UDATE Table mache, brauche ich ja noch den Wert von own_link.

Logischerweise gehören own_link_bez[1] und own_link[1] zusammen.
Auch wenn in einem von beiden nichts drin steht..

Kann ich eigentlich

Code: Alles auswählen

$_POST['own_link_bez[$i]']

benutzen?

$i könnte ich ja als Zähler durchlaufen lassen....

Ich befürchte nämlich, das sonst bei der foreach anweisung einfach übersprungen wird, falls z.B. der Wert 3 bei einem der beiden nicht gesetzt ist.
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Wenn du mehrere Werte hast die als Array eingelesen werden sollen aber voneinander abhängig sind und nicht zwingend alle an den Server übermittelt werden (z.b. Checkboxen werden nur gesendet, wenn sie aktiviert sind) solltest du das wie in meinem ersten Vorschlag machen.
Im Template

Code: Alles auswählen

name="own_link_bez[{own_links.COUNT}]"
bzw.

Code: Alles auswählen

name="andere_abhaengige_variable[{own_links.COUNT}]"
, dann zählst du die Variable COUNT hoch.
Durchlaufen kannst du dann mit

Code: Alles auswählen

foreach($_POST['own_link_bez'] as $key => $value)
{
do_something($value);
do_something_else($_POST['andere_abhaengige_variable'][$key]);
}
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Nili76
Mitglied
Beiträge: 38
Registriert: 15.05.2007 22:29

Beitrag von Nili76 »

Na da habe ich mir ja was tolles einfaleln lassen.... :-?

Es klappt nicht..... Für den Fall, dass du einem kleinen Wicht wie mir noch weiter helfen möchtest:

Ich habe nun in meiner Template das hier stehen:

Code: Alles auswählen

<!-- BEGIN own_links -->
	<tr>
<td class="row1" width="38%"><span class="gensmall">Link {own_links.OWN_LINK_ID}:</span><br /></td>

	<td class="row2" width="20%">
<input type="text" class="post" style="width:200px" name="own_link_bez[{own_links.COUNT}]" size="25" maxlength="255" value="{own_links.OWN_LINK_BEZ}"/><br /></td>
<td class="row3">
<input type="text" class="post" style="width:300px" name="own_link[{own_links.COUNT}]" size="25" maxlength="255" value="{own_links.OWN_LINK}"/><br /></td>

	</tr>
<!-- END own_links -->
Ich bekomme auch alle Felder schön angezeigt. Gar kein Problem.

Nun habe ich in meiner php Datei folgendes geschrieben:

Code: Alles auswählen

$i=1;
foreach($_POST['own_link_bez'] as $key => $value) 
{ 
$sql = "UPDATE phpbb_user_own_links SET 
link_bez = '" . str_replace("\'", "''", $value) ."', 
link = '" . str_replace("\'", "''", $POST['own_link'][$key]) ."'  
WHERE user_id = $user_id AND link_id = $i";
		if ( !($result = $db->sql_query($sql)) )
			{
				message_die(GENERAL_ERROR, 'Could not update own_links table', '', __LINE__, __FILE__, $sql);
			}
$i++;
}

Nun werden die Werte von own_links_bez korrekt zurückgeschrieben.

Nur own_link wird geleert. Anscheinend habe ich in dem Code einen Fehler drin, der dafür sorgt, dass der SQL Befehl keinen Wert für das Feld link bekommt...
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Kleiner Tippfehler nehme ich an: du hast einmal links und einmal link verwendet.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Antworten

Zurück zu „Coding & Technik“