Einzelnen Beitrag anzeigen
Alt 28.02.2016, 12:47   #1 (permalink)
Duke49th
10 Jahre hx3
5000 Beiträge
 
Benutzerbild von Duke49th
 
Registriert seit: 06.10.2006
Ort: Manila
Alter: 43
Beiträge: 8.433
Standard PHP und SQL Hilfe

Wir haben doch so viele Progger Asse hier. Da nutze ich das mal und frage.

Ich habe für unser Debriefing-Tool Projekt was geschrieben.

Wir haben ein Debriefing Tool was ein Mitglied mal entwickelte...jetzt aber Frau und Kind und keine Zeit mehr hat. Er gab uns den Kram und meinte "macht mal"..^^

Jedenfalls habe ich jetzt in der ausgabe.php wo der Kram aufbereitet wird, angefangen die Daten die in einem Array namens $debrief gespeichert werden, auszulesen.
Ziel ist es, jeden Wert der auch gespeichert und angezeigt wird, ebenfalls in eine SQL Datenbank zu speichern. Wir wollen später ein Archiv haben und auch diese Daten nutzen um uns ein Ranking & Award System zu machen.

Soweit klappt das auch ganz gut und ich bin stolz wie Bolle das mit meinen wenigen Programmierkenntnissen hinbekommen zu haben. Musste extra ein bisschen SQL und PHP lernen.

Ich verstehe vieles inzwischen ganz gut. Hänge hier aber bei meinem multidimensionalen Array fest.

Das habe ich bisher geschrieben:

PHP-Code:
<?php
$conn 
= new PDO('mysql:host=localhost;dbname=xxxx''xxxx''xxxx');

$field1=$debrief['Flights'][0]['Country'];
$field2=$debrief['Flights'][0]['Mission_Date'];
$field3=$debrief['Flights'][0]['Mission_Time'];
$field4=$debrief['Flights'][0]['Host_Type'];
$field5=$debrief['Flights'][0]['Game_Type'];
$field6=$debrief['human_player_count'];

if(isset(
$debrief['Flights'][0]['Mission_Name']))
{
    
$field7=$debrief['Flights'][0]['Mission_Name'];
    
}

else 
{
    
$field7='';
}

if(isset(
$debrief['Flights'][0]['Flight_Callsign']))
{
    
$field8=$debrief['Flights'][0]['Flight_Callsign'];
}
else
{
    
$field8='';
}

//$field10=$debrief['Flights'][2]['Flight_Callsign'];
//$field11=$debrief['Flights'][3]['Flight_Callsign'];
//$field12=$debrief['Flights'][4]['Flight_Callsign'];
if(isset($debrief['Flights'][0]['Mission_Type']))
{
    
$field13=$debrief['Flights'][0]['Mission_Type'];
}
else
{
    
$field13='';
}

//$field14=$debrief['Flights'][1]['Mission_Type'];
//$field15=$debrief['Flights'][2]['Mission_Type'];
//$field16=$debrief['Flights'][3]['Mission_Type'];
//$field17=$debrief['Flights'][4]['Mission_Type'];
if(isset($debrief['Flights'][0]['Ship_Nr']))
{
    
$field18=$debrief['Flights'][0]['Ship_Nr'];
}
else
{
    
$field18='';
}

//$field19=$debrief['Flights'][1]['Ship_Nr'];
//$field20=$debrief['Flights'][2]['Ship_Nr'];
//$field21=$debrief['Flights'][3]['Ship_Nr'];
//$field22=$debrief['Flights'][4]['Ship_Nr'];
if(isset($debrief['Flights'][0]['Aircraft_Type']))
{
    
$field23=$debrief['Flights'][0]['Aircraft_Type'];
}
else
{
    
$field23='';
}


//$field24=$debrief['Flights'][1]['Aircraft_Type'];
//$field25=$debrief['Flights'][2]['Aircraft_Type'];
//$field26=$debrief['Flights'][3]['Aircraft_Type'];
//$field27=$debrief['Flights'][4]['Aircraft_Type'];
if(isset($debrief['Flights'][0]['Pilot_Slot_1']['Callsign']))
{
    
$field28=$debrief['Flights'][0]['Pilot_Slot_1']['Callsign'];
}
else
{
    
$field28='';
}
//$field29=$debrief['Flights'][1]['Pilot_Slot_1']['Callsign'];
//$field30=$debrief['Flights'][2]['Pilot_Slot_1']['Callsign'];
//$field31=$debrief['Flights'][3]['Pilot_Slot_1']['Callsign'];
//$field32=$debrief['Flights'][4]['Pilot_Slot_1']['Callsign'];
if(isset($debrief['Flights'][0]['Pilot_Slot_2']['Callsign']))
{
    
$field33=$debrief['Flights'][0]['Pilot_Slot_2']['Callsign'];
}
else
{
    
$field33='';
}
//$field34=$debrief['Flights'][1]['Pilot_Slot_2']['Callsign'];
//$field35=$debrief['Flights'][2]['Pilot_Slot_2']['Callsign'];
//$field36=$debrief['Flights'][3]['Pilot_Slot_2']['Callsign'];
//$field37=$debrief['Flights'][4]['Pilot_Slot_2']['Callsign'];
if(isset($debrief['Flights'][0]['Pilot_Slot_3']['Callsign']))
{
    
$field38=$debrief['Flights'][0]['Pilot_Slot_3']['Callsign'];
}
else
{
    
$field38='';
}
//$field39=$debrief['Flights'][1]['Pilot_Slot_3']['Callsign'];
//$field40=$debrief['Flights'][2]['Pilot_Slot_3']['Callsign'];
//$field44=$debrief['Flights'][3]['Pilot_Slot_3']['Callsign'];
//$field42=$debrief['Flights'][4]['Pilot_Slot_3']['Callsign'];
if(isset($debrief['Flights'][0]['Pilot_Slot_4']['Callsign']))
{
    
$field43=$debrief['Flights'][0]['Pilot_Slot_4']['Callsign'];
}
else
{
    
$field43='';
}
//$field44=$debrief['Flights'][1]['Pilot_Slot_4']['Callsign'];
//$field45=$debrief['Flights'][2]['Pilot_Slot_4']['Callsign'];
//$field46=$debrief['Flights'][3]['Pilot_Slot_4']['Callsign'];
//$field47=$debrief['Flights'][4]['Pilot_Slot_4']['Callsign'];

if(isset($debrief['Flights'][0]))
{
    
$Zwischenrechnung $debrief['Flights'][0]['AA_Kills'] + $debrief['Flights'][0]['AG_Kills'] + $debrief['Flights'][0]['AS_Kills'] + $debrief['Flights'][0]['AN_Kills'];
    
$field48=$Zwischenrechnung;
}
else
{
    
$field48='';
}


if(isset(
$debrief['Flights'][0]))
{
    
$field49=$debrief['Flights'][0]['AA_Kills'];
}
else 
{
        
$field49='';
}


            
if(isset(
$debrief['Flights'][0]))
{
    
$field50=$debrief['Flights'][0]['AG_Kills'];
}
else 
{
        
$field50='';
}

if(isset(
$debrief['Flights'][0]))
{
    
$field51=$debrief['Flights'][0]['AS_Kills'];
}
else 
{
        
$field51='';
}
if(isset(
$debrief['Flights'][0]))
{
    
$field52=$debrief['Flights'][0]['AN_Kills'];
}
else 
{
        
$field52='';
}


if(
is_array($debrief['Flights'][0]['Destroyed_Targets']))
            {
                foreach(
$debrief['Flights'][0]['Destroyed_Targets'] as $keys => $value)
                {
                    
$string $value ' * ' $keys
                    
                    
$field53=$string 
                                    
'
                                
                                    '
;
                }
            }
            else
            {
                
$field53='';
            }

            
$keys array_keys($debrief['Weapons']);
                foreach(
$keys as $value)
                {
                    if(
$debrief['Weapons'][$value]['Fired'] > 0)
                    {
                        
$Prozent round(($debrief['Weapons'][$value]['Hit'] / $debrief['Weapons'][$value]['Fired']) * 1000);
                        
$field54=$Prozent .= ' %';
                    }
                    else
                    {
                        
$field54='';
                    }
                    
                }
                

                

                


                
            
// Schreibe in die Tabelle
$sql "INSERT INTO debrief 

    (Country, Mission_Date, Mission_Time, Host_Type, Game_Type, human_player_count, Mission_Name, Flight_Callsign0, Mission_Type0, 
    Ship_Nr0, Aircraft_Type0, Pilot_Slot_0_1, Pilot_Slot_0_2, Pilot_Slot_0_3, Pilot_Slot_0_4, All_Kills, AA_Kills, AG_Kills, AS_Kills,
    AN_Kills, Destroyed_Targets, Gdmgpercentage)

VALUES 

    (:Country, :Mission_Date, :Mission_Time, :Host_Type, :Game_Type, :human_player_count, :Mission_Name, :Flight_Callsign0, :Mission_Type0, 
    :Ship_Nr0, :Aircraft_Type0, :Pilot_Slot_0_1, :Pilot_Slot_0_2, :Pilot_Slot_0_3, :Pilot_Slot_0_4, :All_Kills, :AA_Kills, :AG_Kills, :AS_Kills,
    :AN_Kills, :Destroyed_Targets, :Gdmgpercentage)"
;

// Prepare - zum Schutz vor injections    
$schreiben $conn->prepare($sql);

// Ausführen - execute des Arrays mit ausgewählten, oben definierten Variablen
$schreiben->execute(array(':Country'=>$field1,  
                        
':Mission_Date'=>$field2,  
                        
':Mission_Time'=>$field3
                        
':Host_Type'=>$field4
                        
':Game_Type'=>$field5
                        
':human_player_count'=>$field6
                        
':Mission_Name'=>$field7,
                        
':Flight_Callsign0'=>$field8
//                        ':Flight_Callsign1'=>$field9,
//                          ':Flight_Callsign2'=>$field10,
//                          ':Flight_Callsign3'=>$field11,
//                          ':Flight_Callsign4'=>$field12,
                          
':Mission_Type0'=>$field13,
//                          ':Mission_Type1'=>$field14,
//                          ':Mission_Type2'=>$field15,
//                          ':Mission_Type3'=>$field16,
//                          ':Mission_Type4'=>$field17,
                          
':Ship_Nr0'=>$field18,
//                          ':Ship_Nr1'=>$field19,
//                          ':Ship_Nr2'=>$field20,
//                          ':Ship_Nr3'=>$field21,
//                          ':Ship_Nr4'=>$field22,
                          
':Aircraft_Type0'=>$field23,
//                          ':Aircraft_Type1'=>$field24,
//                          ':Aircraft_Type2'=>$field25,
//                          ':Aircraft_Type3'=>$field26,
//                          ':Aircraft_Type4'=>$field27,
                          
':Pilot_Slot_0_1'=>$field28,
//                          ':Pilot_Slot_1_1'=>$field29,
//                          ':Pilot_Slot_2_1'=>$field30,
//                          ':Pilot_Slot_3_1'=>$field31,
//                          ':Pilot_Slot_4_1'=>$field32,
                          
':Pilot_Slot_0_2'=>$field33,
//                          ':Pilot_Slot_1_2'=>$field34,
//                          ':Pilot_Slot_2_2'=>$field35,
//                          ':Pilot_Slot_3_2'=>$field36,
//                          ':Pilot_Slot_4_2'=>$field37,
                          
':Pilot_Slot_0_3'=>$field38,
//                          ':Pilot_Slot_1_3'=>$field39,
//                          ':Pilot_Slot_2_3'=>$field40,
//                          ':Pilot_Slot_3_3'=>$field41,
//                          ':Pilot_Slot_4_3'=>$field42,
                          
':Pilot_Slot_0_4'=>$field43,
//                          ':Pilot_Slot_1_4'=>$field44,
//                          ':Pilot_Slot_2_4'=>$field45,
//                          ':Pilot_Slot_3_4'=>$field46,
//                          ':Pilot_Slot_3_4'=>$field47,
                          
'All_Kills'=>$field48,
                          
'AA_Kills'=>$field49,
                          
'AG_Kills'=>$field50,
                          
'AS_Kills'=>$field51,
                          
'AN_Kills'=>$field52,
                          
'Destroyed_Targets'=>$field53,
                          
'Gdmgpercentage'=>$field54));



//Verbindung zur Datenbank schliessen




//////////////////////Ende des Scripts //////////////////////////////////
    
?>
Jetzt hänge ich aber.


Folgendes wird angezeigt. Abgerufen aus dem Array und dann wird gezählt und gerechnet und addiert. Und am Ende wird alles zusammengefasst und als Gesamtergebnis angezeigt (Natürlich nur teilweise copy&paste den Code rauskopiert...den der für mich relevant ist..die siebte Zeile, Gesamtziele Statistik:

PHP-Code:
        //Siebte Zeile Ziel-Statistik
        
echo
            
'
                <tr>
                    <td colspan="1" class="' 
$farbe  '">Ziele</td>
            '
;
            
        for(
$i2 0$i2 $debrief['Flights'][$i]['Ship_Nr']; $i2++)
        {
            
$Slot $i2 1;
            
$PilotSlot 'Pilot_Slot_' $Slot;
            echo
                    
'
                        <td class="' 
$farbe  '">
                    '
;
            if(
is_array($debrief['Flights'][$i][$PilotSlot]['Destroyed_Targets']))
            {
                foreach(
$debrief['Flights'][$i][$PilotSlot]['Destroyed_Targets'] as $keys => $value)
                {
                    
$string $value ' * ' $keys
                    echo
                        
$string 
                        
'
                            <br />
                        '
;
                }
            }
            else
            {
                echo 
'&nbsp;';
            }
            
            echo
                    
'
                        </td>
                    '
;
        }
        
        echo
            
'
                <td class="' 
$farbe  '">
            '
;
        
        if(
is_array($debrief['Flights'][$i]['Destroyed_Targets']))
        {
            foreach(
$debrief['Flights'][$i]['Destroyed_Targets'] as $keys => $value)
            {
                
$string $value ' * ' $keys
                echo
                    
$string 
                    
'
                        <br />
                    '
;
            }
        }
        else
        {
            echo 
'&nbsp;';
        }
            
        echo
            
'
                </td>
                ' 
$colspan '
                <td>&nbsp;</td>
            </tr>
            '
;
    } 

Das sieht dann folgendermaßen aus:

stats.PNG


Das hier habe ich jetzt geschrieben:

PHP-Code:
if(is_array($debrief['Flights'][0]['Destroyed_Targets']))
            {
                foreach(
$debrief['Flights'][0]['Destroyed_Targets'] as $keys => $value)
                {
                    
$string $value ' * ' $keys
                    
                    
$field53=$string 
                                    
'
                                
                                    '
;
                }
            }
            else
            {
                
$field53='';
            } 

Ich erhalte aber nur den Wert "1*Runner" zurück.

Also ist als Gesamtziele nur "1 * Runner" in der VarChar (20.000 Zeichen) Spalte der Tabelle. Auch wenn ich als Eigenschaft der Spalte Text einstelle.

Ich verstehe ehrlich gesagt nicht so ganz wie ich jetzt die Werte zusammenzählen lasse. Ich dachte die wären schon zusammengezählt.

Siehe hier zu den Teil aus der parser.php:

PHP-Code:
            //Zielstatistik des Flights berechnen
            
$debrief['Flights'][$i]['AA_Kills'] = $debrief['Flights'][$i]['AA_Kills'] + $debrief['Flights'][$i][$PilotSlot]['AA_Kills'];
            
$debrief['Flights'][$i]['AG_Kills'] = $debrief['Flights'][$i]['AG_Kills'] + $debrief['Flights'][$i][$PilotSlot]['AG_Kills'];
            
$debrief['Flights'][$i]['AS_Kills'] = $debrief['Flights'][$i]['AS_Kills'] + $debrief['Flights'][$i][$PilotSlot]['AS_Kills'];
            
$debrief['Flights'][$i]['AN_Kills'] = $debrief['Flights'][$i]['AN_Kills'] + $debrief['Flights'][$i][$PilotSlot]['AN_Kills'];
            
            
$pattern '@^(.*)downed\sby\s' $debrief['Flights'][$i][$PilotSlot]['Callsign'] . '@iUm';
            
$pattern2 '@^(.*)destroyed\sby\s' $debrief['Flights'][$i][$PilotSlot]['Callsign'] . '@iUm';
            for(
$i4 0$i4 $debrief['Flights'][$i]['Event_Count']; $i4++)
            {
                if(
preg_match($pattern$debrief['Flights'][$i]['events']['events'][$i4], $subpattern))
                {
                    
$target trim($subpattern[1]);
                    
$debrief['Flights'][$i][$PilotSlot]['Destroyed_Targets'][$target]++;
                    
$debrief['Flights'][$i]['Destroyed_Targets'][$target]++;
                    
$debrief['Destroyed_Targets'][$target]++;
                }
                if(
preg_match($pattern2$debrief['Flights'][$i]['events']['events'][$i4], $subpattern))
                {
                    
$target trim($subpattern[1]);
                    
$debrief['Flights'][$i][$PilotSlot]['Destroyed_Targets'][$target]++;
                    
$debrief['Flights'][$i]['Destroyed_Targets'][$target]++;
                    
$debrief['Destroyed_Targets'][$target]++;
                }
            } 

Irgendwas stimmt da nicht. Entweder hole ich nicht alle Infos heraus oder mache beim INSERT was falsch und er schreibt mir nur den einen String "1 * Runner" da rein. (Destroyed Targets)

stats.JPG

Ich stehe da komplett auf dem Schlauch wo das Problem überhaupt ist. Lese ich nicht alles aus oder schreibe ich nicht ordentlich in die Spalte?
Wenn ich wüsste WAS ich da falsch mache, würde mir das schon sehr weiter helfen.
__________________
MSI B450 Gaming Plus Pro | AMD Ryzen 7 5700X3D | Nvidia RTX 3060 TI | Teamgroup 32GB DDR-4 3200 | Track NP 5 | Linux Mint |Seasonic 750W

Geändert von Duke49th (28.02.2016 um 13:11 Uhr).
Duke49th ist offline   Mit Zitat antworten