php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 19.03.2007, 08:33  
Neuer Benutzer
 
Registriert seit: 19.03.2007
Beiträge: 24
noBody
Standard Problem mit Array und DB eintragung

Hallo,

ich habe von dieser Community von einem Freund gehört. Er sagt mir ihr seit ziemlich schnell im Antwort und sehr Hilfsbereit.

So genug Honig ums Maul geschmiert, komme wir doch mal zu meinen Problem


Also so gebe ich meine Kategorien für mein Forum aus:

PHP-Code:
<?php
$cat_data 
mysql_query("SELECT cat_id, cat_name, cat_sort FROM board_categories ORDER BY cat_sort ASC") OR die(mysql_error());
while(
$c_o mysql_fetch_assoc($cat_data ))
{
echo 
'
<table class="main_config">
    <tr>
        <td width="75%">'
.print_out($c_o['cat_name']).'</td>    
        <td><center><input type="text" name="sort_number[]" size="5" style="text-align:center" class="design" value="'
.print_out($c_o['cat_sort']).'"><input type="hidden" name="cat_id[]" value="'.print_out($c_o['cat_id']).'"></center><td>
        <td>[url="admin/delete.php?cat_id='
.print_out($c_o['cat_id']).'"]L&ouml;schen[/url]</td>
    </tr>
</table>
'
;
}
?>
So, wenn der Admin die Sortierung geändert hat und diese Speichern will kommt folgendes Script:

PHP-Code:
<?php
if(isset($_POST['sort_cat']))
{
    foreach(
$_POST['sort_number'] as $number)
    {
        foreach(
$_POST['cat_id'] as $id)
        {
            
$new_cat mysql_query("UPDATE board_categories SET cat_sort = '".mysql_real_escape_string($number)."' WHERE cat_id = '".mysql_real_escape_string($id)."'") OR die(mysql_error());
        }
    }

header ('Location: ../index.php?admin=admin&config=cat_config&save=ready');
}
?>
Doch er speichert bei allen die selbe Zahl in der DB.
Mir wird aber kein Fehler ausgeben.

Wenn ich mir das Query ausgeben lasse:

Code:
UPDATE board_categories SET cat_sort = '4' WHERE cat_id = '1'UPDATE board_categories SET cat_sort = '4' WHERE cat_id = '2'UPDATE board_categories SET cat_sort = '4' WHERE cat_id = '3'UPDATE board_categories SET cat_sort = '4' WHERE cat_id = '4'UPDATE board_categories SET cat_sort = '1' WHERE cat_id = '1'UPDATE board_categories SET cat_sort = '1' WHERE cat_id = '2'UPDATE board_categories SET cat_sort = '1' WHERE cat_id = '3'UPDATE board_categories SET cat_sort = '1' WHERE cat_id = '4'UPDATE board_categories SET cat_sort = '2' WHERE cat_id = '1'UPDATE board_categories SET cat_sort = '2' WHERE cat_id = '2'UPDATE board_categories SET cat_sort = '2' WHERE cat_id = '3'UPDATE board_categories SET cat_sort = '2' WHERE cat_id = '4'UPDATE board_categories SET cat_sort = '3' WHERE cat_id = '1'UPDATE board_categories SET cat_sort = '3' WHERE cat_id = '2'UPDATE board_categories SET cat_sort = '3' WHERE cat_id = '3'UPDATE board_categories SET cat_sort = '3' WHERE cat_id = '4'

Das ist defenitiv zu viel, ich habe nämlich nur 4 cats.
Ich denke mal, dass ich in der Schleife ein Fehler gemacht habe, aber mir viel auch keine bessere Lösung ein.

Und die große Frage ist nun, warum er überall das gleiche rein schreibt?
noBody ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 19.03.2007, 09:09  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Zitat:
Zitat von noBody
ich habe von dieser Community von einem Freund gehört. Er sagt mir ihr seit ziemlich schnell im Antwort und sehr Hilfsbereit.
Wow, das is neu Danke für das Lob


Also ohne jetzt deine Scripte im Detail durchexerziert zu haben:
Ich sehe 2 geschachtelte foreach-Schleifen und du sagst, du hast 4 Kategorien. Kam dann auf den Trichter mal zu zählen wieviele Queries du da hast und kam auf 14 (und wahrscheinlich verzählt weil ich denke es müssten 16 sein ). Warum das jetzt net sooo ungewöhnlich is? Du hast 4 Eingabefelder pro Spalte. Nun interierst du einmal über eine Spalte und dann innerhalb noch einmal über eine andere Spalte. Da beide Spalten jeweils 4 Einträge besitzen, kommen auch 4*4=16 (wenn man richtig zählt ) Queries raus :>

Und nu lass mich ma überblicken, wie es richtiger wäre

Edit: OK, nachgedacht. Das du nur einmal über alle 4 Zeilen iterieren solltest, sollte klar sein. Du kannst nun, wenn du den key in der foreach mitnimmst, beide Array parallel ansprechen:
PHP-Code:
    foreach($_POST['sort_number'] as $key => $number)
    {
        
$new_cat mysql_query("UPDATE board_categories SET cat_sort = '".mysql_real_escape_string($number)."' WHERE cat_id = '".mysql_real_escape_string($_POST['cat_id'][$key])."'") OR die(mysql_error());
    } 
Noch einfacher wäre es allerdings, wenn du im html selbt schon anstatt
Code:
<input name="sort_number[]" ... >
direkt mit der id arbeitest
Code:
<input name="sort_number[<?php echo $c_o['cat_id']; ?>]" ...>
Dann kannst du nämlich auf das $_POST['cat_id'][$key] verzichten
PHP-Code:
    foreach($_POST['sort_number'] as $id => $number)
    {
        
$new_cat mysql_query("UPDATE board_categories SET cat_sort = '".mysql_real_escape_string($number)."' WHERE cat_id = '".mysql_real_escape_string($id)."'") OR die(mysql_error());
    } 
Ich hoffe, da hat sich jetzt kein Fehler eingeschlichen
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
Alt 19.03.2007, 14:34  
Neuer Benutzer
 
Registriert seit: 19.03.2007
Beiträge: 24
noBody
Standard

Danke.
Ich habe total vergessen das $_POST ja auch ein Array ist.
Bitte verzeiht mir diesen dummen Fehler.
Danke
noBody ist offline  
Alt 19.03.2007, 15:02  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Ich hoffe, du meinst das anders. Du verwendest POST durchaus als Array, bloss der Inhalt ist halt ebenso ein Array. Wobei ... den betrachtest du auch als array (foreach ^^)... Naja, sagen wir es so: Hab gestern meine Scripte auch mal ausgemistet und bin auf allerhand skuriles gestoßen
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
Alt 19.03.2007, 15:17  
Neuer Benutzer
 
Registriert seit: 19.03.2007
Beiträge: 24
noBody
Standard

Zitat:
Zitat von KingCrunch
Ich hoffe, du meinst das anders. Du verwendest POST durchaus als Array, bloss der Inhalt ist halt ebenso ein Array. Wobei ... den betrachtest du auch als array (foreach ^^)... Naja, sagen wir es so: Hab gestern meine Scripte auch mal ausgemistet und bin auf allerhand skuriles gestoßen
Man verbessert sich von Tag zu Tag.
Wenn ich an meine ersten Script denke, wird mir ganz schlecht
noBody ist offline  
Alt 19.03.2007, 17:05  
Erfahrener Benutzer
 
Registriert seit: 16.02.2006
Beiträge: 303
tinchen
Standard

Zitat:
ich habe von dieser Community von einem Freund gehört. Er sagt mir ihr seit ziemlich schnell im Antwort und sehr Hilfsbereit.
Den Tipp musst du von mir haben. Sorry, ich konnte nicht widerstehen.

PHP-Code:
 $new_cat mysql_query("UPDATE board_categories SET cat_sort = '".mysql_real_escape_string($number)."' WHERE cat_id = '".mysql_real_escape_string($id)."'") OR die(mysql_error()); 
Was ich da zum Beispiel noch nicht verstehe ist, warum du da mysql_real_escape_string
verwendest. Sollte $id nicht eine Zahl bzw. ein Integer sein und wäre dann
(int) $id nicht sinnvoller, als den Interger im query zu einem String zu konvertieren?

Grüße
Tine
tinchen ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Array Problem dsmcg PHP Tipps 2006 3 07.12.2006 14:34
ARRAY: alle möglichen Kombinationen Tentacle PHP Tipps 2006 13 12.05.2006 00:18
Array Problem accomm PHP Tipps 2006 1 04.04.2006 16:35
Mysql / Array Problem marcels PHP Tipps 2006 10 23.03.2006 18:30
Problem mit array in Datenbank pixelcut PHP-Fortgeschrittene 3 28.02.2006 18:20
array - Problem skaterboy PHP-Fortgeschrittene 4 26.02.2006 12:36
Übersicht aus mehrdimensionalem Array erzeugen Crypi PHP-Fortgeschrittene 0 30.01.2006 13:44
Menü mit Unterpunkten supertramp Beitragsarchiv 7 18.10.2005 22:40
Problem mir einem Array PHP Tipps 2005-2 5 11.08.2005 11:33
(schnellere) Funktion zum Zusammenfassen von CSS PHP-Fortgeschrittene 21 08.08.2005 16:47
Array Problem [Ansatz ?] PHP Tipps 2005 0 27.01.2005 18:24
[Erledigt] Mehrdimensionales Array in eindimensionales Array umwandeln PHP-Fortgeschrittene 3 03.01.2005 22:31
Problem mit Checkboxvalues in Array PHP Tipps 2004 1 17.09.2004 15:00
Array Problem andrew22 PHP Tipps 2004 9 17.09.2004 10:41


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:40 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.