Insertowanie przy pustych wartościach

0

Cześć,
potrzebuję pomocy w insertowaniu danych do bazy w momencie, gdy dane są puste.

Mam coś takiego:

                                $person = sqlsrv_query($conn, "SELECT * FROM person ORDER BY Nazwa", array(), array( "Scrollable" => 'keyset' ));
                                <div class="col-lg-6 col-sm-4 form-group">
									<label class="protocol">Osoba</label><br>
									<select name="person" class="custom-select" style="width:100%;">
									<option selected disabled value="">Wybierz</option>
										<?php 
											while($row = sqlsrv_fetch_array($person, SQLSRV_FETCH_ASSOC)){
												echo '<option value='.$row['id'].'>'.$row['Nazwa'].'</option>';
											}
										?>
									</select>
								</div>
								<!-- III -->
								<div class="col-lg-6 col-sm-4 form-group">
									<label class="protocol">Data akceptacji</label><br>
									<input type="date" name="acceptDate" class="form-control" autocomplete="off">
								</div>
								<!-- IV -->
								<div class="col-lg-6 col-sm-4 form-group">
									<label class="protocol">Motyw</label><br>
									<input type="text" name="theme" class="form-control" autocomplete="off">
								</div>
								<div class="col-lg-3 col-sm-4 form-group">
									<label class="protocol">Logo</label><br>
									<div class="form-check form-check-inline">
										<input class="form-check-input" type="radio" name="logo" value="2">
										<label class="form-check-label">Tak</label>
									</div>
										<div class="form-check form-check-inline">
										<input class="form-check-input" type="radio" name="logo" value="1">
										<label class="form-check-label">Nie</label>
									</div>
								</div>
<?php

$alert = null;
if (isset($_POST['insert'])) {
	$p_id = $_POST['person'];
	$acceptDate = $_POST['acceptDate'];
	$theme = $_POST['theme'];
	$logo = $_POST['logo'];
    $errors = 0; 

    foreach($oU_ids as $Index => $p_id){
	$query_run = sqlsrv_query(
		$conn, 
		sprintf(
  		"INSERT INTO role (c_id, acceptDate, theme, logo,)
		VALUES ('%s', '%s', '%s', '%s')",
		$p_id[$Index], 
		$acceptDate[$Index] ?? 0, 
		$theme[$Index] ?? 0, 
		$logo[$Index] ?? 0
        ), 
		[], 
		["Scrollable" => 'keyset']
		);

        if ($query_run === false) {
            $errors++;
        }
    }

    $alert = !$errors ? 'Zapisano' : 'Błąd: brak zapisu!';
}

?>
<?php if ($alert): ?>
    <script type="text/javascript">alert("<?php echo $alert ?>")</script>
<?php endif ?>

Mógłby mi ktoś pomóc z tablicą, jak to prawidłowo wykonać?

2

Strach się zapytać na czym polega błąd. Ogólnie w kodzie masz wszystko pomieszane ze wszystkim :)

0

Klasycznie na tym forum, szydera i ironia - do zamknięcia w takim razie skoro żaden geniusz nie pochylił się na problemem tylko pisze jakieś głupoty :)

2

@MiniBus02: Jeżeli chcesz jakiejś odpowiedzi to zadaj jakieś pytanie. Podsumuj sobie co Ty dodałeś na tym forum... Zerknij sobie na pierwszą linijkę TWOJEGO kodu... nie wiadomo co to za linijka, ani "otagowana" jako <?php ?> a później odwołujesz się do rezultatu zapytania, które... no właśnie, nie zadziała. Ale to mniejsza z tym. Nie opisałeś swojego problemu (co się dzieje po uruchomieniu, jakie błędy Tobie zwraca) i piszesz "proszę o pomoc jak...". Tak, jest "szydera i ironia" ale to dlatego, że za dużo tematów się przewijało pisane w Twoim stylu.

0
MiniBus02 napisał(a):

... skoro żaden geniusz nie pochylił się na problemem tylko pisze jakieś głupoty :)

A problem jest jaki ?

Proponuję kilka ścieżek postępowania

  • Mozesz tupać nogą
  • grozić, że będziesz tupać,
  • wołać na mamę
  • i kilka innych ścieżek ...
leonpro778 napisał(a):

... Ogólnie w kodzie masz wszystko pomieszane ze wszystkim :)

Takie KODY znalazł w goolu, co się złościsz.

0

Co to jest insertowanie ?
Co to znaczy dla OP "puste dane" ? NULL czy string o długości 0 ?
Gdzie ujawnia się problem w jaki sposób , czy to jest problem zgłaszany przez silnik bazy danych czy tylko wynik działania nie jest zgodny z oczekiwania.

W skrócie dużo OP napisał/skopiował tekstu ale o problemie nic

0
MiniBus02 napisał(a):
    foreach($oU_ids as $Index => $p_id){
	$query_run = sqlsrv_query(
		$conn, 
		sprintf(
  		"INSERT INTO role (c_id, acceptDate, theme, logo,)
		VALUES ('%s', '%s', '%s', '%s')",
		$p_id[$Index], 
		$acceptDate[$Index] ?? 0, 
		$theme[$Index] ?? 0, 
		$logo[$Index] ?? 0
        ), 

SQL Injection jak się patrzy.

4

@Riddle: co to wnosi do tematu? Nie mówię, że nie ma tu podatności, ale czy warto pisać o tym dwa razy, post pod postem?

@MiniBus02:
Jeśli robisz coś takiego:

$theme[$Index] ?? 0,

to masz zapewne źle utworzoną bazę danych.
Ty decydujesz co jest niezbędne dla rekordu. Jeśli ta dana jest zbędna i może być np. Nullem to lepiej niech decyduje o tym baza.
Ja bym wolał nie trzymać takiego rekordu w bazie. Na Twoim miejscu zrobiłbym rodzaj walidacji i zwrócił użytkownikowi błąd, że wszystkie pola są puste i jakieś muszą być wypełnione, bo po co Ci rekord z ID tylko?

0

Poczytaj o MVC, czyli Model Viewer Controller który oddziela między sobą warstwę prezentacji, warstwę danych i kontroler.

Po drugie poczytaj o SQLInjection, bo Twój kod nie jest bezpieczny.

Po trzecie, pusta wartość w SQL to NULL, chociaż, ściśle pisząc NULL nie jest wartością a stanem.

Dlatego jak już to powinieneś zrobić coś w rodzaju:

    foreach($oU_ids as $Index => $p_id){
	$query_run = sqlsrv_query(
		$conn, 
		sprintf(
  		"INSERT INTO role (c_id, acceptDate, theme, logo,)
		VALUES (%s, %s, %s, %s)",
		$p_id[$Index], 
		$acceptDate[$Index] ?? null, 
		$theme[$Index] ?? null, 
		$logo[$Index] ?? null
        ), 

ale generalnie używanie sprintf to nie jest dobry pomysł, zamiast tego używaj PDO i PreparedStatements.

0
TomRZ napisał(a):

Poczytaj o MVC, czyli Model Viewer Controller który oddziela między sobą warstwę prezentacji, warstwę danych i kontroler.

Nie rozsiewaj proszę miskoncepcji o MVC, jak nie wiesz co to jest.

1 użytkowników online, w tym zalogowanych: 0, gości: 1