Как я могу легко сохранить Размер окна и состояние положения, использующее Obj-C?

Вы не должны использовать implode. Это помещает разделенный запятыми список всего в форме в каждую строку, которую вы вставляете, и повторяет это для каждого проверенного окна. Вы должны просто вставить один элемент в каждую строку, индексируя массивы.

Однако, если у вас есть флажок в форме, он отправляет только те, которые отмечены. Результатом этого является то, что индексы массива $_POST['checkbox'] не будут совпадать с соответствующими элементами $_POST['item'] и $_POST['quantity']. Вам нужно поместить явные индексы в имена checkbox, чтобы вы могли связать их.

<form method = "POST">

<input type = "hidden" name = "item[]" value = "cupcake">
<input type = "text" name = "items" value = "cupcake" readonly><br>
<b>Price :</b> <span name = "price" value = "3.00">$17.00</span><br>
Quantity: <input tabindex="1" name="quantity[]" min="0" max="5" type="number" class="quantity" value="1" /><br>
<input tabindex="1" name="checkbox[0]" type="checkbox" value="17" /><span>Add to Cart</span></label></div></div></td><br>

<input type = "hidden" name = "item[]" value = "cake">
<input type = "text" name = "items" value = "cake" readonly><br>
<b>Price :</b> <span name = "price" value = "20.00">$20.00</span><br>
Quantity: <input tabindex="1" name="quantity[]" min="0" max="5" type="number" class="quantity" value="1" /><br>
<input tabindex="1" name="checkbox[1]" type="checkbox" value="20" /><span>Add to Cart</span></label></div></div></td><br>

<input type = "submit" name = "insertBT"><br>
</form>

Тогда ваш PHP-код может быть таким:

$stmt = $conn->prepare("INSERT INTO purchases (Product, Quantity, Price) VALUES (?, ?, ?)");
$stmt->bind_param("sis", $name, $quantity, $price);
foreach ($_POST['checkbox'] as $i => $price) {
    $name = $_POST['name'][$i];
    $quantity = $_POST['quantity'][$i];
    $stmt->execute();
}

BTW, цены в вашем HTML кажутся плохой идеей. Ничто не мешает пользователю изменять HTML с помощью веб-инспектора перед отправкой формы, чтобы они могли снизить цену. Вы должны получить цены из базы данных при обработке формы.

Также обратите внимание, что в исходном коде вы открыли соединение с базой данных с помощью MySQLi, но затем вы попытались сделать вставку, используя mysql_query вместо $conn->query(). Вы не можете смешивать такие API; myql_query может использоваться только при открытии соединения с mysql_connect.

19
задан Luke 29 April 2010 в 05:17
поделиться

2 ответа

Задайте имя, уникальное для этого окна (например, "MainWindow" или "PrefsWindow") в поле Autosave в разделе Attributes в Interface Builder. После этого его местоположение будет автоматически сохранено в пользовательских настройках по умолчанию.

Чтобы задать имя автосохранения программно, используйте -setFrameAutosaveName:. Это может понадобиться, если у вас приложение, основанное на документах, или другая ситуация, когда нет смысла задавать имя автосохранения в IB.

Ссылка на документацию.

32
ответ дан 30 November 2019 в 02:27
поделиться

Заболевший и усталый от Apples AutoSave и БАКАЛАВРА НАУК IB, который иногда делает и иногда не работает и зависит от параметров настройки флага в Системе Prefs и тому подобное. Просто сделайте это, и это ВСЕГДА РАБОТАЕТ и даже помнит пользовательское полноэкранное государство!

-(void)applicationDidFinishLaunching:(NSNotification *)notification
{
    [_window makeKeyAndOrderFront:self];

    // Because Saving App Position and Size is FUBAR
    NSString *savedAppFrame = [userSettings stringForKey:AppScreenSizeAndPosition];
    NSRect frame;
    if(savedAppFrame) {
        frame = NSRectFromString(savedAppFrame);
        [_window setFrame:frame display:YES];
    }
    else
        [_window center];

    // Because saving of app size and position on screen doesn't remember full screen
    if([userSettings boolForKey:AppIsFullScreen])
        [_window toggleFullScreen:self];
}
-(void)windowDidEnterFullScreen:(NSNotification *)notification
{
    [userSettings setBool:YES forKey:AppIsFullScreen];
}
-(BOOL)windowShouldClose:(NSWindow *)sender
{
    // Have to use this to set zoom state because exit full screen state always called on close
    if(sender == _window) {
        [userSettings setBool:(_window.isZoomed ? YES:NO) forKey:AppIsFullScreen];
    }
    return YES;
}
-(void)applicationWillTerminate:(NSNotification *)aNotification
{
    [userSettings setObject:NSStringFromRect(_window.frame) forKey:AppScreenSizeAndPosition];
    [userSettings synchronize];
}
0
ответ дан 30 November 2019 в 02:27
поделиться